Close the multi instance menu when other things open

This change ensures that if open, the Taskbar multi instance menu will close when
another long press app menu is launched, when a folder is opened, or
when Taskbar all apps is opened.

Fix: 383510315
Test: Open Taskbar multi instance menu and ensure it closes when other
views are opening (Taskbar all apps, a folder, and app long press menu)
Flag: com.android.launcher3.enable_multi_instance_menu_taskbar

Change-Id: Id2d64c86a76978af8db56d3a083dc79a677a1a5d
This commit is contained in:
Saumya Prakash
2024-12-11 14:00:38 +00:00
parent 931a86396f
commit 54c6cf7c38
4 changed files with 30 additions and 2 deletions
@@ -86,6 +86,8 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba
private TaskbarControllers mControllers;
private boolean mAllowInitialSplitSelection;
private AppInfo[] mAppInfosList;
private ManageWindowsTaskbarShortcut<BaseTaskbarContext> 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<BaseTaskbarContext> 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;
};