Allow recent task to have long-press menu
Bug: 375648361
Bug: 344657629
Test: Manual, Recording uploaded to buganizer
Flag: com.android.launcher3.enable_pinning_app_with_context_menu
Change-Id: If496c56a3fe47905a3e9947407f51077f180d5a2
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
index e81563e..6ab71e9 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java
@@ -52,6 +52,7 @@
import com.android.launcher3.views.ActivityContext;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.util.LogUtils;
+import com.android.quickstep.util.SingleTask;
import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
@@ -140,22 +141,27 @@
icon.clearFocus();
return null;
}
- // TODO(b/344657629) support GroupTask as well, for Taskbar Recent apps
- if (!(icon.getTag() instanceof ItemInfo item) || !ShortcutUtil.supportsShortcuts(item)) {
+
+ ItemInfo itemInfo;
+ if (icon.getTag() instanceof ItemInfo item && ShortcutUtil.supportsShortcuts(item)) {
+ itemInfo = item;
+ } else if (icon.getTag() instanceof SingleTask task) {
+ itemInfo = SingleTask.Companion.createTaskItemInfo(task);
+ } else {
return null;
}
PopupContainerWithArrow<BaseTaskbarContext> container;
- int deepShortcutCount = mPopupDataProvider.getShortcutCountForItem(item);
+ int deepShortcutCount = mPopupDataProvider.getShortcutCountForItem(itemInfo);
// TODO(b/198438631): add support for INSTALL shortcut factory
List<SystemShortcut> systemShortcuts = getSystemShortcuts()
- .map(s -> s.getShortcut(context, item, icon))
+ .map(s -> s.getShortcut(context, itemInfo, icon))
.filter(Objects::nonNull)
.collect(Collectors.toList());
// TODO(b/375648361): Revisit to see if this can be implemented within getSystemShortcuts().
if (Flags.enablePinningAppWithContextMenu()) {
- SystemShortcut shortcut = createPinShortcut(context, item, icon);
+ SystemShortcut shortcut = createPinShortcut(context, itemInfo, icon);
if (shortcut != null) {
systemShortcuts.add(0, shortcut);
}
@@ -163,7 +169,7 @@
container = (PopupContainerWithArrow) context.getLayoutInflater().inflate(
R.layout.popup_container, context.getDragLayer(), false);
- container.populateAndShowRows(icon, deepShortcutCount, systemShortcuts);
+ container.populateAndShowRows(icon, itemInfo, deepShortcutCount, systemShortcuts);
// TODO (b/198438631): configure for taskbar/context
container.setPopupItemDragHandler(new TaskbarPopupItemDragHandler());
diff --git a/quickstep/src/com/android/quickstep/util/GroupTask.kt b/quickstep/src/com/android/quickstep/util/GroupTask.kt
index 49c37dc..add8821 100644
--- a/quickstep/src/com/android/quickstep/util/GroupTask.kt
+++ b/quickstep/src/com/android/quickstep/util/GroupTask.kt
@@ -15,6 +15,9 @@
*/
package com.android.quickstep.util
+import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_TASK
+import com.android.launcher3.model.data.TaskItemInfo
+import com.android.launcher3.model.data.WorkspaceItemInfo
import com.android.launcher3.util.SplitConfigurationOptions
import com.android.quickstep.views.TaskViewType
import com.android.systemui.shared.recents.model.Task
@@ -68,6 +71,21 @@
if (o !is SingleTask) return false
return super.equals(o)
}
+
+ companion object {
+ /** Creates a [TaskItemInfo] using the information of the SingleTask */
+ fun createTaskItemInfo(task: SingleTask): TaskItemInfo {
+ // TODO: b/344657629 - Support GroupTask in addition to SingleTask.
+ val wii =
+ WorkspaceItemInfo().apply {
+ title = task.task.title
+ intent = task.task.key.baseIntent
+ itemType = ITEM_TYPE_TASK
+ contentDescription = task.task.titleDescription
+ }
+ return TaskItemInfo(task.task.key.id, wii)
+ }
+ }
}
/**
diff --git a/src/com/android/launcher3/model/data/TaskItemInfo.kt b/src/com/android/launcher3/model/data/TaskItemInfo.kt
index fc1cd4d..8b72835 100644
--- a/src/com/android/launcher3/model/data/TaskItemInfo.kt
+++ b/src/com/android/launcher3/model/data/TaskItemInfo.kt
@@ -17,8 +17,7 @@
package com.android.launcher3.model.data
/**
- * Temporary class holding a Task ID to allow us to reference a Task when clicking a hotseat item.
- *
- * TODO(b/315344726): Remove this class when we have proper Taskbar support for multi-instance apps
+ * A Task info class holding a Task ID to allow us to reference a Task when clicking a hotseat item.
+ * This is also used to help identify the shortcuts shown in the long-press menu.
*/
class TaskItemInfo(val taskId: Int, itemInfo: WorkspaceItemInfo) : WorkspaceItemInfo(itemInfo)
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index e52ca6d..aad1400 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -234,6 +234,20 @@
*/
public void populateAndShowRows(final BubbleTextView originalIcon,
int deepShortcutCount, List<SystemShortcut> systemShortcuts) {
+ populateAndShowRows(originalIcon, (ItemInfo) originalIcon.getTag(), deepShortcutCount,
+ systemShortcuts);
+ }
+
+ /**
+ * Populate and show shortcuts for the Launcher U app shortcut design.
+ * Will inflate the container and shortcut View instances for the popup container.
+ * @param originalIcon App icon that the popup is shown for
+ * @param itemInfo The info that is used to load app shortcuts
+ * @param deepShortcutCount Number of DeepShortcutView instances to add to container
+ * @param systemShortcuts List of SystemShortcuts to add to container
+ */
+ public void populateAndShowRows(final BubbleTextView originalIcon, ItemInfo itemInfo,
+ int deepShortcutCount, List<SystemShortcut> systemShortcuts) {
mOriginalIcon = originalIcon;
mContainerWidth = getResources().getDimensionPixelSize(R.dimen.bg_popup_item_width);
@@ -246,7 +260,7 @@
R.layout.system_shortcut);
}
show();
- loadAppShortcuts((ItemInfo) originalIcon.getTag());
+ loadAppShortcuts(itemInfo);
}
/**