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

Commit 7b308cb8 authored by Suhua Lei's avatar Suhua Lei
Browse files

Fix empty desk behavior when entering Overview

Bug: 416790718
Flag: com.android.window.flags.enable_multiple_desktops_frontend
Flag: com.android.window.flags.enable_multiple_desktops_backend
Test: manual
Change-Id: I166bb934e387a6a9257a5a5c109372b30d7e86c6
parent b8f396ee
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.
     */