Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +6 −1 Original line number Original line Diff line number Diff line Loading @@ -332,6 +332,8 @@ public class RecentTasksController implements TaskStackListenerCallback, ArrayList<ActivityManager.RecentTaskInfo> freeformTasks = new ArrayList<>(); ArrayList<ActivityManager.RecentTaskInfo> freeformTasks = new ArrayList<>(); int mostRecentFreeformTaskIndex = Integer.MAX_VALUE; // Pull out the pairs as we iterate back in the list // Pull out the pairs as we iterate back in the list ArrayList<GroupedRecentTaskInfo> recentTasks = new ArrayList<>(); ArrayList<GroupedRecentTaskInfo> recentTasks = new ArrayList<>(); for (int i = 0; i < rawList.size(); i++) { for (int i = 0; i < rawList.size(); i++) { Loading @@ -344,6 +346,9 @@ public class RecentTasksController implements TaskStackListenerCallback, if (DesktopModeStatus.isEnabled() && mDesktopModeTaskRepository.isPresent() if (DesktopModeStatus.isEnabled() && mDesktopModeTaskRepository.isPresent() && mDesktopModeTaskRepository.get().isActiveTask(taskInfo.taskId)) { && mDesktopModeTaskRepository.get().isActiveTask(taskInfo.taskId)) { // Freeform tasks will be added as a separate entry // Freeform tasks will be added as a separate entry if (mostRecentFreeformTaskIndex == Integer.MAX_VALUE) { mostRecentFreeformTaskIndex = recentTasks.size(); } freeformTasks.add(taskInfo); freeformTasks.add(taskInfo); continue; continue; } } Loading @@ -362,7 +367,7 @@ public class RecentTasksController implements TaskStackListenerCallback, // Add a special entry for freeform tasks // Add a special entry for freeform tasks if (!freeformTasks.isEmpty()) { if (!freeformTasks.isEmpty()) { recentTasks.add(0, GroupedRecentTaskInfo.forFreeformTasks( recentTasks.add(mostRecentFreeformTaskIndex, GroupedRecentTaskInfo.forFreeformTasks( freeformTasks.toArray(new ActivityManager.RecentTaskInfo[0]))); freeformTasks.toArray(new ActivityManager.RecentTaskInfo[0]))); } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +48 −0 Original line number Original line Diff line number Diff line Loading @@ -301,6 +301,54 @@ public class RecentTasksControllerTest extends ShellTestCase { mockitoSession.finishMocking(); mockitoSession.finishMocking(); } } @Test public void testGetRecentTasks_hasActiveDesktopTasks_proto2Enabled_freeformTaskOrder() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( DesktopModeStatus.class).startMocking(); when(DesktopModeStatus.isEnabled()).thenReturn(true); ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); ActivityManager.RecentTaskInfo t3 = makeTaskInfo(3); ActivityManager.RecentTaskInfo t4 = makeTaskInfo(4); ActivityManager.RecentTaskInfo t5 = makeTaskInfo(5); setRawList(t1, t2, t3, t4, t5); SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 1, 2, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, pair1Bounds); when(mDesktopModeTaskRepository.isActiveTask(3)).thenReturn(true); when(mDesktopModeTaskRepository.isActiveTask(5)).thenReturn(true); ArrayList<GroupedRecentTaskInfo> recentTasks = mRecentTasksController.getRecentTasks( MAX_VALUE, RECENT_IGNORE_UNAVAILABLE, 0); // 2 split screen tasks grouped, 2 freeform tasks grouped, 3 total recents entries assertEquals(3, recentTasks.size()); GroupedRecentTaskInfo splitGroup = recentTasks.get(0); GroupedRecentTaskInfo freeformGroup = recentTasks.get(1); GroupedRecentTaskInfo singleGroup = recentTasks.get(2); // Check that groups have expected types assertEquals(GroupedRecentTaskInfo.TYPE_SPLIT, splitGroup.getType()); assertEquals(GroupedRecentTaskInfo.TYPE_FREEFORM, freeformGroup.getType()); assertEquals(GroupedRecentTaskInfo.TYPE_SINGLE, singleGroup.getType()); // Check freeform group entries assertEquals(t3, freeformGroup.getTaskInfoList().get(0)); assertEquals(t5, freeformGroup.getTaskInfoList().get(1)); // Check split group entries assertEquals(t1, splitGroup.getTaskInfoList().get(0)); assertEquals(t2, splitGroup.getTaskInfoList().get(1)); // Check single entry assertEquals(t4, singleGroup.getTaskInfo1()); mockitoSession.finishMocking(); } @Test @Test public void testGetRecentTasks_hasActiveDesktopTasks_proto2Disabled_doNotGroupFreeformTasks() { public void testGetRecentTasks_hasActiveDesktopTasks_proto2Disabled_doNotGroupFreeformTasks() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( StaticMockitoSession mockitoSession = mockitoSession().mockStatic( Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +6 −1 Original line number Original line Diff line number Diff line Loading @@ -332,6 +332,8 @@ public class RecentTasksController implements TaskStackListenerCallback, ArrayList<ActivityManager.RecentTaskInfo> freeformTasks = new ArrayList<>(); ArrayList<ActivityManager.RecentTaskInfo> freeformTasks = new ArrayList<>(); int mostRecentFreeformTaskIndex = Integer.MAX_VALUE; // Pull out the pairs as we iterate back in the list // Pull out the pairs as we iterate back in the list ArrayList<GroupedRecentTaskInfo> recentTasks = new ArrayList<>(); ArrayList<GroupedRecentTaskInfo> recentTasks = new ArrayList<>(); for (int i = 0; i < rawList.size(); i++) { for (int i = 0; i < rawList.size(); i++) { Loading @@ -344,6 +346,9 @@ public class RecentTasksController implements TaskStackListenerCallback, if (DesktopModeStatus.isEnabled() && mDesktopModeTaskRepository.isPresent() if (DesktopModeStatus.isEnabled() && mDesktopModeTaskRepository.isPresent() && mDesktopModeTaskRepository.get().isActiveTask(taskInfo.taskId)) { && mDesktopModeTaskRepository.get().isActiveTask(taskInfo.taskId)) { // Freeform tasks will be added as a separate entry // Freeform tasks will be added as a separate entry if (mostRecentFreeformTaskIndex == Integer.MAX_VALUE) { mostRecentFreeformTaskIndex = recentTasks.size(); } freeformTasks.add(taskInfo); freeformTasks.add(taskInfo); continue; continue; } } Loading @@ -362,7 +367,7 @@ public class RecentTasksController implements TaskStackListenerCallback, // Add a special entry for freeform tasks // Add a special entry for freeform tasks if (!freeformTasks.isEmpty()) { if (!freeformTasks.isEmpty()) { recentTasks.add(0, GroupedRecentTaskInfo.forFreeformTasks( recentTasks.add(mostRecentFreeformTaskIndex, GroupedRecentTaskInfo.forFreeformTasks( freeformTasks.toArray(new ActivityManager.RecentTaskInfo[0]))); freeformTasks.toArray(new ActivityManager.RecentTaskInfo[0]))); } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +48 −0 Original line number Original line Diff line number Diff line Loading @@ -301,6 +301,54 @@ public class RecentTasksControllerTest extends ShellTestCase { mockitoSession.finishMocking(); mockitoSession.finishMocking(); } } @Test public void testGetRecentTasks_hasActiveDesktopTasks_proto2Enabled_freeformTaskOrder() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( DesktopModeStatus.class).startMocking(); when(DesktopModeStatus.isEnabled()).thenReturn(true); ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); ActivityManager.RecentTaskInfo t3 = makeTaskInfo(3); ActivityManager.RecentTaskInfo t4 = makeTaskInfo(4); ActivityManager.RecentTaskInfo t5 = makeTaskInfo(5); setRawList(t1, t2, t3, t4, t5); SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 1, 2, SNAP_TO_50_50); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, pair1Bounds); when(mDesktopModeTaskRepository.isActiveTask(3)).thenReturn(true); when(mDesktopModeTaskRepository.isActiveTask(5)).thenReturn(true); ArrayList<GroupedRecentTaskInfo> recentTasks = mRecentTasksController.getRecentTasks( MAX_VALUE, RECENT_IGNORE_UNAVAILABLE, 0); // 2 split screen tasks grouped, 2 freeform tasks grouped, 3 total recents entries assertEquals(3, recentTasks.size()); GroupedRecentTaskInfo splitGroup = recentTasks.get(0); GroupedRecentTaskInfo freeformGroup = recentTasks.get(1); GroupedRecentTaskInfo singleGroup = recentTasks.get(2); // Check that groups have expected types assertEquals(GroupedRecentTaskInfo.TYPE_SPLIT, splitGroup.getType()); assertEquals(GroupedRecentTaskInfo.TYPE_FREEFORM, freeformGroup.getType()); assertEquals(GroupedRecentTaskInfo.TYPE_SINGLE, singleGroup.getType()); // Check freeform group entries assertEquals(t3, freeformGroup.getTaskInfoList().get(0)); assertEquals(t5, freeformGroup.getTaskInfoList().get(1)); // Check split group entries assertEquals(t1, splitGroup.getTaskInfoList().get(0)); assertEquals(t2, splitGroup.getTaskInfoList().get(1)); // Check single entry assertEquals(t4, singleGroup.getTaskInfo1()); mockitoSession.finishMocking(); } @Test @Test public void testGetRecentTasks_hasActiveDesktopTasks_proto2Disabled_doNotGroupFreeformTasks() { public void testGetRecentTasks_hasActiveDesktopTasks_proto2Disabled_doNotGroupFreeformTasks() { StaticMockitoSession mockitoSession = mockitoSession().mockStatic( StaticMockitoSession mockitoSession = mockitoSession().mockStatic( Loading