Android Open Source - asecrypto-goes-mobile-app Euclid Fragment






From Project

Back to project page asecrypto-goes-mobile-app.

License

The source code is released under:

GNU General Public License

If you think the Android project asecrypto-goes-mobile-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid;
//from   w ww .  ja va  2  s . c  o  m
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import at.fhj.gaar.asecrypto.mobile.R;
import at.fhj.gaar.asecrypto.mobile.crypto.AseInteger;
import at.fhj.gaar.asecrypto.mobile.ui.TaskFinishedCallable;
import at.fhj.gaar.asecrypto.mobile.ui.apptasks.BaseFragment;

/**
 * Implements the euclidean algorithm iterative and recursive (Lab1_Task2)
 */
public class EuclidFragment extends BaseFragment
        implements View.OnClickListener, TaskFinishedCallable<EuclidResult> {

    private ScrollView scrollView;

    private RadioButton rdbFirstBits;

    private RadioButton rdbFirstNumber;

    private EditText txtFirstNumber;

    private EditText txtFirstBits;

    private RadioButton rdbSecondBits;

    private RadioButton rdbSecondNumber;

    private EditText txtSecondNumber;

    private EditText txtSecondBits;

    private Button btnIterative;

    private Button btnRecursive;

    private Button btnFactorial;

    private ProgressBar progressBar;

    private TextView lblFirstTargetNumber;

    private TextView lblSecondTargetNumber;

    private TextView lblResultNumber;

    private TextView lblTimeMeasurement;

    private AsyncTask<AseInteger, Void, EuclidResult> euclidTask;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View viewRoot = inflater.inflate(R.layout.fragment_euclid, container, false);

        scrollView = (ScrollView) viewRoot.findViewById(R.id.scrollView);

        rdbFirstBits = (RadioButton) viewRoot.findViewById(R.id.rdbFirstBits);
        rdbFirstNumber = (RadioButton) viewRoot.findViewById(R.id.rdbFirstNumber);
        rdbSecondBits = (RadioButton) viewRoot.findViewById(R.id.rdbSecondBits);
        rdbSecondNumber = (RadioButton) viewRoot.findViewById(R.id.rdbSecondNumber);

        txtFirstNumber = (EditText) viewRoot.findViewById(R.id.txtFirstNumber);
        txtSecondNumber = (EditText) viewRoot.findViewById(R.id.txtSecondNumber);
        txtFirstBits = (EditText) viewRoot.findViewById(R.id.txtFirstBits);
        txtSecondBits = (EditText) viewRoot.findViewById(R.id.txtSecondBits);

        btnIterative = (Button) viewRoot.findViewById(R.id.btnIterative);
        btnRecursive = (Button) viewRoot.findViewById(R.id.btnRecursive);
        btnFactorial = (Button) viewRoot.findViewById(R.id.btnFactorial);

        progressBar = (ProgressBar) viewRoot.findViewById(R.id.progressBar);
        lblFirstTargetNumber = (TextView) viewRoot.findViewById(R.id.lblFirstTargetNumber);
        lblSecondTargetNumber = (TextView) viewRoot.findViewById(R.id.lblSecondTargetNumber);
        lblResultNumber = (TextView) viewRoot.findViewById(R.id.lblResultNumber);
        lblTimeMeasurement = (TextView) viewRoot.findViewById(R.id.lblTimeMeasurement);

        btnIterative.setOnClickListener(this);
        btnRecursive.setOnClickListener(this);
        btnFactorial.setOnClickListener(this);

        return viewRoot;
    }

    @Override
    public void onPause() {
        super.onPause();
        cancelTask();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        cancelTask();
    }

    private void cancelTask() {
        if (euclidTask != null && !euclidTask.isCancelled()) {
            euclidTask.cancel(true);
        }
    }

    @Override
    public void onClick(View view) {
        if (btnIterative.equals(view)) {
            startEuclidIterative();
        } else if (btnRecursive.equals(view)) {
            startEuclidRecursive();
        } else if (btnFactorial.equals(view)) {
            startEuclidFactorial();
        }
    }

    private void startEuclidIterative() {
        AseInteger firstNumber = retrieveAseInteger(rdbFirstBits, txtFirstBits, rdbFirstNumber,
                txtFirstNumber, "First number");
        if (firstNumber == null) {
            return;
        }

        AseInteger secondNumber = retrieveAseInteger(rdbSecondBits, txtSecondBits, rdbSecondNumber,
                txtSecondNumber, "Second number");
        if (secondNumber == null) {
            return;
        }

        closeSoftKeyboard();
        doPostCalculationStartSetup(firstNumber, secondNumber);

        euclidTask = new EuclidIterativeTask(this);
        euclidTask.execute(firstNumber, secondNumber);
    }

    private void startEuclidRecursive() {
        AseInteger firstNumber = retrieveAseInteger(rdbFirstBits, txtFirstBits, rdbFirstNumber,
                txtFirstNumber, "First number");
        if (firstNumber == null) {
            return;
        }

        AseInteger secondNumber = retrieveAseInteger(rdbSecondBits, txtSecondBits, rdbSecondNumber,
                txtSecondNumber, "Second number");
        if (secondNumber == null) {
            return;
        }

        if (firstNumber.bitLength() > 512 || secondNumber.bitLength() > 512) {
            Toast.makeText(getActivity(), "The maximum of allowed bits are 512. Otherwise, a " +
                            "stack overflow would occur.",
                    Toast.LENGTH_SHORT).show();
            return;
        }

        closeSoftKeyboard();
        doPostCalculationStartSetup(firstNumber, secondNumber);

        euclidTask = new EuclidRecursiveTask(this);
        euclidTask.execute(firstNumber, secondNumber);
    }

    private void startEuclidFactorial() {
        AseInteger firstNumber = retrieveAseInteger(rdbFirstBits, txtFirstBits, rdbFirstNumber,
                txtFirstNumber, "First number");
        if (firstNumber == null) {
            return;
        }

        AseInteger secondNumber = retrieveAseInteger(rdbSecondBits, txtSecondBits, rdbSecondNumber,
                txtSecondNumber, "Second number");
        if (secondNumber == null) {
            return;
        }

        closeSoftKeyboard();
        doPostCalculationStartSetup(firstNumber, secondNumber);

        euclidTask = new EuclidFactorialTask(this);
        euclidTask.execute(firstNumber, secondNumber);
    }

    private void doPostCalculationStartSetup(AseInteger firstNumber, AseInteger secondNumber) {
        progressBar.setVisibility(View.VISIBLE);

        lblFirstTargetNumber.setVisibility(View.VISIBLE);
        lblFirstTargetNumber.setText("First number: " + firstNumber.toString()); // TODO use StringBuilder
        lblSecondTargetNumber.setVisibility(View.VISIBLE);
        lblSecondTargetNumber.setText("Second number: " + secondNumber.toString()); // TODO use StringBuilder

        lblResultNumber.setVisibility(View.INVISIBLE);
        lblTimeMeasurement.setVisibility(View.INVISIBLE);

        btnIterative.setEnabled(false);
        btnRecursive.setEnabled(false);
        btnFactorial.setEnabled(false);
    }

    @Override
    public void onAsyncTaskFinished(AsyncTask task, EuclidResult result) {
        Toast.makeText(getActivity(), "The GCD has been calculated", Toast.LENGTH_SHORT).show();

        progressBar.setVisibility(View.INVISIBLE);
        lblTimeMeasurement.setVisibility(View.VISIBLE);
        lblResultNumber.setVisibility(View.VISIBLE);

        btnIterative.setEnabled(true);
        btnRecursive.setEnabled(true);
        btnFactorial.setEnabled(true);

        lblResultNumber.setText("Greatest common divisor: " + result.getGcd().toString()); // TODO use StringBuilder
        lblTimeMeasurement.setText("Time taken: " + result.getMilliseconds() +
                " milliseconds"); // TODO use StringBuilder

        // scroll to bottom
        scrollView.post(new Runnable() {
            @Override
            public void run() {
                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
            }
        });
    }
}




