From 56d8d16ce61af340f4d6af641e1d784794a42464 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Tue, 30 May 2017 11:12:20 -0700 Subject: [PATCH] Set correct task remove mode when reparenting If we are reparenting a task to a stack and the stack is at the front or will be at the front, then set the the remove mode to REMOVE_TASK_MODE_MOVING_TO_TOP so we don't try to move the focus to another stack and resume another activity. Change-Id: Iddd7464dfff128544f2f70394ccd538b567fe58d Fixes: 62088341 Test: ActivityManagerAppConfigurationTests Test: go/wm-smoke --- .../core/java/com/android/server/am/ActivityStack.java | 2 +- services/core/java/com/android/server/am/TaskRecord.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 93e1ab4629458..9db957c427f0f 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -244,7 +244,7 @@ class ActivityStack extends ConfigurationContai static final int REMOVE_TASK_MODE_MOVING = 1; // Similar to {@link #REMOVE_TASK_MODE_MOVING} and the task will be added to the top of its new // stack and the new stack will be on top of all stacks. - private static final int REMOVE_TASK_MODE_MOVING_TO_TOP = 2; + static final int REMOVE_TASK_MODE_MOVING_TO_TOP = 2; // The height/width divide used when fitting a task within a bounds with method // {@link #fitWithinBounds}. diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 7eec945a6cbb0..e81e6d7334b34 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -115,6 +115,7 @@ import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.RECENTS_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN; import static com.android.server.am.ActivityStack.REMOVE_TASK_MODE_MOVING; +import static com.android.server.am.ActivityStack.REMOVE_TASK_MODE_MOVING_TO_TOP; import static com.android.server.am.ActivityStackSupervisor.PAUSE_IMMEDIATELY; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; @@ -673,8 +674,11 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta mWindowContainerController.reparent(toStack.getWindowContainerController(), position, moveStackMode == REPARENT_MOVE_STACK_TO_FRONT); + final boolean moveStackToFront = moveStackMode == REPARENT_MOVE_STACK_TO_FRONT + || (moveStackMode == REPARENT_KEEP_STACK_AT_FRONT && (wasFocused || wasFront)); // Move the task - sourceStack.removeTask(this, reason, REMOVE_TASK_MODE_MOVING); + sourceStack.removeTask(this, reason, moveStackToFront + ? REMOVE_TASK_MODE_MOVING_TO_TOP : REMOVE_TASK_MODE_MOVING); toStack.addTask(this, position, false /* schedulePictureInPictureModeChange */, reason); if (schedulePictureInPictureModeChange) { @@ -693,8 +697,6 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta // If the task had focus before (or we're requested to move focus), move focus to the // new stack by moving the stack to the front. - final boolean moveStackToFront = moveStackMode == REPARENT_MOVE_STACK_TO_FRONT - || (moveStackMode == REPARENT_KEEP_STACK_AT_FRONT && (wasFocused || wasFront)); if (r != null) { toStack.moveToFrontAndResumeStateIfNeeded(r, moveStackToFront, wasResumed, wasPaused, reason);