BiometricEnrollIntro should use non-blocking generateChallenge
GenerateChallenge used to block when showing the credential screen. Now that GenerateChallenge is moved to after the credential screen is shown, we need to delay the next button instead. This is generally non percievable to the user, but this is more robust against busy system server. Fixes: 161325267 Test: Enroll fingerprint/face device Change-Id: I0fbbef8bf469e32bed251acf22556ad2ea8e2933
This commit is contained in:
@@ -101,7 +101,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
/**
|
/**
|
||||||
* @return the challenge generated by the biometric hardware
|
* @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
|
* @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);
|
public abstract void onClick(LinkSpan span);
|
||||||
|
|
||||||
|
protected interface GenerateChallengeCallback {
|
||||||
|
void onChallengeGenerated(long challenge);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -267,12 +271,15 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
|
} else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
|
||||||
|
mConfirmingCredentials = false;
|
||||||
if (resultCode == RESULT_FINISHED) {
|
if (resultCode == RESULT_FINISHED) {
|
||||||
updatePasswordQuality();
|
updatePasswordQuality();
|
||||||
mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, getChallenge());
|
|
||||||
overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out);
|
overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out);
|
||||||
mConfirmingCredentials = false;
|
getNextButton().setEnabled(false);
|
||||||
return;
|
getChallenge((challenge -> {
|
||||||
|
mToken = BiometricUtils.requestGatekeeperHat(this, data, mUserId, challenge);
|
||||||
|
getNextButton().setEnabled(true);
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
setResult(resultCode, data);
|
setResult(resultCode, data);
|
||||||
finish();
|
finish();
|
||||||
@@ -280,8 +287,12 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
} else if (requestCode == CONFIRM_REQUEST) {
|
} else if (requestCode == CONFIRM_REQUEST) {
|
||||||
mConfirmingCredentials = false;
|
mConfirmingCredentials = false;
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
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);
|
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 {
|
} else {
|
||||||
setResult(resultCode, data);
|
setResult(resultCode, data);
|
||||||
finish();
|
finish();
|
||||||
|
@@ -180,12 +180,13 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected long getChallenge() {
|
protected void getChallenge(GenerateChallengeCallback callback) {
|
||||||
mFaceManager = Utils.getFaceManagerOrNull(this);
|
mFaceManager = Utils.getFaceManagerOrNull(this);
|
||||||
if (mFaceManager == null) {
|
if (mFaceManager == null) {
|
||||||
return 0;
|
callback.onChallengeGenerated(0L);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return mFaceManager.generateChallengeBlocking();
|
mFaceManager.generateChallenge(callback::onChallengeGenerated);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -131,12 +131,13 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected long getChallenge() {
|
protected void getChallenge(GenerateChallengeCallback callback) {
|
||||||
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
|
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
|
||||||
if (mFingerprintManager == null) {
|
if (mFingerprintManager == null) {
|
||||||
return 0;
|
callback.onChallengeGenerated(0L);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return mFingerprintManager.generateChallengeBlocking();
|
mFingerprintManager.generateChallenge(callback::onChallengeGenerated);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user