summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Rosky <erosky@google.com>2020-05-28 03:17:02 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-05-28 03:17:02 +0000
commit9df46f89cf3cb15ff1197ceefe54726bd04f13e2 (patch)
tree72a0672f33d6aa30081fe1c3350d01757fd370d6
parentcf5fe8cd523b4dafdd2275dd71aaa15f9dad6964 (diff)
parent73b31a5a0bd622958032dbd6bc2272dcd77121ff (diff)
Merge "Move pip behind home stack on dismiss" into rvc-dev am: 8b13052ddf am: be6d2b6316 am: 895093cea5 am: 73b31a5a0b
Change-Id: I43ef26f6c756d320240a63bb639b88270aef6829
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java14
-rw-r--r--services/core/java/com/android/server/wm/ActivityStackSupervisor.java6
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java26
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);