From 81626fb1c8e24c4dff5b34bd5aa821fa530d6975 Mon Sep 17 00:00:00 2001 From: Milton Wu Date: Tue, 19 Jul 2022 12:28:53 +0000 Subject: [PATCH] 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 --- .../biometrics/BiometricEnrollActivity.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java index 6b830c9e4d7..3f57f5d98a4 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java +++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java @@ -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) { - launchFaceAndFingerprintEnroll(); - } else { + } else if (canUseFace || canUseFingerprint) { + if (mGkPwHandle == null) { setOrConfirmCredentialsNow(); - } - } else if (canUseFingerprint) { - if (mGkPwHandle != null) { + } else if (canUseFace && canUseFingerprint) { + launchFaceAndFingerprintEnroll(); + } else if (canUseFingerprint) { launchFingerprintOnlyEnroll(); } else { - setOrConfirmCredentialsNow(); + launchFaceOnlyEnroll(); } - } 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); - launchFaceAndFingerprintEnroll(); - } else if (isOk && mHasFeatureFingerprint) { - updateGatekeeperPasswordHandle(data); - launchFingerprintOnlyEnroll(); + if (mHasFeatureFace && mHasFeatureFingerprint) { + launchFaceAndFingerprintEnroll(); + } 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,8 +623,11 @@ public class BiometricEnrollActivity extends InstrumentedActivity { } private void launchFaceOnlyEnroll() { - final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent()); - launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL); + if (!mIsSingleEnrolling) { + mIsSingleEnrolling = true; + final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent()); + launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL); + } } private void launchFaceAndFingerprintEnroll() {