From 68ca974330c9b8701a5b726cf57deeb8106df8fd Mon Sep 17 00:00:00 2001 From: Jagrut Desai Date: Fri, 16 Jun 2023 15:42:08 -0700 Subject: [PATCH] Suspend immersive mode autohide while pending transient taskbar timeout Test: open Youtube fullscreen video, swipe up on taskbar; ensure taskbar autostashes before immersive mode autohides Fixes: 260765455 Flag: none Change-Id: Ic579a20c60949e12ffc7f9548eded52fbdb06e0c --- .../TaskbarAutohideSuspendController.java | 23 +++++++++++++++---- .../taskbar/TaskbarStashController.java | 12 +++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendController.java index 2517ff671c..70999e7131 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendController.java @@ -41,8 +41,10 @@ public class TaskbarAutohideSuspendController implements public static final int FLAG_AUTOHIDE_SUSPEND_TOUCHING = 1 << 2; // Taskbar EDU overlay is open above the Taskbar. */ public static final int FLAG_AUTOHIDE_SUSPEND_EDU_OPEN = 1 << 3; - // Taskbar in immersive mode in overview + // Taskbar is in immersive mode in overview public static final int FLAG_AUTOHIDE_SUSPEND_IN_LAUNCHER = 1 << 4; + // Transient Taskbar is temporarily unstashed (pending a timeout). + public static final int FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR = 1 << 5; @IntDef(flag = true, value = { FLAG_AUTOHIDE_SUSPEND_FULLSCREEN, @@ -50,6 +52,7 @@ public class TaskbarAutohideSuspendController implements FLAG_AUTOHIDE_SUSPEND_TOUCHING, FLAG_AUTOHIDE_SUSPEND_EDU_OPEN, FLAG_AUTOHIDE_SUSPEND_IN_LAUNCHER, + FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR, }) @Retention(RetentionPolicy.SOURCE) public @interface AutohideSuspendFlag {} @@ -85,20 +88,30 @@ public class TaskbarAutohideSuspendController implements boolean isSuspended = isSuspended(); mSystemUiProxy.notifyTaskbarAutohideSuspend(isSuspended); - mActivity.onTransientAutohideSuspendFlagChanged(isSuspended); + mActivity.onTransientAutohideSuspendFlagChanged(isTransientTaskbarStashingSuspended()); } /** * Returns true iff taskbar autohide is currently suspended. */ - public boolean isSuspended() { + private boolean isSuspended() { return mAutohideSuspendFlags != 0; } - public boolean isSuspendedForTransientTaskbarInOverview() { + /** + * Returns whether Transient Taskbar should avoid auto-stashing in Launcher(Overview). + */ + public boolean isSuspendedForTransientTaskbarInLauncher() { return (mAutohideSuspendFlags & FLAG_AUTOHIDE_SUSPEND_IN_LAUNCHER) != 0; } + /** + * Returns whether Transient Taskbar should avoid auto-stashing. + */ + public boolean isTransientTaskbarStashingSuspended() { + return (mAutohideSuspendFlags & ~FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR) != 0; + } + @Override public void dumpLogs(String prefix, PrintWriter pw) { pw.println(prefix + "TaskbarAutohideSuspendController:"); @@ -115,6 +128,8 @@ public class TaskbarAutohideSuspendController implements appendFlag(str, flags, FLAG_AUTOHIDE_SUSPEND_EDU_OPEN, "FLAG_AUTOHIDE_SUSPEND_EDU_OPEN"); appendFlag(str, flags, FLAG_AUTOHIDE_SUSPEND_IN_LAUNCHER, "FLAG_AUTOHIDE_SUSPEND_IN_LAUNCHER"); + appendFlag(str, flags, FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR, + "FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR"); return str.toString(); } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 9c00a026ea..daf9c47eb0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -511,9 +511,12 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba return; } - if (stash && mControllers.taskbarAutohideSuspendController.isSuspended() + if ( + stash && !mControllers.taskbarAutohideSuspendController - .isSuspendedForTransientTaskbarInOverview()) { + .isSuspendedForTransientTaskbarInLauncher() + && mControllers.taskbarAutohideSuspendController + .isTransientTaskbarStashingSuspended()) { // Avoid stashing if autohide is currently suspended. return; } @@ -1046,6 +1049,9 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba mActivity.getStatsLogManager().logger().log(hasAnyFlag(FLAG_STASHED_IN_APP_AUTO) ? LAUNCHER_TRANSIENT_TASKBAR_HIDE : LAUNCHER_TRANSIENT_TASKBAR_SHOW); + mControllers.taskbarAutohideSuspendController.updateFlag( + TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_TRANSIENT_TASKBAR, + !hasAnyFlag(FLAG_STASHED_IN_APP_AUTO)); } } @@ -1138,7 +1144,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba } private void onTaskbarTimeout(Alarm alarm) { - if (mControllers.taskbarAutohideSuspendController.isSuspended()) { + if (mControllers.taskbarAutohideSuspendController.isTransientTaskbarStashingSuspended()) { return; } updateAndAnimateTransientTaskbar(true);