diff options
| author | 2025-02-25 16:02:46 -0800 | |
|---|---|---|
| committer | 2025-02-25 16:02:46 -0800 | |
| commit | 98452ad0199528c9b8b4852ff7fa11c78c1f37ca (patch) | |
| tree | 882669241b7433fe5d4e1cce8c368e06b7229fa4 | |
| parent | 77346784832be14f5257052d5e58403f59453218 (diff) | |
| parent | 099de09029ef4b02a33aeff53462ab213247407a (diff) | |
Merge "Choose focused task by default with moveToNextDisplay" into main
5 files changed, 34 insertions, 11 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 48fadc02ff1f..79fbd32dafe6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -802,6 +802,7 @@ public abstract class WMShellModule { recentTasksController.orElse(null), interactionJankMonitor, mainHandler, + focusTransitionObserver, desktopModeEventLogger, desktopModeUiEventLogger, desktopWallpaperActivityTokenProvider, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt index 0cc8a6a5c1a3..aa507728739e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt @@ -16,14 +16,18 @@ package com.android.wm.shell.desktopmode +import android.app.ActivityTaskManager.INVALID_TASK_ID import android.window.DesktopExperienceFlags import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.UNKNOWN import com.android.wm.shell.sysui.ShellCommandHandler +import com.android.wm.shell.transition.FocusTransitionObserver import java.io.PrintWriter /** Handles the shell commands for the DesktopTasksController. */ -class DesktopModeShellCommandHandler(private val controller: DesktopTasksController) : - ShellCommandHandler.ShellCommandActionHandler { +class DesktopModeShellCommandHandler( + private val controller: DesktopTasksController, + private val focusTransitionObserver: FocusTransitionObserver, +) : ShellCommandHandler.ShellCommandActionHandler { override fun onShellCommand(args: Array<String>, pw: PrintWriter): Boolean = when (args[0]) { @@ -76,20 +80,21 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl } private fun runMoveToNextDisplay(args: Array<String>, pw: PrintWriter): Boolean { + var taskId = INVALID_TASK_ID if (args.size < 2) { - // First argument is the action name. - pw.println("Error: task id should be provided as arguments") - return false - } - - val taskId = + taskId = focusTransitionObserver.globallyFocusedTaskId + } else { try { - args[1].toInt() + taskId = args[1].toInt() } catch (e: NumberFormatException) { pw.println("Error: task id should be an integer") return false } - + } + if (taskId == INVALID_TASK_ID) { + pw.println("Error: no appropriate task found") + return false + } controller.moveToNextDisplay(taskId) return true } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 42d4b3357d03..644c5b0553b9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -138,6 +138,7 @@ import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellController import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.sysui.UserChangeListener +import com.android.wm.shell.transition.FocusTransitionObserver import com.android.wm.shell.transition.OneShotRemoteHandler import com.android.wm.shell.transition.Transitions import com.android.wm.shell.transition.Transitions.TransitionFinishCallback @@ -196,6 +197,7 @@ class DesktopTasksController( private val recentTasksController: RecentTasksController?, private val interactionJankMonitor: InteractionJankMonitor, @ShellMainThread private val handler: Handler, + private val focusTransitionObserver: FocusTransitionObserver, private val desktopModeEventLogger: DesktopModeEventLogger, private val desktopModeUiEventLogger: DesktopModeUiEventLogger, private val desktopWallpaperActivityTokenProvider: DesktopWallpaperActivityTokenProvider, @@ -217,7 +219,7 @@ class DesktopTasksController( private var visualIndicator: DesktopModeVisualIndicator? = null private var userId: Int private val desktopModeShellCommandHandler: DesktopModeShellCommandHandler = - DesktopModeShellCommandHandler(this) + DesktopModeShellCommandHandler(this, focusTransitionObserver) private val mOnAnimationFinishedCallback = { releaseVisualIndicator() } private lateinit var snapEventHandler: SnapEventHandler diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java index e04682a4b86f..f0f1ad05008b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java @@ -16,6 +16,7 @@ package com.android.wm.shell.transition; +import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CHANGE; @@ -216,6 +217,17 @@ public class FocusTransitionObserver { } /** + * Gets the globally focused task ID. + */ + public int getGloballyFocusedTaskId() { + if (!enableDisplayFocusInShellTransitions() || mFocusedDisplayId == INVALID_DISPLAY) { + return INVALID_TASK_ID; + } + final RunningTaskInfo globallyFocusedTask = mFocusedTaskOnDisplay.get(mFocusedDisplayId); + return globallyFocusedTask != null ? globallyFocusedTask.taskId : INVALID_TASK_ID; + } + + /** * Checks whether the given task has focused globally on the system. * (Note {@link RunningTaskInfo#isFocused} represents per-display focus.) */ diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt index f48c433f264f..8805071e34b1 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt @@ -145,6 +145,7 @@ import com.android.wm.shell.splitscreen.SplitScreenController import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.sysui.ShellController import com.android.wm.shell.sysui.ShellInit +import com.android.wm.shell.transition.FocusTransitionObserver import com.android.wm.shell.transition.OneShotRemoteHandler import com.android.wm.shell.transition.TestRemoteTransition import com.android.wm.shell.transition.Transitions @@ -239,6 +240,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Mock private lateinit var taskbarDesktopTaskListener: TaskbarDesktopTaskListener @Mock private lateinit var freeformTaskTransitionStarter: FreeformTaskTransitionStarter @Mock private lateinit var mockHandler: Handler + @Mock private lateinit var focusTransitionObserver: FocusTransitionObserver @Mock private lateinit var desktopModeEventLogger: DesktopModeEventLogger @Mock private lateinit var desktopModeUiEventLogger: DesktopModeUiEventLogger @Mock lateinit var persistentRepository: DesktopPersistentRepository @@ -423,6 +425,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() recentTasksController, mockInteractionJankMonitor, mockHandler, + focusTransitionObserver, desktopModeEventLogger, desktopModeUiEventLogger, desktopWallpaperActivityTokenProvider, |