Loading services/core/java/com/android/server/wm/Task.java +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading services/tests/wmtests/src/com/android/server/wm/TaskTests.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading
services/core/java/com/android/server/wm/Task.java +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading
services/tests/wmtests/src/com/android/server/wm/TaskTests.java +14 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading