From e6816545b6e41723e594f498acec869a538d4ea9 Mon Sep 17 00:00:00 2001 From: Wen-Chien Wang Date: Wed, 7 May 2025 22:39:46 +0000 Subject: [PATCH] pin-shortcut: Check desktop state for the feature This feature aims to work only for desktop mode. Add a check to the desktop state when checking the aconfig feature flag. Bug: 375648361 Test: EXEMPT flag update Flag: com.android.window.flags.enable_pinning_app_with_context_menu Change-Id: I19eb17d756f17892637bd303464748b505c89190 --- .../android/launcher3/taskbar/PinToTaskbarShortcut.kt | 7 +++++++ .../launcher3/taskbar/TaskbarPopupController.java | 5 ++--- .../launcher3/taskbar/TaskbarRecentAppsController.kt | 11 +++++++---- .../launcher3/taskbar/TaskbarPopupControllerTest.kt | 6 ++++++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/PinToTaskbarShortcut.kt b/quickstep/src/com/android/launcher3/taskbar/PinToTaskbarShortcut.kt index da6932fc16..b5623cc10b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/PinToTaskbarShortcut.kt +++ b/quickstep/src/com/android/launcher3/taskbar/PinToTaskbarShortcut.kt @@ -28,6 +28,7 @@ import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.model.data.WorkspaceItemInfo import com.android.launcher3.popup.SystemShortcut import com.android.launcher3.views.ActivityContext +import com.android.window.flags.Flags.enablePinningAppWithContextMenu /** * A single menu item shortcut to allow users to pin an item to the taskbar and unpin an item from @@ -88,4 +89,10 @@ class PinToTaskbarShortcut( writer.addItemToDatabase(newInfo, CONTAINER_HOTSEAT, mItemInfo.screenId, cellX, cellY) } + + companion object { + fun isPinningAppWithContextMenuEnabled(context: TaskbarActivityContext): Boolean { + return enablePinningAppWithContextMenu() && context.isTaskbarShowingDesktopTasks + } + } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java index b92357bddc..413e96a884 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarPopupController.java @@ -19,7 +19,6 @@ import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_ALL_APP import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT; import static com.android.launcher3.model.data.AppInfo.COMPONENT_KEY_COMPARATOR; import static com.android.launcher3.util.SplitConfigurationOptions.getLogEventForPosition; -import static com.android.window.flags.Flags.enablePinningAppWithContextMenu; import android.content.Intent; import android.content.pm.LauncherApps; @@ -149,7 +148,7 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba ItemInfo itemInfo = null; if (icon.getTag() instanceof ItemInfo item && ShortcutUtil.supportsShortcuts(item)) { itemInfo = item; - } else if (enablePinningAppWithContextMenu() + } else if (PinToTaskbarShortcut.Companion.isPinningAppWithContextMenuEnabled(mContext) && icon.getTag() instanceof SingleTask task) { Task.TaskKey key = task.getTask().getKey(); AppInfo appInfo = getApp( @@ -174,7 +173,7 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba .collect(Collectors.toList()); // TODO(b/375648361): Revisit to see if this can be implemented within getSystemShortcuts(). - if (enablePinningAppWithContextMenu()) { + if (PinToTaskbarShortcut.Companion.isPinningAppWithContextMenuEnabled(mContext)) { SystemShortcut shortcut = createPinShortcut(context, itemInfo, icon); if (shortcut != null) { systemShortcuts.add(0, shortcut); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.kt index 4a1d4ed1ee..6e44bcd671 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.kt @@ -24,6 +24,7 @@ import com.android.launcher3.Flags.enableRecentsInTaskbar import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.model.data.TaskItemInfo import com.android.launcher3.model.data.WorkspaceItemInfo +import com.android.launcher3.taskbar.PinToTaskbarShortcut.Companion.isPinningAppWithContextMenuEnabled import com.android.launcher3.taskbar.TaskbarControllers.LoggableTaskbarController import com.android.launcher3.util.CancellableTask import com.android.quickstep.RecentsFilterState @@ -32,7 +33,6 @@ import com.android.quickstep.util.DesktopTask import com.android.quickstep.util.GroupTask import com.android.quickstep.util.SingleTask import com.android.systemui.shared.recents.model.Task -import com.android.window.flags.Flags.enablePinningAppWithContextMenu import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import java.io.PrintWriter @@ -41,8 +41,10 @@ import java.io.PrintWriter * - When in Fullscreen mode: show the N most recent Tasks * - When in Desktop Mode: show the currently running (open) Tasks */ -class TaskbarRecentAppsController(context: Context, private val recentsModel: RecentsModel) : - LoggableTaskbarController { +class TaskbarRecentAppsController( + private val context: Context, + private val recentsModel: RecentsModel, +) : LoggableTaskbarController { var canShowRunningApps = DesktopModeStatus.canEnterDesktopMode(context) && @@ -332,12 +334,13 @@ class TaskbarRecentAppsController(context: Context, private val recentsModel: Re if (Flags.enableMultiInstanceMenuTaskbar()) { val deduplicatedDesktopTasks = desktopTasks.distinctBy { Pair(it.task.key.packageName, it.task.key.userId) } + val activityContext = controllers.taskbarActivityContext shownTasks .filter { it is SingleTask && it.task.key.id in deduplicatedDesktopTasks.map { it.task.key.id } && - (!enablePinningAppWithContextMenu() || + (!isPinningAppWithContextMenuEnabled(activityContext) || shownHotseatItems.none { hotseatItem -> it.containsPackage( hotseatItem.targetPackage, diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarPopupControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarPopupControllerTest.kt index 10962518b0..f7a4f6a7b2 100644 --- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarPopupControllerTest.kt +++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarPopupControllerTest.kt @@ -26,6 +26,7 @@ import com.android.launcher3.Flags.FLAG_ENABLE_MULTI_INSTANCE_MENU_TASKBAR import com.android.launcher3.R import com.android.launcher3.model.data.AppInfo import com.android.launcher3.model.data.WorkspaceItemInfo +import com.android.launcher3.statehandlers.DesktopVisibilityController import com.android.launcher3.taskbar.TaskbarControllerTestUtil.runOnMainSync import com.android.launcher3.taskbar.TaskbarViewTestUtil.createHotseatWorkspaceItem import com.android.launcher3.taskbar.TaskbarViewTestUtil.createRecents @@ -41,6 +42,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.whenever @RunWith(LauncherMultivalentJUnit::class) @EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"]) @@ -57,6 +59,9 @@ class TaskbarPopupControllerTest { private val taskbarContext: TaskbarActivityContext get() = taskbarUnitTestRule.activityContext + private val desktopVisibilityController: DesktopVisibilityController + get() = DesktopVisibilityController.INSTANCE[context] + private lateinit var taskbarView: TaskbarView private lateinit var hotseatIcon: BubbleTextView private lateinit var recentTaskIcon: BubbleTextView @@ -97,6 +102,7 @@ class TaskbarPopupControllerTest { @Test @EnableFlags(FLAG_ENABLE_PINNING_APP_WITH_CONTEXT_MENU) fun showForIcon_recentTask() { + whenever(desktopVisibilityController.isInDesktopMode(context.displayId)).thenReturn(true) assertThat(hasPopupMenu()).isFalse() runOnMainSync { popupController.showForIcon(recentTaskIcon) } assertThat(hasPopupMenu()).isTrue()