diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java index c74e85e54c2..dda3997c28a 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java +++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java @@ -32,7 +32,6 @@ import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricManager.Authenticators; import android.hardware.biometrics.BiometricManager.BiometricError; -import android.hardware.biometrics.SensorProperties; import android.hardware.face.FaceManager; import android.hardware.face.FaceSensorPropertiesInternal; import android.hardware.fingerprint.FingerprintManager; @@ -211,12 +210,6 @@ public class BiometricEnrollActivity extends InstrumentedActivity { // required check if setup has completed instead. final boolean isSettingUp = isSetupWizard || (mParentalOptionsRequired && !WizardManagerHelper.isUserSetupComplete(this)); - if (isSettingUp && isMultiSensor && mIsFaceEnrollable) { - if (props.sensorStrength == SensorProperties.STRENGTH_CONVENIENCE) { - Log.i(TAG, "Excluding face from SuW enrollment (STRENGTH_CONVENIENCE)"); - mIsFaceEnrollable = false; - } - } } } if (mHasFeatureFingerprint) { diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java index 6e7d04f26b5..98cface2bc1 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollBase.java +++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java @@ -254,6 +254,7 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary); intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge); intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId); + BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); } diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index e3607601840..61783c5164c 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -24,7 +24,6 @@ import android.hardware.biometrics.BiometricAuthenticator; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; -import android.util.Log; import android.view.View; import android.widget.TextView; @@ -303,9 +302,17 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + final boolean cameFromMultiBioFpAuthAddAnother = + requestCode == BiometricUtils.REQUEST_ADD_ANOTHER + && BiometricUtils.isMultiBiometricFingerprintEnrollmentFlow(this); if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) { - if (isResultSkipOrFinished(resultCode)) { + if (isResultFinished(resultCode)) { handleBiometricResultSkipOrFinished(resultCode, data); + } else if (isResultSkipped(resultCode)) { + if (!BiometricUtils.tryStartingNextBiometricEnroll(this, + ENROLL_NEXT_BIOMETRIC_REQUEST, "BIOMETRIC_FIND_SENSOR_SKIPPED")) { + handleBiometricResultSkipOrFinished(resultCode, data); + } } else if (resultCode == RESULT_TIMEOUT) { setResult(resultCode, data); finish(); @@ -353,10 +360,22 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } } else if (requestCode == LEARN_MORE_REQUEST) { overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out); - } else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) { - Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode); - if (isResultSkipOrFinished(resultCode)) { + } else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST + || cameFromMultiBioFpAuthAddAnother) { + if (isResultFinished(resultCode)) { handleBiometricResultSkipOrFinished(resultCode, data); + } else if (isResultSkipped(resultCode)) { + if (requestCode == BiometricUtils.REQUEST_ADD_ANOTHER) { + // If we came from an add another request, it still might + // be possible to add another biometric. Check if we can. + if (checkMaxEnrolled() != 0) { + // If we can't enroll any more biometrics, than skip + // this one. + handleBiometricResultSkipOrFinished(resultCode, data); + } + } else { + handleBiometricResultSkipOrFinished(resultCode, data); + } } else if (resultCode != RESULT_CANCELED) { setResult(resultCode, data); finish(); @@ -365,9 +384,17 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase super.onActivityResult(requestCode, resultCode, data); } + private static boolean isResultSkipped(int resultCode) { + return resultCode == RESULT_SKIP + || resultCode == SetupSkipDialog.RESULT_SKIP; + } + + private static boolean isResultFinished(int resultCode) { + return resultCode == RESULT_FINISHED; + } + private static boolean isResultSkipOrFinished(int resultCode) { - return resultCode == RESULT_SKIP || resultCode == SetupSkipDialog.RESULT_SKIP - || resultCode == RESULT_FINISHED; + return isResultSkipped(resultCode) || isResultFinished(resultCode); } private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) { @@ -375,6 +402,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase && data.getBooleanExtra( MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) { getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); + getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); } if (resultCode == RESULT_SKIP) { diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java index febe3c6a93e..be233ed466b 100644 --- a/src/com/android/settings/biometrics/BiometricUtils.java +++ b/src/com/android/settings/biometrics/BiometricUtils.java @@ -51,6 +51,12 @@ import com.google.android.setupcompat.util.WizardManagerHelper; */ public class BiometricUtils { private static final String TAG = "BiometricUtils"; + + /** + * Request was sent for starting another enrollment of a previously + * enrolled biometric of the same type. + */ + public static int REQUEST_ADD_ANOTHER = 7; /** * Given the result from confirming or choosing a credential, request Gatekeeper to generate * a HardwareAuthToken with the Gatekeeper Password together with a biometric challenge. @@ -223,38 +229,66 @@ public class BiometricUtils { } /** + * Used for checking if a multi-biometric enrollment flow starts with Face and + * ends with Fingerprint. + * * @param activity Activity that we want to check - * @return True if the activity is going through a multi-biometric enrollment flow. + * @return True if the activity is going through a multi-biometric enrollment flow, that starts + * with Face. */ - public static boolean isMultiBiometricEnrollmentFlow(@NonNull Activity activity) { + public static boolean isMultiBiometricFaceEnrollmentFlow(@NonNull Activity activity) { return activity.getIntent().hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); } + + /** + * Used for checking if a multi-biometric enrollment flowstarts with Fingerprint + * and ends with Face. + * + * @param activity Activity that we want to check + * @return True if the activity is going through a multi-biometric enrollment flow, that starts + * with Fingerprint. + */ + public static boolean isMultiBiometricFingerprintEnrollmentFlow(@NonNull Activity activity) { + return activity.getIntent().hasExtra( + MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); + } + public static void copyMultiBiometricExtras(@NonNull Intent fromIntent, @NonNull Intent toIntent) { - final PendingIntent pendingIntent = (PendingIntent) fromIntent.getExtra( + PendingIntent pendingIntent = (PendingIntent) fromIntent.getExtra( MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE, null); if (pendingIntent != null) { - toIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE, pendingIntent); + toIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE, + pendingIntent); + } + + pendingIntent = (PendingIntent) fromIntent.getExtra( + MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT, null); + if (pendingIntent != null) { + toIntent.putExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT, + pendingIntent); } } /** - * If the current biometric enrollment (e.g. face) should be followed by another one (e.g. - * fingerprint) (see {@link #isMultiBiometricEnrollmentFlow(Activity)}), retrieves the - * PendingIntent pointing to the next enrollment and starts it. The caller will receive the - * result in onActivityResult. + * If the current biometric enrollment (e.g. face/fingerprint) should be followed by another + * one (e.g. fingerprint/face) retrieves the PendingIntent pointing to the next enrollment + * and starts it. The caller will receive the result in onActivityResult. * @return true if the next enrollment was started */ public static boolean tryStartingNextBiometricEnroll(@NonNull Activity activity, int requestCode, String debugReason) { - Log.d(TAG, "tryStartingNextBiometricEnroll, debugReason: " + debugReason); - final PendingIntent pendingIntent = (PendingIntent) activity.getIntent() + PendingIntent pendingIntent = (PendingIntent) activity.getIntent() .getExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); + if (pendingIntent == null) { + pendingIntent = (PendingIntent) activity.getIntent() + .getExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); + } + if (pendingIntent != null) { try { - Log.d(TAG, "Starting pendingIntent: " + pendingIntent); IntentSender intentSender = pendingIntent.getIntentSender(); activity.startIntentSenderForResult(intentSender, requestCode, null /* fillInIntent */, 0 /* flagMask */, 0 /* flagValues */, diff --git a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java index 5cc45b1b34e..94fbb76ac60 100644 --- a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java +++ b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java @@ -37,6 +37,7 @@ public class MultiBiometricEnrollHelper { private static final int REQUEST_FINGERPRINT_ENROLL = 3001; public static final String EXTRA_ENROLL_AFTER_FACE = "enroll_after_face"; + public static final String EXTRA_ENROLL_AFTER_FINGERPRINT = "enroll_after_finger"; public static final String EXTRA_SKIP_PENDING_ENROLL = "skip_pending_enroll"; @NonNull private final FragmentActivity mActivity; @@ -55,10 +56,10 @@ public class MultiBiometricEnrollHelper { } void startNextStep() { - if (mRequestEnrollFace) { - launchFaceEnroll(); - } else if (mRequestEnrollFingerprint) { + if (mRequestEnrollFingerprint) { launchFingerprintEnroll(); + } else if (mRequestEnrollFace) { + launchFaceEnroll(); } else { mActivity.setResult(BiometricEnrollIntroduction.RESULT_SKIP); mActivity.finish(); @@ -74,20 +75,6 @@ public class MultiBiometricEnrollHelper { mActivity.getIntent()); faceIntent.putExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId); faceIntent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge); - - if (mRequestEnrollFingerprint) { - // Give FaceEnroll a pendingIntent pointing to fingerprint enrollment, so that it - // can be started when user skips or finishes face enrollment. FLAG_UPDATE_CURRENT - // ensures it is launched with the most recent values. - final Intent fpIntent = BiometricUtils.getFingerprintIntroIntent(mActivity, - mActivity.getIntent()); - fpIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, mGkPwHandle); - final PendingIntent fpAfterFaceIntent = PendingIntent.getActivity(mActivity, - 0 /* requestCode */, fpIntent, - PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); - faceIntent.putExtra(EXTRA_ENROLL_AFTER_FACE, fpAfterFaceIntent); - } - BiometricUtils.launchEnrollForResult(mActivity, faceIntent, REQUEST_FACE_ENROLL, hardwareAuthToken, mGkPwHandle, mUserId); }); @@ -103,6 +90,19 @@ public class MultiBiometricEnrollHelper { mActivity.getIntent()); intent.putExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId); intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge); + if (mRequestEnrollFace) { + // Give FingerprintEnroll a pendingIntent pointing to face enrollment, so that it + // can be started when user skips or finishes fingerprint enrollment. + // FLAG_UPDATE_CURRENT ensures it is launched with the most recent values. + final Intent faceIntent = BiometricUtils.getFaceIntroIntent(mActivity, + mActivity.getIntent()); + faceIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, mGkPwHandle); + final PendingIntent faceAfterFp = PendingIntent.getActivity(mActivity, + 0 /* requestCode */, faceIntent, + PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); + intent.putExtra(EXTRA_ENROLL_AFTER_FINGERPRINT, faceAfterFp); + } + BiometricUtils.launchEnrollForResult(mActivity, intent, REQUEST_FINGERPRINT_ENROLL, hardwareAuthToken, mGkPwHandle, mUserId); })); diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java index efb200fa8ac..f8f34f91092 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java @@ -41,8 +41,10 @@ import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollActivity; import com.android.settings.biometrics.BiometricEnrollIntroduction; import com.android.settings.biometrics.BiometricUtils; +import com.android.settings.biometrics.MultiBiometricEnrollHelper; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockSettingsHelper; +import com.android.settings.password.SetupSkipDialog; import com.android.settings.utils.SensorPrivacyManagerHelper; import com.android.settingslib.RestrictedLockUtilsInternal; @@ -167,6 +169,19 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { Log.v(TAG, "cameraPrivacyEnabled : " + cameraPrivacyEnabled); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // If user has skipped or finished enrolling, don't restart enrollment. + final boolean isEnrollRequest = requestCode == BIOMETRIC_FIND_SENSOR_REQUEST + || requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST; + final boolean isResultSkipOrFinished = resultCode == RESULT_SKIP + || resultCode == SetupSkipDialog.RESULT_SKIP || resultCode == RESULT_FINISHED; + if (isEnrollRequest && isResultSkipOrFinished) { + data = setSkipPendingEnroll(data); + } + super.onActivityResult(requestCode, resultCode, data); + } + protected boolean generateChallengeOnCreate() { return true; } @@ -387,4 +402,13 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { protected int getMoreButtonTextRes() { return R.string.security_settings_face_enroll_introduction_more; } + + @NonNull + protected static Intent setSkipPendingEnroll(@Nullable Intent data) { + if (data == null) { + data = new Intent(); + } + data.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, true); + return data; + } } diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java index 74e844abfda..784c5438a38 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java @@ -31,6 +31,7 @@ import androidx.annotation.VisibleForTesting; 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; @@ -47,8 +48,6 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase { private static final String ACTION_FINGERPRINT_SETTINGS = "android.settings.FINGERPRINT_SETTINGS"; @VisibleForTesting - static final int REQUEST_ADD_ANOTHER = 1; - @VisibleForTesting static final String FINGERPRINT_SUGGESTION_ACTIVITY = "com.android.settings.SetupFingerprintSuggestionActivity"; @@ -160,13 +159,13 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase { } private void onAddAnotherButtonClick(View view) { - startActivityForResult(getFingerprintEnrollingIntent(), REQUEST_ADD_ANOTHER); + startActivityForResult(getFingerprintEnrollingIntent(), BiometricUtils.REQUEST_ADD_ANOTHER); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { updateFingerprintSuggestionEnableState(); - if (requestCode == REQUEST_ADD_ANOTHER && resultCode != RESULT_CANCELED) { + if (requestCode == BiometricUtils.REQUEST_ADD_ANOTHER && resultCode != RESULT_CANCELED) { setResult(resultCode, data); finish(); } else { diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java index 6fe14e6a9cd..b9e9dcc5149 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java @@ -42,7 +42,6 @@ import com.android.settings.biometrics.BiometricEnrollIntroduction; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.MultiBiometricEnrollHelper; import com.android.settings.password.ChooseLockSettingsHelper; -import com.android.settings.password.SetupSkipDialog; import com.android.settingslib.HelpUtils; import com.android.settingslib.RestrictedLockUtilsInternal; @@ -106,28 +105,31 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - // If user has skipped or finished enrolling, don't restart enrollment. - final boolean isEnrollRequest = requestCode == BIOMETRIC_FIND_SENSOR_REQUEST - || requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST; - final boolean isResultSkipOrFinished = resultCode == RESULT_SKIP - || resultCode == SetupSkipDialog.RESULT_SKIP || resultCode == RESULT_FINISHED; - if (isEnrollRequest && isResultSkipOrFinished) { - data = setSkipPendingEnroll(data); - } super.onActivityResult(requestCode, resultCode, data); } @Override protected void onCancelButtonClick(View view) { - // User has explicitly canceled enroll. Don't restart it automatically. - Intent data = setSkipPendingEnroll(new Intent()); - setResult(RESULT_SKIP, data); - finish(); + if (!BiometricUtils.tryStartingNextBiometricEnroll( + this, ENROLL_NEXT_BIOMETRIC_REQUEST, "cancel")) { + super.onCancelButtonClick(view); + } } @Override protected void onSkipButtonClick(View view) { - onCancelButtonClick(view); + if (!BiometricUtils.tryStartingNextBiometricEnroll( + this, ENROLL_NEXT_BIOMETRIC_REQUEST, "skipped")) { + super.onSkipButtonClick(view); + } + } + + @Override + protected void onFinishedEnrolling(@Nullable Intent data) { + if (!BiometricUtils.tryStartingNextBiometricEnroll( + this, ENROLL_NEXT_BIOMETRIC_REQUEST, "finished")) { + super.onFinishedEnrolling(data); + } } @StringRes @@ -269,6 +271,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { @Override protected Intent getEnrollingIntent() { final Intent intent = new Intent(this, FingerprintEnrollFindSensor.class); + BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); if (BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) { intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, BiometricUtils.getGatekeeperPasswordHandle(getIntent())); diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java index 5f2fbb553db..7256511d2e6 100644 --- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java @@ -31,6 +31,7 @@ import androidx.fragment.app.FragmentManager; import com.android.settings.R; import com.android.settings.SetupWizardUtils; +import com.android.settings.biometrics.BiometricUtils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.password.ChooseLockSettingsHelper; @@ -45,6 +46,7 @@ public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSenso if (mUserId != UserHandle.USER_NULL) { intent.putExtra(Intent.EXTRA_USER_ID, mUserId); } + BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); SetupWizardUtils.copySetupExtras(getIntent(), intent); return intent; } diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java index 7d8d12e8cb5..e88e50d9425 100644 --- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java @@ -62,8 +62,10 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu @Override protected Intent getEnrollingIntent() { final Intent intent = new Intent(this, SetupFingerprintEnrollFindSensor.class); + BiometricUtils.copyMultiBiometricExtras(getIntent(), intent); if (BiometricUtils.containsGatekeeperPasswordHandle(getIntent())) { - intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, + intent.putExtra( + ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, BiometricUtils.getGatekeeperPasswordHandle(getIntent())); } SetupWizardUtils.copySetupExtras(getIntent(), intent); @@ -118,18 +120,22 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu if (isKeyguardSecure()) { // If the keyguard is already set up securely (maybe the user added a backup screen // lock and skipped fingerprint), return RESULT_SKIP directly. - resultCode = RESULT_SKIP; - data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null); + if (!BiometricUtils.tryStartingNextBiometricEnroll( + this, ENROLL_NEXT_BIOMETRIC_REQUEST, "cancel")) { + resultCode = RESULT_SKIP; + data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null); + setResult(resultCode, data); + finish(); + return; + } } else { resultCode = SetupSkipDialog.RESULT_SKIP; - data = null; + data = setSkipPendingEnroll(null); + setResult(resultCode, data); + finish(); } // User has explicitly canceled enroll. Don't restart it automatically. - data = setSkipPendingEnroll(data); - - setResult(resultCode, data); - finish(); } /**