Move multi-biometric logic to base fp intro activity

Ensures that the relevant multi-biometric logic--specifically, logic to
ensure that fingerprint enroll is shown exactly once after face
enroll--is present in both the SUW and non-SUW versions of the
fingerprint enroll introduction activity. This fixes an issue where
fingerprint enroll would occur multiple times when triggering the
multi-biometric enroll flow outside of SUW (e.g. via an enroll intent
action).

Test: CTS-Verifier: Biometric Tests > 2a: Strong Biometrics + Crypto

Bug: 193601823
Change-Id: I17c09e9a72ced2f23b0b279ea51a6aa209668485
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index a75fb0f..b3d1048 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -24,6 +24,7 @@
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -35,7 +36,9 @@
 import com.android.settings.Utils;
 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;
 
@@ -89,6 +92,32 @@
         footerTitle2.setText(getFooterTitle2());
     }
 
+    @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();
+    }
+
+    @Override
+    protected void onSkipButtonClick(View view) {
+        onCancelButtonClick(view);
+    }
+
     @StringRes
     int getNegativeButtonTextId() {
         return R.string.security_settings_fingerprint_enroll_introduction_no_thanks;
@@ -282,4 +311,13 @@
     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/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
index 63faf5e..7d8d12e 100644
--- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -29,7 +29,6 @@
 import com.android.settings.SetupWizardUtils;
 import com.android.settings.Utils;
 import com.android.settings.biometrics.BiometricUtils;
-import com.android.settings.biometrics.MultiBiometricEnrollHelper;
 import com.android.settings.password.ChooseLockSettingsHelper;
 import com.android.settings.password.SetupChooseLockGeneric;
 import com.android.settings.password.SetupSkipDialog;
@@ -85,16 +84,6 @@
                 data = setFingerprintCount(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);
     }
 
@@ -122,14 +111,6 @@
         return data;
     }
 
-    private Intent setSkipPendingEnroll(Intent data) {
-        if (data == null) {
-            data = new Intent();
-        }
-        data.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, true);
-        return data;
-    }
-
     @Override
     protected void onCancelButtonClick(View view) {
         final int resultCode;
@@ -151,11 +132,6 @@
         finish();
     }
 
-    @Override
-    protected void onSkipButtonClick(View view) {
-        onCancelButtonClick(view);
-    }
-
     /**
      * Propagate lock screen metrics if the user goes back from the fingerprint setup screen
      * after having added lock screen to his device.