summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/Task.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java19
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 */);