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 c1869e0575ed6..e946bf1bb238e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -558,6 +558,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp if (!mUpdateMonitor.isDeviceInteractive()) { if (!mKeyguardViewController.isShowing() && !mScreenOffAnimationController.isKeyguardShowDelayed()) { + if (mKeyguardStateController.isUnlocked()) { + return MODE_WAKE_AND_UNLOCK; + } return MODE_ONLY_WAKE; } else if (mDozeScrimController.isPulsing() && unlockingAllowed) { return MODE_WAKE_AND_UNLOCK_PULSING; 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 d6a2f0f22e5a9..6864c65c9af4b 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 @@ -124,6 +124,7 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true); when(mUpdateMonitor.isDeviceInteractive()).thenReturn(true); when(mKeyguardStateController.isFaceAuthEnabled()).thenReturn(true); + when(mKeyguardStateController.isUnlocked()).thenReturn(false); when(mKeyguardBypassController.onBiometricAuthenticated(any(), anyBoolean())) .thenReturn(true); when(mAuthController.isUdfpsFingerDown()).thenReturn(false); @@ -185,6 +186,24 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { .isEqualTo(BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING); } + @Test + public void onBiometricAuthenticated_whenDeviceIsAlreadyUnlocked_wakeAndUnlock() { + reset(mUpdateMonitor); + reset(mStatusBarKeyguardViewManager); + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + when(mKeyguardStateController.isUnlocked()).thenReturn(true); + when(mUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true); + when(mDozeScrimController.isPulsing()).thenReturn(false); + // the value of isStrongBiometric doesn't matter here since we only care about the returned + // value of isUnlockingWithBiometricAllowed() + mBiometricUnlockController.onBiometricAuthenticated(UserHandle.USER_CURRENT, + BiometricSourceType.FINGERPRINT, true /* isStrongBiometric */); + + verify(mKeyguardViewMediator).onWakeAndUnlocking(); + assertThat(mBiometricUnlockController.getMode()) + .isEqualTo(BiometricUnlockController.MODE_WAKE_AND_UNLOCK); + } + @Test public void onBiometricAuthenticated_whenFingerprint_notifyKeyguardAuthenticated() { when(mUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true);