Merge "Ensure fingerprint setup is shown once after face" into sc-dev am: 6850b70226

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15305975

Change-Id: Idd9cc4759d3083d4c060fd65d10ea4ceb154c199
This commit is contained in:
Curtis Belmonte
2021-07-19 19:55:12 +00:00
committed by Automerger Merge Worker
7 changed files with 111 additions and 18 deletions

View File

@@ -36,6 +36,7 @@ import com.android.settings.R;
import com.android.settings.SetupWizardUtils; import com.android.settings.SetupWizardUtils;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper; 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.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
@@ -284,13 +285,11 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) { if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) { if (isResultSkipOrFinished(resultCode)) {
onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView()); handleBiometricResultSkipOrFinished(resultCode, data);
return;
} else if (resultCode == RESULT_TIMEOUT) { } else if (resultCode == RESULT_TIMEOUT) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
return;
} }
} else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) { } else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
mConfirmingCredentials = false; mConfirmingCredentials = false;
@@ -337,8 +336,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out); overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out);
} else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) { } else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode); Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode);
if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) { if (isResultSkipOrFinished(resultCode)) {
onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView()); handleBiometricResultSkipOrFinished(resultCode, data);
} else if (resultCode != RESULT_CANCELED) { } else if (resultCode != RESULT_CANCELED) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
@@ -347,6 +346,25 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
super.onActivityResult(requestCode, resultCode, data); 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 * Called after confirming credentials. Can be used to prevent the default
* behavior of immediately calling #getChallenge (useful to things like intro * behavior of immediately calling #getChallenge (useful to things like intro
@@ -364,7 +382,16 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
} }
protected void onSkipButtonClick(View view) { 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(); finish();
} }

View File

@@ -37,6 +37,7 @@ public class MultiBiometricEnrollHelper {
private static final int REQUEST_FINGERPRINT_ENROLL = 3001; private static final int REQUEST_FINGERPRINT_ENROLL = 3001;
public static final String EXTRA_ENROLL_AFTER_FACE = "enroll_after_face"; 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; @NonNull private final FragmentActivity mActivity;
private final long mGkPwHandle; private final long mGkPwHandle;

View File

@@ -33,6 +33,7 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupSkipDialog;
import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterBarMixin;
@@ -225,13 +226,17 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
mResultIntent = 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 the user finished or skipped enrollment, finish this activity
if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED
|| resultCode == RESULT_TIMEOUT) { || resultCode == SetupSkipDialog.RESULT_SKIP) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
} }
} else if (resultCode == RESULT_TIMEOUT) {
setResult(resultCode, data);
finish();
} }
} }

View File

@@ -71,6 +71,20 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
} }
} }
@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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View File

@@ -50,6 +50,16 @@ public class FaceEnrollParentalConsent extends FaceEnrollIntroduction {
onConsentResult(false /* granted */); 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) { private void onConsentResult(boolean granted) {
final Intent result = new Intent(); final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FACE); result.putExtra(EXTRA_KEY_MODALITY, TYPE_FACE);

View File

@@ -51,6 +51,16 @@ public class FingerprintEnrollParentalConsent extends FingerprintEnrollIntroduct
onConsentResult(false /* granted */); 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) { private void onConsentResult(boolean granted) {
final Intent result = new Intent(); final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FINGERPRINT); result.putExtra(EXTRA_KEY_MODALITY, TYPE_FINGERPRINT);

View File

@@ -29,6 +29,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.SetupWizardUtils; import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupChooseLockGeneric; import com.android.settings.password.SetupChooseLockGeneric;
import com.android.settings.password.SetupSkipDialog; import com.android.settings.password.SetupSkipDialog;
@@ -72,19 +73,28 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
// if lock was already present, do not return intent data since it must have been // if lock was already present, do not return intent data since it must have been
// reported in previous attempts // reported in previous attempts
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) { if (!mAlreadyHadLockScreenSetup) {
if(!mAlreadyHadLockScreenSetup) {
data = getMetricIntent(data); data = getMetricIntent(data);
} }
// Report fingerprint count if user adding a new fingerprint // Report fingerprint count if user adding a new fingerprint
if(resultCode == RESULT_FINISHED) { if (resultCode == RESULT_FINISHED) {
data = setFingerprintCount(data); 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); super.onActivityResult(requestCode, resultCode, data);
} }
@@ -112,17 +122,33 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
return data; return data;
} }
private Intent setSkipPendingEnroll(Intent data) {
if (data == null) {
data = new Intent();
}
data.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, true);
return data;
}
@Override @Override
protected void onCancelButtonClick(View view) { protected void onCancelButtonClick(View view) {
final int resultCode;
Intent data;
if (isKeyguardSecure()) { if (isKeyguardSecure()) {
// If the keyguard is already set up securely (maybe the user added a backup screen // If the keyguard is already set up securely (maybe the user added a backup screen
// lock and skipped fingerprint), return RESULT_SKIP directly. // lock and skipped fingerprint), return RESULT_SKIP directly.
setResult(RESULT_SKIP, mAlreadyHadLockScreenSetup ? null : getMetricIntent(null)); resultCode = RESULT_SKIP;
finish(); data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null);
} else { } else {
setResult(SetupSkipDialog.RESULT_SKIP); resultCode = SetupSkipDialog.RESULT_SKIP;
finish(); data = null;
} }
// User has explicitly canceled enroll. Don't restart it automatically.
data = setSkipPendingEnroll(data);
setResult(resultCode, data);
finish();
} }
@Override @Override