summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java79
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java48
-rw-r--r--services/core/java/com/android/server/wm/ActivityStackSupervisor.java26
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java21
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java36
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java263
-rw-r--r--services/core/java/com/android/server/wm/DisplayRotation.java2
-rw-r--r--services/core/java/com/android/server/wm/DockedStackDividerController.java22
-rw-r--r--services/core/java/com/android/server/wm/KeyguardController.java2
-rw-r--r--services/core/java/com/android/server/wm/LaunchParamsController.java2
-rw-r--r--services/core/java/com/android/server/wm/PinnedStackController.java6
-rw-r--r--services/core/java/com/android/server/wm/RecentTasks.java2
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimationController.java2
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java32
-rw-r--r--services/core/java/com/android/server/wm/Task.java43
-rw-r--r--services/core/java/com/android/server/wm/TaskChangeNotificationController.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowProcessController.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java37
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java26
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskContainersTests.java (renamed from services/tests/wmtests/src/com/android/server/wm/TaskStackContainersTests.java)2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java2
30 files changed, 333 insertions, 374 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 0e13e6c8772a..d1c8448f2a4a 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -31,7 +31,6 @@ import static android.app.ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_UP;
import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
import static android.app.ActivityOptions.ANIM_UNDEFINED;
-import static android.app.ActivityTaskManager.INVALID_STACK_ID;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
@@ -1426,7 +1425,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return null;
}
ActivityRecord r = token.weakActivity.get();
- if (r == null || r.getActivityStack() == null) {
+ if (r == null || r.getRootTask() == null) {
return null;
}
return r;
@@ -2055,19 +2054,17 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
}
- /**
- * @return Stack value from current task, null if there is no task.
- */
- ActivityStack getActivityStack() {
- return task != null ? task.getStack() : null;
+ /** @return Root task of this activity, null if there is no task. */
+ ActivityStack getRootTask() {
+ return task != null ? (ActivityStack) task.getRootTask() : null;
}
- int getStackId() {
- return getActivityStack() != null ? getActivityStack().mStackId : INVALID_STACK_ID;
+ int getRootTaskId() {
+ return task != null ? task.getRootTaskId() : INVALID_TASK_ID;
}
DisplayContent getDisplay() {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
return stack != null ? stack.getDisplay() : null;
}
@@ -2088,7 +2085,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mWmService.mWindowPlacerLocked.requestTraversal();
if (changed && task != null && !occludesParent) {
- getActivityStack().convertActivityToTranslucent(this);
+ getRootTask().convertActivityToTranslucent(this);
}
// Always ensure visibility if this activity doesn't occlude parent, so the
// {@link #returningOptions} of the activity under this one can be applied in
@@ -2123,7 +2120,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
boolean isInStackLocked() {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
return stack != null && stack.isInStackLocked(this) != null;
}
@@ -2226,7 +2223,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
boolean isCurrentAppLocked =
mAtmService.getLockTaskModeState() != LOCK_TASK_MODE_NONE;
final DisplayContent display = getDisplay();
- boolean hasPinnedStack = display != null && display.hasPinnedStack();
+ boolean hasPinnedStack = display != null && display.hasPinnedTask();
// Don't return early if !isNotLocked, since we want to throw an exception if the activity
// is in an incorrect state
boolean isNotLockedOrOnKeyguard = !isKeyguardLocked && !isCurrentAppLocked;
@@ -2325,7 +2322,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return false;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
Slog.w(TAG, "moveActivityStackToFront: invalid task or stack: activity="
+ this + " task=" + task);
@@ -2456,7 +2453,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return FINISH_RESULT_CANCELLED;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
final boolean mayAdjustTop = (isState(RESUMED) || stack.mResumedActivity == null)
&& stack.isFocusedStackOnDisplay();
final boolean shouldAdjustGlobalFocus = mayAdjustTop
@@ -2497,7 +2494,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final DisplayContent display = stack.getDisplay();
next = display.topRunningActivity();
if (next != null) {
- display.positionStackAtTop(next.getActivityStack(),
+ display.positionStackAtTop(next.getRootTask(),
false /* includingParents */, "finish-display-top");
}
}
@@ -2666,13 +2663,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mStackSupervisor.mStoppingActivities.remove(this);
mStackSupervisor.mGoingToSleepActivities.remove(this);
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
final DisplayContent display = getDisplay();
// TODO(b/137329632): Exclude current activity when looking for the next one with
// DisplayContent#topRunningActivity().
final ActivityRecord next = display.topRunningActivity();
final boolean isLastStackOverEmptyHome =
- next == null && stack.isFocusedStackOnDisplay() && display.getHomeStack() != null;
+ next == null && stack.isFocusedStackOnDisplay() && display.getRootHomeTask() != null;
if (isLastStackOverEmptyHome) {
// Don't destroy activity immediately if this is the last activity on the display and
// the display contains home stack. Although there is no next activity at the moment,
@@ -2824,7 +2821,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
boolean safelyDestroy(String reason) {
if (isDestroyable()) {
if (DEBUG_SWITCH) {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
Slog.v(TAG_SWITCH, "Safely destroying " + this + " in state " + getState()
+ " resumed=" + stack.mResumedActivity
+ " pausing=" + stack.mPausingActivity
@@ -3612,7 +3609,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
final boolean isSleeping() {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
return stack != null ? stack.shouldSleepActivities() : mAtmService.isSleepingLocked();
}
@@ -3827,7 +3824,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// Notify the pinned stack upon all windows drawn. If there was an animation in
// progress then this signal will resume that animation.
- final ActivityStack pinnedStack = mDisplayContent.getPinnedStack();
+ final ActivityStack pinnedStack = mDisplayContent.getRootPinnedTask();
if (pinnedStack != null) {
pinnedStack.onAllWindowsDrawn();
}
@@ -4449,7 +4446,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return visibleIgnoringKeyguard;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
return false;
}
@@ -4471,7 +4468,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
boolean shouldBeVisible() {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
return false;
}
@@ -4492,7 +4489,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// If this activity is paused, tell it to now show its window.
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY,
"Making visible and scheduling visibility: " + this);
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
try {
if (stack.mTranslucentActivityWaiting != null) {
updateOptionsLocked(returningOptions);
@@ -4578,7 +4575,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (DEBUG_VISIBILITY) {
Slog.v(TAG_VISIBILITY, "Resume visible activity, " + this);
}
- return getActivityStack().resumeTopActivityUncheckedLocked(activeActivity /* prev */,
+ return getRootTask().resumeTopActivityUncheckedLocked(activeActivity /* prev */,
null /* options */);
} else if (shouldPauseActivity(activeActivity)) {
if (DEBUG_VISIBILITY) {
@@ -4643,7 +4640,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
*/
private boolean shouldBeResumed(ActivityRecord activeActivity) {
return shouldMakeActive(activeActivity) && isFocusable()
- && getActivityStack().getVisibility(activeActivity) == STACK_VISIBILITY_VISIBLE
+ && getRootTask().getVisibility(activeActivity) == STACK_VISIBILITY_VISIBLE
&& canResumeByCompat();
}
@@ -4672,7 +4669,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// ActivityStack#ensureActivitiesVisible will bring the activity to a proper
// active state.
if (!isState(STARTED, RESUMED, PAUSED, STOPPED, STOPPING)
- || getActivityStack().mTranslucentActivityWaiting != null) {
+ || getRootTask().mTranslucentActivityWaiting != null) {
return false;
}
@@ -4769,7 +4766,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mStackSupervisor.reportResumedActivityLocked(this);
resumeKeyDispatchingLocked();
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
mStackSupervisor.mNoAnimActivities.clear();
// Mark the point when the activity is resuming
@@ -4862,7 +4859,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
void stopIfPossible() {
if (DEBUG_SWITCH) Slog.d(TAG_SWITCH, "Stopping: " + this);
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (isNoHistory()) {
if (!finishing) {
if (!stack.shouldSleepActivities()) {
@@ -4919,7 +4916,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
void activityStopped(Bundle newIcicle, PersistableBundle newPersistentState,
CharSequence description) {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
final boolean isStopping = mState == STOPPING;
if (!isStopping && mState != RESTARTING_PROCESS) {
Slog.i(TAG, "Activity reported stop, but no longer stopping: " + this);
@@ -4969,7 +4966,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mStackSupervisor.mStoppingActivities.add(this);
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
// If we already have a few activities waiting to stop, then give up on things going idle
// and start clearing them out. Or if r is the last of activity of the last task the stack
// will be empty and must be cleared immediately.
@@ -5005,7 +5002,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return false;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
return false;
}
@@ -5021,7 +5018,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
void finishLaunchTickingLocked() {
launchTickTime = 0;
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
return;
}
@@ -5491,13 +5488,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
static ActivityRecord isInStackLocked(IBinder token) {
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
- return (r != null) ? r.getActivityStack().isInStackLocked(r) : null;
+ return (r != null) ? r.getRootTask().isInStackLocked(r) : null;
}
static ActivityStack getStackLocked(IBinder token) {
final ActivityRecord r = ActivityRecord.isInStackLocked(token);
if (r != null) {
- return r.getActivityStack();
+ return r.getRootTask();
}
return null;
}
@@ -5507,7 +5504,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* {@link android.view.Display#INVALID_DISPLAY} if not attached.
*/
int getDisplayId() {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack == null) {
return INVALID_DISPLAY;
}
@@ -5519,7 +5516,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// This would be redundant.
return false;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (isState(RESUMED) || stack == null || this == stack.mPausingActivity || !mHaveState
|| !stopped) {
// We're not ready for this kind of thing.
@@ -6715,7 +6712,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
void savePinnedStackBounds() {
// Leaving PiP to fullscreen, save the snap fraction based on the pre-animation bounds
// for the next re-entry into PiP (assuming the activity is not hidden or destroyed)
- final ActivityStack pinnedStack = mDisplayContent.getPinnedStack();
+ final ActivityStack pinnedStack = mDisplayContent.getRootPinnedTask();
if (pinnedStack == null) return;
final Rect stackBounds;
if (pinnedStack.lastAnimatingBoundsWasToFullscreen()) {
@@ -6755,7 +6752,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
private void applyAspectRatio(Rect outBounds, Rect containingAppBounds,
Rect containingBounds) {
final float maxAspectRatio = info.maxAspectRatio;
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
final float minAspectRatio = info.minAspectRatio;
if (task == null || stack == null || (inMultiWindowMode() && !shouldUseSizeCompatMode())
@@ -6861,7 +6858,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
*/
boolean ensureActivityConfiguration(int globalChanges, boolean preserveWindow,
boolean ignoreVisibility) {
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
if (stack.mConfigWillChange) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Skipping config check (will change): " + this);
@@ -7406,7 +7403,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (!getTurnScreenOnFlag()) {
return false;
}
- final ActivityStack stack = getActivityStack();
+ final ActivityStack stack = getRootTask();
return stack != null &&
stack.checkKeyguardVisibility(this, true /* shouldBeVisible */, true /* isTop */);
}
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 60e0f51ef0a0..942be8409db2 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -277,9 +277,6 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
int mCurrentUser;
- /** Unique identifier */
- final int mStackId;
-
/** For comparison with DisplayContent bounds. */
private Rect mTmpRect = new Rect();
private Rect mTmpRect2 = new Rect();
@@ -633,7 +630,6 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
_realActivitySuspended, userSetupComplete, minWidth, minHeight, info, _voiceSession,
_voiceInteractor, stack);
- mStackId = mTaskId;
mDockedStackMinimizeThickness = mWmService.mContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.docked_stack_minimize_thickness);
EventLogTags.writeWmStackCreated(id);
@@ -732,11 +728,11 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
setBounds(newBounds);
newBounds.set(newBounds);
} else if (overrideWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
- Rect dockedBounds = display.getSplitScreenPrimaryStack().getBounds();
+ Rect dockedBounds = display.getRootSplitScreenPrimaryTask().getBounds();
final boolean isMinimizedDock =
display.mDisplayContent.getDockedDividerController().isMinimizedDock();
if (isMinimizedDock) {
- Task topTask = display.getSplitScreenPrimaryStack().getTopMostTask();
+ Task topTask = display.getRootSplitScreenPrimaryTask().getTopMostTask();
if (topTask != null) {
dockedBounds = topTask.getBounds();
}
@@ -830,7 +826,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
final int currentOverrideMode = getRequestedOverrideWindowingMode();
final DisplayContent display = getDisplay();
final Task topTask = getTopMostTask();
- final ActivityStack splitScreenStack = display.getSplitScreenPrimaryStack();
+ final ActivityStack splitScreenStack = display.getRootSplitScreenPrimaryTask();
int windowingMode = preferredWindowingMode;
if (preferredWindowingMode == WINDOWING_MODE_UNDEFINED
&& isTransientWindowingMode(currentMode)) {
@@ -851,7 +847,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
windowingMode = mRestoreOverrideWindowingMode;
}
- final boolean alreadyInSplitScreenMode = display.hasSplitScreenPrimaryStack();
+ final boolean alreadyInSplitScreenMode = display.hasSplitScreenPrimaryTask();
// Don't send non-resizeable notifications if the windowing mode changed was a side effect
// of us entering split-screen mode.
@@ -868,7 +864,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
// warning toast about it.
mAtmService.getTaskChangeNotificationController()
.notifyActivityDismissingDockedStack();
- final ActivityStack primarySplitStack = display.getSplitScreenPrimaryStack();
+ final ActivityStack primarySplitStack = display.getRootSplitScreenPrimaryTask();
primarySplitStack.setWindowingModeInSurfaceTransaction(WINDOWING_MODE_UNDEFINED,
false /* animate */, false /* showRecents */,
false /* enteringSplitScreenMode */, true /* deferEnsuringVisibility */,
@@ -1118,7 +1114,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
return null;
}
final Task task = r.getTask();
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
if (stack != null && task.mChildren.contains(r) && mChildren.contains(task)) {
if (stack != this) Slog.w(TAG,
"Illegal state! task does not point to stack it is in.");
@@ -1165,7 +1161,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
final ActivityStack topFullScreenStack =
display.getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN);
if (topFullScreenStack != null) {
- final ActivityStack primarySplitScreenStack = display.getSplitScreenPrimaryStack();
+ final ActivityStack primarySplitScreenStack = display.getRootSplitScreenPrimaryTask();
if (display.getIndexOf(topFullScreenStack)
> display.getIndexOf(primarySplitScreenStack)) {
primarySplitScreenStack.moveToFront(reason + " splitScreenToTop");
@@ -1347,7 +1343,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
private boolean containsActivityFromStack(List<ActivityRecord> rs) {
for (ActivityRecord r : rs) {
- if (r.getActivityStack() == this) {
+ if (r.getRootTask() == this) {
return true;
}
}
@@ -1563,7 +1559,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
// focus). Also if there is an active pinned stack - we always want to notify it about
// task stack changes, because its positioning may depend on it.
if (mStackSupervisor.mAppVisibilitiesChangedSinceLastPause
- || (getDisplay() != null && getDisplay().hasPinnedStack())) {
+ || (getDisplay() != null && getDisplay().hasPinnedTask())) {
mAtmService.getTaskChangeNotificationController().notifyTaskStackChanged();
mStackSupervisor.mAppVisibilitiesChangedSinceLastPause = false;
}
@@ -1873,7 +1869,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
final DisplayContent displayContent = getDisplay();
if (displayContent == null) {
throw new IllegalStateException("Stack is not attached to any display, stackId="
- + mStackId);
+ + getRootTaskId());
}
final int flags = displayContent.mDisplay.getFlags();
@@ -2592,7 +2588,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
return false;
}
final ActivityStack targetStack = toFrontTask != null
- ? toFrontTask.getStack() : toFrontActivity.getActivityStack();
+ ? toFrontTask.getStack() : toFrontActivity.getRootTask();
if (targetStack != null && targetStack.isActivityTypeAssistant()) {
// Ensure the task/activity being brought forward is not the assistant
return false;
@@ -3073,7 +3069,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
}
ActivityRecord topActivity = getDisplay().topRunningActivity();
- ActivityStack topStack = topActivity.getActivityStack();
+ ActivityStack topStack = topActivity.getRootTask();
if (topStack != null && topStack != this && topActivity.isState(RESUMED)) {
// The new top activity is already resumed, so there's a good chance that nothing will
// get resumed below. So, update visibility now in case the transition is closed
@@ -3102,7 +3098,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
return;
}
- Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "stack.resize_" + mStackId);
+ Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "stack.resize_" + getRootTaskId());
mAtmService.deferWindowLayout();
try {
// Update override configurations of all tasks in the stack.
@@ -3219,7 +3215,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
boolean dump(FileDescriptor fd, PrintWriter pw, boolean dumpAll, boolean dumpClient,
String dumpPackage, boolean needSep) {
- pw.println(" Stack #" + mStackId
+ pw.println(" Stack #" + getRootTaskId()
+ ": type=" + activityTypeToString(getActivityType())
+ " mode=" + windowingModeToString(getWindowingMode()));
pw.println(" isSleeping=" + shouldSleepActivities());
@@ -4484,7 +4480,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
@Override
void dump(PrintWriter pw, String prefix, boolean dumpAll) {
- pw.println(prefix + "mStackId=" + mStackId);
+ pw.println(prefix + "mStackId=" + getRootTaskId());
pw.println(prefix + "mDeferRemoval=" + mDeferRemoval);
pw.println(prefix + "mBounds=" + getRawBounds().toShortString());
if (mMinimizeAmount != 0f) {
@@ -4515,14 +4511,6 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
mAnimatingActivityRegistry.dump(pw, "AnimatingApps:", prefix);
}
- String getName() {
- return toShortString();
- }
-
- public String toShortString() {
- return "Stack=" + mStackId;
- }
-
/**
* For docked workspace (or workspace that's side-by-side to the docked), provides
* information which side of the screen was the dock anchored.
@@ -4731,7 +4719,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
// activity early for the recents animation prior to the PiP animation starting, there
// is no subsequent all-drawn signal. In this case, we can skip the pause when the home
// stack is already visible and drawn.
- final ActivityStack homeStack = mDisplayContent.getHomeStack();
+ final ActivityStack homeStack = mDisplayContent.getRootHomeTask();
if (homeStack == null) {
return true;
}
@@ -4863,7 +4851,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
@WindowTraceLogLevel int logLevel) {
final long token = proto.start(fieldId);
dumpDebugInnerStackOnly(proto, STACK, logLevel);
- proto.write(com.android.server.am.ActivityStackProto.ID, mStackId);
+ proto.write(com.android.server.am.ActivityStackProto.ID, getRootTaskId());
forAllTasks((t) -> {
t.dumpDebugInner(proto, com.android.server.am.ActivityStackProto.TASKS, logLevel);
@@ -4891,7 +4879,7 @@ class ActivityStack extends Task implements BoundsAnimationTarget {
final long token = proto.start(fieldId);
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
- proto.write(StackProto.ID, mStackId);
+ proto.write(StackProto.ID, getRootTaskId());
forAllTasks((t) -> {
t.dumpDebugInnerTaskOnly(proto, StackProto.TASKS, logLevel);
}, true /* traverseTopToBottom */, this);
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index f2ce7e86bc3b..2c0f3e65f198 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -824,7 +824,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
false /* markFrozenIfConfigChanged */, true /* deferResume */);
}
- if (r.getActivityStack().checkKeyguardVisibility(r, true /* shouldBeVisible */,
+ if (r.getRootTask().checkKeyguardVisibility(r, true /* shouldBeVisible */,
true /* isTop */) && r.allowMoveToFront()) {
// We only set the visibility to true if the activity is not being launched in
// background, and is allowed to be visible based on keyguard state. This avoids
@@ -1582,7 +1582,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
}
final ActivityStack stack =
- mRootWindowContainer.getDefaultDisplay().getSplitScreenPrimaryStack();
+ mRootWindowContainer.getDefaultDisplay().getRootSplitScreenPrimaryTask();
if (stack == null) {
Slog.w(TAG, "resizeDockedStackLocked: docked stack not found");
return;
@@ -1670,7 +1670,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
void resizePinnedStackLocked(Rect pinnedBounds, Rect tempPinnedTaskBounds) {
// TODO(multi-display): The display containing the stack should be passed in.
final ActivityStack stack =
- mRootWindowContainer.getDefaultDisplay().getPinnedStack();
+ mRootWindowContainer.getDefaultDisplay().getRootPinnedTask();
if (stack == null) {
Slog.w(TAG, "resizePinnedStackLocked: pinned stack not found");
return;
@@ -1891,13 +1891,13 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
// TODO: Look into changing users to this method to DisplayContent.resolveWindowingMode()
ActivityStack getReparentTargetStack(Task task, ActivityStack stack, boolean toTop) {
final ActivityStack prevStack = task.getStack();
- final int stackId = stack.mStackId;
+ final int rootTaskId = stack.mTaskId;
final boolean inMultiWindowMode = stack.inMultiWindowMode();
// Check that we aren't reparenting to the same stack that the task is already in
- if (prevStack != null && prevStack.mStackId == stackId) {
+ if (prevStack != null && prevStack.mTaskId == rootTaskId) {
Slog.w(TAG, "Can not reparent to same stack, task=" + task
- + " already in stackId=" + stackId);
+ + " already in stackId=" + rootTaskId);
return prevStack;
}
@@ -1912,7 +1912,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
// multi-display.
if (stack.getDisplayId() != DEFAULT_DISPLAY && !mService.mSupportsMultiDisplay) {
throw new IllegalArgumentException("Device doesn't support multi-display, can not"
- + " reparent task=" + task + " to stackId=" + stackId);
+ + " reparent task=" + task + " to stackId=" + rootTaskId);
}
// Ensure that we aren't trying to move into a freeform stack without freeform support
@@ -1993,7 +1993,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
void activitySleptLocked(ActivityRecord r) {
mGoingToSleepActivities.remove(r);
- final ActivityStack s = r.getActivityStack();
+ final ActivityStack s = r.getRootTask();
if (s != null) {
s.checkReadyForSleep();
} else {
@@ -2029,7 +2029,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
// A resumed activity cannot be stopping. remove from list
mStoppingActivities.remove(r);
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
if (stack.getDisplay().allResumedActivitiesComplete()) {
mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
// Make sure activity & window visibility should be identical
@@ -2082,7 +2082,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
if (DEBUG_STATES) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + s.nowVisible
+ " animating=" + animating + " finishing=" + s.finishing);
- final ActivityStack stack = s.getActivityStack();
+ final ActivityStack stack = s.getRootTask();
final boolean shouldSleepOrShutDown = stack != null
? stack.shouldSleepOrShutDownActivities()
: mService.isSleepingOrShuttingDownLocked();
@@ -2395,7 +2395,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
final boolean isSecondaryDisplayPreferred =
(preferredDisplayId != DEFAULT_DISPLAY && preferredDisplayId != INVALID_DISPLAY);
final boolean inSplitScreenMode = actualStack != null
- && actualStack.getDisplay().hasSplitScreenPrimaryStack();
+ && actualStack.getDisplay().hasSplitScreenPrimaryTask();
if (((!inSplitScreenMode && preferredWindowingMode != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY)
&& !isSecondaryDisplayPreferred) || !task.isActivityTypeStandardOrUndefined()) {
return;
@@ -2444,7 +2444,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
// we need to move it to top of fullscreen stack, otherwise it will be covered.
final ActivityStack dockedStack =
- task.getStack().getDisplay().getSplitScreenPrimaryStack();
+ task.getStack().getDisplay().getRootSplitScreenPrimaryTask();
if (dockedStack != null) {
// Display a warning toast that we tried to put an app that doesn't support
// split-screen in split-screen.
@@ -2473,7 +2473,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
final ActivityRecord r = ActivityRecord.isInStackLocked(token);
if (r != null) {
r.finishRelaunching();
- if (r.getActivityStack().shouldSleepOrShutDownActivities()) {
+ if (r.getRootTask().shouldSleepOrShutDownActivities()) {
r.setSleeping(true, true);
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 6587226b14d7..26812f462b3f 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -937,7 +937,7 @@ class ActivityStarter {
}
final ActivityStack resultStack = resultRecord == null
- ? null : resultRecord.getActivityStack();
+ ? null : resultRecord.getRootTask();
if (err != START_SUCCESS) {
if (resultRecord != null) {
@@ -1365,7 +1365,7 @@ class ActivityStarter {
break;
case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY:
final ActivityStack homeStack =
- startedActivityStack.getDisplay().getHomeStack();
+ startedActivityStack.getDisplay().getRootHomeTask();
if (homeStack != null && homeStack.shouldBeVisible(null /* starting */)) {
mService.mWindowManager.showRecentApps();
}
@@ -1425,7 +1425,7 @@ class ActivityStarter {
* @return the stack where the successful started activity resides.
*/
private @Nullable ActivityStack handleStartResult(@NonNull ActivityRecord started, int result) {
- final ActivityStack currentStack = started.getActivityStack();
+ final ActivityStack currentStack = started.getRootTask();
ActivityStack startedActivityStack = currentStack != null ? currentStack : mTargetStack;
if (ActivityManager.isStartResultSuccessful(result)) {
@@ -1446,7 +1446,7 @@ class ActivityStarter {
// If we are not able to proceed, disassociate the activity from the task. Leaving an
// activity in an incomplete state can lead to issues, such as performing operations
// without a window container.
- final ActivityStack stack = mStartActivity.getActivityStack();
+ final ActivityStack stack = mStartActivity.getRootTask();
if (stack != null) {
mStartActivity.finishIfPossible("startActivity", true /* oomAdj */);
}
@@ -2231,7 +2231,7 @@ class ActivityStarter {
return;
}
if (!mSourceRecord.finishing) {
- mSourceStack = mSourceRecord.getActivityStack();
+ mSourceStack = mSourceRecord.getRootTask();
return;
}
@@ -2314,7 +2314,7 @@ class ActivityStarter {
* @return {@link ActivityRecord} brought to front.
*/
private void setTargetStackIfNeeded(ActivityRecord intentActivity) {
- mTargetStack = intentActivity.getActivityStack();
+ mTargetStack = intentActivity.getRootTask();
mTargetStack.mLastPausedActivity = null;
// If the target task is not in the front, then we need to bring it to the front...
// except... well, with SINGLE_TASK_LAUNCH it's not entirely clear. We'd like to have
@@ -2371,7 +2371,7 @@ class ActivityStarter {
}
// Need to update mTargetStack because if task was moved out of it, the original stack may
// be destroyed.
- mTargetStack = intentActivity.getActivityStack();
+ mTargetStack = intentActivity.getRootTask();
mSupervisor.handleNonResizableTaskIfNeeded(intentActivity.getTask(),
WINDOWING_MODE_UNDEFINED, DEFAULT_DISPLAY, mTargetStack);
}
@@ -2422,10 +2422,11 @@ class ActivityStarter {
return;
}
- final ActivityStack stack = task.getStack();
- if (stack != null && stack.inPinnedWindowingMode()) {
- mService.animateResizePinnedStack(stack.mStackId, bounds, -1);
+ final Task rootTask = task.getRootTask();
+ if (rootTask != null && rootTask.inPinnedWindowingMode()) {
+ mService.animateResizePinnedStack(rootTask.mTaskId, bounds, -1);
} else {
+ // TODO: I don't believe it is possible to reach this else condition anymore...
task.setBounds(bounds);
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 8491bc2c4756..31b7c688d685 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -1612,7 +1612,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
if (mController != null) {
// Find the first activity that is not finishing.
final ActivityRecord next =
- r.getActivityStack().topRunningActivity(token, INVALID_TASK_ID);
+ r.getRootTask().topRunningActivity(token, INVALID_TASK_ID);
if (next != null) {
// ask watcher if this is allowed
boolean resumeOK = true;
@@ -2037,7 +2037,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
synchronized (mGlobalLock) {
ActivityRecord r = mRootWindowContainer.isInAnyStack(token);
if (r != null) {
- r.getActivityStack().notifyActivityDrawnLocked(r);
+ r.getRootTask().notifyActivityDrawnLocked(r);
}
}
}
@@ -2073,7 +2073,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
synchronized (mGlobalLock) {
ActivityStack focusedStack = getTopDisplayFocusedStack();
if (focusedStack != null) {
- return mRootWindowContainer.getStackInfo(focusedStack.mStackId);
+ return mRootWindowContainer.getStackInfo(focusedStack.mTaskId);
}
return null;
}
@@ -2175,7 +2175,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
synchronized (mGlobalLock) {
final ActivityRecord srec = ActivityRecord.forTokenLocked(token);
if (srec != null) {
- return srec.getActivityStack().shouldUpRecreateTaskLocked(srec, destAffinity);
+ return srec.getRootTask().shouldUpRecreateTaskLocked(srec, destAffinity);
}
}
return false;
@@ -2188,7 +2188,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
synchronized (mGlobalLock) {
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
if (r != null) {
- return r.getActivityStack().navigateUpTo(
+ return r.getRootTask().navigateUpTo(
r, destIntent, resultCode, resultData);
}
return false;
@@ -2354,7 +2354,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
if (r == null) {
return;
}
- ActivityStack stack = r.getActivityStack();
+ ActivityStack stack = r.getRootTask();
if (stack != null && stack.isSingleTaskInstance()) {
// Single-task stacks are used for activities which are presented in floating
// windows above full screen activities. Instead of directly finishing the
@@ -2582,7 +2582,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
r, resultWho, requestCode);
// TODO: This should probably only loop over the task since you need to be in the
// same task to return results.
- r.getActivityStack().forAllActivities(c);
+ r.getRootTask().forAllActivities(c);
c.recycle();
updateOomAdj();
@@ -3215,7 +3215,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
+ ainfo.applicationInfo.uid + ", calling uid=" + callingUid);
}
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
final Task task = stack.createTask(
mStackSupervisor.getNextTaskIdForUser(r.mUserId), ainfo, intent, !ON_TOP);
if (!mRecentTasks.addToBottom(task)) {
@@ -3551,7 +3551,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
+ token);
}
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
if (stack == null) {
throw new IllegalStateException("toggleFreeformWindowingMode: the activity "
+ "doesn't have a stack");
@@ -4080,7 +4080,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
try {
synchronized (mGlobalLock) {
final ActivityStack stack =
- mRootWindowContainer.getDefaultDisplay().getSplitScreenPrimaryStack();
+ mRootWindowContainer.getDefaultDisplay().getRootSplitScreenPrimaryTask();
if (stack == null) {
Slog.w(TAG, "dismissSplitScreenMode: primary split-screen stack not found.");
return;
@@ -4121,7 +4121,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
try {
synchronized (mGlobalLock) {
final ActivityStack stack =
- mRootWindowContainer.getDefaultDisplay().getPinnedStack();
+ mRootWindowContainer.getDefaultDisplay().getRootPinnedTask();
if (stack == null) {
Slog.w(TAG, "dismissPip: pinned stack not found.");
return;
@@ -4235,14 +4235,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
}
private boolean isInPictureInPictureMode(ActivityRecord r) {
- if (r == null || r.getActivityStack() == null || !r.inPinnedWindowingMode()
- || r.getActivityStack().isInStackLocked(r) == null) {
+ if (r == null || r.getRootTask() == null || !r.inPinnedWindowingMode()
+ || r.getRootTask().isInStackLocked(r) == null) {
return false;
}
// If we are animating to fullscreen then we have already dispatched the PIP mode
// changed, so we should reflect that check here as well.
- final ActivityStack taskStack = r.getActivityStack();
+ final ActivityStack taskStack = r.getRootTask();
return !taskStack.isAnimatingBoundsToFullscreen();
}
@@ -4281,7 +4281,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
r.pictureInPictureArgs.getSourceRectHint());
mRootWindowContainer.moveActivityToPinnedStack(
r, sourceBounds, aspectRatio, "enterPictureInPictureMode");
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
stack.setPictureInPictureAspectRatio(aspectRatio);
stack.setPictureInPictureActions(actions);
MetricsLoggerWrapper.logPictureInPictureEnter(mContext,
@@ -4326,7 +4326,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
// If the activity is already in picture-in-picture, update the pinned stack now
// if it is not already expanding to fullscreen. Otherwise, the arguments will
// be used the next time the activity enters PiP
- final ActivityStack stack = r.getActivityStack();
+ final ActivityStack stack = r.getRootTask();
if (!stack.isAnimatingBoundsToFullscreen()) {
stack.setPictureInPictureAspectRatio(
r.pictureInPictureArgs.getAspectRatio());
@@ -4923,7 +4923,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
Slog.i(TAG, "Moving " + r.shortComponentName + " from display " + r.getDisplayId()
+ " to main display for VR");
mRootWindowContainer.moveStackToDisplay(
- r.getStackId(), DEFAULT_DISPLAY, true /* toTop */);
+ r.getRootTaskId(), DEFAULT_DISPLAY, true /* toTop */);
}
mH.post(() -> {
if (!mVrController.onVrModeChanged(r)) {
@@ -6752,7 +6752,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
int requestCode, int resultCode, Intent data) {
synchronized (mGlobalLock) {
final ActivityRecord r = ActivityRecord.isInStackLocked(activityToken);
- if (r != null && r.getActivityStack() != null) {
+ if (r != null && r.getRootTask() != null) {
r.sendResult(callingUid, resultWho, requestCode, resultCode, data);
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index dbc99114c031..825f93cde52b 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -19,6 +19,7 @@ package com.android.server.wm;
import static android.app.ActivityTaskManager.INVALID_STACK_ID;
import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
@@ -294,7 +295,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
/** The containers below are the only child containers {@link #mWindowContainers} can have. */
// Contains all window containers that are related to apps (Activities)
- private final TaskStackContainers mTaskStackContainers = new TaskStackContainers(mWmService);
+ private final TaskContainers mTaskContainers = new TaskContainers(mWmService);
// Contains all non-app window containers that should be displayed above the app containers
// (e.g. Status bar)
private final AboveAppWindowContainers mAboveAppWindowsContainers =
@@ -1933,39 +1934,25 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
return (mDisplay.getFlags() & FLAG_PRIVATE) != 0;
}
- ActivityStack getHomeStack() {
- return mTaskStackContainers.getHomeStack();
+ ActivityStack getRootHomeTask() {
+ return mTaskContainers.getRootHomeTask();
}
- ActivityStack getRecentsStack() {
- return mTaskStackContainers.getRecentsStack();
+ /** @return The primary split-screen task, and {@code null} otherwise. */
+ ActivityStack getRootSplitScreenPrimaryTask() {
+ return mTaskContainers.getRootSplitScreenPrimaryTask();
}
- /**
- * @return The primary split-screen stack, and {@code null} otherwise.
- */
- ActivityStack getSplitScreenPrimaryStack() {
- return mTaskStackContainers.getSplitScreenPrimaryStack();
- }
-
- boolean hasSplitScreenPrimaryStack() {
- return getSplitScreenPrimaryStack() != null;
- }
-
- /**
- * Like {@link #getSplitScreenPrimaryStack}, but also returns the stack if it's currently
- * not visible.
- */
- ActivityStack getSplitScreenPrimaryStackIgnoringVisibility() {
- return mTaskStackContainers.getSplitScreenPrimaryStack();
+ boolean hasSplitScreenPrimaryTask() {
+ return getRootSplitScreenPrimaryTask() != null;
}
- ActivityStack getPinnedStack() {
- return mTaskStackContainers.getPinnedStack();
+ ActivityStack getRootPinnedTask() {
+ return mTaskContainers.getRootPinnedTask();
}
- boolean hasPinnedStack() {
- return mTaskStackContainers.getPinnedStack() != null;
+ boolean hasPinnedTask() {
+ return mTaskContainers.getRootPinnedTask() != null;
}
/**
@@ -1981,45 +1968,45 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
* activity type. Null is no compatible stack on the display.
*/
ActivityStack getStack(int windowingMode, int activityType) {
- return mTaskStackContainers.getStack(windowingMode, activityType);
+ return mTaskContainers.getStack(windowingMode, activityType);
}
protected int getStackCount() {
- return mTaskStackContainers.mChildren.size();
+ return mTaskContainers.mChildren.size();
}
protected ActivityStack getStackAt(int index) {
- return mTaskStackContainers.mChildren.get(index);
+ return mTaskContainers.mChildren.get(index);
}
int getIndexOf(ActivityStack stack) {
- return mTaskStackContainers.getIndexOf(stack);
+ return mTaskContainers.getIndexOf(stack);
}
void removeStack(ActivityStack stack) {
- mTaskStackContainers.removeChild(stack);
+ mTaskContainers.removeChild(stack);
}
@VisibleForTesting
WindowList<ActivityStack> getStacks() {
- return mTaskStackContainers.mChildren;
+ return mTaskContainers.mChildren;
}
@VisibleForTesting
ActivityStack getTopStack() {
- return mTaskStackContainers.getTopStack();
+ return mTaskContainers.getTopStack();
}
ArrayList<Task> getVisibleTasks() {
- return mTaskStackContainers.getVisibleTasks();
+ return mTaskContainers.getVisibleTasks();
}
SurfaceControl getSplitScreenDividerAnchor() {
- return mTaskStackContainers.getSplitScreenDividerAnchor();
+ return mTaskContainers.getSplitScreenDividerAnchor();
}
void onStackWindowingModeChanged(ActivityStack stack) {
- mTaskStackContainers.onStackWindowingModeChanged(stack);
+ mTaskContainers.onStackWindowingModeChanged(stack);
}
/**
@@ -2052,7 +2039,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// If there was no pinned stack, we still need to notify the controller of the display info
// update as a result of the config change.
- if (mPinnedStackControllerLocked != null && !hasPinnedStack()) {
+ if (mPinnedStackControllerLocked != null && !hasPinnedTask()) {
mPinnedStackControllerLocked.onDisplayInfoChanged(getDisplayInfo());
}
}
@@ -2139,7 +2126,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
// Top system windows are not requesting an orientation. Start searching from apps.
- return mTaskStackContainers.getOrientation();
+ return mTaskContainers.getOrientation();
}
void updateDisplayInfo() {
@@ -2323,11 +2310,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
void setStackOnDisplay(ActivityStack stack, int position) {
if (DEBUG_STACK) Slog.d(TAG_WM, "Set stack=" + stack + " on displayId=" + mDisplayId);
- mTaskStackContainers.addChild(stack, position);
+ mTaskContainers.addChild(stack, position);
}
void moveStackToDisplay(ActivityStack stack, boolean onTop) {
- stack.reparent(mTaskStackContainers, onTop ? POSITION_TOP: POSITION_BOTTOM);
+ stack.reparent(mTaskContainers, onTop ? POSITION_TOP: POSITION_BOTTOM);
}
@Override
@@ -2364,7 +2351,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void positionStackAt(int position, ActivityStack child, boolean includingParents) {
- mTaskStackContainers.positionChildAt(position, child, includingParents);
+ mTaskContainers.positionChildAt(position, child, includingParents);
layoutAndAssignWindowLayersIfNeeded();
}
@@ -2395,7 +2382,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
*/
Task findTaskForResizePoint(int x, int y) {
final int delta = dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, mDisplayMetrics);
- return mTmpTaskForResizePointSearchResult.process(mTaskStackContainers, x, y, delta);
+ return mTmpTaskForResizePointSearchResult.process(mTaskContainers, x, y, delta);
}
void updateTouchExcludeRegion() {
@@ -2411,7 +2398,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
final PooledConsumer c = PooledLambda.obtainConsumer(
DisplayContent::processTaskForTouchExcludeRegion, this,
PooledLambda.__(Task.class), focusedTask, delta);
- mTaskStackContainers.forAllTasks(c);
+ mTaskContainers.forAllTasks(c);
c.recycle();
// If we removed the focused task above, add it back and only leave its
@@ -2435,7 +2422,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
amendWindowTapExcludeRegion(mTouchExcludeRegion);
// TODO(multi-display): Support docked stacks on secondary displays.
- if (mDisplayId == DEFAULT_DISPLAY && getSplitScreenPrimaryStack() != null) {
+ if (mDisplayId == DEFAULT_DISPLAY && getRootSplitScreenPrimaryTask() != null) {
mDividerControllerLocked.getTouchRegion(mTmpRect);
mTmpRegion.set(mTmpRect);
mTouchExcludeRegion.op(mTmpRegion, Op.UNION);
@@ -2581,8 +2568,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
float dividerAnimationTarget) {
boolean updated = false;
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
if (stack == null || !stack.isAdjustedForIme()) {
continue;
}
@@ -2610,8 +2597,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
boolean clearImeAdjustAnimation() {
boolean changed = false;
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
if (stack != null && stack.isAdjustedForIme()) {
stack.resetAdjustedForIme(true /* adjustBoundsNow */);
changed = true;
@@ -2621,8 +2608,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void beginImeAdjustAnimation() {
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
if (stack.isVisible() && stack.isAdjustedForIme()) {
stack.beginImeAdjustAnimation();
}
@@ -2633,7 +2620,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
final WindowState imeWin = mInputMethodWindow;
final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw()
&& !mDividerControllerLocked.isImeHideRequested();
- final ActivityStack dockedStack = getSplitScreenPrimaryStack();
+ final ActivityStack dockedStack = getRootSplitScreenPrimaryTask();
final boolean dockVisible = dockedStack != null;
final Task topDockedTask = dockVisible ? dockedStack.getTask((t) -> true): null;
final ActivityStack imeTargetStack = mWmService.getImeFocusStackLocked();
@@ -2659,8 +2646,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// - If IME is not visible, divider is not moved and is normal width.
if (imeVisible && dockVisible && (imeOnTop || imeOnBottom) && !dockMinimized) {
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
if (stack.isVisible() && (imeOnBottom || isDockedOnBottom)
&& stack.inSplitScreenWindowingMode()) {
@@ -2672,8 +2659,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
mDividerControllerLocked.setAdjustedForIme(
imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin, imeHeight);
} else {
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
stack.resetAdjustedForIme(!dockVisible);
}
mDividerControllerLocked.setAdjustedForIme(
@@ -2683,8 +2670,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void prepareFreezingTaskBounds() {
- for (int stackNdx = mTaskStackContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(stackNdx);
+ for (int stackNdx = mTaskContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
+ final ActivityStack stack = mTaskContainers.getChildAt(stackNdx);
stack.prepareFreezingTaskBounds();
}
}
@@ -2760,7 +2747,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
proto.write(SINGLE_TASK_INSTANCE, mSingleTaskInstance);
final ActivityStack focusedStack = getFocusedStack();
if (focusedStack != null) {
- proto.write(FOCUSED_STACK_ID, focusedStack.mStackId);
+ proto.write(FOCUSED_STACK_ID, focusedStack.getRootTaskId());
final ActivityRecord focusedActivity = focusedStack.getDisplay().getResumedActivity();
if (focusedActivity != null) {
focusedActivity.writeIdentifierToProto(proto, RESUMED_ACTIVITY);
@@ -2786,8 +2773,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
final long token = proto.start(fieldId);
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
proto.write(ID, mDisplayId);
- for (int stackNdx = mTaskStackContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(stackNdx);
+ for (int stackNdx = mTaskContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
+ final ActivityStack stack = mTaskContainers.getChildAt(stackNdx);
stack.dumpDebugInnerStackOnly(proto, STACKS, logLevel);
}
mDividerControllerLocked.dumpDebug(proto, DOCKED_STACK_DIVIDER_CONTROLLER);
@@ -2913,8 +2900,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
pw.println();
pw.println(prefix + "Application tokens in top down Z order:");
- for (int stackNdx = mTaskStackContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(stackNdx);
+ for (int stackNdx = mTaskContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
+ final ActivityStack stack = mTaskContainers.getChildAt(stackNdx);
stack.dump(pw, prefix + " ", dumpAll);
}
@@ -2944,19 +2931,20 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
pw.println();
// Dump stack references
- final ActivityStack homeStack = getHomeStack();
+ final ActivityStack homeStack = getRootHomeTask();
if (homeStack != null) {
pw.println(prefix + "homeStack=" + homeStack.getName());
}
- final ActivityStack pinnedStack = getPinnedStack();
+ final ActivityStack pinnedStack = getRootPinnedTask();
if (pinnedStack != null) {
pw.println(prefix + "pinnedStack=" + pinnedStack.getName());
}
- final ActivityStack splitScreenPrimaryStack = getSplitScreenPrimaryStack();
+ final ActivityStack splitScreenPrimaryStack = getRootSplitScreenPrimaryTask();
if (splitScreenPrimaryStack != null) {
pw.println(prefix + "splitScreenPrimaryStack=" + splitScreenPrimaryStack.getName());
}
- final ActivityStack recentsStack = getRecentsStack();
+ final ActivityStack recentsStack =
+ getStack(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_RECENTS);
if (recentsStack != null) {
pw.println(prefix + "recentsStack=" + recentsStack.getName());
}
@@ -3994,7 +3982,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
// Initialize state of exiting applications.
- mTaskStackContainers.setExitingTokensHasVisible(hasVisible);
+ mTaskContainers.setExitingTokensHasVisible(hasVisible);
}
void removeExistingTokensIfPossible() {
@@ -4006,7 +3994,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
// Time to remove any exiting applications?
- mTaskStackContainers.removeExistingAppTokensIfPossible();
+ mTaskContainers.removeExistingAppTokensIfPossible();
}
@Override
@@ -4137,7 +4125,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
* Window container class that contains all containers on this display relating to Apps.
* I.e Activities.
*/
- private final class TaskStackContainers extends DisplayChildWindowContainer<ActivityStack> {
+ private final class TaskContainers extends DisplayChildWindowContainer<ActivityStack> {
/**
* A control placed at the appropriate level for transitions to occur.
*/
@@ -4160,14 +4148,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
*/
SurfaceControl mSplitScreenDividerAnchor = null;
- // Cached reference to some special stacks we tend to get a lot so we don't need to loop
+ // Cached reference to some special tasks we tend to get a lot so we don't need to loop
// through the list to find them.
- private ActivityStack mHomeStack = null;
- private ActivityStack mRecentsStack = null;
- private ActivityStack mPinnedStack = null;
- private ActivityStack mSplitScreenPrimaryStack = null;
+ private ActivityStack mRootHomeTask = null;
+ private ActivityStack mRootPinnedTask = null;
+ private ActivityStack mRootSplitScreenPrimaryTask = null;
- TaskStackContainers(WindowManagerService service) {
+ TaskContainers(WindowManagerService service) {
super(service);
}
@@ -4177,15 +4164,15 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
*/
ActivityStack getStack(int windowingMode, int activityType) {
if (activityType == ACTIVITY_TYPE_HOME) {
- return mHomeStack;
+ return mRootHomeTask;
}
if (windowingMode == WINDOWING_MODE_PINNED) {
- return mPinnedStack;
+ return mRootPinnedTask;
} else if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- return mSplitScreenPrimaryStack;
+ return mRootSplitScreenPrimaryTask;
}
- for (int i = mTaskStackContainers.getChildCount() - 1; i >= 0; --i) {
- final ActivityStack stack = mTaskStackContainers.getChildAt(i);
+ for (int i = mTaskContainers.getChildCount() - 1; i >= 0; --i) {
+ final ActivityStack stack = mTaskContainers.getChildAt(i);
if (activityType == ACTIVITY_TYPE_UNDEFINED
&& windowingMode == stack.getWindowingMode()) {
// Passing in undefined type means we want to match the topmost stack with the
@@ -4201,31 +4188,27 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
@VisibleForTesting
ActivityStack getTopStack() {
- return mTaskStackContainers.getChildCount() > 0
- ? mTaskStackContainers.getChildAt(mTaskStackContainers.getChildCount() - 1) : null;
+ return mTaskContainers.getChildCount() > 0
+ ? mTaskContainers.getChildAt(mTaskContainers.getChildCount() - 1) : null;
}
int getIndexOf(ActivityStack stack) {
- return mTaskStackContainers.mChildren.indexOf(stack);
+ return mTaskContainers.mChildren.indexOf(stack);
}
- ActivityStack getHomeStack() {
- if (mHomeStack == null && mDisplayId == DEFAULT_DISPLAY) {
+ ActivityStack getRootHomeTask() {
+ if (mRootHomeTask == null && mDisplayId == DEFAULT_DISPLAY) {
Slog.e(TAG_WM, "getHomeStack: Returning null from this=" + this);
}
- return mHomeStack;
+ return mRootHomeTask;
}
- ActivityStack getRecentsStack() {
- return mRecentsStack;
+ ActivityStack getRootPinnedTask() {
+ return mRootPinnedTask;
}
- ActivityStack getPinnedStack() {
- return mPinnedStack;
- }
-
- ActivityStack getSplitScreenPrimaryStack() {
- return mSplitScreenPrimaryStack;
+ ActivityStack getRootSplitScreenPrimaryTask() {
+ return mRootSplitScreenPrimaryTask;
}
ArrayList<Task> getVisibleTasks() {
@@ -4241,7 +4224,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
void onStackWindowingModeChanged(ActivityStack stack) {
removeStackReferenceIfNeeded(stack);
addStackReferenceIfNeeded(stack);
- if (stack == mPinnedStack && getTopStack() != stack) {
+ if (stack == mRootPinnedTask && getTopStack() != stack) {
// Looks like this stack changed windowing mode to pinned. Move it to the top.
positionChildAt(POSITION_TOP, stack, false /* includingParents */);
}
@@ -4249,46 +4232,36 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
private void addStackReferenceIfNeeded(ActivityStack stack) {
if (stack.isActivityTypeHome()) {
- if (mHomeStack != null) {
- if (!stack.isDescendantOf(mHomeStack)) {
+ if (mRootHomeTask != null) {
+ if (!stack.isDescendantOf(mRootHomeTask)) {
throw new IllegalArgumentException("addStackReferenceIfNeeded: home stack="
- + mHomeStack + " already exist on display=" + this
+ + mRootHomeTask + " already exist on display=" + this
+ " stack=" + stack);
}
} else {
- mHomeStack = stack;
- }
- } else if (stack.isActivityTypeRecents()) {
- if (mRecentsStack != null && mRecentsStack != stack) {
- if (!stack.isDescendantOf(mRecentsStack)) {
- throw new IllegalArgumentException(
- "addStackReferenceIfNeeded: recents stack=" + mRecentsStack
- + " already exist on display=" + this + " stack=" + stack);
- }
- } else {
- mRecentsStack = stack;
+ mRootHomeTask = stack;
}
}
final int windowingMode = stack.getWindowingMode();
if (windowingMode == WINDOWING_MODE_PINNED) {
- if (mPinnedStack != null) {
- if (!stack.isDescendantOf(mPinnedStack)) {
+ if (mRootPinnedTask != null) {
+ if (!stack.isDescendantOf(mRootPinnedTask)) {
throw new IllegalArgumentException(
- "addStackReferenceIfNeeded: pinned stack=" + mPinnedStack
+ "addStackReferenceIfNeeded: pinned stack=" + mRootPinnedTask
+ " already exist on display=" + this + " stack=" + stack);
}
} else {
- mPinnedStack = stack;
+ mRootPinnedTask = stack;
}
} else if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- if (mSplitScreenPrimaryStack != null) {
- if (!stack.isDescendantOf(mSplitScreenPrimaryStack)) {
+ if (mRootSplitScreenPrimaryTask != null) {
+ if (!stack.isDescendantOf(mRootSplitScreenPrimaryTask)) {
throw new IllegalArgumentException("addStackReferenceIfNeeded:"
- + " split-screen-primary" + " stack=" + mSplitScreenPrimaryStack
+ + " split-screen-primary" + " stack=" + mRootSplitScreenPrimaryTask
+ " already exist on display=" + this + " stack=" + stack);
}
} else {
- mSplitScreenPrimaryStack = stack;
+ mRootSplitScreenPrimaryTask = stack;
mDisplayContent.onSplitScreenModeActivated();
mDividerControllerLocked.notifyDockedStackExistsChanged(true);
}
@@ -4296,14 +4269,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void removeStackReferenceIfNeeded(ActivityStack stack) {
- if (stack == mHomeStack) {
- mHomeStack = null;
- } else if (stack == mRecentsStack) {
- mRecentsStack = null;
- } else if (stack == mPinnedStack) {
- mPinnedStack = null;
- } else if (stack == mSplitScreenPrimaryStack) {
- mSplitScreenPrimaryStack = null;
+ if (stack == mRootHomeTask) {
+ mRootHomeTask = null;
+ } else if (stack == mRootPinnedTask) {
+ mRootPinnedTask = null;
+ } else if (stack == mRootSplitScreenPrimaryTask) {
+ mRootSplitScreenPrimaryTask = null;
mDisplayContent.onSplitScreenModeDismissed();
// Re-set the split-screen create mode whenever the split-screen stack is removed.
mWmService.setDockedStackCreateStateLocked(
@@ -4405,9 +4376,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
int minPosition = POSITION_BOTTOM;
if (stack.isAlwaysOnTop()) {
- if (hasPinnedStack()) {
+ if (hasPinnedTask()) {
// Always-on-top stacks go below the pinned stack.
- maxPosition = getStacks().indexOf(mPinnedStack) - 1;
+ maxPosition = getStacks().indexOf(mRootPinnedTask) - 1;
}
// Always-on-top stacks need to be above all other stacks.
minPosition = belowAlwaysOnTopPosition !=
@@ -4532,11 +4503,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// docked stack is visible...except for the home stack if the docked stack is
// minimized and it actually set something and the bounds is different from the
// display.
- if (mHomeStack != null && mHomeStack.isVisible()
+ if (mRootHomeTask != null && mRootHomeTask.isVisible()
&& mDividerControllerLocked.isMinimizedDock()
&& !(mDividerControllerLocked.isHomeStackResizable()
- && mHomeStack.matchParentBounds())) {
- final int orientation = mHomeStack.getOrientation();
+ && mRootHomeTask.matchParentBounds())) {
+ final int orientation = mRootHomeTask.getOrientation();
if (orientation != SCREEN_ORIENTATION_UNSET) {
return orientation;
}
@@ -4717,7 +4688,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
void assignChildLayers(SurfaceControl.Transaction t) {
mImeWindowsContainers.setNeedsLayer();
mBelowAppWindowsContainers.assignLayer(t, 0);
- mTaskStackContainers.assignLayer(t, 1);
+ mTaskContainers.assignLayer(t, 1);
mAboveAppWindowsContainers.assignLayer(t, 2);
final WindowState imeTarget = mInputMethodTarget;
@@ -4756,7 +4727,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// Above we have assigned layers to our children, now we ask them to assign
// layers to their children.
mBelowAppWindowsContainers.assignChildLayers(t);
- mTaskStackContainers.assignChildLayers(t);
+ mTaskContainers.assignChildLayers(t);
mAboveAppWindowsContainers.assignChildLayers(t);
mImeWindowsContainers.assignRelativeLayer(t, getSurfaceControl(), Integer.MAX_VALUE);
mImeWindowsContainers.assignChildLayers(t);
@@ -4769,7 +4740,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
void addChildren() {
addChild(mBelowAppWindowsContainers, null);
- addChild(mTaskStackContainers, null);
+ addChild(mTaskContainers, null);
addChild(mAboveAppWindowsContainers, null);
addChild(mImeWindowsContainers, null);
}
@@ -4929,7 +4900,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
private boolean skipImeWindowsDuringTraversal(DisplayContent dc) {
// We skip IME windows so they're processed just above their target, except
// in split-screen mode where we process the IME containers above the docked divider.
- return dc.mInputMethodTarget != null && !dc.hasSplitScreenPrimaryStack();
+ return dc.mInputMethodTarget != null && !dc.hasSplitScreenPrimaryTask();
}
/** Like {@link #forAllWindows}, but ignores {@link #skipImeWindowsDuringTraversal} */
@@ -5080,7 +5051,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void assignStackOrdering() {
- mTaskStackContainers.assignStackOrdering(getPendingTransaction());
+ mTaskContainers.assignStackOrdering(getPendingTransaction());
}
/**
@@ -5669,8 +5640,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
if (currentFocusedStack != prevFocusedStack) {
mLastFocusedStack = prevFocusedStack;
EventLogTags.writeWmFocusedStack(mRootWindowContainer.mCurrentUser, mDisplayId,
- currentFocusedStack == null ? -1 : currentFocusedStack.getStackId(),
- mLastFocusedStack == null ? -1 : mLastFocusedStack.getStackId(),
+ currentFocusedStack == null ? -1 : currentFocusedStack.getRootTaskId(),
+ mLastFocusedStack == null ? -1 : mLastFocusedStack.getRootTaskId(),
updateLastFocusedStackReason);
}
}
@@ -5678,10 +5649,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
onStackOrderChanged(stack);
}
- ActivityStack getStack(int stackId) {
+ ActivityStack getStack(int rootTaskId) {
for (int i = getStackCount() - 1; i >= 0; --i) {
final ActivityStack stack = getStackAt(i);
- if (stack.mStackId == stackId) {
+ if (stack.getRootTaskId() == rootTaskId) {
return stack;
}
}
@@ -6041,7 +6012,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
} finally {
final ActivityStack topFullscreenStack =
getTopStackInWindowingMode(WINDOWING_MODE_FULLSCREEN);
- final ActivityStack homeStack = getHomeStack();
+ final ActivityStack homeStack = getRootHomeTask();
if (topFullscreenStack != null && homeStack != null && !isTopStack(homeStack)) {
// Whenever split-screen is dismissed we want the home stack directly behind the
// current top fullscreen stack so it shows up when the top stack is finished.
@@ -6059,7 +6030,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
mAtmService.deferWindowLayout();
try {
// Adjust the windowing mode of any affected by split-screen to split-screen secondary.
- final ActivityStack splitScreenPrimaryStack = getSplitScreenPrimaryStack();
+ final ActivityStack splitScreenPrimaryStack = getRootSplitScreenPrimaryTask();
for (int i = getStackCount() - 1; i >= 0; --i) {
final ActivityStack otherStack = getStackAt(i);
if (otherStack == splitScreenPrimaryStack
@@ -6188,7 +6159,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
}
- final boolean inSplitScreenMode = hasSplitScreenPrimaryStack();
+ final boolean inSplitScreenMode = hasSplitScreenPrimaryTask();
if (!inSplitScreenMode
&& windowingMode == WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY) {
// Switch to the display's windowing mode if we are not in split-screen mode and we are
@@ -6434,7 +6405,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// If default display is in split-window mode, set windowing mode of the stack
// to split-screen secondary. Otherwise, set the windowing mode to undefined by
// default to let stack inherited the windowing mode from the new display.
- final int windowingMode = toDisplay.hasSplitScreenPrimaryStack()
+ final int windowingMode = toDisplay.hasSplitScreenPrimaryTask()
? WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
: WINDOWING_MODE_UNDEFINED;
stack.reparent(toDisplay, true /* onTop */);
@@ -6603,7 +6574,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
void moveHomeStackToFront(String reason) {
- final ActivityStack homeStack = getHomeStack();
+ final ActivityStack homeStack = getRootHomeTask();
if (homeStack != null) {
homeStack.moveToFront(reason);
}
@@ -6629,7 +6600,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
@Nullable
ActivityRecord getHomeActivityForUser(int userId) {
- final ActivityStack homeStack = getHomeStack();
+ final ActivityStack homeStack = getRootHomeTask();
if (homeStack == null) {
return null;
}
@@ -6718,7 +6689,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
public void dumpStacks(PrintWriter pw) {
for (int i = getStackCount() - 1; i >= 0; --i) {
- pw.print(getStackAt(i).mStackId);
+ pw.print(getStackAt(i).getRootTaskId());
if (i > 0) {
pw.print(",");
}
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index b59c4e38214b..f90f22423a2d 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -582,7 +582,7 @@ public class DisplayRotation {
// In the presence of the PINNED stack or System Alert windows we unfortunately can not
// seamlessly rotate.
- if (mDisplayContent.hasPinnedStack() || mDisplayContent.hasAlertWindowSurfaces()) {
+ if (mDisplayContent.hasPinnedTask() || mDisplayContent.hasAlertWindowSurfaces()) {
return false;
}
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 6b5859d418ec..872379efa389 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -255,7 +255,7 @@ public class DockedStackDividerController {
}
boolean isHomeStackResizable() {
- final ActivityStack homeStack = mDisplayContent.getHomeStack();
+ final ActivityStack homeStack = mDisplayContent.getRootHomeTask();
if (homeStack == null) {
return false;
}
@@ -371,7 +371,7 @@ public class DockedStackDividerController {
if (mWindow == null) {
return;
}
- ActivityStack stack = mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ ActivityStack stack = mDisplayContent.getRootSplitScreenPrimaryTask();
// If the stack is invisible, we policy force hide it in WindowAnimator.shouldForceHide
final boolean visible = stack != null;
@@ -415,7 +415,7 @@ public class DockedStackDividerController {
}
void positionDockedStackedDivider(Rect frame) {
- ActivityStack stack = mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ ActivityStack stack = mDisplayContent.getRootSplitScreenPrimaryTask();
if (stack == null) {
// Unfortunately we might end up with still having a divider, even though the underlying
// stack was already removed. This is because we are on AM thread and the removal of the
@@ -524,7 +524,7 @@ public class DockedStackDividerController {
// If a primary stack was just created, it will not have access to display content at
// this point so pass it from here to get a valid dock side.
final ActivityStack stack =
- mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ mDisplayContent.getRootSplitScreenPrimaryTask();
mOriginalDockedSide = stack.getDockSideForDisplay(mDisplayContent);
return;
}
@@ -560,7 +560,7 @@ public class DockedStackDividerController {
long animDuration = 0;
if (animate) {
final ActivityStack stack =
- mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ mDisplayContent.getRootSplitScreenPrimaryTask();
final long transitionDuration = isAnimationMaximizing()
? mDisplayContent.mAppTransition.getLastClipRevealTransitionDuration()
: DEFAULT_APP_TRANSITION_DURATION;
@@ -615,7 +615,7 @@ public class DockedStackDividerController {
mDockedStackListeners.register(listener);
notifyDockedDividerVisibilityChanged(wasVisible());
notifyDockedStackExistsChanged(
- mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility() != null);
+ mDisplayContent.getRootSplitScreenPrimaryTask() != null);
notifyDockedStackMinimizedChanged(mMinimizedDock, false /* animate */,
isHomeStackResizable());
notifyAdjustedForImeChanged(mAdjustedForIme, 0 /* animDuration */);
@@ -633,7 +633,7 @@ public class DockedStackDividerController {
final ActivityStack stack = targetWindowingMode != WINDOWING_MODE_UNDEFINED
? mDisplayContent.getTopStackInWindowingMode(targetWindowingMode)
: null;
- final ActivityStack dockedStack = mDisplayContent.getSplitScreenPrimaryStack();
+ final ActivityStack dockedStack = mDisplayContent.getRootSplitScreenPrimaryTask();
boolean visibleAndValid = visible && stack != null && dockedStack != null;
// Ensure an old dim that was shown for the docked stack divider is removed so we don't end
@@ -701,10 +701,10 @@ public class DockedStackDividerController {
}
void checkMinimizeChanged(boolean animate) {
- if (mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility() == null) {
+ if (mDisplayContent.getRootSplitScreenPrimaryTask() == null) {
return;
}
- final ActivityStack homeStack = mDisplayContent.getHomeStack();
+ final ActivityStack homeStack = mDisplayContent.getRootHomeTask();
if (homeStack == null) {
return;
}
@@ -873,7 +873,7 @@ public class DockedStackDividerController {
}
private boolean setMinimizedDockedStack(boolean minimized) {
- final ActivityStack stack = mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ final ActivityStack stack = mDisplayContent.getRootSplitScreenPrimaryTask();
notifyDockedStackMinimizedChanged(minimized, false /* animate */, isHomeStackResizable());
return stack != null && stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f);
}
@@ -923,7 +923,7 @@ public class DockedStackDividerController {
}
private boolean animateForMinimizedDockedStack(long now) {
- final ActivityStack stack = mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ final ActivityStack stack = mDisplayContent.getRootSplitScreenPrimaryTask();
if (!mAnimationStarted) {
mAnimationStarted = true;
mAnimationStartTime = now;
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index 7db30f6009b4..ad65e101fd15 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -407,7 +407,7 @@ class KeyguardController {
// stack since it will be complicated/risky to try to put the activity on top
// of the lock screen in the right fullscreen configuration.
final ActivityStack stack =
- mRootWindowContainer.getDefaultDisplay().getSplitScreenPrimaryStack();
+ mRootWindowContainer.getDefaultDisplay().getRootSplitScreenPrimaryTask();
if (stack == null) {
return;
}
diff --git a/services/core/java/com/android/server/wm/LaunchParamsController.java b/services/core/java/com/android/server/wm/LaunchParamsController.java
index 03e13221c4a7..a9820ef1c081 100644
--- a/services/core/java/com/android/server/wm/LaunchParamsController.java
+++ b/services/core/java/com/android/server/wm/LaunchParamsController.java
@@ -138,7 +138,7 @@ class LaunchParamsController {
try {
if (mTmpParams.hasPreferredDisplay()
&& mTmpParams.mPreferredDisplayId != task.getStack().getDisplay().mDisplayId) {
- mService.moveStackToDisplay(task.getStackId(), mTmpParams.mPreferredDisplayId);
+ mService.moveStackToDisplay(task.getRootTaskId(), mTmpParams.mPreferredDisplayId);
}
if (mTmpParams.hasWindowingMode()
diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java
index b4f75e545729..1d5b5d1a46a4 100644
--- a/services/core/java/com/android/server/wm/PinnedStackController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackController.java
@@ -125,7 +125,7 @@ class PinnedStackController {
public void startAnimation(Rect destinationBounds, Rect sourceRectHint,
int animationDuration) {
synchronized (mService.mGlobalLock) {
- final ActivityStack pinnedStack = mDisplayContent.getPinnedStack();
+ final ActivityStack pinnedStack = mDisplayContent.getRootPinnedTask();
pinnedStack.animateResizePinnedStack(destinationBounds,
sourceRectHint, animationDuration, true /* fromFullscreen */);
}
@@ -134,7 +134,7 @@ class PinnedStackController {
@Override
public void resetBoundsAnimation(Rect bounds) {
synchronized (mService.mGlobalLock) {
- if (mDisplayContent.hasPinnedStack()) {
+ if (mDisplayContent.hasPinnedTask()) {
final ActivityStack pinnedStack = mDisplayContent.getTopStackInWindowingMode(
WINDOWING_MODE_PINNED);
if (pinnedStack != null) {
@@ -383,7 +383,7 @@ class PinnedStackController {
}
try {
final Rect animatingBounds = new Rect();
- final ActivityStack pinnedStack = mDisplayContent.getPinnedStack();
+ final ActivityStack pinnedStack = mDisplayContent.getRootPinnedTask();
if (pinnedStack != null) {
pinnedStack.getAnimationOrCurrentBounds(animatingBounds);
}
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index e1dfc177a881..292e8aaa0c04 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -1387,7 +1387,7 @@ class RecentTasks {
// Trim tasks that are in stacks that are behind the home stack
final DisplayContent display = stack.getDisplay();
- return display.getIndexOf(stack) < display.getIndexOf(display.getHomeStack());
+ return display.getIndexOf(stack) < display.getIndexOf(display.getRootHomeTask());
}
/**
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 614809505dee..da9d074eb7bc 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -413,7 +413,7 @@ public class RecentsAnimationController implements DeathRecipient {
// Save the minimized home height
final ActivityStack dockedStack =
- mDisplayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ mDisplayContent.getRootSplitScreenPrimaryTask();
mDisplayContent.getDockedDividerController().getHomeStackBoundsInDockedMode(
mDisplayContent.getConfiguration(),
dockedStack == null ? DOCKED_INVALID : dockedStack.getDockSide(),
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 8202833783a9..d3da50060104 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -1656,7 +1656,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
// Only resume home activity if isn't finishing.
if (r != null && !r.finishing) {
r.moveFocusableActivityToTop(myReason);
- return resumeFocusedStacksTopActivities(r.getActivityStack(), prev, null);
+ return resumeFocusedStacksTopActivities(r.getRootTask(), prev, null);
}
return startHomeOnDisplay(mCurrentUser, myReason, displayId);
}
@@ -1980,9 +1980,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
boolean switchUser(int userId, UserState uss) {
- final int focusStackId = getTopDisplayFocusedStack().getStackId();
+ final int focusStackId = getTopDisplayFocusedStack().getRootTaskId();
// We dismiss the docked stack whenever we switch users.
- final ActivityStack dockedStack = getDefaultDisplay().getSplitScreenPrimaryStack();
+ final ActivityStack dockedStack = getDefaultDisplay().getRootSplitScreenPrimaryTask();
if (dockedStack != null) {
mStackSupervisor.moveTasksToFullscreenStackLocked(
dockedStack, dockedStack.isFocusedStackOnDisplay());
@@ -1994,7 +1994,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
mUserStackInFront.put(mCurrentUser, focusStackId);
final int restoreStackId =
- mUserStackInFront.get(userId, getDefaultDisplay().getHomeStack().mStackId);
+ mUserStackInFront.get(userId, getDefaultDisplay().getRootHomeTask().getRootTaskId());
mCurrentUser = userId;
mStackSupervisor.mStartingUsers.add(uss);
@@ -2012,7 +2012,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
ActivityStack stack = getStack(restoreStackId);
if (stack == null) {
- stack = getDefaultDisplay().getHomeStack();
+ stack = getDefaultDisplay().getRootHomeTask();
}
final boolean homeInFront = stack.isActivityTypeHome();
if (stack.isOnHomeDisplay()) {
@@ -2034,8 +2034,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
*/
void updateUserStack(int userId, ActivityStack stack) {
if (userId != mCurrentUser) {
- mUserStackInFront.put(userId, stack != null ? stack.getStackId()
- : getDefaultDisplay().getHomeStack().mStackId);
+ mUserStackInFront.put(userId, stack != null ? stack.getRootTaskId()
+ : getDefaultDisplay().getRootHomeTask().getRootTaskId());
}
}
@@ -2108,12 +2108,12 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
String reason) {
mService.deferWindowLayout();
- final DisplayContent display = r.getActivityStack().getDisplay();
+ final DisplayContent display = r.getRootTask().getDisplay();
try {
final Task task = r.getTask();
- final ActivityStack pinnedStack = display.getPinnedStack();
+ final ActivityStack pinnedStack = display.getRootPinnedTask();
// This will change the pinned stack's windowing mode to its original mode, ensuring
// we only have one stack that is in pinned mode.
if (pinnedStack != null) {
@@ -2124,13 +2124,13 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
final ActivityStack stack;
if (singleActivity) {
- stack = r.getActivityStack();
+ stack = r.getRootTask();
} else {
// In the case of multiple activities, we will create a new stack for it and then
// move the PIP activity into the stack.
// We will then perform a windowing mode change for both scenarios.
stack = display.createStack(
- r.getActivityStack().getRequestedOverrideWindowingMode(),
+ r.getRootTask().getRequestedOverrideWindowingMode(),
r.getActivityType(), ON_TOP, r.info, r.intent);
// There are multiple activities in the task and moving the top activity should
// reveal/leave the other activities in their original task.
@@ -2398,7 +2398,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
ActivityManager.StackInfo info = new ActivityManager.StackInfo();
stack.getBounds(info.bounds);
info.displayId = display.mDisplayId;
- info.stackId = stack.mStackId;
+ info.stackId = stack.mTaskId;
info.stackToken = stack.mRemoteToken;
info.userId = stack.mCurrentUser;
info.visible = stack.shouldBeVisible(null);
@@ -2853,7 +2853,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
stack = candidateTask.getStack();
}
if (stack == null && r != null) {
- stack = r.getActivityStack();
+ stack = r.getRootTask();
}
if (stack != null) {
display = stack.getDisplay();
@@ -2868,7 +2868,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return stack;
}
if (windowingMode == WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY
- && display.getSplitScreenPrimaryStack() == stack
+ && display.getRootSplitScreenPrimaryTask() == stack
&& candidateTask == stack.getTopMostTask()) {
// This is a special case when we try to launch an activity that is currently on
// top of split-screen primary stack, but is targeting split-screen secondary.
@@ -3244,7 +3244,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
if (resumedActivity == null || !resumedActivity.idle) {
if (DEBUG_STATES) {
Slog.d(TAG_STATES, "allResumedActivitiesIdle: stack="
- + stack.mStackId + " " + resumedActivity + " not idle");
+ + stack.getRootTaskId() + " " + resumedActivity + " not idle");
}
return false;
}
@@ -3599,7 +3599,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
// TODO(b/111541062): Update tests to look for resumed activities on all displays
final ActivityStack focusedStack = getTopDisplayFocusedStack();
if (focusedStack != null) {
- proto.write(FOCUSED_STACK_ID, focusedStack.mStackId);
+ proto.write(FOCUSED_STACK_ID, focusedStack.getRootTaskId());
final ActivityRecord focusedActivity = focusedStack.getDisplay().getResumedActivity();
if (focusedActivity != null) {
focusedActivity.writeIdentifierToProto(proto, RESUMED_ACTIVITY);
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 9e6cb6884820..c52966b5b33d 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -526,7 +526,7 @@ class Task extends WindowContainer<WindowContainer> {
ActivityStack stack) {
super(atmService.mWindowManager);
- EventLogTags.writeWmTaskCreated(_taskId, stack != null ? stack.mStackId : INVALID_STACK_ID);
+ EventLogTags.writeWmTaskCreated(_taskId, stack != null ? getRootTaskId() : INVALID_TASK_ID);
mAtmService = atmService;
mStackSupervisor = atmService.mStackSupervisor;
mRootWindowContainer = mAtmService.mRootWindowContainer;
@@ -1080,7 +1080,7 @@ class Task extends WindowContainer<WindowContainer> {
// the display, so we should probably consolidate it there instead.
if (getParent() == null && mDisplayContent != null) {
- EventLogTags.writeWmStackRemoved(getStackId());
+ EventLogTags.writeWmStackRemoved(getRootTaskId());
mDisplayContent = null;
mWmService.mWindowPlacerLocked.requestTraversal();
}
@@ -2344,17 +2344,27 @@ class Task extends WindowContainer<WindowContainer> {
return dc != null ? dc.mDisplayId : INVALID_DISPLAY;
}
+ // TODO: Migrate callers to getRootTask()
ActivityStack getStack() {
+ return (ActivityStack) getRootTask();
+ }
+
+ /** @return Id of root task. */
+ int getRootTaskId() {
+ return getRootTask().mTaskId;
+ }
+
+ Task getRootTask() {
final WindowContainer parent = getParent();
- return (ActivityStack) (parent instanceof ActivityStack ? parent : this);
+ if (parent == null) return this;
+
+ final Task parentTask = parent.asTask();
+ return parentTask == null ? this : parentTask.getRootTask();
}
- /**
- * @return Id of current stack, {@link ActivityTaskManager#INVALID_STACK_ID} if no stack is set.
- */
- int getStackId() {
- final ActivityStack stack = getStack();
- return stack != null ? stack.mStackId : INVALID_STACK_ID;
+ // TODO(task-merge): Figure out what's the right thing to do for places that used it.
+ boolean isRootTask() {
+ return getRootTask() == this;
}
int getDescendantTaskCount() {
@@ -2736,7 +2746,7 @@ class Task extends WindowContainer<WindowContainer> {
// No need to check if the mode is allowed if it's leaving dragResize
if (dragResizing && !DragResizeMode.isModeAllowedForStack(getStack(), dragResizeMode)) {
throw new IllegalArgumentException("Drag resize mode not allow for stack stackId="
- + getStack().mStackId + " dragResizeMode=" + dragResizeMode);
+ + getRootTaskId() + " dragResizeMode=" + dragResizeMode);
}
mDragResizing = dragResizing;
mDragResizeMode = dragResizeMode;
@@ -3010,11 +3020,6 @@ class Task extends WindowContainer<WindowContainer> {
return mTaskDescription;
}
- // TODO(task-merge): Figure out what's the right thing to do for places that used it.
- boolean isRootTask() {
- return getParent() == null || getParent().asTask() == null;
- }
-
@Override
boolean fillsParent() {
return matchParentBounds();
@@ -3167,7 +3172,7 @@ class Task extends WindowContainer<WindowContainer> {
void fillTaskInfo(TaskInfo info) {
getNumRunningActivities(mReuseActivitiesReport);
info.userId = mUserId;
- info.stackId = getStackId();
+ info.stackId = getRootTaskId();
info.taskId = mTaskId;
info.displayId = getDisplayId();
info.isRunning = getTopNonFinishingActivity() != null;
@@ -3298,7 +3303,7 @@ class Task extends WindowContainer<WindowContainer> {
if (mRootProcess != null) {
pw.print(prefix); pw.print("mRootProcess="); pw.println(mRootProcess);
}
- pw.print(prefix); pw.print("taskId=" + mTaskId); pw.println(" stackId=" + getStackId());
+ pw.print(prefix); pw.print("taskId=" + mTaskId); pw.println(" stackId=" + getRootTaskId());
pw.print(prefix + "hasBeenVisible=" + hasBeenVisible);
pw.print(" mResizeMode=" + ActivityInfo.resizeModeToString(mResizeMode));
pw.print(" mSupportsPictureInPicture=" + mSupportsPictureInPicture);
@@ -3315,7 +3320,7 @@ class Task extends WindowContainer<WindowContainer> {
sb.append(" U=");
sb.append(mUserId);
sb.append(" StackId=");
- sb.append(getStackId());
+ sb.append(getRootTaskId());
sb.append(" sz=");
sb.append(getChildCount());
sb.append('}');
@@ -3358,7 +3363,7 @@ class Task extends WindowContainer<WindowContainer> {
forAllActivities((r) -> {
r.dumpDebug(proto, ACTIVITIES);
});
- proto.write(STACK_ID, getStackId());
+ proto.write(STACK_ID, getRootTaskId());
if (mLastNonFullscreenBounds != null) {
mLastNonFullscreenBounds.dumpDebug(proto, LAST_NON_FULLSCREEN_BOUNDS);
}
diff --git a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
index 688fe1290b18..2dde0bac74a8 100644
--- a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
@@ -350,7 +350,7 @@ class TaskChangeNotificationController {
void notifyActivityPinned(ActivityRecord r) {
mHandler.removeMessages(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG);
final Message msg = mHandler.obtainMessage(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG,
- r.getTask().mTaskId, r.getStackId(), r.packageName);
+ r.getTask().mTaskId, r.getRootTaskId(), r.packageName);
msg.sendingUid = r.mUserId;
forAllLocalListeners(mNotifyActivityPinned, msg);
msg.sendToTarget();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index cd5da08a4780..81a4c682e809 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3163,7 +3163,7 @@ public class WindowManagerService extends IWindowManager.Stub
// Notify whether the docked stack exists for the current user
final DisplayContent displayContent = getDefaultDisplayContentLocked();
final ActivityStack stack =
- displayContent.getSplitScreenPrimaryStackIgnoringVisibility();
+ displayContent.getRootSplitScreenPrimaryTask();
displayContent.mDividerControllerLocked.notifyDockedStackExistsChanged(
stack != null && stack.hasTaskForUser(newUserId));
@@ -6414,7 +6414,7 @@ public class WindowManagerService extends IWindowManager.Stub
public int getDockedStackSide() {
synchronized (mGlobalLock) {
final ActivityStack dockedStack = getDefaultDisplayContentLocked()
- .getSplitScreenPrimaryStackIgnoringVisibility();
+ .getRootSplitScreenPrimaryTask();
return dockedStack == null ? DOCKED_INVALID : dockedStack.getDockSide();
}
}
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index c755e60ec977..812942e06e39 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -618,15 +618,15 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
// Compare the z-order of ActivityStacks if both activities landed on same display.
if (display == topDisplay
- && mPreQTopResumedActivity.getActivityStack().compareTo(
- activity.getActivityStack()) <= 0) {
+ && mPreQTopResumedActivity.getRootTask().compareTo(
+ activity.getRootTask()) <= 0) {
canUpdate = true;
}
if (canUpdate) {
// Make sure the previous top activity in the process no longer be resumed.
if (mPreQTopResumedActivity != null && mPreQTopResumedActivity.isState(RESUMED)) {
- final ActivityStack stack = mPreQTopResumedActivity.getActivityStack();
+ final ActivityStack stack = mPreQTopResumedActivity.getRootTask();
if (stack != null) {
stack.startPausingLocked(false /* userLeaving */, false /* uiSleeping */,
activity);
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 2965764e8961..73984fd49f73 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -16,7 +16,7 @@
package com.android.server.wm;
-import static android.app.ActivityTaskManager.INVALID_STACK_ID;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_DEFAULT;
import static android.app.AppOpsManager.OP_NONE;
@@ -1055,7 +1055,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
}
}
- final ActivityStack stack = getStack();
+ final ActivityStack stack = getRootTask();
if (inPinnedWindowingMode() && stack != null
&& stack.lastAnimatingBoundsWasToFullscreen()) {
// PIP edge case: When going from pinned to fullscreen, we apply a
@@ -1469,17 +1469,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return mActivityRecord != null ? mActivityRecord.getTask() : null;
}
- ActivityStack getStack() {
- Task task = getTask();
+ ActivityStack getRootTask() {
+ final Task task = getTask();
if (task != null) {
- if (task.getStack() != null) {
- return task.getStack();
- }
+ return (ActivityStack) task.getRootTask();
}
// Some system windows (e.g. "Power off" dialog) don't have a task, but we would still
// associate them with some stack to enable dimming.
final DisplayContent dc = getDisplayContent();
- return mAttrs.type >= FIRST_SYSTEM_WINDOW && dc != null ? dc.getHomeStack() : null;
+ return mAttrs.type >= FIRST_SYSTEM_WINDOW && dc != null ? dc.getRootHomeTask() : null;
}
/**
@@ -2229,7 +2227,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return false;
}
- final ActivityStack stack = getStack();
+ final ActivityStack stack = getRootTask();
if (stack != null && stack.shouldIgnoreInput()) {
// Ignore when the stack shouldn't receive input event.
// (i.e. the minimized stack in split screen mode.)
@@ -2472,7 +2470,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
if (task != null) {
task.getDimBounds(mTmpRect);
} else {
- getStack().getDimBounds(mTmpRect);
+ getRootTask().getDimBounds(mTmpRect);
}
}
if (inFreeformWindowingMode()) {
@@ -2653,7 +2651,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
// also reset drag resizing state, because the owner can't do it
// anymore.
final ActivityStack stack =
- dc.getSplitScreenPrimaryStackIgnoringVisibility();
+ dc.getRootSplitScreenPrimaryTask();
if (stack != null) {
stack.resetDockedStackToMiddle();
}
@@ -3563,12 +3561,12 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return mTmpRect;
}
- private int getStackId() {
- final ActivityStack stack = getStack();
+ private int getRootTaskId() {
+ final ActivityStack stack = getRootTask();
if (stack == null) {
- return INVALID_STACK_ID;
+ return INVALID_TASK_ID;
}
- return stack.mStackId;
+ return stack.mTaskId;
}
private void dispatchResized(Rect frame, Rect contentInsets,
@@ -3753,7 +3751,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
super.dumpDebug(proto, WINDOW_CONTAINER, logLevel);
writeIdentifierToProto(proto, IDENTIFIER);
proto.write(DISPLAY_ID, getDisplayId());
- proto.write(STACK_ID, getStackId());
+ proto.write(STACK_ID, getRootTaskId());
mAttrs.dumpDebug(proto, ATTRIBUTES);
mGivenContentInsets.dumpDebug(proto, GIVEN_CONTENT_INSETS);
mWindowFrames.dumpDebug(proto, WINDOW_FRAMES);
@@ -3795,10 +3793,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
@Override
void dump(PrintWriter pw, String prefix, boolean dumpAll) {
- final ActivityStack stack = getStack();
pw.print(prefix + "mDisplayId=" + getDisplayId());
- if (stack != null) {
- pw.print(" stackId=" + stack.mStackId);
+ if (getRootTask() != null) {
+ pw.print(" rootTaskId=" + getRootTaskId());
}
pw.println(" mSession=" + mSession
+ " mClient=" + mClient.asBinder());
@@ -5271,7 +5268,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
outPoint.offset(-parentBounds.left, -parentBounds.top);
}
- ActivityStack stack = getStack();
+ ActivityStack stack = getRootTask();
// If we have stack outsets, that means the top-left
// will be outset, and we need to inset ourselves
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 6189fbdbfb78..069ee4fea8ec 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -1013,7 +1013,7 @@ class WindowStateAnimator {
mSurfaceController.deferTransactionUntil(mSurfaceController.mSurfaceControl,
mWin.getFrameNumber());
} else {
- final ActivityStack stack = mWin.getStack();
+ final ActivityStack stack = mWin.getRootTask();
mTmpPos.x = 0;
mTmpPos.y = 0;
if (stack != null) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
index ed9cdf4caa94..4f84ee17b087 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityDisplayTests.java
@@ -233,7 +233,7 @@ public class ActivityDisplayTests extends ActivityTestsBase {
final ActivityStack pinnedStack = display.createStack(
WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- assertEquals(pinnedStack, display.getPinnedStack());
+ assertEquals(pinnedStack, display.getRootPinnedTask());
assertEquals(pinnedStack, display.getTopStack());
final ActivityStack anotherAlwaysOnTopStack = display.createStack(
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index c60ca48f0b3d..ebe4ab99663a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -136,7 +136,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
public void testStackCleanupOnTaskRemoval() {
mStack.removeChild(mTask, null /*reason*/);
// Stack should be gone on task removal.
- assertNull(mService.mRootWindowContainer.getStack(mStack.mStackId));
+ assertNull(mService.mRootWindowContainer.getStack(mStack.mTaskId));
}
@Test
@@ -1010,7 +1010,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
@Test
public void testDestroyIfPossible_lastActivityAboveEmptyHomeStack() {
// Empty the home stack.
- final ActivityStack homeStack = mActivity.getDisplay().getHomeStack();
+ final ActivityStack homeStack = mActivity.getDisplay().getRootHomeTask();
homeStack.forAllTasks((t) -> {
homeStack.removeChild(t, "test");
}, true /* traverseTopToBottom */, homeStack);
@@ -1036,7 +1036,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
@Test
public void testCompleteFinishing_lastActivityAboveEmptyHomeStack() {
// Empty the home stack.
- final ActivityStack homeStack = mActivity.getDisplay().getHomeStack();
+ final ActivityStack homeStack = mActivity.getDisplay().getRootHomeTask();
homeStack.forAllTasks((t) -> {
homeStack.removeChild(t, "test");
}, true /* traverseTopToBottom */, homeStack);
@@ -1136,7 +1136,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
@Test
public void testRemoveFromHistory() {
- final ActivityStack stack = mActivity.getActivityStack();
+ final ActivityStack stack = mActivity.getRootTask();
final Task task = mActivity.getTask();
mActivity.removeFromHistory("test");
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index 9e54f4044e0a..f702d5d91f9e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -153,7 +153,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
assertThat((Object) task2.getStack()).isInstanceOf(ActivityStack.class);
mStarter.updateBounds(task2, bounds);
- verify(mService, times(1)).animateResizePinnedStack(eq(task2.getStack().mStackId),
+ verify(mService, times(1)).animateResizePinnedStack(eq(task2.getRootTaskId()),
eq(bounds), anyInt());
// In the case of no animation, the stack and task bounds should be set immediately.
@@ -446,13 +446,13 @@ public class ActivityStarterTests extends ActivityTestsBase {
new ActivityBuilder(mService).setCreateTask(true).build();
final ActivityRecord splitSecondReusableActivity =
new ActivityBuilder(mService).setCreateTask(true).build();
- splitPrimaryFocusActivity.getActivityStack()
+ splitPrimaryFocusActivity.getRootTask()
.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
- splitSecondReusableActivity.getActivityStack()
+ splitSecondReusableActivity.getRootTask()
.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
// Set focus back to primary.
- splitPrimaryFocusActivity.getActivityStack().moveToFront("testSplitScreenDeliverToTop");
+ splitPrimaryFocusActivity.getRootTask().moveToFront("testSplitScreenDeliverToTop");
// Start activity and delivered new intent.
starter.getIntent().setComponent(splitSecondReusableActivity.mActivityComponent);
@@ -477,18 +477,18 @@ public class ActivityStarterTests extends ActivityTestsBase {
new ActivityBuilder(mService).setCreateTask(true).build();
final ActivityRecord splitPrimaryFocusActivity =
new ActivityBuilder(mService).setCreateTask(true).build();
- splitPrimaryFocusActivity.getActivityStack()
+ splitPrimaryFocusActivity.getRootTask()
.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
- splitSecondReusableActivity.getActivityStack()
+ splitSecondReusableActivity.getRootTask()
.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
- splitSecondTopActivity.getActivityStack()
+ splitSecondTopActivity.getRootTask()
.setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
// Make it on top of split-screen-secondary.
- splitSecondTopActivity.getActivityStack().moveToFront("testSplitScreenTaskToFront");
+ splitSecondTopActivity.getRootTask().moveToFront("testSplitScreenTaskToFront");
// Let primary stack has focus.
- splitPrimaryFocusActivity.getActivityStack().moveToFront("testSplitScreenTaskToFront");
+ splitPrimaryFocusActivity.getRootTask().moveToFront("testSplitScreenTaskToFront");
// Start activity and delivered new intent.
starter.getIntent().setComponent(splitSecondReusableActivity.mActivityComponent);
@@ -732,13 +732,13 @@ public class ActivityStarterTests extends ActivityTestsBase {
final ActivityRecord activity = new ActivityBuilder(mService)
.setCreateTask(true).build();
new ActivityBuilder(mService)
- .setStack(activity.getActivityStack())
+ .setStack(activity.getRootTask())
.setCreateTask(true).build();
// Create a top finishing activity.
final ActivityRecord finishingTopActivity = new ActivityBuilder(mService)
.setCreateTask(true).build();
- finishingTopActivity.getActivityStack().moveToFront("finishingTopActivity");
+ finishingTopActivity.getRootTask().moveToFront("finishingTopActivity");
assertEquals(finishingTopActivity, mRootWindowContainer.topRunningActivity());
finishingTopActivity.finishing = true;
@@ -997,8 +997,8 @@ public class ActivityStarterTests extends ActivityTestsBase {
assertThat(outActivity[0].inSplitScreenWindowingMode()).isFalse();
// Move activity to split-screen-primary stack and make sure it has the focus.
- top.getActivityStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
- top.getActivityStack().moveToFront("testWindowingModeOptionsLaunchAdjacent");
+ top.getRootTask().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+ top.getRootTask().moveToFront("testWindowingModeOptionsLaunchAdjacent");
// Activity must landed on split-screen-secondary when launch adjacent.
starter.setActivityOptions(options.toBundle())
diff --git a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
index cf1f0a822232..8b3a6cf7e15e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LaunchParamsControllerTests.java
@@ -284,7 +284,7 @@ public class LaunchParamsControllerTests extends ActivityTestsBase {
doNothing().when(mService).moveStackToDisplay(anyInt(), anyInt());
mController.layoutTask(task, null /* windowLayout */);
- verify(mService, times(1)).moveStackToDisplay(eq(task.getStackId()),
+ verify(mService, times(1)).moveStackToDisplay(eq(task.getRootTaskId()),
eq(params.mPreferredDisplayId));
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
index 79f808e4687a..b5e7dd58f7cc 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -303,7 +303,7 @@ public class RecentTasksTest extends ActivityTestsBase {
// other task
Task task1 = createTaskBuilder(".Task1")
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
- .setStack(mDisplay.getHomeStack()).build();
+ .setStack(mDisplay.getRootHomeTask()).build();
Task task2 = createTaskBuilder(".Task1")
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.setStack(mStack).build();
@@ -792,7 +792,7 @@ public class RecentTasksTest extends ActivityTestsBase {
public void testBackStackTasks_expectNoTrim() {
mRecentTasks.setParameters(-1 /* min */, 1 /* max */, -1 /* ms */);
- final ActivityStack homeStack = mDisplay.getHomeStack();
+ final ActivityStack homeStack = mDisplay.getRootHomeTask();
final ActivityStack aboveHomeStack = mDisplay.createStack(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
@@ -812,7 +812,7 @@ public class RecentTasksTest extends ActivityTestsBase {
final ActivityStack behindHomeStack = mDisplay.createStack(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- final ActivityStack homeStack = mDisplay.getHomeStack();
+ final ActivityStack homeStack = mDisplay.getRootHomeTask();
final ActivityStack aboveHomeStack = mDisplay.createStack(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
@@ -832,7 +832,7 @@ public class RecentTasksTest extends ActivityTestsBase {
public void testOtherDisplayTasks_expectNoTrim() {
mRecentTasks.setParameters(-1 /* min */, 1 /* max */, -1 /* ms */);
- final ActivityStack homeStack = mDisplay.getHomeStack();
+ final ActivityStack homeStack = mDisplay.getRootHomeTask();
final DisplayContent otherDisplay = addNewDisplayContentAt(DisplayContent.POSITION_TOP);
final ActivityStack otherDisplayStack = otherDisplay.createStack(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
index 7e42c62d5ee2..b78107e9024f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
@@ -97,7 +97,7 @@ public class RecentsAnimationTest extends ActivityTestsBase {
.setStack(recentsStack)
.build();
ActivityRecord topActivity = new ActivityBuilder(mService).setCreateTask(true).build();
- topActivity.getActivityStack().moveToFront("testRecentsActivityVisiblility");
+ topActivity.getRootTask().moveToFront("testRecentsActivityVisiblility");
doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible(
any() /* starting */, anyInt() /* configChanges */,
@@ -187,7 +187,7 @@ public class RecentsAnimationTest extends ActivityTestsBase {
recentActivity.app = null;
// Start an activity on top.
- new ActivityBuilder(mService).setCreateTask(true).build().getActivityStack().moveToFront(
+ new ActivityBuilder(mService).setCreateTask(true).build().getRootTask().moveToFront(
"testRestartRecentsActivity");
doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible(
@@ -209,7 +209,7 @@ public class RecentsAnimationTest extends ActivityTestsBase {
public void testSetLaunchTaskBehindOfTargetActivity() {
DisplayContent display = mRootWindowContainer.getDefaultDisplay();
display.mDisplayContent.mBoundsAnimationController = mock(BoundsAnimationController.class);
- ActivityStack homeStack = display.getHomeStack();
+ ActivityStack homeStack = display.getRootHomeTask();
// Assume the home activity support recents.
ActivityRecord targetActivity = homeStack.getTopNonFinishingActivity();
if (targetActivity == null) {
@@ -229,7 +229,7 @@ public class RecentsAnimationTest extends ActivityTestsBase {
new ActivityBuilder(mService)
.setCreateTask(true)
.build()
- .getActivityStack()
+ .getRootTask()
.moveToFront("Activity start");
// Start the recents animation.
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
index ea8d0821dae3..79db927d38f6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java
@@ -131,7 +131,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
0f /*aspectRatio*/, "initialMove");
final DisplayContent display = mFullscreenStack.getDisplay();
- ActivityStack pinnedStack = display.getPinnedStack();
+ ActivityStack pinnedStack = display.getRootPinnedTask();
// Ensure a task has moved over.
ensureStackPlacement(pinnedStack, firstActivity);
ensureStackPlacement(mFullscreenStack, secondActivity);
@@ -141,7 +141,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
0f /*aspectRatio*/, "secondMove");
// Need to get stacks again as a new instance might have been created.
- pinnedStack = display.getPinnedStack();
+ pinnedStack = display.getRootPinnedTask();
mFullscreenStack = display.getStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
// Ensure stacks have swapped tasks.
ensureStackPlacement(pinnedStack, secondActivity);
@@ -417,7 +417,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
@Test
public void testResumeFocusedStacksStartsHomeActivity_NoActivities() {
mFullscreenStack.removeIfPossible();
- mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY).getHomeStack()
+ mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY).getRootHomeTask()
.removeIfPossible();
mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY)
.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
@@ -440,7 +440,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
@Test
public void testResumeFocusedStacksStartsHomeActivity_ActivityOnSecondaryScreen() {
mFullscreenStack.removeIfPossible();
- mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY).getHomeStack()
+ mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY).getRootHomeTask()
.removeIfPossible();
mService.mRootWindowContainer.getDisplayContent(DEFAULT_DISPLAY)
.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP);
@@ -638,7 +638,7 @@ public class RootActivityContainerTests extends ActivityTestsBase {
final ActivityRecord resolverActivity = mRootWindowContainer.topRunningActivity();
assertEquals(info, resolverActivity.info);
- assertEquals(ACTIVITY_TYPE_STANDARD, resolverActivity.getActivityStack().getActivityType());
+ assertEquals(ACTIVITY_TYPE_STANDARD, resolverActivity.getRootTask().getActivityType());
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskContainersTests.java
index 6ad9f740576c..f2283973720f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskStackContainersTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskContainersTests.java
@@ -46,7 +46,7 @@ import org.junit.runner.RunWith;
@SmallTest
@Presubmit
@RunWith(WindowTestRunner.class)
-public class TaskStackContainersTests extends WindowTestsBase {
+public class TaskContainersTests extends WindowTestsBase {
private ActivityStack mPinnedStack;
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
index 897057165971..7aaf3fbccb5e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskPositionerTests.java
@@ -85,7 +85,7 @@ public class TaskPositionerTests extends WindowTestsBase {
mPositioner.register(mDisplayContent, win);
- win.getStack().setWindowingMode(WINDOWING_MODE_FREEFORM);
+ win.getRootTask().setWindowingMode(WINDOWING_MODE_FREEFORM);
}
@After
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index 6d0b54fd2ccd..5cf9c44ee9e4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -278,7 +278,7 @@ public class WindowStateTests extends WindowTestsBase {
spyOn(stack);
doReturn(true).when(controller).isMinimizedDock();
doReturn(true).when(controller).isHomeStackResizable();
- doReturn(stack).when(appWindow).getStack();
+ doReturn(stack).when(appWindow).getRootTask();
// Make sure canBeImeTarget is false due to shouldIgnoreInput is true;
assertFalse(appWindow.canBeImeTarget());