Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +27 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ class RootTaskDesksOrganizer( val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (!skipReorder) wct.reorder(root.token, /* onTop= */ true) updateLaunchRoot(wct, deskId, enabled = true) updateTaskMoveAllowed(wct, deskId, allowed = true) } override fun deactivateDesk( Loading @@ -218,6 +219,7 @@ class RootTaskDesksOrganizer( val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (!skipReorder) wct.reorder(root.taskInfo.token, /* onTop= */ false) updateLaunchRoot(wct, deskId, enabled = false) updateTaskMoveAllowed(wct, deskId, allowed = false) } private fun updateLaunchRoot(wct: WindowContainerTransaction, deskId: Int, enabled: Boolean) { Loading @@ -243,6 +245,29 @@ class RootTaskDesksOrganizer( } } private fun updateTaskMoveAllowed( wct: WindowContainerTransaction, deskId: Int, allowed: Boolean, ) { val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (root.isTaskMoveAllowed == allowed) { logD( "updateTaskMoveAllowed desk=%d Task move allowed already set to allowed=%b", deskId, allowed, ) return } root.isTaskMoveAllowed = allowed logD( "updateTaskMoveAllowed changing desk=%d Task move allowed to allowed=%b", deskId, allowed, ) wct.setIsTaskMoveAllowed(root.taskInfo.token, allowed) } override fun moveTaskToDesk( wct: WindowContainerTransaction, deskId: Int, Loading Loading @@ -622,6 +647,7 @@ class RootTaskDesksOrganizer( val children: MutableSet<Int> = mutableSetOf(), val users: MutableSet<Int> = mutableSetOf(), var isLaunchRootRequested: Boolean = false, var isTaskMoveAllowed: Boolean = false, ) { val token: WindowContainerToken = taskInfo.token } Loading Loading @@ -678,6 +704,7 @@ class RootTaskDesksOrganizer( pw.println("$innerPrefix #$deskId visible=${root.taskInfo.isVisible}") pw.println("$innerPrefix displayId=${root.taskInfo.displayId}") pw.println("$innerPrefix isLaunchRootRequested=${root.isLaunchRootRequested}") pw.println("$innerPrefix isTaskMoveAllowed=${root.isTaskMoveAllowed}") pw.println("$innerPrefix children=${root.children}") pw.println("$innerPrefix users=${root.users}") pw.println("$innerPrefix minimization root:") Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,14 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { } ) .isTrue() assertThat( wct.changes.any { change -> change.key == desk.deskRoot.token.asBinder() && (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) && change.value.isTaskMoveAllowed } ) .isTrue() } @Test Loading Loading @@ -645,6 +653,24 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { .isTrue() } @Test fun deactivateDesk_unsetsTaskMoveAllowed() = runTest { val wct = WindowContainerTransaction() val desk = createDeskSuspending() organizer.activateDesk(wct, desk.deskRoot.deskId) organizer.deactivateDesk(wct, desk.deskRoot.deskId) assertThat( wct.changes.any { change -> change.key == desk.deskRoot.token.asBinder() && (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) && !change.value.isTaskMoveAllowed } ) .isTrue() } @Test fun deactivateDesk_reordersRootToBack() = runTest { val wct = WindowContainerTransaction() Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +27 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ class RootTaskDesksOrganizer( val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (!skipReorder) wct.reorder(root.token, /* onTop= */ true) updateLaunchRoot(wct, deskId, enabled = true) updateTaskMoveAllowed(wct, deskId, allowed = true) } override fun deactivateDesk( Loading @@ -218,6 +219,7 @@ class RootTaskDesksOrganizer( val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (!skipReorder) wct.reorder(root.taskInfo.token, /* onTop= */ false) updateLaunchRoot(wct, deskId, enabled = false) updateTaskMoveAllowed(wct, deskId, allowed = false) } private fun updateLaunchRoot(wct: WindowContainerTransaction, deskId: Int, enabled: Boolean) { Loading @@ -243,6 +245,29 @@ class RootTaskDesksOrganizer( } } private fun updateTaskMoveAllowed( wct: WindowContainerTransaction, deskId: Int, allowed: Boolean, ) { val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" } if (root.isTaskMoveAllowed == allowed) { logD( "updateTaskMoveAllowed desk=%d Task move allowed already set to allowed=%b", deskId, allowed, ) return } root.isTaskMoveAllowed = allowed logD( "updateTaskMoveAllowed changing desk=%d Task move allowed to allowed=%b", deskId, allowed, ) wct.setIsTaskMoveAllowed(root.taskInfo.token, allowed) } override fun moveTaskToDesk( wct: WindowContainerTransaction, deskId: Int, Loading Loading @@ -622,6 +647,7 @@ class RootTaskDesksOrganizer( val children: MutableSet<Int> = mutableSetOf(), val users: MutableSet<Int> = mutableSetOf(), var isLaunchRootRequested: Boolean = false, var isTaskMoveAllowed: Boolean = false, ) { val token: WindowContainerToken = taskInfo.token } Loading Loading @@ -678,6 +704,7 @@ class RootTaskDesksOrganizer( pw.println("$innerPrefix #$deskId visible=${root.taskInfo.isVisible}") pw.println("$innerPrefix displayId=${root.taskInfo.displayId}") pw.println("$innerPrefix isLaunchRootRequested=${root.isLaunchRootRequested}") pw.println("$innerPrefix isTaskMoveAllowed=${root.isTaskMoveAllowed}") pw.println("$innerPrefix children=${root.children}") pw.println("$innerPrefix users=${root.users}") pw.println("$innerPrefix minimization root:") Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,14 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { } ) .isTrue() assertThat( wct.changes.any { change -> change.key == desk.deskRoot.token.asBinder() && (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) && change.value.isTaskMoveAllowed } ) .isTrue() } @Test Loading Loading @@ -645,6 +653,24 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { .isTrue() } @Test fun deactivateDesk_unsetsTaskMoveAllowed() = runTest { val wct = WindowContainerTransaction() val desk = createDeskSuspending() organizer.activateDesk(wct, desk.deskRoot.deskId) organizer.deactivateDesk(wct, desk.deskRoot.deskId) assertThat( wct.changes.any { change -> change.key == desk.deskRoot.token.asBinder() && (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) && !change.value.isTaskMoveAllowed } ) .isTrue() } @Test fun deactivateDesk_reordersRootToBack() = runTest { val wct = WindowContainerTransaction() Loading