diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index c7ca180bfa14e..4a1a922c8a020 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1095,29 +1095,27 @@ final class TaskDisplayArea extends DisplayArea { 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) diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 2882a23910663..cdfa5aa84a95f 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -354,6 +354,10 @@ class 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);