Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/data/DesktopRepository.kt +9 −5 Original line number Diff line number Diff line Loading @@ -278,15 +278,19 @@ class DesktopRepository( /** Update the data to reflect a desk changing displays. */ fun onDeskDisplayChanged(deskId: Int, newDisplayId: Int, newUniqueDisplayId: String?) { logD( "onDeskDisplayChanged for deskId=%d, newDisplayId=%d, and newUniqueDisplayId=%s", deskId, newDisplayId, newUniqueDisplayId, ) val couldCreateDesk = canCreateDesks() val desk = desktopData.getDesk(deskId)?.deepCopy() ?: error("Expected to find desk with id: $deskId") desk.displayId = newDisplayId desk.uniqueDisplayId = newUniqueDisplayId // TODO: b/412484513 - consider de-duping unnecessary updates to listeners, such as the one // made here by |removeDesk| that will be reverted at the end of this method. removeDesk(deskId) removeDesk(deskId = deskId, checkCanCreateDesksChanged = false) desktopData.addDesk(newDisplayId, desk) val canCreateDesk = canCreateDesks() deskChangeListeners.forEach { (listener, executor) -> Loading Loading @@ -1084,7 +1088,7 @@ class DesktopRepository( } /** Removes the given desk and returns the active tasks in that desk. */ fun removeDesk(deskId: Int): Set<Int> { fun removeDesk(deskId: Int, checkCanCreateDesksChanged: Boolean = true): Set<Int> { logD("removeDesk %d", deskId) val couldCreateDesks = canCreateDesks() val desk = Loading @@ -1107,7 +1111,7 @@ class DesktopRepository( ) } listener.onDeskRemoved(displayId = desk.displayId, deskId = desk.deskId) if (couldCreateDesks != canCreateDesks) { if (checkCanCreateDesksChanged && couldCreateDesks != canCreateDesks) { listener.onCanCreateDesksChanged(canCreateDesks) } } Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/DesksTransitionObserver.kt +22 −14 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ class DesksTransitionObserver( deskTransition.runOnTransitEnd?.invoke() } is DeskTransition.DeactivateDesk -> handleDeactivateDeskTransition(info, deskTransition) is DeskTransition.ChangeDeskDisplay -> handleChangeDeskDisplay(info, deskTransition) is DeskTransition.ChangeDeskDisplay -> handleChangeDeskDisplay(deskTransition) is DeskTransition.RemoveDisplay -> handleRemoveDisplay(deskTransition) is DeskTransition.AddTaskToDesk -> handleAddTaskToDesk(deskTransition) } Loading Loading @@ -234,14 +234,9 @@ class DesksTransitionObserver( desktopRepository.setDeskInactive(deskId = deskTransition.deskId) } private fun handleChangeDeskDisplay( info: TransitionInfo, deskTransition: DeskTransition.ChangeDeskDisplay, ) { private fun handleChangeDeskDisplay(deskTransition: DeskTransition.ChangeDeskDisplay) { logD("handleChangeDeskDisplay: %s", deskTransition) val deskId = deskTransition.deskId val deskChange = info.changes.find { change -> desksOrganizer.isDeskChange(change, deskId) } if (deskChange != null) { desktopUserRepositories.getRepositoriesWithDeskId(deskId).forEach { desktopRepository -> desktopRepository.onDeskDisplayChanged( deskId, Loading @@ -250,7 +245,6 @@ class DesksTransitionObserver( ) } } } private fun handleRemoveDisplay(deskTransition: DeskTransition.RemoveDisplay) { logD("handleRemoveDisplay: %s", deskTransition) Loading Loading @@ -498,6 +492,20 @@ class DesksTransitionObserver( } } change.isToTop() -> { // Do not handle independent desk activations when a desk is pending a move to // this display. The activation will be handled when that transition is // processed. if ( deskTransitions.values.any { transitionsForBinder -> transitionsForBinder.any { transition -> transition is DeskTransition.ChangeDeskDisplay && transition.displayId == displayId } } ) { logD("Pending display change found; skipping.") continue } val repository = desktopUserRepositories.getProfile(changeUserId) logD( "desk=%d of user=%d moved to front, " + Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/data/DesktopRepository.kt +9 −5 Original line number Diff line number Diff line Loading @@ -278,15 +278,19 @@ class DesktopRepository( /** Update the data to reflect a desk changing displays. */ fun onDeskDisplayChanged(deskId: Int, newDisplayId: Int, newUniqueDisplayId: String?) { logD( "onDeskDisplayChanged for deskId=%d, newDisplayId=%d, and newUniqueDisplayId=%s", deskId, newDisplayId, newUniqueDisplayId, ) val couldCreateDesk = canCreateDesks() val desk = desktopData.getDesk(deskId)?.deepCopy() ?: error("Expected to find desk with id: $deskId") desk.displayId = newDisplayId desk.uniqueDisplayId = newUniqueDisplayId // TODO: b/412484513 - consider de-duping unnecessary updates to listeners, such as the one // made here by |removeDesk| that will be reverted at the end of this method. removeDesk(deskId) removeDesk(deskId = deskId, checkCanCreateDesksChanged = false) desktopData.addDesk(newDisplayId, desk) val canCreateDesk = canCreateDesks() deskChangeListeners.forEach { (listener, executor) -> Loading Loading @@ -1084,7 +1088,7 @@ class DesktopRepository( } /** Removes the given desk and returns the active tasks in that desk. */ fun removeDesk(deskId: Int): Set<Int> { fun removeDesk(deskId: Int, checkCanCreateDesksChanged: Boolean = true): Set<Int> { logD("removeDesk %d", deskId) val couldCreateDesks = canCreateDesks() val desk = Loading @@ -1107,7 +1111,7 @@ class DesktopRepository( ) } listener.onDeskRemoved(displayId = desk.displayId, deskId = desk.deskId) if (couldCreateDesks != canCreateDesks) { if (checkCanCreateDesksChanged && couldCreateDesks != canCreateDesks) { listener.onCanCreateDesksChanged(canCreateDesks) } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/multidesks/DesksTransitionObserver.kt +22 −14 Original line number Diff line number Diff line Loading @@ -197,7 +197,7 @@ class DesksTransitionObserver( deskTransition.runOnTransitEnd?.invoke() } is DeskTransition.DeactivateDesk -> handleDeactivateDeskTransition(info, deskTransition) is DeskTransition.ChangeDeskDisplay -> handleChangeDeskDisplay(info, deskTransition) is DeskTransition.ChangeDeskDisplay -> handleChangeDeskDisplay(deskTransition) is DeskTransition.RemoveDisplay -> handleRemoveDisplay(deskTransition) is DeskTransition.AddTaskToDesk -> handleAddTaskToDesk(deskTransition) } Loading Loading @@ -234,14 +234,9 @@ class DesksTransitionObserver( desktopRepository.setDeskInactive(deskId = deskTransition.deskId) } private fun handleChangeDeskDisplay( info: TransitionInfo, deskTransition: DeskTransition.ChangeDeskDisplay, ) { private fun handleChangeDeskDisplay(deskTransition: DeskTransition.ChangeDeskDisplay) { logD("handleChangeDeskDisplay: %s", deskTransition) val deskId = deskTransition.deskId val deskChange = info.changes.find { change -> desksOrganizer.isDeskChange(change, deskId) } if (deskChange != null) { desktopUserRepositories.getRepositoriesWithDeskId(deskId).forEach { desktopRepository -> desktopRepository.onDeskDisplayChanged( deskId, Loading @@ -250,7 +245,6 @@ class DesksTransitionObserver( ) } } } private fun handleRemoveDisplay(deskTransition: DeskTransition.RemoveDisplay) { logD("handleRemoveDisplay: %s", deskTransition) Loading Loading @@ -498,6 +492,20 @@ class DesksTransitionObserver( } } change.isToTop() -> { // Do not handle independent desk activations when a desk is pending a move to // this display. The activation will be handled when that transition is // processed. if ( deskTransitions.values.any { transitionsForBinder -> transitionsForBinder.any { transition -> transition is DeskTransition.ChangeDeskDisplay && transition.displayId == displayId } } ) { logD("Pending display change found; skipping.") continue } val repository = desktopUserRepositories.getProfile(changeUserId) logD( "desk=%d of user=%d moved to front, " + Loading