Merge "Invalidate recent tasks when the splits (or split info) changes" into sc-v2-dev

This commit is contained in:
Winson Chung
2021-11-19 21:25:33 +00:00
committed by Android (Google) Code Review
3 changed files with 59 additions and 1 deletions

View File

@@ -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);
@@ -121,6 +126,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
mSplitTasks.put(taskId2, taskId1);
mTaskSplitBoundsMap.put(taskId1, splitBounds);
mTaskSplitBoundsMap.put(taskId2, splitBounds);
notifyRecentTasksChanged();
}
/**
@@ -133,6 +139,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
mSplitTasks.delete(pairedTaskId);
mTaskSplitBoundsMap.remove(taskId);
mTaskSplitBoundsMap.remove(pairedTaskId);
notifyRecentTasksChanged();
}
}
@@ -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,

View File

@@ -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
@@ -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"

View File

@@ -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;
@@ -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);