diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index a4aeae9c0307f..875b7e59d15aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -410,7 +410,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb * dragging it and translation should be deferred {@see KeyguardBouncer#show(boolean, boolean)} */ public void showGenericBouncer(boolean scrimmed) { - if (mAlternateAuthInterceptor != null) { + if (shouldShowAltAuth()) { updateAlternateAuthShowing(mAlternateAuthInterceptor.showAlternateAuthBouncer()); return; } @@ -418,6 +418,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb showBouncer(scrimmed); } + private boolean shouldShowAltAuth() { + return mAlternateAuthInterceptor != null + && mKeyguardUpdateManager.isUnlockingWithBiometricAllowed(true); + } + /** * Hides the input bouncer (pin/password/pattern). */ @@ -473,7 +478,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb // If there is an an alternate auth interceptor (like the UDFPS), show that one instead // of the bouncer. - if (mAlternateAuthInterceptor != null) { + if (shouldShowAltAuth()) { if (!afterKeyguardGone) { mBouncer.setDismissAction(mAfterKeyguardGoneAction, mKeyguardGoneCancelAction); mAfterKeyguardGoneAction = null; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index cbaa460d711bc..5d80bca03e033 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -374,6 +374,39 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { verify(mAlternateAuthInterceptor).hideAlternateAuthBouncer(); } + @Test + public void testShowAltAuth_unlockingWithBiometricNotAllowed() { + // GIVEN alt auth exists, unlocking with biometric isn't allowed + mStatusBarKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); + when(mBouncer.isShowing()).thenReturn(false); + when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())) + .thenReturn(false); + + // WHEN showGenericBouncer is called + final boolean scrimmed = true; + mStatusBarKeyguardViewManager.showGenericBouncer(scrimmed); + + // THEN regular bouncer is shown + verify(mBouncer).show(anyBoolean(), eq(scrimmed)); + verify(mAlternateAuthInterceptor, never()).showAlternateAuthBouncer(); + } + + @Test + public void testShowAltAuth_unlockingWithBiometricAllowed() { + // GIVEN alt auth exists, unlocking with biometric is allowed + mStatusBarKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); + when(mBouncer.isShowing()).thenReturn(false); + when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())) + .thenReturn(true); + + // WHEN showGenericBouncer is called + mStatusBarKeyguardViewManager.showGenericBouncer(true); + + // THEN alt auth bouncer is shown + verify(mAlternateAuthInterceptor).showAlternateAuthBouncer(); + verify(mBouncer, never()).show(anyBoolean(), anyBoolean()); + } + @Test public void testUpdateResources_delegatesToBouncer() { mStatusBarKeyguardViewManager.updateResources();