From b6219b37cd8e289d97465138af076e14f2b8fcc2 Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 23 Nov 2021 09:30:01 -0500 Subject: [PATCH] Update swipe up from the locked shade behavior If the device has UDFPS enrolled, swiping up from the locked shade on keyguard brings the user back to the lock screen instead of showing the bouncer. We do this because the lock screen still has the UDFPS affordance for device entry. Users can additionally swipe up again if they want to use the input bouncer for device entry. Test: manual Fixes: 198231678 Change-Id: I3fcc754f0b2b8cab538c9f709f36f829b5049f08 --- .../keyguard/KeyguardHostViewController.java | 4 ++++ .../systemui/statusbar/phone/StatusBar.java | 16 ++++++++++------ .../phone/StatusBarKeyguardViewManager.java | 7 +++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java index 3ebd652b3467c..598325ce44f34 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java @@ -320,6 +320,10 @@ public class KeyguardHostViewController extends ViewController mKeyguardSecurityContainerController.showPrimarySecurityScreen(false); } + /** + * Fades and translates in/out the security screen. + * @param fraction amount of the screen that should show. + */ public void setExpansion(float fraction) { float alpha = MathUtils.map(KeyguardBouncer.ALPHA_EXPANSION_THRESHOLD, 1, 1, 0, fraction); mView.setAlpha(MathUtils.constrain(alpha, 0f, 1f)); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index e033c47259994..6239efc985dcd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2109,7 +2109,7 @@ public class StatusBar extends SystemUI implements mShadeController.runPostCollapseRunnables(); setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false); if (!mNotificationActivityStarter.isCollapsingToShowActivityOverLockscreen()) { - showBouncerIfKeyguard(); + showBouncerOrLockScreenIfKeyguard(); } else if (DEBUG) { Log.d(TAG, "Not showing bouncer due to activity showing over lockscreen"); } @@ -3315,13 +3315,17 @@ public class StatusBar extends SystemUI implements return false; } - private void showBouncerIfKeyguard() { + private void showBouncerOrLockScreenIfKeyguard() { if (!mKeyguardViewMediator.isHiding()) { - if (mState == StatusBarState.KEYGUARD - && !mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()) { + if (mState == StatusBarState.SHADE_LOCKED + && mKeyguardUpdateMonitor.isUdfpsEnrolled()) { + // shade is showing while locked on the keyguard, so go back to showing the + // lock screen where users can use the UDFPS affordance to enter the device + mStatusBarKeyguardViewManager.reset(true); + } else if ((mState == StatusBarState.KEYGUARD + && !mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()) + || mState == StatusBarState.SHADE_LOCKED) { mStatusBarKeyguardViewManager.showGenericBouncer(true /* scrimmed */); - } else if (mState == StatusBarState.SHADE_LOCKED) { - mStatusBarKeyguardViewManager.showBouncer(true /* scrimmed */); } } } 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 0d23d663c51c1..9944bf8498084 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -60,6 +60,7 @@ import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.RemoteInputController; +import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.ViewGroupFadeHelper; import com.android.systemui.statusbar.phone.KeyguardBouncer.BouncerExpansionCallback; @@ -337,6 +338,12 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb // • Full-screen user switcher is displayed. if (mNotificationPanelViewController.isUnlockHintRunning()) { mBouncer.setExpansion(KeyguardBouncer.EXPANSION_HIDDEN); + } else if (mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED + && mKeyguardUpdateManager.isUdfpsEnrolled()) { + // Don't expand to the bouncer. Instead transition back to the lock screen (see + // StatusBar#showBouncerOrLockScreenIfKeyguard) where the user can use the UDFPS + // affordance to enter the device (or swipe up to the input bouncer) + return; } else if (bouncerNeedsScrimming()) { mBouncer.setExpansion(KeyguardBouncer.EXPANSION_VISIBLE); } else if (mShowing) {