Ensure fingerprint setup is shown once after face

Adds an activity result extra during multi-biometric enroll that
ensures fingerprint setup will not be repeated multiple times if
explicitly finished or skipped by the user. Also updates various
activities in the stack to ensure that they handle all possible result
codes correctly and pass along result data.

Test: Manually skip and complete at each stage of multi-biometric enroll
Test: Manually test single-biometric enroll flows for SUW and Settings

Fixes: 193601823
Change-Id: Ic5a8306068eb4c32009f146ad6fff824fde25a11
This commit is contained in:
Curtis Belmonte
2021-07-15 16:04:47 -07:00
parent 20e57d33ff
commit b61478c30c
7 changed files with 111 additions and 18 deletions

View File

@@ -29,6 +29,7 @@ import com.android.internal.widget.LockPatternUtils;
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 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
@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 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
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