Merge "Ensure fingerprint setup is shown once after face" into sc-dev
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index 8d18b1a..428e471 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -36,6 +36,7 @@
import com.android.settings.SetupWizardUtils;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.SetupSkipDialog;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -284,13 +285,11 @@
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
- if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) {
- onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView());
- return;
+ if (isResultSkipOrFinished(resultCode)) {
+ handleBiometricResultSkipOrFinished(resultCode, data);
} else if (resultCode == RESULT_TIMEOUT) {
setResult(resultCode, data);
finish();
- return;
}
} else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
mConfirmingCredentials = false;
@@ -337,8 +336,8 @@
overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out);
} else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode);
- if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) {
- onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView());
+ if (isResultSkipOrFinished(resultCode)) {
+ handleBiometricResultSkipOrFinished(resultCode, data);
} else if (resultCode != RESULT_CANCELED) {
setResult(resultCode, data);
finish();
@@ -347,6 +346,25 @@
super.onActivityResult(requestCode, resultCode, data);
}
+ private static boolean isResultSkipOrFinished(int resultCode) {
+ return resultCode == RESULT_SKIP || resultCode == SetupSkipDialog.RESULT_SKIP
+ || resultCode == RESULT_FINISHED;
+ }
+
+ private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
+ if (data != null
+ && data.getBooleanExtra(
+ MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) {
+ getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE);
+ }
+
+ if (resultCode == RESULT_SKIP) {
+ onEnrollmentSkipped(data);
+ } else if (resultCode == RESULT_FINISHED) {
+ onFinishedEnrolling(data);
+ }
+ }
+
/**
* Called after confirming credentials. Can be used to prevent the default
* behavior of immediately calling #getChallenge (useful to things like intro
@@ -364,7 +382,16 @@
}
protected void onSkipButtonClick(View view) {
- setResult(RESULT_SKIP);
+ onEnrollmentSkipped(null /* data */);
+ }
+
+ protected void onEnrollmentSkipped(@Nullable Intent data) {
+ setResult(RESULT_SKIP, data);
+ finish();
+ }
+
+ protected void onFinishedEnrolling(@Nullable Intent data) {
+ setResult(RESULT_FINISHED, data);
finish();
}
diff --git a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
index 44d75c5..5cc45b1 100644
--- a/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
+++ b/src/com/android/settings/biometrics/MultiBiometricEnrollHelper.java
@@ -37,6 +37,7 @@
private static final int REQUEST_FINGERPRINT_ENROLL = 3001;
public static final String EXTRA_ENROLL_AFTER_FACE = "enroll_after_face";
+ public static final String EXTRA_SKIP_PENDING_ENROLL = "skip_pending_enroll";
@NonNull private final FragmentActivity mActivity;
private final long mGkPwHandle;
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
index f915059..08cf5ff 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
@@ -33,6 +33,7 @@
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.SetupSkipDialog;
import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupcompat.template.FooterBarMixin;
@@ -225,13 +226,17 @@
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mResultIntent = data;
- if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
+ if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST
+ || requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
// If the user finished or skipped enrollment, finish this activity
- if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP
- || resultCode == RESULT_TIMEOUT) {
+ if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED
+ || resultCode == SetupSkipDialog.RESULT_SKIP) {
setResult(resultCode, data);
finish();
}
+ } else if (resultCode == RESULT_TIMEOUT) {
+ setResult(resultCode, data);
+ finish();
}
}
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index bee1aca..e9092c7 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -72,6 +72,20 @@
}
@Override
+ protected void onEnrollmentSkipped(@Nullable Intent data) {
+ if (!BiometricUtils.tryStartingNextBiometricEnroll(this, ENROLL_NEXT_BIOMETRIC_REQUEST)) {
+ super.onEnrollmentSkipped(data);
+ }
+ }
+
+ @Override
+ protected void onFinishedEnrolling(@Nullable Intent data) {
+ if (!BiometricUtils.tryStartingNextBiometricEnroll(this, ENROLL_NEXT_BIOMETRIC_REQUEST)) {
+ super.onFinishedEnrolling(data);
+ }
+ }
+
+ @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
index 81043dc..183e05e 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollParentalConsent.java
@@ -50,6 +50,16 @@
onConsentResult(false /* granted */);
}
+ @Override
+ protected void onEnrollmentSkipped(@Nullable Intent data) {
+ onConsentResult(false /* granted */);
+ }
+
+ @Override
+ protected void onFinishedEnrolling(@Nullable Intent data) {
+ onConsentResult(true /* granted */);
+ }
+
private void onConsentResult(boolean granted) {
final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FACE);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollParentalConsent.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollParentalConsent.java
index 636e703..a95a912 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollParentalConsent.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollParentalConsent.java
@@ -51,6 +51,16 @@
onConsentResult(false /* granted */);
}
+ @Override
+ protected void onEnrollmentSkipped(@Nullable Intent data) {
+ onConsentResult(false /* granted */);
+ }
+
+ @Override
+ protected void onFinishedEnrolling(@Nullable Intent data) {
+ onConsentResult(true /* granted */);
+ }
+
private void onConsentResult(boolean granted) {
final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FINGERPRINT);
diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
index 4bd8afd..63faf5e 100644
--- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -29,6 +29,7 @@
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;
@@ -72,19 +73,28 @@
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // if lock was already present, do not return intent data since it must have been
- // reported in previous attempts
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
- if(!mAlreadyHadLockScreenSetup) {
+ // if lock was already present, do not return intent data since it must have been
+ // reported in previous attempts
+ if (!mAlreadyHadLockScreenSetup) {
data = getMetricIntent(data);
}
// Report fingerprint count if user adding a new fingerprint
- if(resultCode == RESULT_FINISHED) {
+ if (resultCode == RESULT_FINISHED) {
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);
}
@@ -112,17 +122,33 @@
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;
+ Intent data;
if (isKeyguardSecure()) {
// If the keyguard is already set up securely (maybe the user added a backup screen
// lock and skipped fingerprint), return RESULT_SKIP directly.
- setResult(RESULT_SKIP, mAlreadyHadLockScreenSetup ? null : getMetricIntent(null));
- finish();
+ resultCode = RESULT_SKIP;
+ data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null);
} else {
- setResult(SetupSkipDialog.RESULT_SKIP);
- finish();
+ resultCode = SetupSkipDialog.RESULT_SKIP;
+ data = null;
}
+
+ // User has explicitly canceled enroll. Don't restart it automatically.
+ data = setSkipPendingEnroll(data);
+
+ setResult(resultCode, data);
+ finish();
}
@Override