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.