Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +8 −8 Original line number Diff line number Diff line Loading @@ -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<>(); } Loading @@ -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 Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +61 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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. */ Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +8 −8 Original line number Diff line number Diff line Loading @@ -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<>(); } Loading @@ -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 Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +61 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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. */ Loading