diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 10 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java | 19 |
2 files changed, 24 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 982df4bb7f3c..5a27f47b28aa 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1431,15 +1431,15 @@ class Task extends WindowContainer<WindowContainer> { @Override void removeChild(WindowContainer child) { - // A rootable child task that is now being removed from an organized task. Making sure - // the stack references is keep updated. - if (mTaskOrganizer != null && mCreatedByOrganizer && child.asTask() != null) { - getDisplayArea().removeStackReferenceIfNeeded((ActivityStack) child); - } removeChild(child, "removeChild"); } void removeChild(WindowContainer r, String reason) { + // A rootable child task that is now being removed from an organized task. Making sure + // the stack references is keep updated. + if (mTaskOrganizer != null && mCreatedByOrganizer && r.asTask() != null) { + getDisplayArea().removeStackReferenceIfNeeded((ActivityStack) r); + } if (!mChildren.contains(r)) { Slog.e(TAG, "removeChild: r=" + r + " not found in t=" + this); return; diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java index 6c209e496cf6..5227f3c885ba 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java @@ -234,6 +234,25 @@ public class ActivityStackTests extends ActivityTestsBase { } @Test + public void testRemoveOrganizedTask_UpdateStackReference() { + final ActivityStack rootHomeTask = mDefaultTaskDisplayArea.getRootHomeTask(); + final ActivityRecord homeActivity = new ActivityBuilder(mService) + .setStack(rootHomeTask) + .setCreateTask(true) + .build(); + final ActivityStack secondaryStack = (ActivityStack) WindowContainer.fromBinder( + mService.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(), + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token.asBinder()); + + rootHomeTask.reparent(secondaryStack, POSITION_TOP); + assertEquals(secondaryStack, rootHomeTask.getParent()); + + // This should call to {@link TaskDisplayArea#removeStackReferenceIfNeeded}. + homeActivity.removeImmediately(); + assertNull(mDefaultTaskDisplayArea.getRootHomeTask()); + } + + @Test public void testStackInheritsDisplayWindowingMode() { final ActivityStack primarySplitScreen = mDefaultTaskDisplayArea.createStack( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */); |