Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8f45f75 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "qpr.biometric.2panels" into tm-qpr-dev

* changes:
  Bypass cancel error code during "Add another"
  Fix udfps fingerprint setting flow
  Use setting as base activity for fingerprint
  Use Mockito 4.6.1 FingerprintEnrollFindSensorTest
parents 6a6374bc af5a7d8d
Loading
Loading
Loading
Loading
+1 −15
Original line number Diff line number Diff line
@@ -24,8 +24,6 @@ import android.view.View;
import com.android.settings.R;
import com.android.settings.password.ChooseLockSettingsHelper;

import com.google.android.setupcompat.util.WizardManagerHelper;

/**
 * Abstract base activity which handles the actual enrolling for biometrics.
 */
@@ -62,30 +60,18 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase

    @Override
    protected void onStop() {
        super.onStop();

        if (mSidecar != null) {
            mSidecar.setListener(null);
        }

        if (!isChangingConfigurations()) {
            if (mSidecar != null) {
                mSidecar.cancelEnrollment();
                getSupportFragmentManager()
                        .beginTransaction().remove(mSidecar).commitAllowingStateLoss();
            }
            if (!WizardManagerHelper.isAnySetupWizard(getIntent())
                    && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
                setResult(RESULT_TIMEOUT);
            }
            finish();
        }
        }

    @Override
    protected boolean shouldFinishWhenBackgrounded() {
        // Prevent super.onStop() from finishing, since we handle this in our onStop().
        return false;
        super.onStop();
    }

    @Override
+21 −0
Original line number Diff line number Diff line
@@ -31,11 +31,13 @@ import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricEnrollSidecar;
import com.android.settings.biometrics.BiometricErrorDialog;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.slices.CustomSliceRegistry;

import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper;

import java.util.ArrayList;

@@ -112,6 +114,25 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
        startEnrollment();
    }

    @Override
    protected void onStop() {
        if (!isChangingConfigurations()) {
            if (!WizardManagerHelper.isAnySetupWizard(getIntent())
                    && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
                setResult(RESULT_TIMEOUT);
            }
            finish();
        }

        super.onStop();
    }

    @Override
    protected boolean shouldFinishWhenBackgrounded() {
        // Prevent super.onStop() from finishing, since we handle this in our onStop().
        return false;
    }

    @Override
    public void startEnrollment() {
        super.startEnrollment();
+16 −1
Original line number Diff line number Diff line
@@ -339,8 +339,23 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {

    @Override
    protected void onStop() {
        super.onStop();
        if (!isChangingConfigurations()) {
            if (!WizardManagerHelper.isAnySetupWizard(getIntent())
                    && !BiometricUtils.isAnyMultiBiometricFlow(this)
                    && !mFromSettingsSummary) {
                setResult(RESULT_TIMEOUT);
            }
            finish();
        }
        stopIconAnimation();

        super.onStop();
    }

    @Override
    protected boolean shouldFinishWhenBackgrounded() {
        // Prevent super.onStop() from finishing, since we handle this in our onStop().
        return false;
    }

    @Override
+26 −8
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@ import java.util.List;
public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        BiometricEnrollSidecar.Listener {


    private static final String TAG = "FingerprintEnrollFindSensor";
    private static final String SAVED_STATE_IS_NEXT_CLICKED = "is_next_clicked";

    @Nullable
    private FingerprintFindSensorAnimation mAnimation;
@@ -67,7 +67,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class);
        final FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(this);
        final List<FingerprintSensorPropertiesInternal> props =
                fingerprintManager.getSensorPropertiesInternal();
        mCanAssumeUdfps = props != null && props.size() == 1 && props.get(0).isAnyUdfpsType();
@@ -134,12 +134,14 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
            setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
            setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message);
        }
        if (savedInstanceState != null) {
            mNextClicked = savedInstanceState.getBoolean(SAVED_STATE_IS_NEXT_CLICKED, mNextClicked);
        }

        // This is an entry point for SetNewPasswordController, e.g.
        // adb shell am start -a android.app.action.SET_NEW_PASSWORD
        if (mToken == null && BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) {
            final FingerprintManager fpm = getSystemService(FingerprintManager.class);
            fpm.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
            fingerprintManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
                mChallenge = challenge;
                mSensorId = sensorId;
                mToken = BiometricUtils.requestGatekeeperHat(this, getIntent(), mUserId, challenge);
@@ -149,11 +151,19 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
                // it passed in.
                getIntent().putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);

                // Do not start looking for fingerprint if this activity is re-created because it is
                // waiting for activity result from enrolling activity.
                if (!mNextClicked) {
                    startLookingForFingerprint();
                }
            });
        } else if (mToken != null) {
            // Do not start looking for fingerprint if this activity is re-created because it is
            // waiting for activity result from enrolling activity.
            if (!mNextClicked) {
                // HAT passed in from somewhere else, such as FingerprintEnrollIntroduction
                startLookingForFingerprint();
            }
        } else {
            // There's something wrong with the enrollment flow, this should never happen.
            throw new IllegalStateException("HAT and GkPwHandle both missing...");
@@ -176,6 +186,12 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(SAVED_STATE_IS_NEXT_CLICKED, mNextClicked);
    }

    @Override
    public void onBackPressed() {
        stopLookingForFingerprint();
@@ -240,7 +256,6 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    @Override
    public void onEnrollmentError(int errMsgId, CharSequence errString) {
        if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            mNextClicked = false;
            proceedToEnrolling(false /* cancelEnrollment */);
        } else {
            FingerprintErrorDialog.showErrorDialog(this, errMsgId);
@@ -270,6 +285,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
    }

    private void onStartButtonClick(View view) {
        mNextClicked = true;
        startActivityForResult(getFingerprintEnrollingIntent(), ENROLL_REQUEST);
    }

@@ -289,6 +305,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
                    return;
                }
            }
            mSidecar.setListener(null);
            getSupportFragmentManager().beginTransaction().remove(mSidecar).
                    commitAllowingStateLoss();
            mSidecar = null;
