Merge "Fix stack reference is not updated if the task is organized" into rvc-dev am: 35f762fb1f

Change-Id: I4ebd5fd4bc57a1d4899ea843c38b0a2a84445642
This commit is contained in:
Riddle Hsu
2020-04-28 14:36:12 +00:00
committed by Automerger Merge Worker
2 changed files with 24 additions and 5 deletions

View File

@@ -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;

View File

@@ -233,6 +233,25 @@ public class ActivityStackTests extends ActivityTestsBase {
assertEquals(homeRoot.getParent(), secondaryTask.getParent());
}
@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(