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

Commit dd4ee5f1 authored by Pragya Bajoria's avatar Pragya Bajoria
Browse files

Fix `removeFreeformTask` in DesktopModeTaskRepository to correctly remove a...

Fix `removeFreeformTask` in DesktopModeTaskRepository to correctly remove a task from `freeformTasksInZOrder`.

Bug: 350722245
Change-Id: Ia8f2b7b66ad9d7ff6a5f0041b4196f7382a49c50
Flag: EXEMPT (trivial change doesn't need a new flag)
Test: atest DesktopModeTaskRepositoryTest
parent 98e41e8b
Loading
Loading
Loading
Loading
+28 −3
Original line number Diff line number Diff line
@@ -270,13 +270,37 @@ class DesktopModeTaskRepository {
            logW("Unminimize Task: display=%d, task=%d, no task data", displayId, taskId)
    }

    /** Removes task from the ordered list. */
    private fun getDisplayIdForTask(taskId: Int): Int? {
        desktopTaskDataByDisplayId.forEach { displayId, data ->
            if (taskId in data.freeformTasksInZOrder) {
                return displayId
            }
        }
        logW("No display id found for task: taskId=%d", taskId)
        return null
    }

    /**
     * Removes [taskId] from the respective display. If [INVALID_DISPLAY], the original display id
     * will be looked up from the task id.
     */
    fun removeFreeformTask(displayId: Int, taskId: Int) {
        logD("Removes freeform task: taskId=%d", taskId)
        if (displayId == INVALID_DISPLAY) {
            // Removes the original display id of the task.
            getDisplayIdForTask(taskId)?.let { removeTaskFromDisplay(it, taskId) }
        } else {
            removeTaskFromDisplay(displayId, taskId)
        }
    }

    /** Removes given task from a valid [displayId]. */
    private fun removeTaskFromDisplay(displayId: Int, taskId: Int) {
        logD("Removes freeform task: taskId=%d, displayId=%d", taskId, displayId)
        desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder?.remove(taskId)
        boundsBeforeMaximizeByTaskId.remove(taskId)
        logD("Remaining freeform tasks: %d",
            desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder?.toDumpString() ?: "")
        logD("Remaining freeform tasks: %s",
            desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder?.toDumpString())
    }

    /**
@@ -358,3 +382,4 @@ class DesktopModeTaskRepository {

private fun <T> Iterable<T>.toDumpString(): String =
    joinToString(separator = ", ", prefix = "[", postfix = "]")
+34 −0
Original line number Diff line number Diff line
@@ -467,9 +467,43 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() {
        assertThat(tasks.first()).isEqualTo(6)
    }

    @Test
    fun removeFreeformTask_invalidDisplay_removesTaskFromFreeformTasks() {
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId = 1)

        repo.removeFreeformTask(INVALID_DISPLAY, taskId = 1)

        val invalidDisplayTasks = repo.getFreeformTasksInZOrder(INVALID_DISPLAY)
        assertThat(invalidDisplayTasks).isEmpty()
        val validDisplayTasks = repo.getFreeformTasksInZOrder(DEFAULT_DISPLAY)
        assertThat(validDisplayTasks).isEmpty()
    }

    @Test
    fun removeFreeformTask_validDisplay_removesTaskFromFreeformTasks() {
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId = 1)

        repo.removeFreeformTask(DEFAULT_DISPLAY, taskId = 1)

        val tasks = repo.getFreeformTasksInZOrder(DEFAULT_DISPLAY)
        assertThat(tasks).isEmpty()
    }

    @Test
    fun removeFreeformTask_validDisplay_differentDisplay_doesNotRemovesTask() {
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId = 1)

        repo.removeFreeformTask(SECOND_DISPLAY, taskId = 1)

        val tasks = repo.getFreeformTasksInZOrder(DEFAULT_DISPLAY)
        assertThat(tasks).containsExactly(1)
    }

    @Test
    fun removeFreeformTask_removesTaskBoundsBeforeMaximize() {
        val taskId = 1
        repo.addActiveTask(THIRD_DISPLAY, taskId)
        repo.addOrMoveFreeformTaskToTop(THIRD_DISPLAY, taskId)
        repo.saveBoundsBeforeMaximize(taskId, Rect(0, 0, 200, 200))

        repo.removeFreeformTask(THIRD_DISPLAY, taskId)