taskReturnToType be gone!
The activity hierarchy now maintains visual ordering since most task
have their own stack, so no need for taskReturnToType complexity.
Also, we handle the API FLAG_ACTIVITY_TASK_ON_HOME by moving the
home stack forward whenever a stack with the root task intent with
that flag is movedToFront.
Bug: 64146578
Fixes: 67931573
Test: go/wm-smoke
Test: Existing test pass.
Change-Id: I465df9cb55830ac27bba330b221f730c6f1e9450
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index eed1e6b..ecb12d6 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8082,7 +8082,7 @@
// Adjust the source bounds by the insets for the transition down
final Rect sourceBounds = new Rect(r.pictureInPictureArgs.getSourceRectHint());
mStackSupervisor.moveActivityToPinnedStackLocked(r, sourceBounds, aspectRatio,
- true /* moveHomeStackToFront */, "enterPictureInPictureMode");
+ "enterPictureInPictureMode");
final PinnedActivityStack stack = r.getStack();
stack.setPictureInPictureAspectRatio(aspectRatio);
stack.setPictureInPictureActions(actions);
@@ -10230,11 +10230,7 @@
Slog.e(TAG, "moveTaskToFront: Attempt to violate Lock Task Mode");
return;
}
- final ActivityRecord prev = mStackSupervisor.topRunningActivityLocked();
- if (prev != null) {
- task.setTaskToReturnTo(prev);
- }
- mStackSupervisor.findTaskToMoveToFrontLocked(task, flags, options, "moveTaskToFront",
+ mStackSupervisor.findTaskToMoveToFront(task, flags, options, "moveTaskToFront",
false /* forceNonResizable */);
final ActivityRecord topActivity = task.getTopActivity();
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index b885eab..b47f819 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -277,6 +277,7 @@
ActivityState state; // current state we are in
Bundle icicle; // last saved activity state
PersistableBundle persistentState; // last persistently saved activity state
+ // TODO: See if this is still needed.
boolean frontOfTask; // is this the root activity of its task?
boolean launchFailed; // set if a launched failed, to abort on 2nd try
boolean haveState; // have we gotten the last activity state?
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index f05243b..eea5ca7 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -16,13 +16,10 @@
package com.android.server.am;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
@@ -505,7 +502,7 @@
removeFromDisplay();
mTmpRect2.setEmpty();
postAddToDisplay(activityDisplay, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop);
- adjustFocusToNextFocusableStackLocked("reparent", true /* allowFocusSelf */);
+ adjustFocusToNextFocusableStack("reparent", true /* allowFocusSelf */);
mStackSupervisor.resumeFocusedStackTopActivityLocked();
// Update visibility of activities before notifying WM. This way it won't try to resize
// windows that are no longer visible.
@@ -834,6 +831,12 @@
return mDisplayId == DEFAULT_DISPLAY;
}
+ private boolean returnsToHomeStack() {
+ return !inMultiWindowMode()
+ && !mTaskHistory.isEmpty()
+ && mTaskHistory.get(0).returnsToHomeStack();
+ }
+
void moveToFront(String reason) {
moveToFront(reason, null);
}
@@ -847,6 +850,12 @@
return;
}
+ if (!isActivityTypeHome() && returnsToHomeStack()) {
+ // Make sure the home stack is behind this stack since that is where we should return to
+ // when this stack is no longer visible.
+ mStackSupervisor.moveHomeStackToFront(reason + " returnToHome");
+ }
+
getDisplay().positionChildAtTop(this);
mStackSupervisor.setFocusStackUnchecked(reason, this);
if (task != null) {
@@ -1498,11 +1507,9 @@
* needed. A stack is considered translucent if it don't contain a visible or
* starting (about to be visible) activity that is fullscreen (opaque).
* @param starting The currently starting activity or null if there is none.
- * TODO: Can be removed once we are no longer using returnToType for back functionality
- * @param stackBehind The stack directly behind this one.
*/
@VisibleForTesting
- boolean isStackTranslucent(ActivityRecord starting, ActivityStack stackBehind) {
+ boolean isStackTranslucent(ActivityRecord starting) {
if (!isAttached() || mForceHidden) {
return true;
}
@@ -1529,16 +1536,6 @@
// that is visible.
return false;
}
-
- final boolean stackBehindHomeOrRecent = stackBehind != null
- && stackBehind.isHomeOrRecentsStack();
- if (!isHomeOrRecentsStack() && r.frontOfTask && task.isOverHomeStack()
- && !stackBehindHomeOrRecent && !isActivityTypeAssistant()) {
- // Stack isn't translucent if it's top activity should have the home stack
- // behind it and the stack currently behind it isn't the home or recents stack
- // or the assistant stack.
- return false;
- }
}
}
return true;
@@ -1590,7 +1587,7 @@
final ActivityStack stackBehind = i > 0 ? display.getChildAt(i - 1) : null;
if (otherWindowingMode == WINDOWING_MODE_FULLSCREEN) {
- if (other.isStackTranslucent(starting, stackBehind)) {
+ if (other.isStackTranslucent(starting)) {
// Can be visible behind a translucent fullscreen stack.
continue;
}
@@ -1598,7 +1595,7 @@
} else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
&& !gotOpaqueSplitScreenPrimary) {
gotOpaqueSplitScreenPrimary =
- !other.isStackTranslucent(starting, stackBehind);
+ !other.isStackTranslucent(starting);
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
&& gotOpaqueSplitScreenPrimary) {
// Can not be visible behind another opaque stack in split-screen-primary mode.
@@ -1607,7 +1604,7 @@
} else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
&& !gotOpaqueSplitScreenSecondary) {
gotOpaqueSplitScreenSecondary =
- !other.isStackTranslucent(starting, stackBehind);
+ !other.isStackTranslucent(starting);
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
&& gotOpaqueSplitScreenSecondary) {
// Can not be visible behind another opaque stack in split-screen-secondary mode.
@@ -1643,6 +1640,7 @@
* Make sure that all activities that need to be visible (that is, they
* currently can be seen by the user) actually are.
*/
+ // TODO: Should be re-worked based on the fact that each task as a stack in most cases.
final void ensureActivitiesVisibleLocked(ActivityRecord starting, int configChanges,
boolean preserveWindows) {
mTopActivityOccludesKeyguard = false;
@@ -1687,7 +1685,7 @@
visibleIgnoringKeyguard, isTop);
if (visibleIgnoringKeyguard) {
behindFullscreenActivity = updateBehindFullscreen(!stackShouldBeVisible,
- behindFullscreenActivity, task, r);
+ behindFullscreenActivity, r);
}
if (reallyVisible) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Make visible? " + r
@@ -1746,16 +1744,6 @@
// show activities in the next application stack behind them vs. another
// task in the home stack like recents.
behindFullscreenActivity = true;
- } else if (windowingMode == WINDOWING_MODE_FULLSCREEN
- || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
- if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Skipping after task=" + task
- + " returning to non-application type=" + task.getTaskToReturnTo());
- // Once we reach a fullscreen stack task that has a running activity and should
- // return to another stack task, then no other activities behind that one should
- // be visible.
- if (task.topRunningActivityLocked() != null && !task.returnsToStandardTask()) {
- behindFullscreenActivity = true;
- }
}
}
@@ -1791,24 +1779,6 @@
}
/**
- * Returns true if we try to maintain focus in the current stack when the top activity finishes.
- */
- private boolean keepFocusInStackIfPossible() {
- final int windowingMode = getWindowingMode();
- return windowingMode == WINDOWING_MODE_FREEFORM
- || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
- || windowingMode == WINDOWING_MODE_PINNED;
- }
-
- /**
- * Returns true if the top task in the task is allowed to return home when finished and
- * there are other tasks in the stack.
- */
- boolean allowTopTaskToReturnHome() {
- return !inPinnedWindowingMode();
- }
-
- /**
* @return the top most visible activity that wants to dismiss Keyguard
*/
ActivityRecord getTopDismissingKeyguardActivity() {
@@ -1969,18 +1939,13 @@
}
private boolean updateBehindFullscreen(boolean stackInvisible, boolean behindFullscreenActivity,
- TaskRecord task, ActivityRecord r) {
+ ActivityRecord r) {
if (r.fullscreen) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Fullscreen: at " + r
+ " stackInvisible=" + stackInvisible
+ " behindFullscreenActivity=" + behindFullscreenActivity);
// At this point, nothing else needs to be shown in this task.
behindFullscreenActivity = true;
- } else if (!isHomeOrRecentsStack() && r.frontOfTask && task.isOverHomeStack()) {
- if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Showing home: at " + r
- + " stackInvisible=" + stackInvisible
- + " behindFullscreenActivity=" + behindFullscreenActivity);
- behindFullscreenActivity = true;
}
return behindFullscreenActivity;
}
@@ -2139,7 +2104,7 @@
final boolean hasRunningActivity = next != null;
// TODO: Maybe this entire condition can get removed?
- if (hasRunningActivity && getDisplay() == null) {
+ if (hasRunningActivity && !isAttached()) {
return false;
}
@@ -2169,28 +2134,6 @@
return false;
}
- final TaskRecord nextTask = next.getTask();
- final TaskRecord prevTask = prev != null ? prev.getTask() : null;
- if (prevTask != null && prevTask.getStack() == this &&
- prevTask.isOverHomeStack() && prev.finishing && prev.frontOfTask) {
- if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
- if (prevTask == nextTask) {
- prevTask.setFrontOfTask();
- } else if (prevTask != topTask()) {
- // This task is going away but it was supposed to return to the home stack.
- // Now the task above it has to return to the home task instead.
- final int taskNdx = mTaskHistory.indexOf(prevTask) + 1;
- mTaskHistory.get(taskNdx).setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- } else if (!isOnHomeDisplay()) {
- return false;
- } else if (!isActivityTypeHome()){
- if (DEBUG_STATES) Slog.d(TAG_STATES,
- "resumeTopActivityLocked: Launching home next");
- return isOnHomeDisplay() &&
- mStackSupervisor.resumeHomeStackTask(prev, "prevFinished");
- }
- }
-
// If we are sleeping, and there is no resumed activity, and the top
// activity is paused, well that is the state we want.
if (shouldSleepOrShutDownActivities()
@@ -2574,7 +2517,7 @@
private boolean resumeTopActivityInNextFocusableStack(ActivityRecord prev,
ActivityOptions options, String reason) {
- if (adjustFocusToNextFocusableStackLocked(reason)) {
+ if (adjustFocusToNextFocusableStack(reason)) {
// Try to move focus to the next visible stack with a running activity if this
// stack is not covering the entire screen or is on a secondary display (with no home
// stack).
@@ -2648,7 +2591,6 @@
}
private void insertTaskAtTop(TaskRecord task, ActivityRecord starting) {
- updateTaskReturnToForTopInsertion(task);
// TODO: Better place to put all the code below...may be addTask...
mTaskHistory.remove(task);
// Now put task at top.
@@ -2659,57 +2601,6 @@
true /* includingParents */);
}
- /**
- * Updates the {@param task}'s return type before it is moved to the top.
- */
- private void updateTaskReturnToForTopInsertion(TaskRecord task) {
- boolean isLastTaskOverHome = false;
- // If the moving task is over the home or assistant stack, transfer its return type to next
- // task so that they return to the same stack
- if (task.isOverHomeStack() || task.isOverAssistantStack()) {
- final TaskRecord nextTask = getNextTask(task);
- if (nextTask != null) {
- nextTask.setTaskToReturnTo(task.getTaskToReturnTo());
- } else {
- isLastTaskOverHome = true;
- }
- }
-
- // If this is not on the default display, then just set the return type to application
- if (!isOnHomeDisplay()) {
- task.setTaskToReturnTo(ACTIVITY_TYPE_STANDARD);
- return;
- }
-
- final ActivityStack lastStack = mStackSupervisor.getLastStack();
-
- // If there is no last task, do not set task to return to
- if (lastStack == null) {
- return;
- }
-
- // If the task was launched from the assistant stack, set the return type to assistant
- if (lastStack.isActivityTypeAssistant()) {
- task.setTaskToReturnTo(ACTIVITY_TYPE_ASSISTANT);
- return;
- }
-
- // If this is being moved to the top by another activity or being launched from the home
- // activity, set mTaskToReturnTo accordingly.
- final boolean fromHomeOrRecents = lastStack.isHomeOrRecentsStack();
- final TaskRecord topTask = lastStack.topTask();
- if (!isHomeOrRecentsStack() && (fromHomeOrRecents || topTask() != task)) {
- // If it's a last task over home - we default to keep its return to type not to
- // make underlying task focused when this one will be finished.
- int returnToType = isLastTaskOverHome
- ? task.getTaskToReturnTo() : ACTIVITY_TYPE_STANDARD;
- if (fromHomeOrRecents && allowTopTaskToReturnHome()) {
- returnToType = topTask == null ? ACTIVITY_TYPE_HOME : topTask.getActivityType();
- }
- task.setTaskToReturnTo(returnToType);
- }
- }
-
final void startActivityLocked(ActivityRecord r, ActivityRecord focusedTopActivity,
boolean newTask, boolean keepCurTransition, ActivityOptions options) {
TaskRecord rTask = r.getTask();
@@ -2979,7 +2870,7 @@
}
mWindowContainerController.positionChildAtBottom(
- targetTask.getWindowContainerController());
+ targetTask.getWindowContainerController(), false /* includingParents */);
replyChainEnd = -1;
} else if (forceReset || finishOnTaskLaunch || clearWhenTaskReset) {
// If the activity should just be removed -- either
@@ -3215,7 +3106,7 @@
}
/** Returns true if the task is one of the task finishing on-top of the top running task. */
- boolean isATopFinishingTask(TaskRecord task) {
+ private boolean isATopFinishingTask(TaskRecord task) {
for (int i = mTaskHistory.size() - 1; i >= 0; --i) {
final TaskRecord current = mTaskHistory.get(i);
final ActivityRecord r = current.topRunningActivityLocked();
@@ -3230,7 +3121,7 @@
return false;
}
- private void adjustFocusedActivityStackLocked(ActivityRecord r, String reason) {
+ private void adjustFocusedActivityStack(ActivityRecord r, String reason) {
if (!mStackSupervisor.isFocusedStack(this) ||
((mResumedActivity != r) && (mResumedActivity != null))) {
return;
@@ -3239,66 +3130,44 @@
final ActivityRecord next = topRunningActivityLocked();
final String myReason = reason + " adjustFocus";
- if (next != r) {
- if (next != null && keepFocusInStackIfPossible() && isFocusable()) {
- // For freeform, docked, and pinned stacks we always keep the focus within the
- // stack as long as there is a running activity.
- return;
- } else {
- // Task is not guaranteed to be non-null. For example, destroying the
- // {@link ActivityRecord} will disassociate the task from the activity.
- final TaskRecord task = r.getTask();
-
- if (task == null) {
- throw new IllegalStateException("activity no longer associated with task:" + r);
- }
-
- final boolean isAssistantOrOverAssistant =
- task.getStack().isActivityTypeAssistant() || task.isOverAssistantStack();
- if (r.frontOfTask && isATopFinishingTask(task)
- && (task.isOverHomeStack() || isAssistantOrOverAssistant)) {
- // For non-fullscreen or assistant stack, we want to move the focus to the next
- // visible stack to prevent the home screen from moving to the top and obscuring
- // other visible stacks.
- if ((!mFullscreen || isAssistantOrOverAssistant)
- && adjustFocusToNextFocusableStackLocked(myReason)) {
- return;
- }
- // Move the home stack to the top if this stack is fullscreen or there is no
- // other visible stack.
- if (task.isOverHomeStack() &&
- mStackSupervisor.moveHomeStackTaskToTop(myReason)) {
- // Activity focus was already adjusted. Nothing else to do...
- return;
- }
- }
- }
+ if (next == r) {
+ mStackSupervisor.moveFocusableActivityStackToFrontLocked(
+ mStackSupervisor.topRunningActivityLocked(), myReason);
+ return;
}
- mStackSupervisor.moveFocusableActivityStackToFrontLocked(
- mStackSupervisor.topRunningActivityLocked(), myReason);
+ if (next != null && isFocusable()) {
+ // Keep focus in stack if we have a top running activity and are focusable.
+ return;
+ }
+
+ // Task is not guaranteed to be non-null. For example, destroying the
+ // {@link ActivityRecord} will disassociate the task from the activity.
+ final TaskRecord task = r.getTask();
+
+ if (task == null) {
+ throw new IllegalStateException("activity no longer associated with task:" + r);
+ }
+
+ // Move focus to next focusable stack if possible.
+ if (adjustFocusToNextFocusableStack(myReason)) {
+ return;
+ }
+
+ // Whatever...go home.
+ mStackSupervisor.moveHomeStackTaskToTop(myReason);
}
/** Find next proper focusable stack and make it focused. */
- private boolean adjustFocusToNextFocusableStackLocked(String reason) {
- return adjustFocusToNextFocusableStackLocked(reason, false /* allowFocusSelf */);
+ private boolean adjustFocusToNextFocusableStack(String reason) {
+ return adjustFocusToNextFocusableStack(reason, false /* allowFocusSelf */);
}
/**
* Find next proper focusable stack and make it focused.
* @param allowFocusSelf Is the focus allowed to remain on the same stack.
*/
- private boolean adjustFocusToNextFocusableStackLocked(String reason, boolean allowFocusSelf) {
- if (isActivityTypeAssistant() && bottomTask() != null
- && bottomTask().returnsToHomeTask()) {
- // If the current stack is the assistant stack, then use the return-to type to determine
- // whether to return to the home screen. This is needed to workaround an issue where
- // launching a fullscreen task (and subequently returning from that task) will cause
- // the fullscreen stack to be found as the next focusable stack below, even if the
- // assistant was launched over home.
- return mStackSupervisor.moveHomeStackTaskToTop(reason);
- }
-
+ private boolean adjustFocusToNextFocusableStack(String reason, boolean allowFocusSelf) {
final ActivityStack stack = mStackSupervisor.getNextFocusableStackLocked(
allowFocusSelf ? null : this);
final String myReason = reason + " adjustFocusToNextFocusableStack";
@@ -3308,22 +3177,12 @@
final ActivityRecord top = stack.topRunningActivityLocked();
- if (stack.isHomeOrRecentsStack() && (top == null || !top.visible)) {
+ if (stack.isActivityTypeHome() && (top == null || !top.visible)) {
// If we will be focusing on the home stack next and its current top activity isn't
- // visible, then use the task return to value to determine the home task to display
- // next.
+ // visible, then use the move the home stack task to top to make the activity visible.
return mStackSupervisor.moveHomeStackTaskToTop(reason);
}
- if (stack.isActivityTypeAssistant() && top != null
- && top.getTask().returnsToHomeTask()) {
- // It is possible for the home stack to not be directly underneath the assistant stack.
- // For example, the assistant may start an activity in the fullscreen stack. Upon
- // returning to the assistant stack, we must ensure that the home stack is underneath
- // when appropriate.
- mStackSupervisor.moveHomeStackTaskToTop("adjustAssistantReturnToHome");
- }
-
stack.moveToFront(myReason);
return true;
}
@@ -3338,7 +3197,7 @@
if (requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null,
"stop-no-history", false)) {
// If {@link requestFinishActivityLocked} returns {@code true},
- // {@link adjustFocusedActivityStackLocked} would have been already called.
+ // {@link adjustFocusedActivityStack} would have been already called.
r.resumeKeyDispatchingLocked();
return;
}
@@ -3350,7 +3209,7 @@
}
if (r.app != null && r.app.thread != null) {
- adjustFocusedActivityStackLocked(r, "stopActivity");
+ adjustFocusedActivityStack(r, "stopActivity");
r.resumeKeyDispatchingLocked();
try {
r.stopped = false;
@@ -3589,7 +3448,7 @@
r.pauseKeyDispatchingLocked();
- adjustFocusedActivityStackLocked(r, "finishActivity");
+ adjustFocusedActivityStack(r, "finishActivity");
finishActivityResultsLocked(r, resultCode, resultData);
@@ -3756,7 +3615,21 @@
}
}
- final boolean shouldUpRecreateTaskLocked(ActivityRecord srec, String destAffinity) {
+ /** @return true if the stack behind this one is a standard activity type. */
+ boolean inFrontOfStandardStack() {
+ final ActivityDisplay display = getDisplay();
+ if (display == null) {
+ return false;
+ }
+ final int index = display.getIndexOf(this);
+ if (index == 0) {
+ return false;
+ }
+ final ActivityStack stackBehind = display.getChildAt(index - 1);
+ return stackBehind.isActivityTypeStandard();
+ }
+
+ boolean shouldUpRecreateTaskLocked(ActivityRecord srec, String destAffinity) {
// Basic case: for simple app-centric recents, we need to recreate
// the task if the affinity has changed.
if (srec == null || srec.getTask().affinity == null ||
@@ -3768,10 +3641,9 @@
// of a document, unless simply finishing it will return them to the the
// correct app behind.
final TaskRecord task = srec.getTask();
- if (srec.frontOfTask && task != null && task.getBaseIntent() != null
- && task.getBaseIntent().isDocument()) {
+ if (srec.frontOfTask && task.getBaseIntent() != null && task.getBaseIntent().isDocument()) {
// Okay, this activity is at the root of its task. What to do, what to do...
- if (!task.returnsToStandardTask()) {
+ if (!inFrontOfStandardStack()) {
// Finishing won't return to an application, so we need to recreate.
return true;
}
@@ -3971,11 +3843,6 @@
+ " onlyHasTaskOverlays=" + onlyHasTaskOverlays);
}
- if (mStackSupervisor.isFocusedStack(this) && task == topTask() &&
- task.isOverHomeStack()) {
- mStackSupervisor.moveHomeStackTaskToTop(reason);
- }
-
// The following block can be executed multiple times if there is more than one overlay.
// {@link ActivityStackSupervisor#removeTaskByIdLocked} handles this by reverse lookup
// of the task by id and exiting early if not found.
@@ -4497,60 +4364,19 @@
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to back transition: task=" + taskId);
- boolean prevIsHome = false;
+ mTaskHistory.remove(tr);
+ mTaskHistory.add(0, tr);
+ updateTaskMovement(tr, false);
- // If true, we should resume the home activity next if the task we are moving to the
- // back is over the home stack. We force to false if the task we are moving to back
- // is the home task and we don't want it resumed after moving to the back.
- final boolean canGoHome = !tr.isActivityTypeHome() && tr.isOverHomeStack();
- if (canGoHome) {
- final TaskRecord nextTask = getNextTask(tr);
- if (nextTask != null) {
- nextTask.setTaskToReturnTo(tr.getTaskToReturnTo());
- } else {
- prevIsHome = true;
- }
- }
-
- boolean requiresMove = mTaskHistory.indexOf(tr) != 0;
- if (requiresMove) {
- mTaskHistory.remove(tr);
- mTaskHistory.add(0, tr);
- updateTaskMovement(tr, false);
-
- mWindowManager.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
- mWindowContainerController.positionChildAtBottom(tr.getWindowContainerController());
- }
+ mWindowManager.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
+ mWindowContainerController.positionChildAtBottom(tr.getWindowContainerController(),
+ true /* includingParents */);
if (inPinnedWindowingMode()) {
mStackSupervisor.removeStack(this);
return true;
}
- // Otherwise, there is an assumption that moving a task to the back moves it behind the
- // home activity. We make sure here that some activity in the stack will launch home.
- int numTasks = mTaskHistory.size();
- for (int taskNdx = numTasks - 1; taskNdx >= 1; --taskNdx) {
- final TaskRecord task = mTaskHistory.get(taskNdx);
- if (task.isOverHomeStack()) {
- break;
- }
- if (taskNdx == 1) {
- // Set the last task before tr to go to home.
- task.setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- }
- }
-
- final TaskRecord task = mResumedActivity != null ? mResumedActivity.getTask() : null;
- if (prevIsHome || (task == tr && canGoHome) || (numTasks <= 1 && isOnHomeDisplay())) {
- if (!mService.mBooting && !mService.mBooted) {
- // Not ready yet!
- return false;
- }
- tr.setTaskToReturnTo(ACTIVITY_TYPE_STANDARD);
- return mStackSupervisor.resumeHomeStackTask(null, "moveTaskToBack");
- }
-
mStackSupervisor.resumeFocusedStackTopActivityLocked();
return true;
}
@@ -4987,14 +4813,6 @@
onActivityRemovedFromStack(record);
}
- final int taskNdx = mTaskHistory.indexOf(task);
- final int topTaskNdx = mTaskHistory.size() - 1;
- if (task.isOverHomeStack() && taskNdx < topTaskNdx) {
- final TaskRecord nextTask = mTaskHistory.get(taskNdx + 1);
- if (!nextTask.isOverHomeStack() && !nextTask.isOverAssistantStack()) {
- nextTask.setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- }
- }
mTaskHistory.remove(task);
removeActivitiesFromLRUListLocked(task);
updateTaskMovement(task, true);
@@ -5024,7 +4842,7 @@
if (isOnHomeDisplay() && mode != REMOVE_TASK_MODE_MOVING_TO_TOP
&& mStackSupervisor.isFocusedStack(this)) {
String myReason = reason + " leftTaskHistoryEmpty";
- if (mFullscreen || !adjustFocusToNextFocusableStackLocked(myReason)) {
+ if (mFullscreen || !adjustFocusToNextFocusableStack(myReason)) {
mStackSupervisor.moveHomeStackToFront(myReason);
}
}
@@ -5097,10 +4915,6 @@
mTaskHistory.add(position, task);
task.setStack(this);
- if (toTop) {
- updateTaskReturnToForTopInsertion(task);
- }
-
updateTaskMovement(task, toTop);
postAddTask(task, prevStack, schedulePictureInPictureModeChange);
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 7a4a0d4..f6aae6e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -678,10 +678,6 @@
return false;
}
- if (prev != null) {
- prev.getTask().setTaskToReturnTo(ACTIVITY_TYPE_STANDARD);
- }
-
mHomeStack.moveHomeStackTaskToTop();
ActivityRecord r = getHomeActivity();
final String myReason = reason + " resumeHomeStackTask";
@@ -2090,21 +2086,26 @@
}
}
- void findTaskToMoveToFrontLocked(TaskRecord task, int flags, ActivityOptions options,
+ void findTaskToMoveToFront(TaskRecord task, int flags, ActivityOptions options,
String reason, boolean forceNonResizeable) {
+ final ActivityStack currentStack = task.getStack();
+ if (currentStack == null) {
+ Slog.e(TAG, "findTaskToMoveToFront: can't move task="
+ + task + " to front. Stack is null");
+ return;
+ }
+
if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) {
mUserLeaving = true;
}
- if ((flags & ActivityManager.MOVE_TASK_WITH_HOME) != 0) {
- // Caller wants the home activity moved with it. To accomplish this,
- // we'll just indicate that this task returns to the home task.
- task.setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- }
- final ActivityStack currentStack = task.getStack();
- if (currentStack == null) {
- Slog.e(TAG, "findTaskToMoveToFrontLocked: can't move task="
- + task + " to front. Stack is null");
- return;
+
+ final ActivityRecord prev = topRunningActivityLocked();
+
+ if ((flags & ActivityManager.MOVE_TASK_WITH_HOME) != 0
+ || (prev != null && prev.isActivityTypeRecents())) {
+ // Caller wants the home activity moved with it or the previous task is recents in which
+ // case we always return home from the task we are moving to the front.
+ moveHomeStackToFront("findTaskToMoveToFront");
}
if (task.isResizeable() && canUseActivityOptionsLaunchBounds(options)) {
@@ -2115,7 +2116,7 @@
if (stack != currentStack) {
task.reparent(stack, ON_TOP, REPARENT_KEEP_STACK_AT_FRONT, !ANIMATE, DEFER_RESUME,
- "findTaskToMoveToFrontLocked");
+ "findTaskToMoveToFront");
stack = currentStack;
// moveTaskToStackUncheckedLocked() should already placed the task on top,
// still need moveTaskToFrontLocked() below for any transition settings.
@@ -2551,13 +2552,6 @@
final int returnToType =
toDisplay.getTopVisibleStackActivityType(WINDOWING_MODE_PINNED);
final boolean isTopTask = i == (size - 1);
- if (inPinnedWindowingMode) {
- // Update the return-to to reflect where the pinned stack task was
- // moved from so that we retain the stack that was previously
- // visible if the pinned stack is recreated.
- // See moveActivityToPinnedStackLocked().
- task.setTaskToReturnTo(returnToType);
- }
// Defer resume until all the tasks have been moved to the fullscreen stack
task.reparent(toStack, ON_TOP, REPARENT_MOVE_STACK_TO_FRONT,
isTopTask /* animate */, DEFER_RESUME,
@@ -3030,12 +3024,12 @@
}
moveActivityToPinnedStackLocked(r, null /* sourceBounds */, 0f /* aspectRatio */,
- true /* moveHomeStackToFront */, "moveTopActivityToPinnedStack");
+ "moveTopActivityToPinnedStack");
return true;
}
void moveActivityToPinnedStackLocked(ActivityRecord r, Rect sourceHintBounds, float aspectRatio,
- boolean moveHomeStackToFront, String reason) {
+ String reason) {
mWindowManager.deferSurfaceLayout();
@@ -3061,17 +3055,6 @@
true /* allowResizeInDockedMode */, !DEFER_RESUME);
if (task.mActivities.size() == 1) {
- // There is only one activity in the task. So, we can just move the task over to
- // the stack without re-parenting the activity in a different task. We don't
- // move the home stack forward if we are currently entering picture-in-picture
- // while pausing because that changes the focused stack and may prevent the new
- // starting activity from resuming.
- if (moveHomeStackToFront && task.returnsToHomeTask()
- && (r.state == RESUMED || !r.supportsEnterPipOnTaskSwitch)) {
- // Move the home stack forward if the task we just moved to the pinned stack
- // was launched from home so home should be visible behind it.
- moveHomeStackToFront(reason);
- }
// Defer resume until below, and do not schedule PiP changes until we animate below
task.reparent(stack, ON_TOP, REPARENT_MOVE_STACK_TO_FRONT, !ANIMATE, DEFER_RESUME,
false /* schedulePictureInPictureModeChange */, reason);
@@ -4513,6 +4496,10 @@
"startActivityFromRecents: Task " + taskId + " not found.");
}
+ // We always want to return to the home activity instead of the recents activity from
+ // whatever is started from the recents activity, so move the home stack forward.
+ moveHomeStackToFront("startActivityFromRecents");
+
// If the user must confirm credentials (e.g. when first launching a work app and the
// Work Challenge is present) let startActivityInPackage handle the intercepting.
if (!mService.mUserController.shouldConfirmCredentials(task.userId)
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 6f74d85..44fb767 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -169,9 +169,6 @@
private Intent mNewTaskIntent;
private ActivityStack mSourceStack;
private ActivityStack mTargetStack;
- // Indicates that we moved other task and are going to put something on top soon, so
- // we don't want to show it redundantly or accidentally change what's shown below.
- private boolean mMovedOtherTask;
private boolean mMovedToFront;
private boolean mNoAnimation;
private boolean mKeepCurTransition;
@@ -227,7 +224,6 @@
mSourceStack = null;
mTargetStack = null;
- mMovedOtherTask = false;
mMovedToFront = false;
mNoAnimation = false;
mKeepCurTransition = false;
@@ -1184,12 +1180,8 @@
mIntent, mStartActivity.getUriPermissionsLocked(), mStartActivity.userId);
mService.grantEphemeralAccessLocked(mStartActivity.userId, mIntent,
mStartActivity.appInfo.uid, UserHandle.getAppId(mCallingUid));
- if (mSourceRecord != null) {
- mStartActivity.getTask().setTaskToReturnTo(mSourceRecord);
- }
if (newTask) {
- EventLog.writeEvent(
- EventLogTags.AM_CREATE_TASK, mStartActivity.userId,
+ EventLog.writeEvent(EventLogTags.AM_CREATE_TASK, mStartActivity.userId,
mStartActivity.getTask().taskId);
}
ActivityStack.logStartActivity(
@@ -1579,7 +1571,6 @@
if (mLaunchTaskBehind && mSourceRecord != null) {
intentActivity.setTaskToAffiliateWith(mSourceRecord.getTask());
}
- mMovedOtherTask = true;
// If the launch flags carry both NEW_TASK and CLEAR_TASK, the task's activities
// will be cleared soon by ActivityStarter in setTaskFromIntentActivity().
@@ -1644,7 +1635,6 @@
intentActivity.showStartingWindow(null /* prev */, false /* newTask */,
true /* taskSwitch */);
}
- updateTaskReturnToType(intentActivity.getTask(), mLaunchFlags, focusStack);
}
}
if (!mMovedToFront && mDoResume) {
@@ -1663,27 +1653,6 @@
return intentActivity;
}
- private void updateTaskReturnToType(
- TaskRecord task, int launchFlags, ActivityStack focusedStack) {
- if ((launchFlags & (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME))
- == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME)) {
- // Caller wants to appear on home activity.
- task.setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- return;
- } else if (focusedStack == null || focusedStack.isActivityTypeHome()) {
- // Task will be launched over the home stack, so return home.
- task.setTaskToReturnTo(ACTIVITY_TYPE_HOME);
- return;
- } else if (focusedStack != task.getStack() && focusedStack.isActivityTypeAssistant()) {
- // Task was launched over the assistant stack, so return there
- task.setTaskToReturnTo(ACTIVITY_TYPE_ASSISTANT);
- return;
- }
-
- // Else we are coming from an application stack so return to an application.
- task.setTaskToReturnTo(ACTIVITY_TYPE_STANDARD);
- }
-
private void setTaskFromIntentActivity(ActivityRecord intentActivity) {
if ((mLaunchFlags & (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))
== (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK)) {
@@ -1700,11 +1669,6 @@
task.performClearTaskLocked();
mReuseTask = task;
mReuseTask.setIntent(mStartActivity);
-
- // When we clear the task - focus will be adjusted, which will bring another task
- // to top before we launch the activity we need. This will temporary swap their
- // mTaskToReturnTo values and we don't want to overwrite them accidentally.
- mMovedOtherTask = true;
} else if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
|| isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK)) {
ActivityRecord top = intentActivity.getTask().performClearTaskLocked(mStartActivity,
@@ -1806,15 +1770,6 @@
return START_RETURN_LOCK_TASK_MODE_VIOLATION;
}
- if (!mMovedOtherTask) {
- // If stack id is specified in activity options, usually it means that activity is
- // launched not from currently focused stack (e.g. from SysUI or from shell) - in
- // that case we check the target stack.
- // TODO: Not sure I understand the value or use of the commented out code and the
- // comment above. See if this causes any issues and why...
- updateTaskReturnToType(mStartActivity.getTask(), mLaunchFlags,
- /*preferredLaunchStackId != INVALID_STACK_ID ? mTargetStack : */topStack);
- }
if (mDoResume) {
mTargetStack.moveToFront("reuseOrNewTask");
}
diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java
index 1c094c1..11daf3f 100644
--- a/services/core/java/com/android/server/am/LockTaskController.java
+++ b/services/core/java/com/android/server/am/LockTaskController.java
@@ -430,7 +430,7 @@
}
if (andResume) {
- mSupervisor.findTaskToMoveToFrontLocked(task, 0, null, reason,
+ mSupervisor.findTaskToMoveToFront(task, 0, null, reason,
lockTaskModeState != LOCK_TASK_MODE_NONE);
mSupervisor.resumeFocusedStackTopActivityLocked();
mWindowManager.executeAppTransition();
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 4080c27..9b178e2 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -30,7 +30,9 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS;
+import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
import static android.content.pm.ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
@@ -74,7 +76,6 @@
import static com.android.server.am.proto.TaskRecordProto.ORIG_ACTIVITY;
import static com.android.server.am.proto.TaskRecordProto.REAL_ACTIVITY;
import static com.android.server.am.proto.TaskRecordProto.RESIZE_MODE;
-import static com.android.server.am.proto.TaskRecordProto.RETURN_TO_TYPE;
import static com.android.server.am.proto.TaskRecordProto.STACK_ID;
import static com.android.server.am.proto.TaskRecordProto.ACTIVITY_TYPE;
@@ -172,7 +173,6 @@
// Current version of the task record we persist. Used to check if we need to run any upgrade
// code.
private static final int PERSIST_TASK_VERSION = 1;
- private static final String TASK_THUMBNAIL_SUFFIX = "_task_thumbnail";
static final int INVALID_TASK_ID = -1;
private static final int INVALID_MIN_SIZE = -1;
@@ -187,13 +187,13 @@
REPARENT_KEEP_STACK_AT_FRONT,
REPARENT_LEAVE_STACK_IN_PLACE
})
- public @interface ReparentMoveStackMode {}
+ @interface ReparentMoveStackMode {}
// Moves the stack to the front if it was not at the front
- public static final int REPARENT_MOVE_STACK_TO_FRONT = 0;
+ static final int REPARENT_MOVE_STACK_TO_FRONT = 0;
// Only moves the stack to the front if it was focused or front most already
- public static final int REPARENT_KEEP_STACK_AT_FRONT = 1;
+ static final int REPARENT_KEEP_STACK_AT_FRONT = 1;
// Do not move the stack as a part of reparenting
- public static final int REPARENT_LEAVE_STACK_IN_PLACE = 2;
+ static final int REPARENT_LEAVE_STACK_IN_PLACE = 2;
final int taskId; // Unique identifier for this task.
String affinity; // The affinity name for this task, or null; may change identity.
@@ -265,12 +265,6 @@
* (positive) or back (negative). Absolute value indicates time. */
long mLastTimeMoved = System.currentTimeMillis();
- /** Indication of what to run next when task exits. */
- // TODO: Shouldn't be needed if we have things in visual order. I.e. we stop using stacks or
- // have a stack per standard application type...
- /*@WindowConfiguration.ActivityType*/
- private int mTaskToReturnTo = ACTIVITY_TYPE_STANDARD;
-
/** If original intent did not allow relinquishing task identity, save that information */
private boolean mNeverRelinquishIdentity = true;
@@ -278,7 +272,6 @@
// do not want to delete the stack when the task goes empty.
private boolean mReuseTask = false;
- private final String mFilename;
CharSequence lastDescription; // Last description captured for this item.
int mAffiliatedTaskId; // taskId of parent affiliation or self if no parent.
@@ -324,8 +317,6 @@
TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent,
IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor) {
mService = service;
- mFilename = String.valueOf(_taskId) + TASK_THUMBNAIL_SUFFIX +
- TaskPersister.IMAGE_EXTENSION;
userId = UserHandle.getUserId(info.applicationInfo.uid);
taskId = _taskId;
lastActiveTime = SystemClock.elapsedRealtime();
@@ -345,8 +336,6 @@
TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent,
TaskDescription _taskDescription) {
mService = service;
- mFilename = String.valueOf(_taskId) + TASK_THUMBNAIL_SUFFIX +
- TaskPersister.IMAGE_EXTENSION;
userId = UserHandle.getUserId(info.applicationInfo.uid);
taskId = _taskId;
lastActiveTime = SystemClock.elapsedRealtime();
@@ -365,7 +354,6 @@
maxRecents = Math.min(Math.max(info.maxRecents, 1),
ActivityManager.getMaxAppRecentsLimitStatic());
- mTaskToReturnTo = ACTIVITY_TYPE_HOME;
lastTaskDescription = _taskDescription;
touchActiveTime();
mService.mTaskChangeNotificationController.notifyTaskCreated(_taskId, realActivity);
@@ -382,8 +370,6 @@
int resizeMode, boolean supportsPictureInPicture, boolean _realActivitySuspended,
boolean userSetupComplete, int minWidth, int minHeight) {
mService = service;
- mFilename = String.valueOf(_taskId) + TASK_THUMBNAIL_SUFFIX +
- TaskPersister.IMAGE_EXTENSION;
taskId = _taskId;
intent = _intent;
affinityIntent = _affinityIntent;
@@ -398,7 +384,6 @@
isAvailable = true;
autoRemoveRecents = _autoRemoveRecents;
askedCompatMode = _askedCompatMode;
- mTaskToReturnTo = ACTIVITY_TYPE_HOME;
userId = _userId;
mUserSetupComplete = userSetupComplete;
effectiveUid = _effectiveUid;
@@ -901,29 +886,9 @@
return this.intent.filterEquals(intent);
}
- void setTaskToReturnTo(/*@WindowConfiguration.ActivityType*/ int taskToReturnTo) {
- mTaskToReturnTo = taskToReturnTo == ACTIVITY_TYPE_RECENTS
- ? ACTIVITY_TYPE_HOME : taskToReturnTo;
- }
-
- void setTaskToReturnTo(ActivityRecord source) {
- if (source.isActivityTypeRecents()) {
- setTaskToReturnTo(ACTIVITY_TYPE_RECENTS);
- } else if (source.isActivityTypeAssistant()) {
- setTaskToReturnTo(ACTIVITY_TYPE_ASSISTANT);
- }
- }
-
- int getTaskToReturnTo() {
- return mTaskToReturnTo;
- }
-
- boolean returnsToHomeTask() {
- return mTaskToReturnTo == ACTIVITY_TYPE_HOME;
- }
-
- boolean returnsToStandardTask() {
- return mTaskToReturnTo == ACTIVITY_TYPE_STANDARD;
+ boolean returnsToHomeStack() {
+ final int returnHomeFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME;
+ return (intent.getFlags() & returnHomeFlags) == returnHomeFlags;
}
void setPrevAffiliate(TaskRecord prevAffiliate) {
@@ -1444,14 +1409,6 @@
" mLockTaskAuth=" + lockTaskAuthToString());
}
- boolean isOverHomeStack() {
- return mTaskToReturnTo == ACTIVITY_TYPE_HOME;
- }
-
- boolean isOverAssistantStack() {
- return mTaskToReturnTo == ACTIVITY_TYPE_ASSISTANT;
- }
-
private boolean isResizeable(boolean checkSupportsPip) {
return (mService.mForceResizableActivities || ActivityInfo.isResizeableMode(mResizeMode)
|| (checkSupportsPip && mSupportsPictureInPicture));
@@ -2161,13 +2118,11 @@
pw.print(prefix); pw.print("realActivity=");
pw.println(realActivity.flattenToShortString());
}
- if (autoRemoveRecents || isPersistable || !isActivityTypeStandard()
- || mTaskToReturnTo != ACTIVITY_TYPE_STANDARD || numFullscreen != 0) {
+ if (autoRemoveRecents || isPersistable || !isActivityTypeStandard() || numFullscreen != 0) {
pw.print(prefix); pw.print("autoRemoveRecents="); pw.print(autoRemoveRecents);
pw.print(" isPersistable="); pw.print(isPersistable);
pw.print(" numFullscreen="); pw.print(numFullscreen);
- pw.print(" activityType="); pw.print(getActivityType());
- pw.print(" mTaskToReturnTo="); pw.println(mTaskToReturnTo);
+ pw.print(" activityType="); pw.println(getActivityType());
}
if (rootWasReset || mNeverRelinquishIdentity || mReuseTask
|| mLockTaskAuth != LOCK_TASK_AUTH_PINNABLE) {
@@ -2267,7 +2222,6 @@
proto.write(ORIG_ACTIVITY, origActivity.flattenToShortString());
}
proto.write(ACTIVITY_TYPE, getActivityType());
- proto.write(RETURN_TO_TYPE, mTaskToReturnTo);
proto.write(RESIZE_MODE, mResizeMode);
proto.write(FULLSCREEN, mFullscreen);
if (mBounds != null) {
diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java
index 1fda832..aff1bc6 100644
--- a/services/core/java/com/android/server/wm/StackWindowController.java
+++ b/services/core/java/com/android/server/wm/StackWindowController.java
@@ -152,7 +152,8 @@
}
}
- public void positionChildAtBottom(TaskWindowContainerController child) {
+ public void positionChildAtBottom(TaskWindowContainerController child,
+ boolean includingParents) {
if (child == null) {
// TODO: Fix the call-points that cause this to happen.
return;
@@ -164,7 +165,7 @@
Slog.e(TAG_WM, "positionChildAtBottom: task=" + child + " not found");
return;
}
- mContainer.positionChildAt(POSITION_BOTTOM, childTask, false /* includingParents */);
+ mContainer.positionChildAt(POSITION_BOTTOM, childTask, includingParents);
if (mService.mAppTransition.isTransitionSet()) {
childTask.setSendingToBottom(true);
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
index 60a55fa..7f03034 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
@@ -104,7 +104,7 @@
// Move first activity to pinned stack.
final Rect sourceBounds = new Rect();
mSupervisor.moveActivityToPinnedStackLocked(firstActivity, sourceBounds,
- 0f /*aspectRatio*/, false, "initialMove");
+ 0f /*aspectRatio*/, "initialMove");
final ActivityDisplay display = mFullscreenStack.getDisplay();
ActivityStack pinnedStack = display.getPinnedStack();
@@ -114,7 +114,7 @@
// Move second activity to pinned stack.
mSupervisor.moveActivityToPinnedStackLocked(secondActivity, sourceBounds,
- 0f /*aspectRatio*/, false, "secondMove");
+ 0f /*aspectRatio*/, "secondMove");
// Need to get stacks again as a new instance might have been created.
pinnedStack = display.getPinnedStack();
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
index f5cdf21..07b49c5 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
@@ -323,7 +323,7 @@
}
@Override
- boolean isStackTranslucent(ActivityRecord starting, ActivityStack stackBehind) {
+ boolean isStackTranslucent(ActivityRecord starting) {
switch (mIsTranslucent) {
case IS_TRANSLUCENT_TRUE:
return true;
@@ -331,7 +331,7 @@
return false;
case IS_TRANSLUCENT_UNSET:
default:
- return super.isStackTranslucent(starting, stackBehind);
+ return super.isStackTranslucent(starting);
}
}
}