From 80771ec5636dd5a4f95e06b1de31549341fb3ae3 Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Thu, 14 Jul 2022 14:02:05 +0000 Subject: [PATCH] Bouncer should dismiss if being tracked when face unlocked When the user is tracking the bouncer with their finger and a successful face unlock occurs, the bouncer should always be immediately dismissed. Prior to this, it was possible for the user to continue tracking the bouncer over the homescreen after unlock, leading to shade problems, including missing lock/udfps icons and lockscreen over homescreen/activity. The primary issue was BiometricUnlockController was returning MODE_NONE, and is now returning MODE_DISMISS_BOUNCER. Fixes: 237822716 Test: atest StatusBarKeyguardViewManagerTest Change-Id: I364d8e61a61138d79240b5baefed295493678063 --- .../systemui/keyguard/KeyguardViewMediator.java | 2 +- .../systemui/statusbar/phone/KeyguardBouncer.java | 4 ---- .../statusbar/phone/StatusBarKeyguardViewManager.java | 2 +- .../phone/StatusBarKeyguardViewManagerTest.java | 10 ++++++++++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index e54e22b9e3f76..59c8aa0f20ade 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -2692,7 +2692,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, /** Hides the surface behind the keyguard by re-showing the keyguard/activity lock screen. */ public void hideSurfaceBehindKeyguard() { mSurfaceBehindRemoteAnimationRequested = false; - + mKeyguardStateController.notifyKeyguardGoingAway(false); if (mShowing) { setShowingLocked(true, true); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index 918d6bf93151f..a9048002fb440 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -397,10 +397,6 @@ public class KeyguardBouncer { return mShowingSoon || mExpansion != EXPANSION_HIDDEN && mExpansion != EXPANSION_VISIBLE; } - public boolean getShowingSoon() { - return mShowingSoon; - } - /** * @return {@code true} when bouncer's pre-hide animation already started but isn't completely * hidden yet, {@code false} otherwise. 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 97439b8d017d4..63c5e61ac4e53 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -963,7 +963,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb @Override public boolean bouncerIsOrWillBeShowing() { - return isBouncerShowing() || mBouncer.getShowingSoon(); + return isBouncerShowing() || mBouncer.inTransit(); } public boolean isFullscreenBouncer() { 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 4f2abf263a9b3..cd081e526c80e 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 @@ -380,6 +380,16 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { verify(mAlternateAuthInterceptor).hideAlternateAuthBouncer(); } + @Test + public void testBouncerIsOrWillBeShowing_whenBouncerIsInTransit() { + when(mBouncer.isShowing()).thenReturn(false); + when(mBouncer.inTransit()).thenReturn(true); + + assertTrue( + "Is or will be showing should be true when bouncer is in transit", + mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()); + } + @Test public void testShowAltAuth_unlockingWithBiometricNotAllowed() { // GIVEN alt auth exists, unlocking with biometric isn't allowed