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

Commit 604bd2b7 authored by Pragya Bajoria's avatar Pragya Bajoria
Browse files

Handle state management of repository state to remove freeform windows without...

Handle state management of repository state to remove freeform windows without requiring the caller to know the right order of methods to call.

Bug: 332682201
Change-Id: I04923eae519cb787270b56b4692cae06f24aaa80
Flag: EXEMPT (no-op for functionality)
Test: atest DesktopModeTaskRepositoryTest
parent 3e7db78c
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -300,13 +300,17 @@ class DesktopModeTaskRepository {
        }
    }

    /** Removes given task from a valid [displayId]. */
    /** Removes given task from a valid [displayId] and updates the repository state. */
    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: %s",
            desktopTaskDataByDisplayId[displayId]?.freeformTasksInZOrder?.toDumpString())
        // Remove task from unminimized task if it is minimized.
        unminimizeTask(displayId, taskId)
        removeActiveTask(taskId)
        updateTaskVisibility(displayId, taskId, visible = false);
    }

    /**
+0 −4
Original line number Diff line number Diff line
@@ -117,10 +117,6 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        if (DesktopModeStatus.canEnterDesktopMode(mContext)) {
            mDesktopModeTaskRepository.ifPresent(repository -> {
                repository.removeFreeformTask(taskInfo.displayId, taskInfo.taskId);
                repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
                repository.removeActiveTask(taskInfo.taskId, /* excludedDisplayId= */ null);
                repository.updateTaskVisibility(
                    taskInfo.displayId, taskInfo.taskId, /* visible= */ false);
            });
        }
        mWindowDecorationViewModel.onTaskVanished(taskInfo);
+37 −0
Original line number Diff line number Diff line
@@ -534,6 +534,43 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() {
        assertThat(repo.removeBoundsBeforeMaximize(taskId)).isNull()
    }

    @Test
    fun removeFreeformTask_removesActiveTask() {
        val taskId = 1
        val listener = TestListener()
        repo.addActiveTaskListener(listener)
        repo.addActiveTask(DEFAULT_DISPLAY, taskId)
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId)

        repo.removeFreeformTask(THIRD_DISPLAY, taskId)

        assertThat(repo.isActiveTask(taskId)).isFalse()
        assertThat(listener.activeChangesOnDefaultDisplay).isEqualTo(2)
    }

    @Test
    fun removeFreeformTask_unminimizesTask() {
        val taskId = 1
        repo.addActiveTask(DEFAULT_DISPLAY, taskId)
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId)
        repo.minimizeTask(DEFAULT_DISPLAY, taskId)

        repo.removeFreeformTask(DEFAULT_DISPLAY, taskId)

        assertThat(repo.isMinimizedTask(taskId)).isFalse()
    }

    @Test
    fun removeFreeformTask_updatesTaskVisibility() {
        val taskId = 1
        repo.addActiveTask(DEFAULT_DISPLAY, taskId)
        repo.addOrMoveFreeformTaskToTop(DEFAULT_DISPLAY, taskId)

        repo.removeFreeformTask(THIRD_DISPLAY, taskId)

        assertThat(repo.isVisibleTask(taskId)).isFalse()
    }

    @Test
    fun saveBoundsBeforeMaximize_boundsSavedByTaskId() {
        val taskId = 1