diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 3521ee33b7..be67136bf0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -33,6 +33,7 @@ import android.view.ViewConfiguration; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Utilities; +import com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView; import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.quickstep.AnimatedFloat; @@ -518,13 +519,40 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba */ public void setSystemGestureInProgress(boolean inProgress) { mIsSystemGestureInProgress = inProgress; - // Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress. - if (!mIsSystemGestureInProgress) { + if (mIsSystemGestureInProgress) { + return; + } + + // Only update the following flags when system gesture is not in progress. + maybeResetStashedInAppAllApps(hasAnyFlag(FLAG_STASHED_IN_APP_IME) == mIsImeShowing); + if (hasAnyFlag(FLAG_STASHED_IN_APP_IME) != mIsImeShowing) { updateStateForFlag(FLAG_STASHED_IN_APP_IME, mIsImeShowing); applyState(TASKBAR_STASH_DURATION_FOR_IME, getTaskbarStashStartDelayForIme()); } } + /** + * Reset stashed in all apps only if no system gesture is in progress. + *

+ * Otherwise, the reset should be deferred until after the gesture is finished. + * + * @see #setSystemGestureInProgress + */ + public void maybeResetStashedInAppAllApps() { + maybeResetStashedInAppAllApps(true); + } + + private void maybeResetStashedInAppAllApps(boolean applyState) { + if (mIsSystemGestureInProgress) { + return; + } + + updateStateForFlag(FLAG_STASHED_IN_APP_ALL_APPS, false); + if (applyState) { + applyState(TaskbarAllAppsSlideInView.DEFAULT_CLOSE_DURATION); + } + } + /** * When hiding the IME, delay the unstash animation to align with the end of the transition. */ diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java index 5d2d72af37..a37ebac2c3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java @@ -34,7 +34,7 @@ import java.util.Optional; public class TaskbarAllAppsSlideInView extends AbstractSlideInView implements Insettable, DeviceProfile.OnDeviceProfileChangeListener { static final int DEFAULT_OPEN_DURATION = 500; - static final int DEFAULT_CLOSE_DURATION = 200; + public static final int DEFAULT_CLOSE_DURATION = 200; private TaskbarAllAppsContainerView mAppsView; private OnCloseListener mOnCloseBeginListener; diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java index 32ebbe822e..f19b7de2f8 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java @@ -16,7 +16,6 @@ package com.android.launcher3.taskbar.allapps; import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IN_APP_ALL_APPS; -import static com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView.DEFAULT_CLOSE_DURATION; import static com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView.DEFAULT_OPEN_DURATION; import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT; @@ -86,9 +85,9 @@ final class TaskbarAllAppsViewController { mSlideInView.setOnCloseBeginListener(() -> { AbstractFloatingView.closeOpenContainer( mContext, AbstractFloatingView.TYPE_ACTION_POPUP); - mTaskbarStashController.updateStateForFlag( - FLAG_STASHED_IN_APP_ALL_APPS, false); - mTaskbarStashController.applyState(DEFAULT_CLOSE_DURATION); + // Post in case view is closing due to gesture navigation. If a gesture is in progress, + // wait to unstash until after the gesture is finished. + mSlideInView.post(mTaskbarStashController::maybeResetStashedInAppAllApps); }); } }