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

Commit fa963fbc authored by Matt Sziklay's avatar Matt Sziklay Committed by Android (Google) Code Review
Browse files

Merge "Fixes for mirror-disconnect transition." into main

parents 29840586 0d4967fe
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -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) ->
@@ -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 =
@@ -1107,7 +1111,7 @@ class DesktopRepository(
                    )
                }
                listener.onDeskRemoved(displayId = desk.displayId, deskId = desk.deskId)
                if (couldCreateDesks != canCreateDesks) {
                if (checkCanCreateDesksChanged && couldCreateDesks != canCreateDesks) {
                    listener.onCanCreateDesksChanged(canCreateDesks)
                }
            }
+22 −14
Original line number Diff line number Diff line
@@ -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)
        }
@@ -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,
@@ -250,7 +245,6 @@ class DesksTransitionObserver(
            )
        }
    }
    }

    private fun handleRemoveDisplay(deskTransition: DeskTransition.RemoveDisplay) {
        logD("handleRemoveDisplay: %s", deskTransition)
@@ -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, " +