Merge "Preserve task when clearing top activities" into tm-dev
This commit is contained in:
@@ -1630,12 +1630,16 @@ class Task extends TaskFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ActivityRecord performClearTop(ActivityRecord newR, int launchFlags) {
|
ActivityRecord performClearTop(ActivityRecord newR, int launchFlags) {
|
||||||
|
// The task should be preserved for putting new activity in case the last activity is
|
||||||
|
// finished if it is normal launch mode and not single top ("clear-task-top").
|
||||||
|
mReuseTask = true;
|
||||||
mTaskSupervisor.beginDeferResume();
|
mTaskSupervisor.beginDeferResume();
|
||||||
final ActivityRecord result;
|
final ActivityRecord result;
|
||||||
try {
|
try {
|
||||||
result = clearTopActivities(newR, launchFlags);
|
result = clearTopActivities(newR, launchFlags);
|
||||||
} finally {
|
} finally {
|
||||||
mTaskSupervisor.endDeferResume();
|
mTaskSupervisor.endDeferResume();
|
||||||
|
mReuseTask = false;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,6 +258,20 @@ public class TaskTests extends WindowTestsBase {
|
|||||||
assertNull(task1.isInTask(activity2));
|
assertNull(task1.isInTask(activity2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPerformClearTop() {
|
||||||
|
final Task task = createTask(mDisplayContent);
|
||||||
|
final ActivityRecord activity1 = new ActivityBuilder(mAtm).setTask(task).build();
|
||||||
|
final ActivityRecord activity2 = new ActivityBuilder(mAtm).setTask(task).build();
|
||||||
|
// Detach from process so the activities can be removed from hierarchy when finishing.
|
||||||
|
activity1.detachFromProcess();
|
||||||
|
activity2.detachFromProcess();
|
||||||
|
assertNull(task.performClearTop(activity1, 0 /* launchFlags */));
|
||||||
|
assertFalse(task.hasChild());
|
||||||
|
// In real case, the task should be preserved for adding new activity.
|
||||||
|
assertTrue(task.isAttached());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRemoveChildForOverlayTask() {
|
public void testRemoveChildForOverlayTask() {
|
||||||
final Task task = createTask(mDisplayContent);
|
final Task task = createTask(mDisplayContent);
|
||||||
|
|||||||
Reference in New Issue
Block a user