@@ -341,6 +358,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
                        finish();
                    } else {
                        // We came back from enrolling but it wasn't completed, start again.
                        mNextClicked = false;
                        startLookingForFingerprint();
                    }
                    break;
+24 −17
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper;

import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -51,6 +50,8 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
    static final String FINGERPRINT_SUGGESTION_ACTIVITY =
            "com.android.settings.SetupFingerprintSuggestionActivity";

    private boolean mIsAddAnotherOrFinish;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -108,15 +109,26 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
        }
    }

    @Override
    protected void onStart() {
        super.onStart();

        // Reset it to false every time activity back to fg because this flag is stateless between
        // different life cycle.
        mIsAddAnotherOrFinish = false;
    }

    @Override
    protected void onNextButtonClick(View view) {
        updateFingerprintSuggestionEnableState();
        finishAndToNext();
    }

    private void finishAndToNext() {
        mIsAddAnotherOrFinish = true;
        setResult(RESULT_FINISHED);
        if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
            postEnroll();
        } else if (mFromSettingsSummary) {
            // Only launch fingerprint settings if enrollment was triggered through settings summary
            launchFingerprintSettings();
        }
        finish();
    }
@@ -148,27 +160,22 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
        }
    }

    private void launchFingerprintSettings() {
        final Intent intent = new Intent(ACTION_FINGERPRINT_SETTINGS);
        intent.setPackage(Utils.SETTINGS_PACKAGE_NAME);
        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
        intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mChallenge);
        startActivity(intent);
        overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out);
    }

    private void onAddAnotherButtonClick(View view) {
        mIsAddAnotherOrFinish = true;
        startActivityForResult(getFingerprintEnrollingIntent(), BiometricUtils.REQUEST_ADD_ANOTHER);
    }

    @Override
    protected boolean shouldFinishWhenBackgrounded() {
        return !mIsAddAnotherOrFinish && super.shouldFinishWhenBackgrounded();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        updateFingerprintSuggestionEnableState();
        if (requestCode == BiometricUtils.REQUEST_ADD_ANOTHER && resultCode != RESULT_CANCELED) {
            setResult(resultCode, data);
            finish();
            // If user cancel during "Add another", just use similar flow on "Next" button
            finishAndToNext();
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
Loading