Fast enroll

Test: manual
Bug: 375320734
Flag: com.google.android.settings.flags.pixel_fingerprint_enroll
Change-Id: Iaf3acfca8471165514660a2403e69be161392501
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5cd2bb3..1870935 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2792,6 +2792,10 @@
             android:exported="false"
             android:theme="@style/GlifTheme.Light"
             android:taskAffinity="com.android.settings.root" />
+        <activity android:name=".biometrics.fingerprint.FingerprintEnroll$AddAdditionalFingerprint"
+            android:exported="false"
+            android:theme="@style/GlifTheme.Light"
+            android:taskAffinity="com.android.settings.root" />
 
         <activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFindSensor"
             android:exported="false"
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index b38c42c..809b32d 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -257,9 +257,10 @@
         final FingerprintEnrollActivityClassProvider fpClassProvider = FeatureFactory
                 .getFeatureFactory()
                 .getFingerprintFeatureProvider()
-                .getEnrollActivityClassProvider();
+                .getEnrollActivityClassProvider(mContext);
         addActivityFilter(activityFilters, fpClassProvider.getDefault());
         addActivityFilter(activityFilters, fpClassProvider.getInternal());
+        addActivityFilter(activityFilters, fpClassProvider.getAddAnother());
         addActivityFilter(activityFilters, FingerprintEnrollEnrolling.class);
         addActivityFilter(activityFilters, FaceEnrollIntroductionInternal.class);
         addActivityFilter(activityFilters, FaceEnrollIntroduction.class);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnroll.kt b/src/com/android/settings/biometrics/fingerprint/FingerprintEnroll.kt
index 3d78269..6439fe6 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnroll.kt
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnroll.kt
@@ -41,6 +41,14 @@
     }
 
     /**
+     *  Inner class to request adding of an additional fingerprint
+     */
+    class AddAdditionalFingerprint : FingerprintEnroll() {
+        override val nextActivityClass: Class<*>
+            get() = enrollActivityProvider.addAnother
+    }
+
+    /**
      * The class of the next activity to launch. This is open to allow subclasses to provide their
      * own behavior. Defaults to the default activity class provided by the
      * enrollActivityClassProvider.
@@ -49,7 +57,7 @@
         get() = enrollActivityProvider.default
 
     protected val enrollActivityProvider: FingerprintEnrollActivityClassProvider
-        get() = featureFactory.fingerprintFeatureProvider.enrollActivityClassProvider
+        get() = featureFactory.fingerprintFeatureProvider.getEnrollActivityClassProvider(this)
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollActivityClassProvider.kt b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollActivityClassProvider.kt
index 853a3df..14261e9 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollActivityClassProvider.kt
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollActivityClassProvider.kt
@@ -26,6 +26,8 @@
         get() = SetupFingerprintEnrollIntroduction::class.java
     open val internal: Class<out Activity>
         get() = FingerprintEnrollIntroductionInternal::class.java
+    open val addAnother: Class<out Activity>
+        get() = FingerprintEnrollEnrolling::class.java
 
     companion object {
         @JvmStatic
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintFeatureProvider.java b/src/com/android/settings/biometrics/fingerprint/FingerprintFeatureProvider.java
index baa88b5..06f8d74 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintFeatureProvider.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintFeatureProvider.java
@@ -57,7 +57,7 @@
      * @return the provider
      */
     @NonNull
-    default FingerprintEnrollActivityClassProvider getEnrollActivityClassProvider() {
+    default FingerprintEnrollActivityClassProvider getEnrollActivityClassProvider(@NonNull Context context) {
         return FingerprintEnrollActivityClassProvider.getInstance();
     }
 }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 7d47168..d8a14f1 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -537,8 +537,9 @@
                     activity, DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT, mUserId);
             final Intent helpIntent = HelpUtils.getHelpIntent(
                     activity, getString(getHelpResource()), activity.getClass().getName());
-            final View.OnClickListener learnMoreClickListener = (v) ->
-                    activity.startActivityForResult(helpIntent, 0);
+            final View.OnClickListener learnMoreClickListener = (v) -> {
+                activity.startActivityForResult(helpIntent, 0);
+            };
 
             mFooterColumns.clear();
             if (admin != null) {
@@ -910,7 +911,7 @@
                 mIsEnrolling = true;
                 Intent intent = new Intent();
                 intent.setClassName(SETTINGS_PACKAGE_NAME,
-                        FingerprintEnrollEnrolling.class.getName());
+                    FingerprintEnroll.AddAdditionalFingerprint.class.getName());
                 intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
                 intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
                 if (mCalibrator != null) {
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollTest.kt b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollTest.kt
index 07cdffb..0bfa9f3 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollTest.kt
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollTest.kt
@@ -24,6 +24,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mockito.`when`
+import org.mockito.kotlin.any
 import org.robolectric.Robolectric
 import org.robolectric.RobolectricTestRunner
 import org.robolectric.Shadows
@@ -46,7 +47,7 @@
     @Before
     fun setUp() {
         featureFactory = FakeFeatureFactory.setupForTest()
-        `when`(featureFactory.fingerprintFeatureProvider.enrollActivityClassProvider)
+        `when`(featureFactory.fingerprintFeatureProvider.getEnrollActivityClassProvider(any()))
             .thenReturn(activityProvider)
     }
 
@@ -81,6 +82,15 @@
         verifyLaunchNextActivity(activity, activityProvider.internal)
     }
 
+    @Test
+    fun testAndFinishLaunchAddAdditional() {
+        // Run
+        val activity = setupActivity(FingerprintEnroll.AddAdditionalFingerprint::class.java)
+
+        // Verify
+        verifyLaunchNextActivity(activity, activityProvider.addAnother)
+    }
+
     private fun verifyLaunchNextActivity(
         currentActivityInstance : FingerprintEnroll,
         nextActivityClass: Class<out Activity>