Merge "Return the correct root task when start activity from recents" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-09-16 01:35:22 +00:00
committed by Android (Google) Code Review
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

@@ -354,6 +354,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);