diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java index c97c4d98b7b..db2f2913342 100644 --- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java @@ -101,7 +101,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase /** * @return the challenge generated by the biometric hardware */ - protected abstract long getChallenge(); + protected abstract void getChallenge(GenerateChallengeCallback callback); /** * @return one of the ChooseLockSettingsHelper#EXTRA_KEY_FOR_* constants @@ -125,6 +125,10 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase */ public abstract void onClick(LinkSpan span); + protected interface GenerateChallengeCallback { + void onChallengeGenerated(long challenge); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -267,12 +271,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase return; } } else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) { + mConfirmingCredentials = false; if (resultCode == RESULT_FINISHED) { updatePasswordQuality(); - mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, getChallenge()); overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); - mConfirmingCredentials = false; - return; + getNextButton().setEnabled(false); + getChallenge((challenge -> { + mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); + getNextButton().setEnabled(true); + })); } else { setResult(resultCode, data); finish(); @@ -280,8 +287,12 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase } else if (requestCode == CONFIRM_REQUEST) { mConfirmingCredentials = false; if (resultCode == RESULT_OK && data != null) { - mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, getChallenge()); overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out); + getNextButton().setEnabled(false); + getChallenge((challenge -> { + mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge); + getNextButton().setEnabled(true); + })); } else { 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 dbdf03de3bb..378a3c12f5d 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java @@ -180,12 +180,13 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { } @Override - protected long getChallenge() { + protected void getChallenge(GenerateChallengeCallback callback) { mFaceManager = Utils.getFaceManagerOrNull(this); if (mFaceManager == null) { - return 0; + callback.onChallengeGenerated(0L); + return; } - return mFaceManager.generateChallengeBlocking(); + mFaceManager.generateChallenge(callback::onChallengeGenerated); } @Override diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java index ccfb0f26155..0b5c7b0ff77 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java @@ -131,12 +131,13 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { } @Override - protected long getChallenge() { + protected void getChallenge(GenerateChallengeCallback callback) { mFingerprintManager = Utils.getFingerprintManagerOrNull(this); if (mFingerprintManager == null) { - return 0; + callback.onChallengeGenerated(0L); + return; } - return mFingerprintManager.generateChallengeBlocking(); + mFingerprintManager.generateChallenge(callback::onChallengeGenerated); } @Override