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) {
|
if (taskId1 == taskId2) {
|
||||||
return;
|
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
|
// Remove any previous pairs
|
||||||
removeSplitPair(taskId1);
|
removeSplitPair(taskId1);
|
||||||
removeSplitPair(taskId2);
|
removeSplitPair(taskId2);
|
||||||
@@ -121,6 +126,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
|
|||||||
mSplitTasks.put(taskId2, taskId1);
|
mSplitTasks.put(taskId2, taskId1);
|
||||||
mTaskSplitBoundsMap.put(taskId1, splitBounds);
|
mTaskSplitBoundsMap.put(taskId1, splitBounds);
|
||||||
mTaskSplitBoundsMap.put(taskId2, splitBounds);
|
mTaskSplitBoundsMap.put(taskId2, splitBounds);
|
||||||
|
notifyRecentTasksChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,6 +139,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
|
|||||||
mSplitTasks.delete(pairedTaskId);
|
mSplitTasks.delete(pairedTaskId);
|
||||||
mTaskSplitBoundsMap.remove(taskId);
|
mTaskSplitBoundsMap.remove(taskId);
|
||||||
mTaskSplitBoundsMap.remove(pairedTaskId);
|
mTaskSplitBoundsMap.remove(pairedTaskId);
|
||||||
|
notifyRecentTasksChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +224,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
|
|||||||
}
|
}
|
||||||
|
|
||||||
final int pairedTaskId = mSplitTasks.get(taskInfo.taskId);
|
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);
|
final ActivityManager.RecentTaskInfo pairedTaskInfo = rawMapping.get(pairedTaskId);
|
||||||
rawMapping.remove(pairedTaskId);
|
rawMapping.remove(pairedTaskId);
|
||||||
recentTasks.add(new GroupedRecentTaskInfo(taskInfo, pairedTaskInfo,
|
recentTasks.add(new GroupedRecentTaskInfo(taskInfo, pairedTaskInfo,
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ import android.graphics.Rect;
|
|||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Container of various information needed to display split screen
|
* Container of various information needed to display split screen
|
||||||
* tasks/leashes/etc in Launcher
|
* tasks/leashes/etc in Launcher
|
||||||
@@ -92,6 +94,24 @@ public class StagedSplitBounds implements Parcelable {
|
|||||||
return 0;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n"
|
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.mock;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import static java.lang.Integer.MAX_VALUE;
|
import static java.lang.Integer.MAX_VALUE;
|
||||||
@@ -82,6 +83,36 @@ public class RecentTasksControllerTest extends ShellTestCase {
|
|||||||
null /* sizeCompatUI */, Optional.of(mRecentTasksController));
|
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
|
@Test
|
||||||
public void testGetRecentTasks() {
|
public void testGetRecentTasks() {
|
||||||
ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1);
|
ActivityManager.RecentTaskInfo t1 = makeTaskInfo(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user