diff options
| author | Evan Rosky <erosky@google.com> | 2020-05-28 03:17:02 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-28 03:17:02 +0000 |
| commit | 9df46f89cf3cb15ff1197ceefe54726bd04f13e2 (patch) | |
| tree | 72a0672f33d6aa30081fe1c3350d01757fd370d6 | |
| parent | cf5fe8cd523b4dafdd2275dd71aaa15f9dad6964 (diff) | |
| parent | 73b31a5a0bd622958032dbd6bc2272dcd77121ff (diff) | |
Merge "Move pip behind home stack on dismiss" into rvc-dev am: 8b13052ddf am: be6d2b6316 am: 895093cea5 am: 73b31a5a0b
Change-Id: I43ef26f6c756d320240a63bb639b88270aef6829
3 files changed, 28 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index adc808c7bcff..8688ef428141 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -943,19 +943,7 @@ class ActivityStack extends Task { // task's ordering. However, we still need to move 'task' to back. The intention is that // this ends up behind the home-task so that it is made invisible; so, if the home task // is not a child of this, reparent 'task' to the back of the home task's actual parent. - final ActivityStack home = displayArea.getOrCreateRootHomeTask(); - final WindowContainer homeParent = home.getParent(); - final Task homeParentTask = homeParent != null ? homeParent.asTask() : null; - if (homeParentTask == null) { - ((ActivityStack) task).reparent(displayArea, false /* onTop */); - } else if (homeParentTask == this) { - // Apparently reparent early-outs if same stack, so we have to explicitly reorder. - positionChildAtBottom(task); - } else { - task.reparent((ActivityStack) homeParentTask, false /* toTop */, - REPARENT_LEAVE_STACK_IN_PLACE, false /* animate */, false /* deferResume */, - "moveToBack"); - } + displayArea.positionTaskBehindHome((ActivityStack) task); } // TODO: Should each user have there own stacks? diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 9ceba34e209f..2a266c4cd715 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -1441,11 +1441,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { try { stack.setWindowingMode(WINDOWING_MODE_UNDEFINED); stack.setBounds(null); - if (toDisplay.getDisplayId() != stack.getDisplayId()) { - stack.reparent(toDisplay.getDefaultTaskDisplayArea(), false /* onTop */); - } else { - toDisplay.getDefaultTaskDisplayArea().positionStackAtBottom(stack); - } + toDisplay.getDefaultTaskDisplayArea().positionTaskBehindHome(stack); // Follow on the workaround: activities are kept force hidden till the new windowing // mode is set. diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 9130483325b2..6dde5b0d4879 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -765,6 +765,32 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> { onStackOrderChanged(stack); } + /** + * Moves/reparents `task` to the back of whatever container the home stack is in. This is for + * when we just want to move a task to "the back" vs. a specific place. The primary use-case + * is to make sure that moved-to-back apps go into secondary split when in split-screen mode. + */ + void positionTaskBehindHome(ActivityStack task) { + final ActivityStack home = getOrCreateRootHomeTask(); + final WindowContainer homeParent = home.getParent(); + final Task homeParentTask = homeParent != null ? homeParent.asTask() : null; + if (homeParentTask == null) { + // reparent throws if parent didn't change... + if (task.getParent() == this) { + positionStackAtBottom(task); + } else { + task.reparent(this, false /* onTop */); + } + } else if (homeParentTask == task.getParent()) { + // Apparently reparent early-outs if same stack, so we have to explicitly reorder. + ((ActivityStack) homeParentTask).positionChildAtBottom(task); + } else { + task.reparent((ActivityStack) homeParentTask, false /* toTop */, + Task.REPARENT_LEAVE_STACK_IN_PLACE, false /* animate */, + false /* deferResume */, "positionTaskBehindHome"); + } + } + ActivityStack getStack(int rootTaskId) { for (int i = getStackCount() - 1; i >= 0; --i) { final ActivityStack stack = getStackAt(i); |
