Update Settings together with generateChallenge/revokeChallenge

The internal implementation of generate/revoke in system_server is now
asynchronous. To keep existing clients working, the manager classes
introduce a blocking version of the generateChallenge calls. This change
updates Settings to use the backward-compatible blocking calls.

Bug: 157790417

Test: Enroll fingerprint/face
Test: After enrollment, toggle setFeature or do subsequent enrollment
      in face/fingerprint settings
Change-Id: Ib4dfdc5f12530b938ab9b1745f5a19cd9e2eceee
This commit is contained in:
Kevin Chyn
2020-06-24 17:58:03 -07:00
parent 602b8573f3
commit cbe32ed1cf
8 changed files with 16 additions and 20 deletions

View File

@@ -176,7 +176,7 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
if (mFaceManager == null) {
return 0;
}
return mFaceManager.generateChallenge();
return mFaceManager.generateChallengeBlocking();
}
@Override

View File

@@ -205,7 +205,7 @@ public class FaceSettings extends DashboardFragment {
// Generate challenge in onResume instead of onCreate, since FaceSettings can be
// created while Keyguard is showing, in which case the resetLockout revokeChallenge
// will invalidate the too-early created challenge here.
final long challenge = mFaceManager.generateChallenge();
final long challenge = mFaceManager.generateChallengeBlocking();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
mConfirmingPassword = true;
@@ -266,10 +266,7 @@ public class FaceSettings extends DashboardFragment {
&& !mConfirmingPassword) {
// Revoke challenge and finish
if (mToken != null) {
final int result = mFaceManager.revokeChallenge();
if (result < 0) {
Log.w(TAG, "revokeChallenge failed, result: " + result);
}
mFaceManager.revokeChallenge();
mToken = null;
}
finish();

View File

@@ -140,10 +140,7 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
private void postEnroll() {
final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
if (fpm != null) {
int result = fpm.postEnroll();
if (result < 0) {
Log.w(TAG, "postEnroll failed: result = " + result);
}
fpm.revokeChallenge();
}
}

View File

@@ -136,7 +136,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
if (mFingerprintManager == null) {
return 0;
}
return mFingerprintManager.preEnroll();
return mFingerprintManager.generateChallengeBlocking();
}
@Override

View File

@@ -594,10 +594,7 @@ public class FingerprintSettings extends SubSettings {
public void onDestroy() {
super.onDestroy();
if (getActivity().isFinishing()) {
int result = mFingerprintManager.postEnroll();
if (result < 0) {
Log.w(TAG, "postEnroll failed: result = " + result);
}
mFingerprintManager.revokeChallenge();
}
}
@@ -638,7 +635,7 @@ public class FingerprintSettings extends SubSettings {
private void launchChooseOrConfirmLock() {
Intent intent = new Intent();
long challenge = mFingerprintManager.preEnroll();
long challenge = mFingerprintManager.generateChallengeBlocking();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
getString(R.string.security_settings_fingerprint_preference_title),

View File

@@ -135,7 +135,7 @@ final class SetNewPasswordController {
private Bundle getFingerprintChooseLockExtras() {
Bundle chooseLockExtras = new Bundle();
long challenge = mFingerprintManager.preEnroll();
long challenge = mFingerprintManager.generateChallengeBlocking();
chooseLockExtras.putInt(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
PASSWORD_QUALITY_SOMETHING);
chooseLockExtras.putBoolean(
@@ -148,7 +148,7 @@ final class SetNewPasswordController {
private Bundle getFaceChooseLockExtras() {
Bundle chooseLockExtras = new Bundle();
long challenge = mFaceManager.generateChallenge();
long challenge = mFaceManager.generateChallengeBlocking();
chooseLockExtras.putInt(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
PASSWORD_QUALITY_SOMETHING);
chooseLockExtras.putBoolean(

View File

@@ -80,10 +80,10 @@ public final class SetNewPasswordControllerTest {
CURRENT_USER_ID, mPackageManager, mFingerprintManager, mFaceManager,
mDevicePolicyManager, mUi);
when(mFingerprintManager.preEnroll()).thenReturn(FINGERPRINT_CHALLENGE);
when(mFingerprintManager.generateChallengeBlocking()).thenReturn(FINGERPRINT_CHALLENGE);
when(mPackageManager.hasSystemFeature(eq(FEATURE_FINGERPRINT))).thenReturn(true);
when(mFaceManager.generateChallenge()).thenReturn(FACE_CHALLENGE);
when(mFaceManager.generateChallengeBlocking()).thenReturn(FACE_CHALLENGE);
when(mPackageManager.hasSystemFeature(eq(FEATURE_FACE))).thenReturn(true);
}

View File

@@ -31,4 +31,9 @@ public class ShadowFingerprintManager extends org.robolectric.shadows.ShadowFing
protected List<Fingerprint> getEnrolledFingerprints(int userId) {
return getEnrolledFingerprints();
}
@Implementation
protected long generateChallengeBlocking() {
return 0L;
}
}