From c63dddf273f6140382bb770a34deece674bd453a Mon Sep 17 00:00:00 2001 From: Ats Jenk Date: Thu, 18 May 2023 09:08:00 -0700 Subject: [PATCH] Add API to desktop mode to bring a desktop task to front Allows launcher to move a desktop task to top. Bug: 280468885 Test: atest DesktopTasksControllerTest Change-Id: I417612fa8d262352cf372895e059ac81a9771f8a --- .../wm/shell/desktopmode/DesktopModeController.java | 5 +++++ .../wm/shell/desktopmode/DesktopTasksController.kt | 12 ++++++++++++ .../android/wm/shell/desktopmode/IDesktopMode.aidl | 3 +++ .../shell/desktopmode/DesktopTasksControllerTest.kt | 12 ++++++++++++ 4 files changed, 32 insertions(+) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java index 1169af9306b02..7300765b46cad 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java @@ -499,6 +499,11 @@ public class DesktopModeController implements RemoteCallable controller.showDesktopApps(displayId)); } + @Override + public void showDesktopApp(int taskId) throws RemoteException { + // TODO + } + @Override public int getVisibleTaskCount(int displayId) throws RemoteException { int[] result = new int[1]; 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 de7d3adb0af31..df2deca75c29f 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 @@ -276,6 +276,11 @@ class DesktopTasksController( } } + /** Move a task to the front */ + fun moveTaskToFront(taskId: Int) { + shellTaskOrganizer.getRunningTaskInfo(taskId)?.let { task -> moveTaskToFront(task) } + } + /** Move a task to the front */ fun moveTaskToFront(taskInfo: RunningTaskInfo) { KtProtoLog.v( @@ -772,6 +777,13 @@ class DesktopTasksController( ) { c -> c.hideStashedDesktopApps(displayId) } } + override fun showDesktopApp(taskId: Int) { + ExecutorUtils.executeRemoteCallWithTaskPermission( + controller, + "showDesktopApp" + ) { c -> c.moveTaskToFront(taskId) } + } + override fun getVisibleTaskCount(displayId: Int): Int { val result = IntArray(1) ExecutorUtils.executeRemoteCallWithTaskPermission( diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopMode.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopMode.aidl index 05a6e33de37ae..ee3a080e7318f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopMode.aidl +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/IDesktopMode.aidl @@ -32,6 +32,9 @@ interface IDesktopMode { /** Hide apps that may be stashed */ void hideStashedDesktopApps(int displayId); + /** Bring task with the given id to front */ + oneway void showDesktopApp(int taskId); + /** Get count of visible desktop tasks on the given display */ int getVisibleTaskCount(int displayId); 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 9ce18db9492d0..e3dd449b7ea43 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 @@ -344,6 +344,18 @@ class DesktopTasksControllerTest : ShellTestCase() { } } + @Test + fun moveTaskToFront_postsWctWithReorderOp() { + val task1 = setUpFreeformTask() + val task2 = setUpFreeformTask() + + controller.moveTaskToFront(task1) + + val wct = getLatestWct(expectTransition = TRANSIT_TO_FRONT) + assertThat(wct.hierarchyOps).hasSize(1) + wct.assertReorderAt(index = 0, task1) + } + @Test fun moveToNextDisplay_noOtherDisplays() { whenever(rootTaskDisplayAreaOrganizer.displayIds).thenReturn(intArrayOf(DEFAULT_DISPLAY))