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) { if (mFaceManager == null) {
return 0; return 0;
} }
return mFaceManager.generateChallenge(); return mFaceManager.generateChallengeBlocking();
} }
@Override @Override

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -80,10 +80,10 @@ public final class SetNewPasswordControllerTest {
CURRENT_USER_ID, mPackageManager, mFingerprintManager, mFaceManager, CURRENT_USER_ID, mPackageManager, mFingerprintManager, mFaceManager,
mDevicePolicyManager, mUi); mDevicePolicyManager, mUi);
when(mFingerprintManager.preEnroll()).thenReturn(FINGERPRINT_CHALLENGE); when(mFingerprintManager.generateChallengeBlocking()).thenReturn(FINGERPRINT_CHALLENGE);
when(mPackageManager.hasSystemFeature(eq(FEATURE_FINGERPRINT))).thenReturn(true); 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); 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) { protected List<Fingerprint> getEnrolledFingerprints(int userId) {
return getEnrolledFingerprints(); return getEnrolledFingerprints();
} }
@Implementation
protected long generateChallengeBlocking() {
return 0L;
}
} }