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

Commit cd825c9b authored by Garfield Tan's avatar Garfield Tan
Browse files

Update allow task move flags per desk lifecycle

Bug: 413579853
Flag: com.android.window.flags.enable_window_repositioning_api
Test: mIsTaskMoveAllowed is updated.
Test: atest RootTaskDesksOrganizerTest
Change-Id: I56fcb66f5f2641320693523ee6fd18d94a72a9b5
parent d012d782
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()