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

Commit 81626fb1 authored by Milton Wu's avatar Milton Wu
Browse files

Run lock before single sensor enroll

Run setOrConfirmCredentialsNow() before enrolling for devices w/
single-sensor

Bug: 239105333
Test: atest BiometricEnrollActivityTest
Test: Manually test multi-sensor and single-sensor devices
Change-Id: I807418c842eb076974f839a0d08bae67d3bc51dc
parent bb3f1526
Loading
Loading
Loading
Loading
+28 −28
Original line number Diff line number Diff line
@@ -93,8 +93,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
    public static final String EXTRA_PARENTAL_CONSENT_STATUS = "consent_status";

    private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
    private static final String SAVED_STATE_FINGERPRINT_ONLY_ENROLLING =
            "fingerprint_only_enrolling";
    private static final String SAVED_STATE_IS_SINGLE_ENROLLING =
            "is_single_enrolling";
    private static final String SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW =
            "pass_through_extras_from_chosen_lock_in_suw";
    private static final String SAVED_STATE_ENROLL_ACTION_LOGGED = "enroll_action_logged";
@@ -105,7 +105,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {

    private int mUserId = UserHandle.myUserId();
    private boolean mConfirmingCredentials;
    private boolean mFingerprintOnlyEnrolling;
    private boolean mIsSingleEnrolling;
    private Bundle mPassThroughExtrasFromChosenLockInSuw = null;
    private boolean mIsEnrollActionLogged;
    private boolean mHasFeatureFace = false;
@@ -135,8 +135,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
        if (savedInstanceState != null) {
            mConfirmingCredentials = savedInstanceState.getBoolean(
                    SAVED_STATE_CONFIRMING_CREDENTIALS, false);
            mFingerprintOnlyEnrolling = savedInstanceState.getBoolean(
                    SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, false);
            mIsSingleEnrolling = savedInstanceState.getBoolean(
                    SAVED_STATE_IS_SINGLE_ENROLLING, false);
            mPassThroughExtrasFromChosenLockInSuw = savedInstanceState.getBundle(
                    SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW);
            mIsEnrollActionLogged = savedInstanceState.getBoolean(
@@ -305,20 +305,16 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
        if (!setupWizard && authenticators == BiometricManager.Authenticators.DEVICE_CREDENTIAL) {
            launchCredentialOnlyEnroll();
            finish();
        } else if (canUseFace || canUseFingerprint) {
            if (mGkPwHandle == null) {
                setOrConfirmCredentialsNow();
            } else if (canUseFace && canUseFingerprint) {
            if (mGkPwHandle != null) {
                launchFaceAndFingerprintEnroll();
            } else {
                setOrConfirmCredentialsNow();
            }
            } else if (canUseFingerprint) {
            if (mGkPwHandle != null) {
                launchFingerprintOnlyEnroll();
            } else {
                setOrConfirmCredentialsNow();
            }
        } else if (canUseFace) {
                launchFaceOnlyEnroll();
            }
        } else { // no modalities available
            if (mParentalOptionsRequired) {
                Log.d(TAG, "No consent for any modality: skipping enrollment");
@@ -334,7 +330,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
        outState.putBoolean(SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, mFingerprintOnlyEnrolling);
        outState.putBoolean(SAVED_STATE_IS_SINGLE_ENROLLING, mIsSingleEnrolling);
        outState.putBundle(SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW,
                mPassThroughExtrasFromChosenLockInSuw);
        outState.putBoolean(SAVED_STATE_ENROLL_ACTION_LOGGED, mIsEnrollActionLogged);
@@ -455,14 +451,15 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
                    mConfirmingCredentials = false;
                    final boolean isOk =
                            isSuccessfulConfirmOrChooseCredential(requestCode, resultCode);
                    // single face enrollment requests confirmation directly
                    // via BiometricEnrollBase#onCreate and should never get here
                    if (isOk && mHasFeatureFace && mHasFeatureFingerprint) {
                    if (isOk && (mHasFeatureFace || mHasFeatureFingerprint)) {
                        updateGatekeeperPasswordHandle(data);
                        if (mHasFeatureFace && mHasFeatureFingerprint) {
                            launchFaceAndFingerprintEnroll();
                    } else if (isOk && mHasFeatureFingerprint) {
                        updateGatekeeperPasswordHandle(data);
                        } else if (mHasFeatureFingerprint) {
                            launchFingerprintOnlyEnroll();
                        } else {
                            launchFaceOnlyEnroll();
                        }
                    } else {
                        Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
                        setResult(resultCode, newResultIntent());
@@ -470,7 +467,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
                    }
                    break;
                case REQUEST_SINGLE_ENROLL:
                    mFingerprintOnlyEnrolling = false;
                    mIsSingleEnrolling = false;
                    finishOrLaunchHandToParent(resultCode);
                    break;
                default:
@@ -611,8 +608,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
    }

    private void launchFingerprintOnlyEnroll() {
        if (!mFingerprintOnlyEnrolling) {
            mFingerprintOnlyEnrolling = true;
        if (!mIsSingleEnrolling) {
            mIsSingleEnrolling = true;
            final Intent intent;
            // ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
            if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
@@ -626,9 +623,12 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
    }

    private void launchFaceOnlyEnroll() {
        if (!mIsSingleEnrolling) {
            mIsSingleEnrolling = true;
            final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent());
            launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
        }
    }

    private void launchFaceAndFingerprintEnroll() {
        mMultiBiometricEnrollHelper = new MultiBiometricEnrollHelper(this, mUserId,