Merge "Preserve task when clearing top activities" into tm-dev

This commit is contained in:
Riddle Hsu
2022-03-15 16:15:38 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 0 deletions

View File

@@ -1630,12 +1630,16 @@ class Task extends TaskFragment {
}
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();
final ActivityRecord result;
try {
result = clearTopActivities(newR, launchFlags);
} finally {
mTaskSupervisor.endDeferResume();
mReuseTask = false;
}
return result;
}

View File

@@ -258,6 +258,20 @@ public class TaskTests extends WindowTestsBase {
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
public void testRemoveChildForOverlayTask() {
final Task task = createTask(mDisplayContent);