diff options
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt | 15 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt | 47 |
2 files changed, 43 insertions, 19 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt index 1a864b0cfc7a..fbb2f551cb58 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt @@ -1008,6 +1008,21 @@ class DesktopRepository( fun saveBoundsBeforeFullImmersive(taskId: Int, bounds: Rect) = boundsBeforeFullImmersiveByTaskId.set(taskId, Rect(bounds)) + /** Returns the current state of the desktop, formatted for usage by remote clients. */ + fun getDeskDisplayStateForRemote(): Array<DisplayDeskState> = + desktopData + .desksSequence() + .groupBy { it.displayId } + .map { (displayId, desks) -> + val activeDeskId = desktopData.getActiveDesk(displayId)?.deskId + DisplayDeskState().apply { + this.displayId = displayId + this.activeDeskId = activeDeskId ?: INVALID_DESK_ID + this.deskIds = desks.map { it.deskId }.toIntArray() + } + } + .toTypedArray() + /** TODO: b/389960283 - consider updating only the changing desks. */ private fun updatePersistentRepository(displayId: Int) { val desks = desktopData.desksSequence(displayId).map { desk -> desk.deepCopy() }.toList() 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 85717f10ed34..994bd1b4e971 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 @@ -3551,27 +3551,11 @@ class DesktopTasksController( controller, { c -> run { - c.taskRepository.addDeskChangeListener( - deskChangeListener, - c.mainExecutor, - ) - c.taskRepository.addVisibleTasksListener( - visibleTasksListener, - c.mainExecutor, - ) - c.taskbarDesktopTaskListener = taskbarDesktopTaskListener - c.desktopModeEnterExitTransitionListener = - desktopModeEntryExitTransitionListener - } - }, - { c -> - run { - c.taskRepository.removeDeskChangeListener(deskChangeListener) - c.taskRepository.removeVisibleTasksListener(visibleTasksListener) - c.taskbarDesktopTaskListener = null - c.desktopModeEnterExitTransitionListener = null + syncInitialState(c) + registerListeners(c) } }, + { c -> run { unregisterListeners(c) } }, ) } @@ -3667,6 +3651,31 @@ class DesktopTasksController( c.startLaunchIntentTransition(intent, options, displayId) } } + + private fun syncInitialState(c: DesktopTasksController) { + remoteListener.call { l -> + // TODO: b/393962589 - implement desks limit. + val canCreateDesks = true + l.onListenerConnected( + c.taskRepository.getDeskDisplayStateForRemote(), + canCreateDesks, + ) + } + } + + private fun registerListeners(c: DesktopTasksController) { + c.taskRepository.addDeskChangeListener(deskChangeListener, c.mainExecutor) + c.taskRepository.addVisibleTasksListener(visibleTasksListener, c.mainExecutor) + c.taskbarDesktopTaskListener = taskbarDesktopTaskListener + c.desktopModeEnterExitTransitionListener = desktopModeEntryExitTransitionListener + } + + private fun unregisterListeners(c: DesktopTasksController) { + c.taskRepository.removeDeskChangeListener(deskChangeListener) + c.taskRepository.removeVisibleTasksListener(visibleTasksListener) + c.taskbarDesktopTaskListener = null + c.desktopModeEnterExitTransitionListener = null + } } private fun logV(msg: String, vararg arguments: Any?) { |