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

Commit dca07755 authored by Garfield Tan's avatar Garfield Tan Committed by Android (Google) Code Review
Browse files

Merge "Update allow task move flags per desk lifecycle" into main

parents eefed5ab cd825c9b
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ class RootTaskDesksOrganizer(
        val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" }
        if (!skipReorder) wct.reorder(root.token, /* onTop= */ true)
        updateLaunchRoot(wct, deskId, enabled = true)
        updateTaskMoveAllowed(wct, deskId, allowed = true)
    }

    override fun deactivateDesk(
@@ -218,6 +219,7 @@ class RootTaskDesksOrganizer(
        val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" }
        if (!skipReorder) wct.reorder(root.taskInfo.token, /* onTop= */ false)
        updateLaunchRoot(wct, deskId, enabled = false)
        updateTaskMoveAllowed(wct, deskId, allowed = false)
    }

    private fun updateLaunchRoot(wct: WindowContainerTransaction, deskId: Int, enabled: Boolean) {
@@ -243,6 +245,29 @@ class RootTaskDesksOrganizer(
        }
    }

    private fun updateTaskMoveAllowed(
        wct: WindowContainerTransaction,
        deskId: Int,
        allowed: Boolean,
    ) {
        val root = checkNotNull(deskRootsByDeskId[deskId]) { "Root not found for desk: $deskId" }
        if (root.isTaskMoveAllowed == allowed) {
            logD(
                "updateTaskMoveAllowed desk=%d Task move allowed already set to allowed=%b",
                deskId,
                allowed,
            )
            return
        }
        root.isTaskMoveAllowed = allowed
        logD(
            "updateTaskMoveAllowed changing desk=%d Task move allowed to allowed=%b",
            deskId,
            allowed,
        )
        wct.setIsTaskMoveAllowed(root.taskInfo.token, allowed)
    }

    override fun moveTaskToDesk(
        wct: WindowContainerTransaction,
        deskId: Int,
@@ -622,6 +647,7 @@ class RootTaskDesksOrganizer(
        val children: MutableSet<Int> = mutableSetOf(),
        val users: MutableSet<Int> = mutableSetOf(),
        var isLaunchRootRequested: Boolean = false,
        var isTaskMoveAllowed: Boolean = false,
    ) {
        val token: WindowContainerToken = taskInfo.token
    }
@@ -678,6 +704,7 @@ class RootTaskDesksOrganizer(
            pw.println("$innerPrefix  #$deskId visible=${root.taskInfo.isVisible}")
            pw.println("$innerPrefix    displayId=${root.taskInfo.displayId}")
            pw.println("$innerPrefix    isLaunchRootRequested=${root.isLaunchRootRequested}")
            pw.println("$innerPrefix    isTaskMoveAllowed=${root.isTaskMoveAllowed}")
            pw.println("$innerPrefix    children=${root.children}")
            pw.println("$innerPrefix    users=${root.users}")
            pw.println("$innerPrefix    minimization root:")
+26 −0
Original line number Diff line number Diff line
@@ -480,6 +480,14 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {
                }
            )
            .isTrue()
        assertThat(
                wct.changes.any { change ->
                    change.key == desk.deskRoot.token.asBinder() &&
                        (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) &&
                        change.value.isTaskMoveAllowed
                }
            )
            .isTrue()
    }

    @Test
@@ -645,6 +653,24 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {
            .isTrue()
    }

    @Test
    fun deactivateDesk_unsetsTaskMoveAllowed() = runTest {
        val wct = WindowContainerTransaction()
        val desk = createDeskSuspending()
        organizer.activateDesk(wct, desk.deskRoot.deskId)

        organizer.deactivateDesk(wct, desk.deskRoot.deskId)

        assertThat(
                wct.changes.any { change ->
                    change.key == desk.deskRoot.token.asBinder() &&
                        (change.value.changeMask and Change.CHANGE_IS_TASK_MOVE_ALLOWED != 0) &&
                        !change.value.isTaskMoveAllowed
                }
            )
            .isTrue()
    }

    @Test
    fun deactivateDesk_reordersRootToBack() = runTest {
        val wct = WindowContainerTransaction()