Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +8 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,11 @@ public class RecentTasksController implements TaskStackListenerCallback, if (taskId1 == taskId2) { return; } if (mSplitTasks.get(taskId1, INVALID_TASK_ID) == taskId2 && mTaskSplitBoundsMap.get(taskId1).equals(splitBounds)) { // If the two tasks are already paired and the bounds are the same, then skip updating return; } // Remove any previous pairs removeSplitPair(taskId1); removeSplitPair(taskId2); Loading @@ -121,6 +126,7 @@ public class RecentTasksController implements TaskStackListenerCallback, mSplitTasks.put(taskId2, taskId1); mTaskSplitBoundsMap.put(taskId1, splitBounds); mTaskSplitBoundsMap.put(taskId2, splitBounds); notifyRecentTasksChanged(); } /** Loading @@ -133,6 +139,7 @@ public class RecentTasksController implements TaskStackListenerCallback, mSplitTasks.delete(pairedTaskId); mTaskSplitBoundsMap.remove(taskId); mTaskSplitBoundsMap.remove(pairedTaskId); notifyRecentTasksChanged(); } } Loading Loading @@ -217,7 +224,7 @@ public class RecentTasksController implements TaskStackListenerCallback, } final int pairedTaskId = mSplitTasks.get(taskInfo.taskId); if (pairedTaskId != INVALID_TASK_ID) { if (pairedTaskId != INVALID_TASK_ID && rawMapping.contains(pairedTaskId)) { final ActivityManager.RecentTaskInfo pairedTaskInfo = rawMapping.get(pairedTaskId); rawMapping.remove(pairedTaskId); recentTasks.add(new GroupedRecentTaskInfo(taskInfo, pairedTaskInfo, Loading libs/WindowManager/Shell/src/com/android/wm/shell/util/StagedSplitBounds.java +20 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; import java.util.Objects; /** * Container of various information needed to display split screen * tasks/leashes/etc in Launcher Loading Loading @@ -92,6 +94,24 @@ public class StagedSplitBounds implements Parcelable { return 0; } @Override public boolean equals(Object obj) { if (!(obj instanceof StagedSplitBounds)) { return false; } // Only need to check the base fields (the other fields are derived from these) final StagedSplitBounds other = (StagedSplitBounds) obj; return Objects.equals(leftTopBounds, other.leftTopBounds) && Objects.equals(rightBottomBounds, other.rightBottomBounds) && leftTopTaskId == other.leftTopTaskId && rightBottomTaskId == other.rightBottomTaskId; } @Override public int hashCode() { return Objects.hash(leftTopBounds, rightBottomBounds, leftTopTaskId, rightBottomTaskId); } @Override public String toString() { return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n" Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static java.lang.Integer.MAX_VALUE; Loading Loading @@ -82,6 +83,36 @@ public class RecentTasksControllerTest extends ShellTestCase { null /* sizeCompatUI */, Optional.of(mRecentTasksController)); } @Test public void testAddRemoveSplitNotifyChange() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); setRawList(t1, t2); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, mock(StagedSplitBounds.class)); verify(mRecentTasksController).notifyRecentTasksChanged(); reset(mRecentTasksController); mRecentTasksController.removeSplitPair(t1.taskId); verify(mRecentTasksController).notifyRecentTasksChanged(); } @Test public void testAddSameSplitBoundsInfoSkipNotifyChange() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); setRawList(t1, t2); // Verify only one update if the split info is the same StagedSplitBounds bounds1 = new StagedSplitBounds(new Rect(0, 0, 50, 50), new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds1); StagedSplitBounds bounds2 = new StagedSplitBounds(new Rect(0, 0, 50, 50), new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds2); verify(mRecentTasksController, times(1)).notifyRecentTasksChanged(); } @Test public void testGetRecentTasks() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +8 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,11 @@ public class RecentTasksController implements TaskStackListenerCallback, if (taskId1 == taskId2) { return; } if (mSplitTasks.get(taskId1, INVALID_TASK_ID) == taskId2 && mTaskSplitBoundsMap.get(taskId1).equals(splitBounds)) { // If the two tasks are already paired and the bounds are the same, then skip updating return; } // Remove any previous pairs removeSplitPair(taskId1); removeSplitPair(taskId2); Loading @@ -121,6 +126,7 @@ public class RecentTasksController implements TaskStackListenerCallback, mSplitTasks.put(taskId2, taskId1); mTaskSplitBoundsMap.put(taskId1, splitBounds); mTaskSplitBoundsMap.put(taskId2, splitBounds); notifyRecentTasksChanged(); } /** Loading @@ -133,6 +139,7 @@ public class RecentTasksController implements TaskStackListenerCallback, mSplitTasks.delete(pairedTaskId); mTaskSplitBoundsMap.remove(taskId); mTaskSplitBoundsMap.remove(pairedTaskId); notifyRecentTasksChanged(); } } Loading Loading @@ -217,7 +224,7 @@ public class RecentTasksController implements TaskStackListenerCallback, } final int pairedTaskId = mSplitTasks.get(taskInfo.taskId); if (pairedTaskId != INVALID_TASK_ID) { if (pairedTaskId != INVALID_TASK_ID && rawMapping.contains(pairedTaskId)) { final ActivityManager.RecentTaskInfo pairedTaskInfo = rawMapping.get(pairedTaskId); rawMapping.remove(pairedTaskId); recentTasks.add(new GroupedRecentTaskInfo(taskInfo, pairedTaskInfo, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/util/StagedSplitBounds.java +20 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; import java.util.Objects; /** * Container of various information needed to display split screen * tasks/leashes/etc in Launcher Loading Loading @@ -92,6 +94,24 @@ public class StagedSplitBounds implements Parcelable { return 0; } @Override public boolean equals(Object obj) { if (!(obj instanceof StagedSplitBounds)) { return false; } // Only need to check the base fields (the other fields are derived from these) final StagedSplitBounds other = (StagedSplitBounds) obj; return Objects.equals(leftTopBounds, other.leftTopBounds) && Objects.equals(rightBottomBounds, other.rightBottomBounds) && leftTopTaskId == other.leftTopTaskId && rightBottomTaskId == other.rightBottomTaskId; } @Override public int hashCode() { return Objects.hash(leftTopBounds, rightBottomBounds, leftTopTaskId, rightBottomTaskId); } @Override public String toString() { return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n" Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static java.lang.Integer.MAX_VALUE; Loading Loading @@ -82,6 +83,36 @@ public class RecentTasksControllerTest extends ShellTestCase { null /* sizeCompatUI */, Optional.of(mRecentTasksController)); } @Test public void testAddRemoveSplitNotifyChange() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); setRawList(t1, t2); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, mock(StagedSplitBounds.class)); verify(mRecentTasksController).notifyRecentTasksChanged(); reset(mRecentTasksController); mRecentTasksController.removeSplitPair(t1.taskId); verify(mRecentTasksController).notifyRecentTasksChanged(); } @Test public void testAddSameSplitBoundsInfoSkipNotifyChange() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2); setRawList(t1, t2); // Verify only one update if the split info is the same StagedSplitBounds bounds1 = new StagedSplitBounds(new Rect(0, 0, 50, 50), new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds1); StagedSplitBounds bounds2 = new StagedSplitBounds(new Rect(0, 0, 50, 50), new Rect(50, 50, 100, 100), t1.taskId, t2.taskId); mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds2); verify(mRecentTasksController, times(1)).notifyRecentTasksChanged(); } @Test public void testGetRecentTasks() { ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1); Loading