Merge "Invalidate recent tasks when the splits (or split info) changes" into sc-v2-dev
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user