From e805f2b12fd63d8838a07009593d679d155d1152 Mon Sep 17 00:00:00 2001 From: Beverly Date: Mon, 13 Dec 2021 13:13:30 -0500 Subject: [PATCH] Only show UDFPS bouncer if it can be used to auth If UDFPS cannot be used to enter the device (ie: primary auth is required to enter the device), we should directly show the pin/pattern/password bouncer. Test: manual, atest StatusBarKeyguardViewManagerTest Fixes: 210142999 Change-Id: I2b09d6d675a494a4c97796f76f27bf0b8b48a07c --- .../phone/StatusBarKeyguardViewManager.java | 9 +++-- .../StatusBarKeyguardViewManagerTest.java | 33 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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 b84e6e6f37ccd..e7889286d1953 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -416,7 +416,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; } @@ -424,6 +424,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). */ @@ -479,7 +484,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 c5bdfed6082bb..cc59b6c96fbc1 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 @@ -388,6 +388,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();