Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ class RootTaskDesksOrganizer( mutableListOf<CreateDeskMinimizationRootRequest>() @VisibleForTesting val deskMinimizationRootsByDeskId: MutableMap<Int, DeskMinimizationRoot> = mutableMapOf() private val removeDeskRootRequests = mutableSetOf<Int>() private var onTaskInfoChangedListener: ((RunningTaskInfo) -> Unit)? = null init { Loading @@ -80,6 +81,7 @@ class RootTaskDesksOrganizer( .valueIterator() .asSequence() .filterNot { desk -> userId in desk.users } .filterNot { desk -> desk.deskId in removeDeskRootRequests } .firstOrNull() if (unassignedDesk != null) { unassignedDesk.users.add(userId) Loading Loading @@ -112,6 +114,7 @@ class RootTaskDesksOrganizer( if (deskRoot.users.isEmpty()) { // No longer in use by any users, remove it completely. logD("removeDesk %d is no longer used by any users, removing it completely", deskId) removeDeskRootRequests.add(deskId) wct.removeRootTask(deskRoot.token) deskMinimizationRootsByDeskId[deskId]?.let { root -> wct.removeRootTask(root.token) } } Loading Loading @@ -390,6 +393,7 @@ class RootTaskDesksOrganizer( val displayId = deskRoot.taskInfo.displayId logV("Desk #$deskId vanished from display #$displayId") deskRootsByDeskId.remove(deskId) removeDeskRootRequests.remove(deskId) return } val deskMinimizationRoot = Loading Loading @@ -530,6 +534,8 @@ class RootTaskDesksOrganizer( pw.println( "${innerPrefix}launchAdjacentEnabled=" + launchAdjacentController.launchAdjacentEnabled ) pw.println("${innerPrefix}createDeskRootRequests=$createDeskRootRequests") pw.println("${innerPrefix}removeDeskRootRequests=$removeDeskRootRequests") pw.println("${innerPrefix}Desk Roots:") deskRootsByDeskId.forEach { deskId, root -> val minimizationRoot = deskMinimizationRootsByDeskId[deskId] Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +12 −3 Original line number Diff line number Diff line Loading @@ -92,10 +92,19 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { fun testCreateDesk_rootExistsForOtherUser_reusesRoot() = runTest { val desk = createDeskSuspending(userId = PRIMARY_USER_ID) val deskId = organizer.createDeskSuspending(displayId = DEFAULT_DISPLAY, userId = SECONDARY_USER_ID) val desk2 = createDeskSuspending(userId = SECONDARY_USER_ID) assertThat(deskId).isEqualTo(desk.deskRoot.deskId) assertThat(desk2.deskRoot.deskId).isEqualTo(desk.deskRoot.deskId) } @Test fun testCreateDesk_rootExistsForOtherUser_pendingDeletion_doesNotReuseRoot() = runTest { val desk = createDeskSuspending(userId = PRIMARY_USER_ID) organizer.removeDesk(WindowContainerTransaction(), desk.deskRoot.deskId, PRIMARY_USER_ID) val desk2 = createDeskSuspending(userId = SECONDARY_USER_ID) assertThat(desk2.deskRoot.deskId).isNotEqualTo(desk.deskRoot.deskId) } @Test Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizer.kt +6 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ class RootTaskDesksOrganizer( mutableListOf<CreateDeskMinimizationRootRequest>() @VisibleForTesting val deskMinimizationRootsByDeskId: MutableMap<Int, DeskMinimizationRoot> = mutableMapOf() private val removeDeskRootRequests = mutableSetOf<Int>() private var onTaskInfoChangedListener: ((RunningTaskInfo) -> Unit)? = null init { Loading @@ -80,6 +81,7 @@ class RootTaskDesksOrganizer( .valueIterator() .asSequence() .filterNot { desk -> userId in desk.users } .filterNot { desk -> desk.deskId in removeDeskRootRequests } .firstOrNull() if (unassignedDesk != null) { unassignedDesk.users.add(userId) Loading Loading @@ -112,6 +114,7 @@ class RootTaskDesksOrganizer( if (deskRoot.users.isEmpty()) { // No longer in use by any users, remove it completely. logD("removeDesk %d is no longer used by any users, removing it completely", deskId) removeDeskRootRequests.add(deskId) wct.removeRootTask(deskRoot.token) deskMinimizationRootsByDeskId[deskId]?.let { root -> wct.removeRootTask(root.token) } } Loading Loading @@ -390,6 +393,7 @@ class RootTaskDesksOrganizer( val displayId = deskRoot.taskInfo.displayId logV("Desk #$deskId vanished from display #$displayId") deskRootsByDeskId.remove(deskId) removeDeskRootRequests.remove(deskId) return } val deskMinimizationRoot = Loading Loading @@ -530,6 +534,8 @@ class RootTaskDesksOrganizer( pw.println( "${innerPrefix}launchAdjacentEnabled=" + launchAdjacentController.launchAdjacentEnabled ) pw.println("${innerPrefix}createDeskRootRequests=$createDeskRootRequests") pw.println("${innerPrefix}removeDeskRootRequests=$removeDeskRootRequests") pw.println("${innerPrefix}Desk Roots:") deskRootsByDeskId.forEach { deskId, root -> val minimizationRoot = deskMinimizationRootsByDeskId[deskId] Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/multidesks/RootTaskDesksOrganizerTest.kt +12 −3 Original line number Diff line number Diff line Loading @@ -92,10 +92,19 @@ class RootTaskDesksOrganizerTest : ShellTestCase() { fun testCreateDesk_rootExistsForOtherUser_reusesRoot() = runTest { val desk = createDeskSuspending(userId = PRIMARY_USER_ID) val deskId = organizer.createDeskSuspending(displayId = DEFAULT_DISPLAY, userId = SECONDARY_USER_ID) val desk2 = createDeskSuspending(userId = SECONDARY_USER_ID) assertThat(deskId).isEqualTo(desk.deskRoot.deskId) assertThat(desk2.deskRoot.deskId).isEqualTo(desk.deskRoot.deskId) } @Test fun testCreateDesk_rootExistsForOtherUser_pendingDeletion_doesNotReuseRoot() = runTest { val desk = createDeskSuspending(userId = PRIMARY_USER_ID) organizer.removeDesk(WindowContainerTransaction(), desk.deskRoot.deskId, PRIMARY_USER_ID) val desk2 = createDeskSuspending(userId = SECONDARY_USER_ID) assertThat(desk2.deskRoot.deskId).isNotEqualTo(desk.deskRoot.deskId) } @Test Loading