From cdb654f9bec5e719c9f6ff7d8b7dc42830c7c7d2 Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Tue, 28 Jun 2022 01:54:15 +0000 Subject: [PATCH] Fixed unicorn multi-enrollment flow. Test: Verified that Unicorn SUW flows can now enroll a face. Test: Verified normal SUW flow works as expected. Fixes: 237088482 Fixes: 234663447 Change-Id: I9c4100f61b5e7d40fc9ed67c6918ec7bf31fc30a --- .../biometrics/BiometricEnrollActivity.java | 2 ++ .../settings/biometrics/BiometricEnrollBase.java | 3 ++- .../biometrics/BiometricEnrollIntroduction.java | 4 +++- .../android/settings/biometrics/BiometricUtils.java | 13 ++++++++++++- .../biometrics/BiometricsEnrollEnrolling.java | 3 ++- .../settings/biometrics/ParentalConsentHelper.java | 6 +++--- .../biometrics/face/FaceEnrollParentalConsent.java | 6 +----- .../fingerprint/FingerprintEnrollFindSensor.java | 6 ++++++ .../biometrics/ParentalConsentHelperTest.java | 8 ++++---- 9 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java index dda3997c28a..e682934c321 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java +++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java @@ -333,6 +333,8 @@ public class BiometricEnrollActivity extends InstrumentedActivity { protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); + Log.d(TAG, + "onActivityResult(requestCode=" + requestCode + ", resultCode=" + resultCode + ")"); // single enrollment is handled entirely by the launched activity // this handles multi enroll or if parental consent is required if (mParentalConsentHelper != null) { diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java index ad9b64e3fcb..eea1bad91a9 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollBase.java +++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java @@ -184,7 +184,8 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity { @Override protected void onStop() { super.onStop(); - if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()) { + if (!isChangingConfigurations() && shouldFinishWhenBackgrounded() + && !BiometricUtils.isAnyMultiBiometricFlow(this)) { setResult(RESULT_TIMEOUT); finish(); } diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index 62114d25353..acfe5a10255 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -24,6 +24,7 @@ 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; @@ -302,7 +303,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - // TODO(b/229924331): Add tests for the enrollment flows. + Log.d(TAG, + "onActivityResult(requestCode=" + requestCode + ", resultCode=" + resultCode + ")"); final boolean cameFromMultiBioFpAuthAddAnother = requestCode == BiometricUtils.REQUEST_ADD_ANOTHER && BiometricUtils.isMultiBiometricFingerprintEnrollmentFlow(this); diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java index be233ed466b..4cd2f790620 100644 --- a/src/com/android/settings/biometrics/BiometricUtils.java +++ b/src/com/android/settings/biometrics/BiometricUtils.java @@ -240,7 +240,6 @@ public class BiometricUtils { return activity.getIntent().hasExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE); } - /** * Used for checking if a multi-biometric enrollment flowstarts with Fingerprint * and ends with Face. @@ -254,6 +253,18 @@ public class BiometricUtils { MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FINGERPRINT); } + /** + * Used to check if the activity is a multi biometric flow activity. + * + * @param activity Activity to check + * @return True if the activity is going through a multi-biometric enrollment flow, that starts + * with Fingerprint. + */ + public static boolean isAnyMultiBiometricFlow(@NonNull Activity activity) { + return isMultiBiometricFaceEnrollmentFlow(activity) + || isMultiBiometricFingerprintEnrollmentFlow(activity); + } + public static void copyMultiBiometricExtras(@NonNull Intent fromIntent, @NonNull Intent toIntent) { PendingIntent pendingIntent = (PendingIntent) fromIntent.getExtra( diff --git a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java index 302c9e183fe..3a61d5e2243 100644 --- a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java @@ -74,7 +74,8 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase getSupportFragmentManager() .beginTransaction().remove(mSidecar).commitAllowingStateLoss(); } - if (!WizardManagerHelper.isAnySetupWizard(getIntent())) { + if (!WizardManagerHelper.isAnySetupWizard(getIntent()) + && !BiometricUtils.isAnyMultiBiometricFlow(this)) { setResult(RESULT_TIMEOUT); } finish(); diff --git a/src/com/android/settings/biometrics/ParentalConsentHelper.java b/src/com/android/settings/biometrics/ParentalConsentHelper.java index 40ff8ea0581..f39f876863e 100644 --- a/src/com/android/settings/biometrics/ParentalConsentHelper.java +++ b/src/com/android/settings/biometrics/ParentalConsentHelper.java @@ -139,12 +139,12 @@ public class ParentalConsentHelper { @Nullable private Intent getNextConsentIntent(@NonNull Context context) { - if (mRequireFace && mConsentFace == null) { - return new Intent(context, FaceEnrollParentalConsent.class); - } if (mRequireFingerprint && mConsentFingerprint == null) { return new Intent(context, FingerprintEnrollParentalConsent.class); } + if (mRequireFace && mConsentFace == null) { + return new Intent(context, FaceEnrollParentalConsent.class); + } return null; } diff --git a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java index 0f384c2ffcc..a3a745d698b 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java @@ -53,11 +53,7 @@ public class FaceEnrollParentalConsent extends FaceEnrollIntroduction { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final String text = - getText(R.string.security_settings_face_enroll_introduction_consent_message_0) - + "\n\n" - + getText(R.string.security_settings_face_enroll_introduction_consent_message); - setDescriptionText(text); + setDescriptionText(R.string.security_settings_face_enroll_introduction_consent_message_0); } @Override diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 387f21603e6..627a5143a38 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.os.Bundle; +import android.util.Log; import android.view.OrientationEventListener; import android.view.Surface; import android.view.View; @@ -48,6 +49,9 @@ import java.util.List; public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements BiometricEnrollSidecar.Listener { + + private static final String TAG = "FingerprintEnrollFindSensor"; + @Nullable private FingerprintFindSensorAnimation mAnimation; @@ -294,6 +298,8 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { + Log.d(TAG, + "onActivityResult(requestCode=" + requestCode + ", resultCode=" + resultCode + ")"); boolean enrolledFingerprint = false; if (data != null) { enrolledFingerprint = data.getBooleanExtra(EXTRA_FINISHED_ENROLL_FINGERPRINT, false); diff --git a/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java b/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java index abb5355b590..175c2cfdc99 100644 --- a/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java +++ b/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java @@ -82,7 +82,7 @@ public class ParentalConsentHelperTest { } @Test - public void testLaunchNext_face_and_fingerprint_all_consent() { + public void testLaunchNext__fingerprint_all_consent() { testLaunchNext( true /* requireFace */, true /* grantFace */, true /* requireFingerprint */, true /* grantFace */, @@ -158,13 +158,13 @@ public class ParentalConsentHelperTest { boolean requireFingerprint, boolean grantFingerprint, long gkpw) { final List> expectedLaunches = new ArrayList<>(); - if (requireFace) { - expectedLaunches.add(new Pair(FaceEnrollParentalConsent.class.getName(), grantFace)); - } if (requireFingerprint) { expectedLaunches.add( new Pair(FingerprintEnrollParentalConsent.class.getName(), grantFingerprint)); } + if (requireFace) { + expectedLaunches.add(new Pair(FaceEnrollParentalConsent.class.getName(), grantFace)); + } // initial consent status final ParentalConsentHelper helper = new ParentalConsentHelper(gkpw);