Merge "Return the correct root task when start activity from recents" into sc-v2-dev am: 83c1ab8a4b am: 28c844526c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15799665

Change-Id: I9c2ed10d948c336ff6a669d526c5da70c5c179d5
This commit is contained in:
TreeHugger Robot
2021-09-17 20:54:18 +00:00
committed by Automerger Merge Worker
2 changed files with 13 additions and 11 deletions

View File

@@ -1095,29 +1095,27 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
return rootTask;
}
} else if (candidateTask != null) {
final Task rootTask = candidateTask;
final int position = onTop ? POSITION_TOP : POSITION_BOTTOM;
final Task launchRootTask = getLaunchRootTask(windowingMode, activityType, options,
sourceTask, launchFlags);
if (launchRootTask != null) {
if (rootTask.getParent() == null) {
launchRootTask.addChild(rootTask, position);
} else if (rootTask.getParent() != launchRootTask) {
rootTask.reparent(launchRootTask, position);
if (candidateTask.getParent() == null) {
launchRootTask.addChild(candidateTask, position);
} else if (candidateTask.getParent() != launchRootTask) {
candidateTask.reparent(launchRootTask, position);
}
} else if (rootTask.getDisplayArea() != this || !rootTask.isRootTask()) {
if (rootTask.getParent() == null) {
addChild(rootTask, position);
} else if (candidateTask.getDisplayArea() != this || !candidateTask.isRootTask()) {
if (candidateTask.getParent() == null) {
addChild(candidateTask, position);
} else {
rootTask.reparent(this, onTop);
candidateTask.reparent(this, onTop);
}
}
// Update windowing mode if necessary, e.g. moving a pinned task to fullscreen.
if (candidateTask.getWindowingMode() != windowingMode) {
candidateTask.setWindowingMode(windowingMode);
}
return rootTask;
return candidateTask.getRootTask();
}
return new Task.Builder(mAtmService)
.setWindowingMode(windowingMode)

View File

@@ -355,6 +355,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
throw new IllegalArgumentException("reparent: can't reparent to null " + this);
}
if (newParent == this) {
throw new IllegalArgumentException("Can not reparent to itself " + this);
}
final WindowContainer oldParent = mParent;
if (mParent == newParent) {
throw new IllegalArgumentException("WC=" + this + " already child of " + mParent);