Java Source Code List

at.fhj.gaar.asecrypto.mobile.crypto.AseInteger.java
at.fhj.gaar.asecrypto.mobile.crypto.RSAHelper.java
at.fhj.gaar.asecrypto.mobile.ui.FragmentFactory.java
at.fhj.gaar.asecrypto.mobile.ui.MainActivity.java
at.fhj.gaar.asecrypto.mobile.ui.SectionAttachable.java
at.fhj.gaar.asecrypto.mobile.ui.TaskFinishedCallable.java
at.fhj.gaar.asecrypto.mobile.ui.TaskIntermediateCallable.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.BaseFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutIterativeTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutRecursiveTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelFinderTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelGeneratorFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidFactorialTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidIterativeTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidRecursiveTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.ExponentiationResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.FastExponentiationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.FastExponentiationTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.SlowExponentiationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.SlowExponentiationTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatProgress.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTaskArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTestFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinProgress.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinTestFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.numbercounter.NumberCounterFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.numbercounter.NumberCounterTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.FinderArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootFinderFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootLookupTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.ParameterCalculationHelperTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSACalculationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSADecryptionParameters.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSADecryptionTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAEncryptionParameters.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAEncryptionTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAResult.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.DrawerItemIdentifiers.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.DrawerItem.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.NavigationDrawerCallable.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.NavigationDrawerFragment.java
at.fhj.gaar.asecrypto.mobile.util.NumberChoiceSelector.java
at.fhj.gaar.asecrypto.mobile.util.NumberHelper.java
at.fhj.gaar.asecrypto.mobile.util.StopWatch.java