From fa696568e5c4d01adf977ccaee6e4c8b05642893 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Thu, 4 Apr 2024 21:46:12 +0000 Subject: [PATCH] Unstash taskbar due to IME immediately when system gesture starts This is reversing a previous change from a few years ago (ag/16325264) because we now clip the recent apps on the bottom during gesture nav, whereas before we left them unclipped until you swiped up. Flag: none Fixes: 305977350 Test: verified visuals manually in persistent, transient, and 3 button nav; also tested interactions with All Apps Change-Id: Ib3823a9bd9aebf923ad481c010c7e8544bcb6a4d (cherry picked from commit a6b29968a4482c17226781e7e76bcc531c71dfea) --- .../taskbar/TaskbarStashController.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 3d584642b9..689a1ec9b1 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -890,17 +890,11 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba } /** - * Should be called when a system gesture starts and settles, so we can defer updating - * FLAG_STASHED_IN_APP_IME until after the gesture transition completes. + * Should be called when a system gesture starts and settles, so we can remove + * FLAG_STASHED_IN_APP_IME while the gesture is in progress. */ public void setSystemGestureInProgress(boolean inProgress) { mIsSystemGestureInProgress = inProgress; - if (mIsSystemGestureInProgress) { - return; - } - - // Only update the following flags when system gesture is not in progress. - updateStateForFlag(FLAG_STASHED_IN_TASKBAR_ALL_APPS, false); setStashedImeState(); } @@ -952,12 +946,9 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba && !hasAnyFlag(systemUiStateFlags, SYSUI_STATE_STATUS_BAR_KEYGUARD_GOING_AWAY); updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, isLocked); - // Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress. mIsImeShowing = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_IME_SHOWING); mIsImeSwitcherShowing = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_IME_SWITCHER_SHOWING); - - if (!mIsSystemGestureInProgress) { - updateStateForFlag(FLAG_STASHED_IN_APP_IME, shouldStashForIme()); + if (updateStateForFlag(FLAG_STASHED_IN_APP_IME, shouldStashForIme())) { animDuration = TASKBAR_STASH_DURATION_FOR_IME; startDelay = getTaskbarStashStartDelayForIme(); } @@ -970,7 +961,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba * *

Do not stash if in small screen, with 3 button nav, and in landscape (or seascape). *

Do not stash if taskbar is transient. - *

Do not stash if hardware keyboard is attached and taskbar is pinned and IME is docked + *

Do not stash if hardware keyboard is attached and taskbar is pinned and IME is docked. + *

Do not stash if a system gesture is started. */ private boolean shouldStashForIme() { if (DisplayController.isTransientTaskbar(mActivity)) { @@ -996,6 +988,11 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba return false; } + // Do not stash if a gesture started. + if (mIsSystemGestureInProgress) { + return false; + } + return mIsImeShowing || mIsImeSwitcherShowing; } @@ -1007,13 +1004,16 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba * @param flag The flag to update. * @param enabled Whether to enable the flag: True will cause the task bar to be stashed / * unstashed. + * @return Whether the flag state changed. */ - public void updateStateForFlag(int flag, boolean enabled) { + public boolean updateStateForFlag(int flag, boolean enabled) { + int oldState = mState; if (enabled) { mState |= flag; } else { mState &= ~flag; } + return mState != oldState; } /**