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

Commit 8cb1edc9 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix empty desk behavior when entering Overview" into main

parents e1dd0efb 7b308cb8
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -645,7 +645,14 @@ public class RecentTasksController implements TaskStackListenerCallback,
    @VisibleForTesting
    <T extends TaskInfo> ArrayList<GroupedTaskInfo> generateList(@NonNull List<T> tasks,
            String reason) {
        if (tasks.isEmpty()) {
        final boolean multipleDesktopsEnabled = mDesktopState.enableMultipleDesktops();
        // When the multiple desktops feature is enabled, we include all desks even if they're
        // empty.
        final boolean shouldIncludeEmptyDesktops = multipleDesktopsEnabled;

        initializeDesksMap(multipleDesktopsEnabled);

        if (tasks.isEmpty() && (!shouldIncludeEmptyDesktops || mTmpDesks.isEmpty())) {
            return new ArrayList<>();
        }

@@ -653,13 +660,6 @@ public class RecentTasksController implements TaskStackListenerCallback,
            ProtoLog.v(WM_SHELL_TASK_OBSERVER, "RecentTasksController.generateList(%s)", reason);
        }

        final boolean multipleDesktopsEnabled = mDesktopState.enableMultipleDesktops();
        initializeDesksMap(multipleDesktopsEnabled);

        // When the multiple desktops feature is enabled, we include all desks even if they're
        // empty.
        final boolean shouldIncludeEmptyDesktops = multipleDesktopsEnabled;

        // Make a mapping of task id -> task info for the remaining tasks to be processed, this
        // mapping is used to keep track of split tasks that may exist later in the task list that
        // should be ignored because they've already been grouped
+61 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;

/**
@@ -868,6 +869,66 @@ public class RecentTasksControllerTest extends ShellTestCase {
                List.of(task3.taskId)));
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
            Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_FRONTEND})
    public void generateList_emptyTaskList_multipleDesktopsEnabled_shouldIncludeEmptyDesks() {
        mDesktopState.setEnableMultipleDesktops(true);
        Set<Integer> deskIds = Set.of(101, 102);
        when(mDesktopUserRepositories.getCurrent().getAllDeskIds()).thenReturn(deskIds);

        ArrayList<GroupedTaskInfo> groupedTasks =
                mRecentTasksControllerReal.generateList(List.of(),
                        "test_empty_desks");

        // Verification: Should return GroupedTaskInfo for each empty desk
        assertEquals("Expected number of desks not matching", deskIds.size(), groupedTasks.size());

        List<Integer> actualDeskIdsInGroupedTasks = new ArrayList<>();
        for (GroupedTaskInfo deskTaskInfo : groupedTasks) {
            assertTrue("Task info should be of type DESK", deskTaskInfo.isBaseType(TYPE_DESK));
            assertTrue("Desk should be empty", deskTaskInfo.getTaskInfoList().isEmpty());
            actualDeskIdsInGroupedTasks.add(deskTaskInfo.getDeskId());
        }
        // Verify that the set of expected desk IDs matches the collected list of actual desk IDs
        assertEquals("Desk ID list size does not match expected set size",
                deskIds.size(), actualDeskIdsInGroupedTasks.size());
        assertTrue("Actual desk IDs do not match expected desk IDs",
                deskIds.containsAll(actualDeskIdsInGroupedTasks));
    }

    @Test
    @EnableFlags({Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
            Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_FRONTEND})
    public void generateList_emptyTaskList_multipleDesktopsEnabled_noDesks_returnsEmptyList() {
        mDesktopState.setEnableMultipleDesktops(true);
        when(mDesktopUserRepositories.getCurrent().getAllDeskIds()).thenReturn(Set.of());

        ArrayList<GroupedTaskInfo> groupedTasks =
                mRecentTasksControllerReal.generateList(List.of(),
                        "test_empty_desks_no_actual_desks");

        // Verification: Should return an empty list because there are no tasks and no desks
        assertTrue("Expected empty list when multiple desktops enabled and there is no desks",
                groupedTasks.isEmpty());
    }


    @Test
    @DisableFlags({Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
            Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_FRONTEND})
    public void generateList_emptyTaskList_multipleDesktopsDisabled_shouldNotIncludeEmptyDesks() {
        mDesktopState.setEnableMultipleDesktops(false);
        when(mDesktopUserRepositories.getCurrent().getAllDeskIds()).thenReturn(Set.of(101));

        ArrayList<GroupedTaskInfo> groupedTasks =
                mRecentTasksControllerReal.generateList(List.of(), "test_no_empty_desks");

        // Verification: Should return an empty list
        assertTrue("Expected empty list when multiple desktops disabled even there are"
                        + " empty desks", groupedTasks.isEmpty());
    }

    /**
     * Helper to create a task with a given task id.
     */