Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e9b1958 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[21/N] Desks: Implement IDesktopTaskListener initial sync" into main

parents ee8cc2c3 05d2c95d
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1007,6 +1007,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()
+28 −19
Original line number Diff line number Diff line
@@ -3613,27 +3613,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) } },
                )
        }

@@ -3729,6 +3713,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?) {