diff --git a/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt b/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt index 032eb5151e..75ce7c3dd5 100644 --- a/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt +++ b/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt @@ -148,11 +148,19 @@ class ManageWindowsTaskbarShortcut( FLAG_AUTOHIDE_SUSPEND_MULTI_INSTANCE_MENU_OPEN, false, ) + controllers.taskbarPopupController.cleanUpMultiInstanceMenuReference() } } ) } + /** Closes the multi-instance menu if it has been initialized. */ + fun closeMultiInstanceMenu() { + if (::taskbarShortcutAllWindowsView.isInitialized) { + taskbarShortcutAllWindowsView.animateClose() + } + } + /** * A view container for displaying the window of open instances of an app * @@ -238,6 +246,7 @@ class ManageWindowsTaskbarShortcut( ) taskbarOverlayContext.dragLayer?.removeView(menuView.rootView) taskbarOverlayContext.dragLayer.removeTouchController(this) + controllers.taskbarPopupController.cleanUpMultiInstanceMenuReference() } /** TouchController implementations for closing the carousel when touched outside */ diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 8e2246bfdb..54270955b2 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -1422,6 +1422,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { Log.e(TAG, "Unknown type clicked: " + tag); } + mControllers.taskbarPopupController.maybeCloseMultiInstanceMenu(); if (shouldCloseAllOpenViews) { AbstractFloatingView.closeAllOpenViews(this); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java index abf35a21b9..afd317bbb5 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java @@ -86,6 +86,8 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba private TaskbarControllers mControllers; private boolean mAllowInitialSplitSelection; private AppInfo[] mAppInfosList; + private ManageWindowsTaskbarShortcut mManageWindowsTaskbarShortcut; + public TaskbarPopupController(TaskbarActivityContext context) { mContext = context; @@ -111,6 +113,19 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba mPopupDataProvider.setDeepShortcutMap(deepShortcutMapCopy); } + /** Closes the multi-instance menu if it is enabled and currently open. */ + public void maybeCloseMultiInstanceMenu() { + if (Flags.enableMultiInstanceMenuTaskbar() && mManageWindowsTaskbarShortcut != null) { + mManageWindowsTaskbarShortcut.closeMultiInstanceMenu(); + cleanUpMultiInstanceMenuReference(); + } + } + + /** Releases the reference to the Taskbar multi-instance menu */ + public void cleanUpMultiInstanceMenuReference() { + mManageWindowsTaskbarShortcut = null; + } + public void setAllowInitialSplitSelection(boolean allowInitialSplitSelection) { mAllowInitialSplitSelection = allowInitialSplitSelection; } @@ -206,6 +221,7 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba if (Flags.enableMultiInstanceMenuTaskbar() && DesktopModeStatus.canEnterDesktopMode(mContext) && !mControllers.taskbarStashController.isInOverview()) { + maybeCloseMultiInstanceMenu(); shortcuts.addAll(getMultiInstanceMenuOptions().toList()); } return shortcuts.stream(); @@ -325,8 +341,9 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba public SystemShortcut.Factory createManageWindowsShortcutFactory() { return (context, itemInfo, originalView) -> { if (shouldShowMultiInstanceOptions(itemInfo)) { - return new ManageWindowsTaskbarShortcut<>(context, itemInfo, originalView, - mControllers); + mManageWindowsTaskbarShortcut = new ManageWindowsTaskbarShortcut<>( + context, itemInfo, originalView, mControllers); + return mManageWindowsTaskbarShortcut; } return null; }; diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java index 07d86e4e78..ddbf3b7fc6 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java @@ -141,6 +141,7 @@ public final class TaskbarAllAppsController { if (isOpen()) { mSlideInView.close(true); } else { + mControllers.taskbarPopupController.maybeCloseMultiInstanceMenu(); show(true, showKeyboard); } }