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) {