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

Commit 8420beb1 authored by Omar Elmekkawy's avatar Omar Elmekkawy Committed by Android (Google) Code Review
Browse files

Merge "Add multi-desk support for tiling." into main

parents 777369b0 e2727ce3
Loading
Loading
Loading
Loading
+26 −56
Original line number Diff line number Diff line
@@ -339,91 +339,61 @@ class DesktopRepository(
        }
    }

    /** Register a left tiled task to desktop state. */
    fun addLeftTiledTask(displayId: Int, taskId: Int) {
        logD("addLeftTiledTask for displayId=%d, taskId=%d", displayId, taskId)
        val activeDesk =
            checkNotNull(desktopData.getDefaultDesk(displayId)) {
                "Expected desk in display: $displayId"
            }
        addLeftTiledTaskToDesk(displayId, taskId, activeDesk.deskId)
    }

    private fun addLeftTiledTaskToDesk(displayId: Int, taskId: Int, deskId: Int) {
        logD("addLeftTiledTaskToDesk for displayId=%d, taskId=%d", displayId, taskId)
    fun addLeftTiledTaskToDesk(displayId: Int, taskId: Int, deskId: Int) {
        logD(
            "addLeftTiledTaskToDesk for displayId=%d, taskId=%d, deskId=%d",
            displayId,
            taskId,
            deskId,
        )
        val desk = checkNotNull(desktopData.getDesk(deskId)) { "Did not find desk: $deskId" }
        desk.leftTiledTaskId = taskId
        if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PERSISTENCE.isTrue()) {
            updatePersistentRepository(displayId)
        }
    }

    /** Register a right tiled task to desktop state. */
    fun addRightTiledTask(displayId: Int, taskId: Int) {
        logD("addRightTiledTask for displayId=%d, taskId=%d", displayId, taskId)
        val activeDesk =
            checkNotNull(desktopData.getDefaultDesk(displayId)) {
                "Expected desk in display: $displayId"
            updatePersistentRepositoryForDesk(deskId)
        }
        addRightTiledTaskToDesk(displayId, taskId, activeDesk.deskId)
    }

    private fun addRightTiledTaskToDesk(displayId: Int, taskId: Int, deskId: Int) {
        logD("addRightTiledTaskToDesk for displayId=%d, taskId=%d", displayId, taskId)
    fun addRightTiledTaskToDesk(displayId: Int, taskId: Int, deskId: Int) {
        logD(
            "addRightTiledTaskToDesk for displayId=%d, taskId=%d, deskId=%d",
            displayId,
            taskId,
            deskId,
        )
        val desk = checkNotNull(desktopData.getDesk(deskId)) { "Did not find desk: $deskId" }
        desk.rightTiledTaskId = taskId
        if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PERSISTENCE.isTrue()) {
            updatePersistentRepository(displayId)
            updatePersistentRepositoryForDesk(deskId)
        }
    }

    /** Gets a registered left tiled task to desktop state or returns null. */
    fun getLeftTiledTask(displayId: Int): Int? {
        logD("getLeftTiledTask for displayId=%d", displayId)
        return desktopData.getActiveDesk(displayId)?.leftTiledTaskId
    fun getLeftTiledTask(deskId: Int): Int? {
        logD("getLeftTiledTask for deskId=%d", deskId)
        return desktopData.getDesk(deskId)?.leftTiledTaskId
    }

    /** gets a registered right tiled task to desktop state or returns null. */
    fun getRightTiledTask(displayId: Int): Int? {
        logD("getRightTiledTask for displayId=%d", displayId)
        return desktopData.getActiveDesk(displayId)?.rightTiledTaskId
    }

    /* Unregisters a left tiled task from desktop state. */
    fun removeLeftTiledTask(displayId: Int) {
        logD("removeLeftTiledTask for displayId=%d", displayId)
        val activeDesk =
            checkNotNull(desktopData.getDefaultDesk(displayId)) {
                "Expected desk in display: $displayId"
            }
        removeLeftTiledTaskFromDesk(displayId, activeDesk.deskId)
    fun getRightTiledTask(deskId: Int): Int? {
        logD("getRightTiledTask for deskId=%d", deskId)
        return desktopData.getDesk(deskId)?.rightTiledTaskId
    }

    private fun removeLeftTiledTaskFromDesk(displayId: Int, deskId: Int) {
    fun removeLeftTiledTaskFromDesk(displayId: Int, deskId: Int) {
        logD("removeLeftTiledTaskToDesk for displayId=%d", displayId)
        val desk = checkNotNull(desktopData.getDesk(deskId)) { "Did not find desk: $deskId" }
        desk.leftTiledTaskId = null
        if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PERSISTENCE.isTrue()) {
            updatePersistentRepository(displayId)
        }
    }

    /* Unregisters a right tiled task from desktop state. */
    fun removeRightTiledTask(displayId: Int) {
        logD("removeRightTiledTask for displayId=%d", displayId)
        val activeDesk =
            checkNotNull(desktopData.getDefaultDesk(displayId)) {
                "Expected desk in display: $displayId"
            updatePersistentRepositoryForDesk(deskId)
        }
        removeRightTiledTaskFromDesk(displayId, activeDesk.deskId)
    }

    private fun removeRightTiledTaskFromDesk(displayId: Int, deskId: Int) {
    fun removeRightTiledTaskFromDesk(displayId: Int, deskId: Int) {
        logD("removeRightTiledTaskFromDesk for displayId=%d", displayId)
        val desk = checkNotNull(desktopData.getDesk(deskId)) { "Did not find desk: $deskId" }
        desk.rightTiledTaskId = null
        if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_PERSISTENCE.isTrue()) {
            updatePersistentRepository(displayId)
            updatePersistentRepositoryForDesk(deskId)
        }
    }

+5 −1
Original line number Diff line number Diff line
@@ -3787,7 +3787,11 @@ class DesktopTasksController(
        desksOrganizer.deactivateDesk(wct, deskId)
        return { transition ->
            desksTransitionObserver.addPendingTransition(
                DeskTransition.DeactivateDesk(token = transition, deskId = deskId)
                DeskTransition.DeactivateDesk(
                    token = transition,
                    deskId = deskId,
                    runOnTransitEnd = { snapEventHandler.onDeskDeactivated(deskId) },
                )
            )
        }
    }
+9 −1
Original line number Diff line number Diff line
@@ -53,7 +53,15 @@ sealed interface DeskTransition {
    }

    /** A transition to deactivate a desk. */
    data class DeactivateDesk(override val token: IBinder, val deskId: Int) : DeskTransition {
    data class DeactivateDesk(
        override val token: IBinder,
        val deskId: Int,
    ) : DeskTransition {
        constructor(token: IBinder, deskId: Int, runOnTransitEnd: (() -> Unit)?)
                : this(token, deskId) {
            this.runOnTransitEnd = runOnTransitEnd
        }
        var runOnTransitEnd: (() -> Unit)? = null
        override fun copyWithToken(token: IBinder): DeskTransition = copy(token)
    }

+1 −0
Original line number Diff line number Diff line
@@ -172,6 +172,7 @@ class DesksTransitionObserver(
        val desktopRepository = desktopUserRepositories.current
        var deskChangeFound = false

        deskTransition.runOnTransitEnd?.invoke()
        val changes = info?.changes ?: emptyList()
        for (change in changes) {
            val isDeskChange = desksOrganizer.isDeskChange(change, deskTransition.deskId)
+14 −5
Original line number Diff line number Diff line
@@ -140,17 +140,26 @@ class DesktopRepositoryInitializerImpl(
                                    )
                                }

                                if (task.desktopTaskTilingState == DesktopTaskTilingState.LEFT) {
                                    repository.addLeftTiledTask(
                                val tilingEnabled =
                                    DesktopExperienceFlags.ENABLE_TILE_RESIZING.isTrue()
                                if (
                                    tilingEnabled &&
                                        task.desktopTaskTilingState == DesktopTaskTilingState.LEFT
                                ) {
                                    repository.addLeftTiledTaskToDesk(
                                        persistentDesktop.displayId,
                                        task.taskId,
                                        newDeskId,
                                    )
                                } else if (
                                }
                                if (
                                    tilingEnabled &&
                                        task.desktopTaskTilingState == DesktopTaskTilingState.RIGHT
                                ) {
                                    repository.addRightTiledTask(
                                    repository.addRightTiledTaskToDesk(
                                        persistentDesktop.displayId,
                                        task.taskId,
                                        newDeskId,
                                    )
                                }
                            }
Loading