Auto-stash taskbar when locking device

This greatly reduces the the jank of the taskbar being shown above the
lockscreen.

Before: http://shortn/_PhXhkWR73t
After: http://shortn/_MC3ZLGHp4o

Bug: 264604213
Test: manual (http://shortn/_ISEXThUFM2), tapl
Change-Id: Ib1c5dbaafd4d0e1d69fbc03d908632e0275c8a0b
This commit is contained in:
Mike Schneider
2023-03-22 14:26:25 +01:00
parent 906ad8b853
commit ba19f31669
3 changed files with 27 additions and 8 deletions
@@ -586,9 +586,12 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
// already stashed Taskbar.
boolean hotseatTopElement = mControllers.uiController.isHotseatIconOnTopWhenAligned()
|| !hasAnyFlag(changedFlags, FLAG_IN_APP);
// If transitioning between locked/unlocked device, do not play a stash animation.
boolean unLockedTransition = hasAnyFlag(changedFlags, FLAG_STASHED_DEVICE_LOCKED);
boolean skipStashAnimation = !hotseatTopElement || unLockedTransition;
// If transitioning to unlocked device, do not play a stash animation.
// Keep isUnlockTransition in sync with its counterpart in
// TaskbarLauncherStateController#onStateChangeApplied.
boolean isUnlockTransition = hasAnyFlag(changedFlags, FLAG_STASHED_DEVICE_LOCKED)
&& !hasAnyFlag(FLAG_STASHED_DEVICE_LOCKED);
boolean skipStashAnimation = !hotseatTopElement || isUnlockTransition;
if (isTransientTaskbar) {
createTransientAnimToIsStashed(mAnimator, isStashed, duration, animateBg, changedFlags,
@@ -911,8 +914,17 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
| SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED));
updateStateForFlag(FLAG_STASHED_SYSUI,
hasAnyFlag(systemUiStateFlags, SYSUI_STATE_SCREEN_PINNING));
updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED,
hasAnyFlag(systemUiStateFlags, MASK_ANY_SYSUI_LOCKED));
boolean isLocked = hasAnyFlag(systemUiStateFlags, MASK_ANY_SYSUI_LOCKED);
boolean wasLocked = hasAnyFlag(FLAG_STASHED_DEVICE_LOCKED);
updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, isLocked);
if (isLocked && !wasLocked && DisplayController.isTransientTaskbar(mActivity)) {
// Stash the transient taskbar when locking the device. This improves the transition
// to AoD (otherwise the taskbar stays a bit too long above the collapsing AoD scrim),
// and ensures the taskar state is reset when unlocking the device afterwards.
updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, true);
}
// Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress.
mIsImeShowing = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_IME_SHOWING);