diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskDisplayArea.java | 5 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java | 12 |
2 files changed, 14 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 02e796904b16..516f52f78a89 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1114,7 +1114,10 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { // If a task is launching from a created-by-organizer task, it should be launched into the // same created-by-organizer task as well. Unless, the candidate task is already positioned // in the another adjacent task. - if (sourceTask != null) { + if (sourceTask != null && (candidateTask == null + // A pinned task relaunching should be handled by its task organizer. Skip fallback + // launch target of a pinned task from source task. + || candidateTask.getWindowingMode() != WINDOWING_MODE_PINNED)) { Task launchTarget = sourceTask.getCreatedByOrganizerTask(); if (launchTarget != null && launchTarget.getAdjacentTaskFragment() != null) { if (candidateTask != null) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java index 2a9fcb9d070b..7f09606d1c3a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java @@ -762,12 +762,20 @@ public class TaskDisplayAreaTests extends WindowTestsBase { Task actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */, 0 /* launchFlags */, candidateTask); - assertSame(rootTask, actualRootTask.getRootTask()); + assertSame(rootTask, actualRootTask); // Verify the launch root task without candidate task actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */, 0 /* launchFlags */); - assertSame(adjacentRootTask, actualRootTask.getRootTask()); + assertSame(adjacentRootTask, actualRootTask); + + final Task pinnedTask = createTask( + mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD); + // Verify not adjusting launch target for pinned candidate task + actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED, + ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */, + 0 /* launchFlags */, pinnedTask /* candidateTask */); + assertNull(actualRootTask); } } |