From cbe32ed1cf9e71e8716dde42187ac30490d8b9ce Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Wed, 24 Jun 2020 17:58:03 -0700 Subject: [PATCH] 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 --- .../settings/biometrics/face/FaceEnrollIntroduction.java | 2 +- src/com/android/settings/biometrics/face/FaceSettings.java | 7 ++----- .../biometrics/fingerprint/FingerprintEnrollFinish.java | 5 +---- .../fingerprint/FingerprintEnrollIntroduction.java | 2 +- .../biometrics/fingerprint/FingerprintSettings.java | 7 ++----- .../settings/password/SetNewPasswordController.java | 4 ++-- .../settings/password/SetNewPasswordControllerTest.java | 4 ++-- .../testutils/shadow/ShadowFingerprintManager.java | 5 +++++ 8 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java index 6709a6ab814..780fb2e88a5 100644 --- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java @@ -176,7 +176,7 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction { if (mFaceManager == null) { return 0; } - return mFaceManager.generateChallenge(); + return mFaceManager.generateChallengeBlocking(); } @Override diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java index 02e80e45b34..f09c3832c23 100644 --- a/src/com/android/settings/biometrics/face/FaceSettings.java +++ b/src/com/android/settings/biometrics/face/FaceSettings.java @@ -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(); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java index 179de6754e5..9a1229063f7 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java @@ -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(); } } diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java index d3618dbf37b..ccfb0f26155 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java @@ -136,7 +136,7 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction { if (mFingerprintManager == null) { return 0; } - return mFingerprintManager.preEnroll(); + return mFingerprintManager.generateChallengeBlocking(); } @Override diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index 4a545b95725..e1299081dc6 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -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), diff --git a/src/com/android/settings/password/SetNewPasswordController.java b/src/com/android/settings/password/SetNewPasswordController.java index bf552718b14..7f206a0b781 100644 --- a/src/com/android/settings/password/SetNewPasswordController.java +++ b/src/com/android/settings/password/SetNewPasswordController.java @@ -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( diff --git a/tests/robotests/src/com/android/settings/password/SetNewPasswordControllerTest.java b/tests/robotests/src/com/android/settings/password/SetNewPasswordControllerTest.java index b579347ebde..d3832a4f91d 100644 --- a/tests/robotests/src/com/android/settings/password/SetNewPasswordControllerTest.java +++ b/tests/robotests/src/com/android/settings/password/SetNewPasswordControllerTest.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowFingerprintManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowFingerprintManager.java index 90c59105b40..2da7a3f1eb8 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowFingerprintManager.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowFingerprintManager.java @@ -31,4 +31,9 @@ public class ShadowFingerprintManager extends org.robolectric.shadows.ShadowFing protected List getEnrolledFingerprints(int userId) { return getEnrolledFingerprints(); } + + @Implementation + protected long generateChallengeBlocking() { + return 0L; + } }