From 7fdc046d9b1df4352937a6bfe91f86f25fa43a8a Mon Sep 17 00:00:00 2001 From: Vincent Wang Date: Wed, 28 Dec 2022 09:56:20 +0000 Subject: [PATCH] Launch FaceEnrollPage form BiometricEnrollActivity For compatible with Biometric V2, launch FaceEnrollPage from BiometricEnrollActivity Bug: 259658609 Test: 1. adb root 2. adb shell am start -n com.google.android.setupwizard/.SetupWizardTestActivity 3. Test Fingerprint & Face enrollment Change-Id: Ice85406abaa3d7a4b686fb017349471118a42951 --- .../biometrics/BiometricEnrollActivity.java | 103 ++++++++++-------- 1 file changed, 55 insertions(+), 48 deletions(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java index fa66bb57adb..bb56ecd245f 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java +++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java @@ -23,6 +23,7 @@ import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED; import android.annotation.NonNull; +import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.app.settings.SettingsEnums; import android.content.Intent; @@ -72,7 +73,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity { private static final int REQUEST_CHOOSE_OPTIONS = 3; // prompt hand phone back to parent after enrollment private static final int REQUEST_HANDOFF_PARENT = 4; - private static final int REQUEST_SINGLE_ENROLL = 5; + private static final int REQUEST_SINGLE_ENROLL_FINGERPRINT = 5; + private static final int REQUEST_SINGLE_ENROLL_FACE = 6; public static final int RESULT_SKIP = BiometricEnrollBase.RESULT_SKIP; @@ -117,7 +119,6 @@ public class BiometricEnrollActivity extends InstrumentedActivity { private Bundle mParentalOptions; @Nullable private Long mGkPwHandle; @Nullable private ParentalConsentHelper mParentalConsentHelper; - @Nullable private MultiBiometricEnrollHelper mMultiBiometricEnrollHelper; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -308,8 +309,6 @@ public class BiometricEnrollActivity extends InstrumentedActivity { } else if (canUseFace || canUseFingerprint) { if (mGkPwHandle == null) { setOrConfirmCredentialsNow(); - } else if (canUseFace && canUseFingerprint) { - launchFaceAndFingerprintEnroll(); } else if (canUseFingerprint) { launchFingerprintOnlyEnroll(); } else { @@ -438,49 +437,63 @@ public class BiometricEnrollActivity extends InstrumentedActivity { // handles responses while multi biometric enrollment is pending private void handleOnActivityResultWhileEnrolling( int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_HANDOFF_PARENT) { - Log.d(TAG, "Enrollment complete, requesting handoff, result: " + resultCode); - setResult(RESULT_OK, newResultIntent()); - finish(); - } else if (mMultiBiometricEnrollHelper == null) { - overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); - switch (requestCode) { - case REQUEST_CHOOSE_LOCK: - case REQUEST_CONFIRM_LOCK: - mConfirmingCredentials = false; - final boolean isOk = - isSuccessfulConfirmOrChooseCredential(requestCode, resultCode); - if (isOk && (mHasFeatureFace || mHasFeatureFingerprint)) { - updateGatekeeperPasswordHandle(data); - if (mHasFeatureFace && mHasFeatureFingerprint) { - launchFaceAndFingerprintEnroll(); - } else if (mHasFeatureFingerprint) { - launchFingerprintOnlyEnroll(); - } else { - launchFaceOnlyEnroll(); - } + Log.d(TAG, "handleOnActivityResultWhileEnrolling, request = " + requestCode + "" + + ", resultCode = " + resultCode); + switch (requestCode) { + case REQUEST_HANDOFF_PARENT: + setResult(RESULT_OK, newResultIntent()); + finish(); + break; + case REQUEST_CHOOSE_LOCK: + case REQUEST_CONFIRM_LOCK: + mConfirmingCredentials = false; + final boolean isOk = + isSuccessfulConfirmOrChooseCredential(requestCode, resultCode); + if (isOk && (mHasFeatureFace || mHasFeatureFingerprint)) { + updateGatekeeperPasswordHandle(data); + if (mHasFeatureFingerprint) { + launchFingerprintOnlyEnroll(); } else { - Log.d(TAG, "Unknown result for set/choose lock: " + resultCode); - setResult(resultCode, newResultIntent()); - finish(); + launchFaceOnlyEnroll(); } - break; - case REQUEST_SINGLE_ENROLL: - mIsSingleEnrolling = false; - finishOrLaunchHandToParent(resultCode); - break; - default: - Log.w(TAG, "Unknown enrolling requestCode: " + requestCode + ", finishing"); + } else { + Log.d(TAG, "Unknown result for set/choose lock: " + resultCode); + setResult(resultCode, newResultIntent()); finish(); - } - } else { - Log.d(TAG, "RequestCode: " + requestCode + " resultCode: " + resultCode); - BiometricUtils.removeGatekeeperPasswordHandle(this, mGkPwHandle); - finishOrLaunchHandToParent(resultCode); + } + break; + case REQUEST_SINGLE_ENROLL_FINGERPRINT: + mIsSingleEnrolling = false; + if ((resultCode == BiometricEnrollBase.RESULT_SKIP + || resultCode == BiometricEnrollBase.RESULT_FINISHED) && mHasFeatureFace) { + launchFaceOnlyEnroll(); + } else { + finishOrLaunchHandToParent(resultCode); + } + break; + case REQUEST_SINGLE_ENROLL_FACE: + mIsSingleEnrolling = false; + if (resultCode == Activity.RESULT_CANCELED && mHasFeatureFingerprint) { + launchFingerprintOnlyEnroll(); + } else { + finishOrLaunchHandToParent(resultCode); + } + break; + default: + Log.w(TAG, "Unknown enrolling requestCode: " + requestCode + ", finishing"); + finish(); } } + @Override + public void finish() { + if (mGkPwHandle != null) { + BiometricUtils.removeGatekeeperPasswordHandle(this, mGkPwHandle); + } + super.finish(); + } + private void finishOrLaunchHandToParent(int resultCode) { if (mParentalOptionsRequired) { if (!mSkipReturnToParent) { @@ -624,7 +637,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity { } else { intent = BiometricUtils.getFingerprintIntroIntent(this, getIntent()); } - launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL); + launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL_FINGERPRINT); } } @@ -632,16 +645,10 @@ public class BiometricEnrollActivity extends InstrumentedActivity { if (!mIsSingleEnrolling) { mIsSingleEnrolling = true; final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent()); - launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL); + launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL_FACE); } } - private void launchFaceAndFingerprintEnroll() { - mMultiBiometricEnrollHelper = new MultiBiometricEnrollHelper(this, mUserId, - mIsFaceEnrollable, mIsFingerprintEnrollable, mGkPwHandle); - mMultiBiometricEnrollHelper.startNextStep(); - } - private void launchHandoffToParent() { final Intent intent = BiometricUtils.getHandoffToParentIntent(this, getIntent()); startActivityForResult(intent, REQUEST_HANDOFF_PARENT);