diff options
7 files changed, 196 insertions, 85 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 84dd3687e745..be013770519f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -814,6 +814,19 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } + private void onBiometricDetected(int userId, BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { + Assert.isMainThread(); + Trace.beginSection("KeyGuardUpdateMonitor#onBiometricDetected"); + for (int i = 0; i < mCallbacks.size(); i++) { + KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); + if (cb != null) { + cb.onBiometricDetected(userId, biometricSourceType, isStrongBiometric); + } + } + Trace.endSection(); + } + @VisibleForTesting protected void onFingerprintAuthenticated(int userId, boolean isStrongBiometric) { Assert.isMainThread(); @@ -890,6 +903,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } + private void handleBiometricDetected(int authUserId, BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { + Trace.beginSection("KeyGuardUpdateMonitor#handlerBiometricDetected"); + onBiometricDetected(authUserId, biometricSourceType, isStrongBiometric); + if (biometricSourceType == FINGERPRINT) { + mLogger.logFingerprintDetected(authUserId, isStrongBiometric); + } else if (biometricSourceType == FACE) { + mLogger.logFaceDetected(authUserId, isStrongBiometric); + setFaceRunningState(BIOMETRIC_STATE_STOPPED); + } + + Trace.endSection(); + } + private void handleFingerprintAuthenticated(int authUserId, boolean isStrongBiometric) { Trace.beginSection("KeyGuardUpdateMonitor#handlerFingerPrintAuthenticated"); if (mHandler.hasCallbacks(mFpCancelNotReceived)) { @@ -941,8 +968,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void onFingerprintCancelNotReceived() { mLogger.e("Fp cancellation not received, transitioning to STOPPED"); + final boolean wasCancellingRestarting = mFingerprintRunningState + == BIOMETRIC_STATE_CANCELLING_RESTARTING; mFingerprintRunningState = BIOMETRIC_STATE_STOPPED; - KeyguardUpdateMonitor.this.updateFingerprintListeningState(BIOMETRIC_ACTION_STOP); + if (wasCancellingRestarting) { + KeyguardUpdateMonitor.this.updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE); + } else { + KeyguardUpdateMonitor.this.updateFingerprintListeningState(BIOMETRIC_ACTION_STOP); + } } private void handleFingerprintError(int msgId, String errString) { @@ -1029,6 +1062,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab () -> updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE), getBiometricLockoutDelay()); } else { + boolean temporaryLockoutReset = wasLockout && !mFingerprintLockedOut; + if (temporaryLockoutReset) { + mLogger.d("temporaryLockoutReset - stopListeningForFingerprint() to stop" + + " detectFingerprint"); + stopListeningForFingerprint(); + } updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE); } @@ -1728,10 +1767,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } }; + private final FingerprintManager.FingerprintDetectionCallback mFingerprintDetectionCallback = + (sensorId, userId, isStrongBiometric) -> { + // Trigger the fingerprint detected path so the bouncer can be shown + handleBiometricDetected(userId, FINGERPRINT, isStrongBiometric); + }; + private final FaceManager.FaceDetectionCallback mFaceDetectionCallback = (sensorId, userId, isStrongBiometric) -> { - // Trigger the face success path so the bouncer can be shown - handleFaceAuthenticated(userId, isStrongBiometric); + // Trigger the face detected path so the bouncer can be shown + handleBiometricDetected(userId, FACE, isStrongBiometric); }; @VisibleForTesting @@ -2759,8 +2804,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab boolean shouldListen = shouldListenKeyguardState && shouldListenUserState && shouldListenBouncerState && shouldListenUdfpsState - && shouldListenSideFpsState - && !isFingerprintLockedOut(); + && shouldListenSideFpsState; logListenerModelData( new KeyguardFingerprintListenModel( System.currentTimeMillis(), @@ -2819,8 +2863,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab final boolean supportsDetect = !mFaceSensorProperties.isEmpty() && mFaceSensorProperties.get(0).supportsFaceDetection && canBypass && !mPrimaryBouncerIsOrWillBeShowing - && !isUserInLockdown(user) - && !isFingerprintLockedOut(); + && !isUserInLockdown(user); final boolean faceAuthAllowedOrDetectionIsNeeded = faceAuthAllowed || supportsDetect; // If the face or fp has recently been authenticated do not attempt to authenticate again. @@ -2916,11 +2959,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mLogger.v("startListeningForFingerprint - detect"); mFpm.detectFingerprint( mFingerprintCancelSignal, - (sensorId, user, isStrongBiometric) -> { - mLogger.d("fingerprint detected"); - // Trigger the fingerprint success path so the bouncer can be shown - handleFingerprintAuthenticated(user, isStrongBiometric); - }, + mFingerprintDetectionCallback, userId); } else { mLogger.v("startListeningForFingerprint - authenticate"); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 38f3e5065eec..0d4889a4c39f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -214,7 +214,7 @@ public class KeyguardUpdateMonitorCallback { public void onBiometricAuthFailed(BiometricSourceType biometricSourceType) { } /** - * Called when a biometric is recognized. + * Called when a biometric is authenticated. * @param userId the user id for which the biometric sample was authenticated * @param biometricSourceType */ @@ -222,6 +222,14 @@ public class KeyguardUpdateMonitorCallback { boolean isStrongBiometric) { } /** + * Called when a biometric is detected but not successfully authenticated. + * @param userId the user id for which the biometric sample was detected + * @param biometricSourceType + */ + public void onBiometricDetected(int userId, BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { } + + /** * Called when biometric authentication provides help string (e.g. "Try again") * @param msgId * @param helpString diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt index c414c088529c..e53f6adb62a4 100644 --- a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt +++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt @@ -167,6 +167,20 @@ class KeyguardUpdateMonitorLogger @Inject constructor( }, {"Fingerprint auth successful: userId: $int1, isStrongBiometric: $bool1"}) } + fun logFaceDetected(userId: Int, isStrongBiometric: Boolean) { + logBuffer.log(TAG, DEBUG, { + int1 = userId + bool1 = isStrongBiometric + }, {"Face detected: userId: $int1, isStrongBiometric: $bool1"}) + } + + fun logFingerprintDetected(userId: Int, isStrongBiometric: Boolean) { + logBuffer.log(TAG, DEBUG, { + int1 = userId + bool1 = isStrongBiometric + }, {"Fingerprint detected: userId: $int1, isStrongBiometric: $bool1"}) + } + fun logFingerprintError(msgId: Int, originalErrMsg: String) { logBuffer.log(TAG, DEBUG, { str1 = originalErrMsg diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index db2c0a08c1d9..993c4e2a4073 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -383,6 +383,17 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp } @Override + public void onBiometricDetected(int userId, BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { + Trace.beginSection("BiometricUnlockController#onBiometricDetected"); + if (mUpdateMonitor.isGoingToSleep()) { + Trace.endSection(); + return; + } + startWakeAndUnlock(MODE_SHOW_BOUNCER); + } + + @Override public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, boolean isStrongBiometric) { Trace.beginSection("BiometricUnlockController#onBiometricAuthenticated"); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 250f2211ac09..3c80dad2bd82 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -29,7 +29,6 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STR import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN; import static com.android.keyguard.FaceAuthApiRequestReason.NOTIFICATION_PANEL_CLICKED; import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_AVAILABLE; -import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_CANCELLING; import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_CANCELLING_RESTARTING; import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT; import static com.android.keyguard.KeyguardUpdateMonitor.HAL_POWER_PRESS_TIMEOUT; @@ -614,20 +613,48 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { @Test public void testOnlyDetectFingerprint_whenFingerprintUnlockNotAllowed() { - // Clear invocations, since previous setup (e.g. registering BiometricManager callbacks) - // will trigger updateBiometricListeningState(); - clearInvocations(mFingerprintManager); - mKeyguardUpdateMonitor.resetBiometricListeningState(); - - when(mStrongAuthTracker.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(false); - mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */); - mTestableLooper.processAllMessages(); + givenDetectFingerprintWithClearingFingerprintManagerInvocations(); verifyFingerprintAuthenticateNeverCalled(); verifyFingerprintDetectCall(); } @Test + public void whenDetectFingerprint_biometricDetectCallback() { + ArgumentCaptor<FingerprintManager.FingerprintDetectionCallback> fpDetectCallbackCaptor = + ArgumentCaptor.forClass(FingerprintManager.FingerprintDetectionCallback.class); + + givenDetectFingerprintWithClearingFingerprintManagerInvocations(); + verify(mFingerprintManager).detectFingerprint( + any(), fpDetectCallbackCaptor.capture(), anyInt()); + fpDetectCallbackCaptor.getValue().onFingerprintDetected(0, 0, true); + + // THEN verify keyguardUpdateMonitorCallback receives a detect callback + // and NO authenticate callbacks + verify(mTestCallback).onBiometricDetected( + eq(0), eq(BiometricSourceType.FINGERPRINT), eq(true)); + verify(mTestCallback, never()).onBiometricAuthenticated( + anyInt(), any(), anyBoolean()); + } + + @Test + public void whenDetectFace_biometricDetectCallback() { + ArgumentCaptor<FaceManager.FaceDetectionCallback> faceDetectCallbackCaptor = + ArgumentCaptor.forClass(FaceManager.FaceDetectionCallback.class); + + givenDetectFace(); + verify(mFaceManager).detectFace(any(), faceDetectCallbackCaptor.capture(), anyInt()); + faceDetectCallbackCaptor.getValue().onFaceDetected(0, 0, false); + + // THEN verify keyguardUpdateMonitorCallback receives a detect callback + // and NO authenticate callbacks + verify(mTestCallback).onBiometricDetected( + eq(0), eq(BiometricSourceType.FACE), eq(false)); + verify(mTestCallback, never()).onBiometricAuthenticated( + anyInt(), any(), anyBoolean()); + } + + @Test public void testUnlockingWithFaceAllowed_strongAuthTrackerUnlockingWithBiometricAllowed() { // GIVEN unlocking with biometric is allowed strongAuthNotRequired(); @@ -655,7 +682,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { strongAuthNotRequired(); // WHEN fingerprint is locked out - fingerprintErrorLockedOut(); + fingerprintErrorTemporaryLockedOut(); // THEN unlocking with face is not allowed Assert.assertFalse(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed( @@ -678,7 +705,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { strongAuthNotRequired(); // WHEN fingerprint is locked out - fingerprintErrorLockedOut(); + fingerprintErrorTemporaryLockedOut(); // THEN unlocking with fingerprint is not allowed Assert.assertFalse(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed( @@ -702,7 +729,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { Assert.assertTrue(mKeyguardUpdateMonitor.getUserHasTrust(getCurrentUser())); // WHEN fingerprint is locked out - fingerprintErrorLockedOut(); + fingerprintErrorTemporaryLockedOut(); // THEN user is NOT considered as "having trust" and bouncer cannot be skipped Assert.assertFalse(mKeyguardUpdateMonitor.getUserHasTrust(getCurrentUser())); @@ -764,11 +791,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { @Test public void nofaceDetect_whenStrongAuthRequiredAndBypassUdfpsSupportedAndFpRunning() { - // GIVEN mocked keyguardUpdateMonitorCallback - KeyguardUpdateMonitorCallback keyguardUpdateMonitorCallback = - mock(KeyguardUpdateMonitorCallback.class); - mKeyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback); - // GIVEN bypass is enabled, face detection is supported lockscreenBypassIsAllowed(); supportsFaceDetection(); @@ -787,22 +809,13 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { verifyFaceAuthenticateNeverCalled(); // THEN biometric help message sent to callback - verify(keyguardUpdateMonitorCallback).onBiometricHelp( + verify(mTestCallback).onBiometricHelp( eq(BIOMETRIC_HELP_FACE_NOT_AVAILABLE), anyString(), eq(BiometricSourceType.FACE)); } @Test public void faceDetect_whenStrongAuthRequiredAndBypass() { - // GIVEN bypass is enabled, face detection is supported and strong auth is required - lockscreenBypassIsAllowed(); - supportsFaceDetection(); - strongAuthRequiredEncrypted(); - keyguardIsVisible(); - // fingerprint is NOT running, UDFPS is NOT supported - - // WHEN the device wakes up - mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON); - mTestableLooper.processAllMessages(); + givenDetectFace(); // FACE detect is triggered, not authenticate verifyFaceDetectCall(); @@ -819,39 +832,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { } @Test - public void noFaceRun_whenFpLockout() { - // GIVEN bypass is enabled, face detection is supported and strong auth is required - lockscreenBypassIsAllowed(); - supportsFaceDetection(); - strongAuthRequiredEncrypted(); - keyguardIsVisible(); - // fingerprint is NOT running, UDFPS is NOT supported - - // GIVEN fp is locked out - when(mFingerprintManager.getLockoutModeForUser(eq(FINGERPRINT_SENSOR_ID), anyInt())) - .thenReturn(BIOMETRIC_LOCKOUT_TIMED); - mKeyguardUpdateMonitor.handleUserSwitchComplete(0); - assertThat(mKeyguardUpdateMonitor.isFingerprintLockedOut()).isEqualTo(true); - - // WHEN the device wakes up - mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON); - mTestableLooper.processAllMessages(); - - // FACE detect is NOT triggered and face authenticate is NOT triggered - verifyFaceDetectNeverCalled(); - verifyFaceAuthenticateNeverCalled(); - - // WHEN bouncer becomes visible - setKeyguardBouncerVisibility(true); - clearInvocations(mFaceManager); - - // THEN face scanning is not run - mKeyguardUpdateMonitor.requestFaceAuth(FaceAuthApiRequestReason.UDFPS_POINTER_DOWN); - verifyFaceAuthenticateNeverCalled(); - verifyFaceDetectNeverCalled(); - } - - @Test public void noFaceDetect_whenStrongAuthRequiredAndBypass_faceDetectionUnsupported() { // GIVEN bypass is enabled, face detection is NOT supported and strong auth is required lockscreenBypassIsAllowed(); @@ -1159,8 +1139,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { // Fingerprint should be cancelled on lockout if going to lockout state, else // restarted if it's not assertThat(mKeyguardUpdateMonitor.mFingerprintRunningState) - .isEqualTo(fpLocked - ? BIOMETRIC_STATE_CANCELLING : BIOMETRIC_STATE_CANCELLING_RESTARTING); + .isEqualTo(BIOMETRIC_STATE_CANCELLING_RESTARTING); } @Test @@ -1619,7 +1598,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue(); // Fingerprint is locked out. - fingerprintErrorLockedOut(); + fingerprintErrorTemporaryLockedOut(); assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse(); } @@ -2428,6 +2407,29 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { eq(false)); } + @Test + public void detectFingerprint_onTemporaryLockoutReset_authenticateFingerprint() { + ArgumentCaptor<FingerprintManager.LockoutResetCallback> fpLockoutResetCallbackCaptor = + ArgumentCaptor.forClass(FingerprintManager.LockoutResetCallback.class); + verify(mFingerprintManager).addLockoutResetCallback(fpLockoutResetCallbackCaptor.capture()); + + // GIVEN device is locked out + fingerprintErrorTemporaryLockedOut(); + + // GIVEN FP detection is running + givenDetectFingerprintWithClearingFingerprintManagerInvocations(); + verifyFingerprintDetectCall(); + verifyFingerprintAuthenticateNeverCalled(); + + // WHEN temporary lockout resets + fpLockoutResetCallbackCaptor.getValue().onLockoutReset(0); + mTestableLooper.processAllMessages(); + + // THEN fingerprint detect state should cancel & then restart (for authenticate call) + assertThat(mKeyguardUpdateMonitor.mFingerprintRunningState) + .isEqualTo(BIOMETRIC_STATE_CANCELLING_RESTARTING); + } + private void verifyFingerprintAuthenticateNeverCalled() { verify(mFingerprintManager, never()).authenticate(any(), any(), any(), any(), anyInt(), anyInt(), anyInt()); @@ -2532,7 +2534,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mKeyguardUpdateMonitor.setSwitchingUser(true); } - private void fingerprintErrorLockedOut() { + private void fingerprintErrorTemporaryLockedOut() { mKeyguardUpdateMonitor.mFingerprintAuthenticationCallback .onAuthenticationError(FINGERPRINT_ERROR_LOCKOUT, "Fingerprint locked out"); } @@ -2672,6 +2674,30 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { receiver.setPendingResult(pendingResult); } + private void givenDetectFingerprintWithClearingFingerprintManagerInvocations() { + // Clear invocations, since previous setup (e.g. registering BiometricManager callbacks) + // will trigger updateBiometricListeningState(); + clearInvocations(mFingerprintManager); + mKeyguardUpdateMonitor.resetBiometricListeningState(); + + when(mStrongAuthTracker.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(false); + mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */); + mTestableLooper.processAllMessages(); + } + + private void givenDetectFace() { + // GIVEN bypass is enabled, face detection is supported and strong auth is required + lockscreenBypassIsAllowed(); + supportsFaceDetection(); + strongAuthRequiredEncrypted(); + keyguardIsVisible(); + // fingerprint is NOT running, UDFPS is NOT supported + + // WHEN the device wakes up + mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON); + mTestableLooper.processAllMessages(); + } + private Intent putPhoneInfo(Intent intent, Bundle data, Boolean simInited) { int subscription = simInited ? 1/* mock subid=1 */ : SubscriptionManager.PLACEHOLDER_SUBSCRIPTION_ID_BASE; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java index daf7dd06b0d2..97226e4e68dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java @@ -537,6 +537,26 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { verify(mVibratorHelper).vibrateAuthError(anyString()); } + @Test + public void onFingerprintDetect_showBouncer() { + // WHEN fingerprint detect occurs + mBiometricUnlockController.onBiometricDetected(UserHandle.USER_CURRENT, + BiometricSourceType.FINGERPRINT, true /* isStrongBiometric */); + + // THEN shows primary bouncer + verify(mStatusBarKeyguardViewManager).showPrimaryBouncer(anyBoolean()); + } + + @Test + public void onFaceDetect_showBouncer() { + // WHEN face detect occurs + mBiometricUnlockController.onBiometricDetected(UserHandle.USER_CURRENT, + BiometricSourceType.FACE, false /* isStrongBiometric */); + + // THEN shows primary bouncer + verify(mStatusBarKeyguardViewManager).showPrimaryBouncer(anyBoolean()); + } + private void givenFingerprintModeUnlockCollapsing() { when(mUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true); when(mUpdateMonitor.isDeviceInteractive()).thenReturn(true); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java index 94b67cedf86c..598e2b990ea5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java @@ -452,13 +452,6 @@ public class FingerprintService extends SystemService { return -1; } - if (!Utils.isUserEncryptedOrLockdown(mLockPatternUtils, userId)) { - // If this happens, something in KeyguardUpdateMonitor is wrong. This should only - // ever be invoked when the user is encrypted or lockdown. - Slog.e(TAG, "detectFingerprint invoked when user is not encrypted or lockdown"); - return -1; - } - final Pair<Integer, ServiceProvider> provider = getSingleProvider(); if (provider == null) { Slog.w(TAG, "Null provider for detectFingerprint"); |