Merge "Move pip behind home stack on dismiss" into rvc-dev

This commit is contained in:
Evan Rosky
2020-05-28 02:08:16 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 18 deletions

View File

@@ -943,19 +943,7 @@ class ActivityStack extends Task {
// task's ordering. However, we still need to move 'task' to back. The intention is that // 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 // 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. // is not a child of this, reparent 'task' to the back of the home task's actual parent.
final ActivityStack home = displayArea.getOrCreateRootHomeTask(); displayArea.positionTaskBehindHome((ActivityStack) task);
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");
}
} }
// TODO: Should each user have there own stacks? // TODO: Should each user have there own stacks?

View File

@@ -1441,11 +1441,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
try { try {
stack.setWindowingMode(WINDOWING_MODE_UNDEFINED); stack.setWindowingMode(WINDOWING_MODE_UNDEFINED);
stack.setBounds(null); stack.setBounds(null);
if (toDisplay.getDisplayId() != stack.getDisplayId()) { toDisplay.getDefaultTaskDisplayArea().positionTaskBehindHome(stack);
stack.reparent(toDisplay.getDefaultTaskDisplayArea(), false /* onTop */);
} else {
toDisplay.getDefaultTaskDisplayArea().positionStackAtBottom(stack);
}
// Follow on the workaround: activities are kept force hidden till the new windowing // Follow on the workaround: activities are kept force hidden till the new windowing
// mode is set. // mode is set.

View File

@@ -765,6 +765,32 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
onStackOrderChanged(stack); 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) { ActivityStack getStack(int rootTaskId) {
for (int i = getStackCount() - 1; i >= 0; --i) { for (int i = getStackCount() - 1; i >= 0; --i) {
final ActivityStack stack = getStackAt(i); final ActivityStack stack = getStackAt(i);