summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java34
-rw-r--r--services/core/java/com/android/server/wm/ActivityStackSupervisor.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java4
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java16
-rw-r--r--services/core/java/com/android/server/wm/KeyguardController.java11
-rw-r--r--services/core/java/com/android/server/wm/LockTaskController.java2
-rw-r--r--services/core/java/com/android/server/wm/RecentTasks.java7
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java4
-rw-r--r--services/core/java/com/android/server/wm/Task.java58
-rw-r--r--services/core/java/com/android/server/wm/WindowProcessController.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java28
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java12
14 files changed, 81 insertions, 111 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 7d4d5629dacd..aea0a58c9acb 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2122,11 +2122,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return task != null ? task.getRootTaskId() : INVALID_TASK_ID;
}
- DisplayContent getDisplay() {
- final Task stack = getRootTask();
- return stack != null ? stack.getDisplay() : null;
- }
-
@Override
@Nullable
TaskDisplayArea getDisplayArea() {
@@ -2386,7 +2381,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
}
- return (canReceiveKeys() || isAlwaysFocusable()) && getDisplay() != null;
+ // Check isAttached() because the method may be called when removing this activity from
+ // display, and WindowContainer#compareTo will throw exception if it doesn't have a parent
+ // when updating focused window from DisplayContent#findFocusedWindow.
+ return (canReceiveKeys() || isAlwaysFocusable()) && isAttached();
}
/**
@@ -2663,7 +2661,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
private void prepareActivityHideTransitionAnimation(int transit) {
- final DisplayContent dc = getDisplay().mDisplayContent;
+ final DisplayContent dc = mDisplayContent;
dc.prepareAppTransition(transit, false);
setVisibility(false);
dc.executeAppTransition();
@@ -2708,7 +2706,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
if (ensureVisibility) {
- getDisplay().ensureActivitiesVisible(null /* starting */, 0 /* configChanges */,
+ mDisplayContent.ensureActivitiesVisible(null /* starting */, 0 /* configChanges */,
false /* preserveWindows */, true /* notifyClients */);
}
}
@@ -4652,7 +4650,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
// Check if the activity is on a sleeping display, and if it can turn it ON.
- if (getDisplay().isSleeping()) {
+ if (mDisplayContent.isSleeping()) {
final boolean canTurnScreenOn = !mSetToSleep || canTurnScreenOn()
|| canShowWhenLocked() || containsDismissKeyguardWindow();
if (!canTurnScreenOn) {
@@ -4931,12 +4929,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
r.setSavedState(null /* savedState */);
- final DisplayContent display = r.getDisplay();
- if (display != null) {
- display.handleActivitySizeCompatModeIfNeeded(r);
- }
-
- r.getDisplayContent().mUnknownAppVisibilityController.notifyAppResumedFinished(r);
+ r.mDisplayContent.handleActivitySizeCompatModeIfNeeded(r);
+ r.mDisplayContent.mUnknownAppVisibilityController.notifyAppResumedFinished(r);
}
/**
@@ -6834,7 +6828,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
onMergedOverrideConfigurationChanged();
}
- final DisplayContent display = getDisplay();
+ final DisplayContent display = mDisplayContent;
if (display == null) {
return;
}
@@ -7259,7 +7253,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
lifecycleItem = ResumeActivityItem.obtain(
- getDisplay().mDisplayContent.isNextTransitionForward());
+ mDisplayContent.isNextTransitionForward());
} else {
lifecycleItem = PauseActivityItem.obtain();
}
@@ -7584,11 +7578,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* otherwise.
*/
boolean isFocusedActivityOnDisplay() {
- final DisplayContent display = getDisplay();
- if (display == null) {
- return false;
- }
- return display.forAllTaskDisplayAreas(taskDisplayArea ->
+ return mDisplayContent.forAllTaskDisplayAreas(taskDisplayArea ->
taskDisplayArea.getFocusedActivity() == this);
}
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 34f7f79d7716..9df192b76f9a 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -837,7 +837,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
final ClientTransaction clientTransaction = ClientTransaction.obtain(
proc.getThread(), r.appToken);
- final DisplayContent dc = r.getDisplay().mDisplayContent;
+ final DisplayContent dc = r.mDisplayContent;
clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
System.identityHashCode(r), r.info,
// TODO: Have this take the merged configuration instead of separate global
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index f206259b8fe0..19755f29043e 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1731,7 +1731,7 @@ class ActivityStarter {
0 /* configChanges */, !PRESERVE_WINDOWS);
// Go ahead and tell window manager to execute app transition for this activity
// since the app transition will not be triggered through the resume channel.
- mTargetStack.getDisplay().mDisplayContent.executeAppTransition();
+ mTargetStack.mDisplayContent.executeAppTransition();
} else {
// If the target stack was not previously focusable (previous top running activity
// on that stack was not visible) then any prior calls to move the stack to the
@@ -2481,7 +2481,7 @@ class ActivityStarter {
// to the front if the caller is not itself in the front.
final boolean differentTopTask;
if (mTargetStack.getDisplayArea() == mPreferredTaskDisplayArea) {
- final Task focusStack = mTargetStack.getDisplay().getFocusedStack();
+ final Task focusStack = mTargetStack.mDisplayContent.getFocusedStack();
final ActivityRecord curTop = (focusStack == null)
? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop);
final Task topTask = curTop != null ? curTop.getTask() : null;
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index c58b5b50d508..505233cd8a4a 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -2025,7 +2025,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
if (self.isState(
Task.ActivityState.RESUMED, Task.ActivityState.PAUSING)) {
- self.getDisplay().mDisplayContent.mAppTransition.overridePendingAppTransition(
+ self.mDisplayContent.mAppTransition.overridePendingAppTransition(
packageName, enterAnim, exitAnim, null, null);
}
@@ -2409,7 +2409,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
} else {
stack.setWindowingMode(windowingMode);
- stack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
+ stack.mDisplayContent.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
true /* notifyClients */);
}
return true;
@@ -4176,7 +4176,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
if (params.hasSetAspectRatio()
&& !mWindowManager.isValidPictureInPictureAspectRatio(
- r.getDisplay(), params.getAspectRatio())) {
+ r.mDisplayContent, params.getAspectRatio())) {
final float minAspectRatio = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_pictureInPictureMinAspectRatio);
final float maxAspectRatio = mContext.getResources().getFloat(
@@ -4620,7 +4620,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
}
final long origId = Binder.clearCallingIdentity();
try {
- display.mDisplayContent.registerRemoteAnimations(definition);
+ display.registerRemoteAnimations(definition);
} finally {
Binder.restoreCallingIdentity(origId);
}
@@ -5466,7 +5466,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
updateResumedAppTrace(r);
mLastResumedActivity = r;
- final boolean changed = r.getDisplay().setFocusedApp(r);
+ final boolean changed = r.mDisplayContent.setFocusedApp(r);
if (changed) {
mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
true /*updateInputWindows*/);
@@ -6206,12 +6206,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
// We might change the visibilities here, so prepare an empty app transition which
// might be overridden later if we actually change visibilities.
- final DisplayContent displayContent =
- mRootWindowContainer.getDisplayContent(displayId);
- if (displayContent == null) {
+ final DisplayContent dc = mRootWindowContainer.getDisplayContent(displayId);
+ if (dc == null) {
return;
}
- final DisplayContent dc = displayContent.mDisplayContent;
final boolean wasTransitionSet =
dc.mAppTransition.getAppTransition() != TRANSIT_NONE;
if (!wasTransitionSet) {
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index c36a75b01293..69e8c57a489c 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -190,7 +190,7 @@ class KeyguardController {
mAodShowing ? 1 : 0,
1 /* keyguardGoingAway */,
"keyguardGoingAway");
- mRootWindowContainer.getDefaultDisplay().mDisplayContent
+ mRootWindowContainer.getDefaultDisplay()
.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY,
false /* alwaysKeepCurrent */, convertTransitFlags(flags),
false /* forceOverride */);
@@ -314,7 +314,7 @@ class KeyguardController {
if (isKeyguardLocked()) {
mService.deferWindowLayout();
try {
- mRootWindowContainer.getDefaultDisplay().mDisplayContent
+ mRootWindowContainer.getDefaultDisplay()
.prepareAppTransition(resolveOccludeTransit(),
false /* alwaysKeepCurrent */, 0 /* flags */,
true /* forceOverride */);
@@ -344,8 +344,7 @@ class KeyguardController {
// If we are about to unocclude the Keyguard, but we can dismiss it without security,
// we immediately dismiss the Keyguard so the activity gets shown without a flicker.
- final DisplayContent dc =
- mRootWindowContainer.getDefaultDisplay().mDisplayContent;
+ final DisplayContent dc = mRootWindowContainer.getDefaultDisplay();
if (mKeyguardShowing && canDismissKeyguard()
&& dc.mAppTransition.getAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE) {
dc.prepareAppTransition(mBeforeUnoccludeTransit, false /* alwaysKeepCurrent */,
@@ -368,7 +367,7 @@ class KeyguardController {
}
private int resolveOccludeTransit() {
- final DisplayContent dc = mRootWindowContainer.getDefaultDisplay().mDisplayContent;
+ final DisplayContent dc = mRootWindowContainer.getDefaultDisplay();
if (mBeforeUnoccludeTransit != TRANSIT_UNSET
&& dc.mAppTransition.getAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE
// TODO(b/113840485): Handle app transition for individual display.
@@ -485,7 +484,7 @@ class KeyguardController {
}
// TODO(b/123372519): isShowingDream can only works on default display.
if (mDisplayId == DEFAULT_DISPLAY) {
- mOccluded |= mService.mRootWindowContainer.getDefaultDisplay().mDisplayContent
+ mOccluded |= mService.mRootWindowContainer.getDefaultDisplay()
.getDisplayPolicy().isShowingDreamLw();
}
diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java
index c8d7693c9229..c49690157c08 100644
--- a/services/core/java/com/android/server/wm/LockTaskController.java
+++ b/services/core/java/com/android/server/wm/LockTaskController.java
@@ -619,7 +619,7 @@ public class LockTaskController {
mSupervisor.mRootWindowContainer.resumeFocusedStacksTopActivities();
final Task rootTask = task.getRootTask();
if (rootTask != null) {
- rootTask.getDisplay().mDisplayContent.executeAppTransition();
+ rootTask.mDisplayContent.executeAppTransition();
}
} else if (lockTaskModeState != LOCK_TASK_MODE_NONE) {
mSupervisor.handleNonResizableTaskIfNeeded(task, WINDOWING_MODE_UNDEFINED,
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 3c64ffb237d6..255b3f147d30 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -1346,11 +1346,8 @@ class RecentTasks {
// singleTaskInstance is set on the VirtualDisplay managed by ActivityView
// TODO(b/126185105): Find a different signal to use besides isSingleTaskInstance
final Task rootTask = task.getRootTask();
- if (rootTask != null) {
- DisplayContent display = rootTask.getDisplay();
- if (display != null && display.isSingleTaskInstance()) {
- return false;
- }
+ if (rootTask != null && rootTask.isSingleTaskInstance()) {
+ return false;
}
// If we're in lock task mode, ignore the root task
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 6182a55b6e52..6539e1325ec1 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -40,6 +40,7 @@ import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY;
import static android.view.WindowManager.TRANSIT_TASK_TO_BACK;
+
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS_LIGHT;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_KEEP_SCREEN_ON;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION;
@@ -89,6 +90,7 @@ import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREEN
import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
+
import static java.lang.Integer.MAX_VALUE;
import android.annotation.IntDef;
@@ -2746,7 +2748,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
Slog.w(TAG, " Force finishing activity "
+ r.intent.getComponent().flattenToShortString());
r.detachFromProcess();
- r.getDisplay().mDisplayContent.prepareAppTransition(
+ r.mDisplayContent.prepareAppTransition(
TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
r.destroyIfPossible("handleAppCrashed");
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index bfaaf462ed51..5606eb676b1d 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -2319,8 +2319,7 @@ class Task extends WindowContainer<WindowContainer> {
taskDisplayArea.onStackWindowingModeChanged(this);
}
- final DisplayContent display = getDisplay();
- if (display == null ) {
+ if (mDisplayContent == null) {
return;
}
@@ -2336,7 +2335,7 @@ class Task extends WindowContainer<WindowContainer> {
final int newRotation = getWindowConfiguration().getRotation();
final boolean rotationChanged = prevRotation != newRotation;
if (rotationChanged) {
- display.mDisplayContent.rotateBounds(
+ mDisplayContent.rotateBounds(
newParentConfig.windowConfiguration.getBounds(), prevRotation, newRotation,
newBounds);
hasNewOverrideBounds = true;
@@ -2594,15 +2593,12 @@ class Task extends WindowContainer<WindowContainer> {
outNonDecorBounds.set(bounds);
outStableBounds.set(bounds);
final Task rootTask = getRootTask();
- if (rootTask == null || rootTask.getDisplay() == null) {
- return;
- }
- DisplayPolicy policy = rootTask.getDisplay().mDisplayContent.getDisplayPolicy();
- if (policy == null) {
+ if (rootTask == null || rootTask.mDisplayContent == null) {
return;
}
mTmpBounds.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight);
+ final DisplayPolicy policy = rootTask.mDisplayContent.getDisplayPolicy();
policy.getNonDecorInsetsLw(displayInfo.rotation, displayInfo.logicalWidth,
displayInfo.logicalHeight, displayInfo.displayCutout, mTmpInsets);
intersectWithInsetsIfFits(outNonDecorBounds, mTmpBounds, mTmpInsets);
@@ -2990,14 +2986,6 @@ class Task extends WindowContainer<WindowContainer> {
}
}
- @Override
- DisplayContent getDisplayContent() {
- // TODO: Why aren't we just using our own display content vs. parent's???
- final Task stack = getRootTask();
- return stack != null && stack != this
- ? stack.getDisplayContent() : super.getDisplayContent();
- }
-
int getDisplayId() {
final DisplayContent dc = getDisplayContent();
return dc != null ? dc.mDisplayId : INVALID_DISPLAY;
@@ -5173,14 +5161,9 @@ class Task extends WindowContainer<WindowContainer> {
!PRESERVE_WINDOWS);
}
- DisplayContent getDisplay() {
- return getDisplayContent();
- }
-
/** @return true if the stack can only contain one task */
boolean isSingleTaskInstance() {
- final DisplayContent display = getDisplay();
- return display != null && display.isSingleTaskInstance();
+ return mDisplayContent != null && mDisplayContent.isSingleTaskInstance();
}
final boolean isHomeOrRecentsStack() {
@@ -5620,8 +5603,7 @@ class Task extends WindowContainer<WindowContainer> {
* otherwise.
*/
boolean isFocusedStackOnDisplay() {
- final DisplayContent display = getDisplay();
- return display != null && this == display.getFocusedStack();
+ return mDisplayContent != null && this == mDisplayContent.getFocusedStack();
}
/**
@@ -5760,7 +5742,7 @@ class Task extends WindowContainer<WindowContainer> {
* {@link Display#FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD} applied.
*/
boolean canShowWithInsecureKeyguard() {
- final DisplayContent displayContent = getDisplay();
+ final DisplayContent displayContent = mDisplayContent;
if (displayContent == null) {
throw new IllegalStateException("Stack is not attached to any display, stackId="
+ getRootTaskId());
@@ -6399,7 +6381,7 @@ class Task extends WindowContainer<WindowContainer> {
// The transition animation and starting window are not needed if {@code allowMoveToFront}
// is false, because the activity won't be visible.
if ((!isHomeOrRecentsStack() || hasActivity()) && allowMoveToFront) {
- final DisplayContent dc = getDisplay().mDisplayContent;
+ final DisplayContent dc = mDisplayContent;
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
"Prepare open transition: starting " + r);
if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
@@ -6410,7 +6392,7 @@ class Task extends WindowContainer<WindowContainer> {
if (newTask) {
if (r.mLaunchTaskBehind) {
transit = TRANSIT_TASK_OPEN_BEHIND;
- } else if (getDisplay().isSingleTaskInstance()) {
+ } else if (dc.isSingleTaskInstance()) {
// If a new task is being launched in a single task display, we don't need
// to play normal animation, but need to trigger a callback when an app
// transition is actually handled. So ignore already prepared activity, and
@@ -6454,7 +6436,7 @@ class Task extends WindowContainer<WindowContainer> {
ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
// Go ahead to execute app transition for this activity since the app transition
// will not be triggered through the resume channel.
- getDisplay().mDisplayContent.executeAppTransition();
+ mDisplayContent.executeAppTransition();
} else if (SHOW_APP_STARTING_PREVIEW && doShow) {
// Figure out if we are transitioning from another activity that is
// "has the same starting icon" as the next one. This allows the
@@ -6567,7 +6549,7 @@ class Task extends WindowContainer<WindowContainer> {
Slog.w(TAG, " Force finishing activity "
+ r.intent.getComponent().flattenToShortString());
Task finishedTask = r.getTask();
- getDisplay().mDisplayContent.prepareAppTransition(
+ mDisplayContent.prepareAppTransition(
TRANSIT_CRASHING_ACTIVITY_CLOSE, false /* alwaysKeepCurrent */);
r.finishIfPossible(reason, false /* oomAdj */);
@@ -6807,7 +6789,7 @@ class Task extends WindowContainer<WindowContainer> {
ActivityOptions.abort(options);
}
}
- getDisplay().mDisplayContent.prepareAppTransition(transit, false,
+ mDisplayContent.prepareAppTransition(transit, false,
0 /* flags */, forceOverride);
}
@@ -6855,7 +6837,7 @@ class Task extends WindowContainer<WindowContainer> {
// Defer updating the IME target since the new IME target will try to get computed
// before updating all closing and opening apps, which can cause the ime target to
// get calculated incorrectly.
- getDisplay().deferUpdateImeTarget();
+ mDisplayContent.deferUpdateImeTarget();
// Shift all activities with this task up to the top
// of the stack, keeping them in the same internal order.
@@ -6879,7 +6861,7 @@ class Task extends WindowContainer<WindowContainer> {
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to front transition: task=" + tr);
if (noAnimation) {
- getDisplay().mDisplayContent.prepareAppTransition(TRANSIT_NONE, false);
+ mDisplayContent.prepareAppTransition(TRANSIT_NONE, false /* alwaysKeepCurrent */);
if (r != null) {
mStackSupervisor.mNoAnimActivities.add(r);
}
@@ -6909,7 +6891,7 @@ class Task extends WindowContainer<WindowContainer> {
mAtmService.getTaskChangeNotificationController()
.notifyTaskMovedToFront(tr.getTaskInfo());
} finally {
- getDisplay().continueUpdateImeTarget();
+ mDisplayContent.continueUpdateImeTarget();
}
}
@@ -6959,7 +6941,7 @@ class Task extends WindowContainer<WindowContainer> {
if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to back transition: task="
+ tr.mTaskId);
- getDisplay().mDisplayContent.prepareAppTransition(TRANSIT_TASK_TO_BACK, false);
+ mDisplayContent.prepareAppTransition(TRANSIT_TASK_TO_BACK, false /* alwaysKeepCurrent */);
moveToBack("moveTaskToBackLocked", tr);
if (inPinnedWindowingMode()) {
@@ -6968,7 +6950,7 @@ class Task extends WindowContainer<WindowContainer> {
}
mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */,
- getDisplay().mDisplayId, false /* markFrozenIfConfigChanged */,
+ mDisplayContent.mDisplayId, false /* markFrozenIfConfigChanged */,
false /* deferResume */);
ActivityRecord topActivity = getDisplayArea().topRunningActivity();
@@ -6976,7 +6958,7 @@ class Task extends WindowContainer<WindowContainer> {
if (topStack != null && topStack != this && topActivity.isState(RESUMED)) {
// Usually resuming a top activity triggers the next app transition, but nothing's got
// resumed in this case, so we need to execute it explicitly.
- getDisplay().mDisplayContent.executeAppTransition();
+ mDisplayContent.executeAppTransition();
} else {
mRootWindowContainer.resumeFocusedStacksTopActivities();
}
@@ -7575,12 +7557,12 @@ class Task extends WindowContainer<WindowContainer> {
}
void executeAppTransition(ActivityOptions options) {
- getDisplay().mDisplayContent.executeAppTransition();
+ mDisplayContent.executeAppTransition();
ActivityOptions.abort(options);
}
boolean shouldSleepActivities() {
- final DisplayContent display = getDisplay();
+ final DisplayContent display = mDisplayContent;
// Do not sleep activities in this stack if we're marked as focused and the keyguard
// is in the process of going away.
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index c5ebace78261..8bf0820c7dad 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -729,15 +729,16 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
return true;
}
- final DisplayContent display = activity.getDisplay();
- if (display == null) {
+ if (!activity.isAttached()) {
// No need to update if the activity hasn't attach to any display.
return false;
}
boolean canUpdate = false;
final DisplayContent topDisplay =
- mPreQTopResumedActivity != null ? mPreQTopResumedActivity.getDisplay() : null;
+ (mPreQTopResumedActivity != null && mPreQTopResumedActivity.isAttached())
+ ? mPreQTopResumedActivity.mDisplayContent
+ : null;
// Update the topmost activity if current top activity is
// - not on any display OR
// - no longer visible OR
@@ -748,8 +749,9 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
canUpdate = true;
}
+ final DisplayContent display = activity.mDisplayContent;
// Update the topmost activity if the current top activity wasn't on top of the other one.
- if (!canUpdate && topDisplay.mDisplayContent.compareTo(display.mDisplayContent) < 0) {
+ if (!canUpdate && topDisplay.compareTo(display) < 0) {
canUpdate = true;
}
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 59f0a7987bda..bca990c659ae 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -415,12 +415,12 @@ public class ActivityRecordTests extends WindowTestsBase {
public void ignoreRequestedOrientationInFreeformWindows() {
mStack.setWindowingMode(WINDOWING_MODE_FREEFORM);
final Rect stableRect = new Rect();
- mStack.getDisplay().mDisplayContent.getStableRect(stableRect);
+ mStack.mDisplayContent.getStableRect(stableRect);
// Carve out non-decor insets from stableRect
final Rect insets = new Rect();
- final DisplayInfo displayInfo = mStack.getDisplay().getDisplayInfo();
- final DisplayPolicy policy = mStack.getDisplay().getDisplayPolicy();
+ final DisplayInfo displayInfo = mStack.mDisplayContent.getDisplayInfo();
+ final DisplayPolicy policy = mStack.mDisplayContent.getDisplayPolicy();
policy.getNonDecorInsetsLw(displayInfo.rotation, displayInfo.logicalWidth,
displayInfo.logicalHeight, displayInfo.displayCutout, insets);
policy.convertNonDecorInsetsToStableInsets(insets, displayInfo.rotation);
@@ -454,12 +454,12 @@ public class ActivityRecordTests extends WindowTestsBase {
public void ignoreRequestedOrientationInSplitWindows() {
mStack.setWindowingMode(WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
final Rect stableRect = new Rect();
- mStack.getDisplay().getStableRect(stableRect);
+ mStack.mDisplayContent.getStableRect(stableRect);
// Carve out non-decor insets from stableRect
final Rect insets = new Rect();
- final DisplayInfo displayInfo = mStack.getDisplay().getDisplayInfo();
- final DisplayPolicy policy = mStack.getDisplay().getDisplayPolicy();
+ final DisplayInfo displayInfo = mStack.mDisplayContent.getDisplayInfo();
+ final DisplayPolicy policy = mStack.mDisplayContent.getDisplayPolicy();
policy.getNonDecorInsetsLw(displayInfo.rotation, displayInfo.logicalWidth,
displayInfo.logicalHeight, displayInfo.displayCutout, insets);
policy.convertNonDecorInsetsToStableInsets(insets, displayInfo.rotation);
@@ -844,7 +844,7 @@ public class ActivityRecordTests extends WindowTestsBase {
FINISH_RESULT_REQUESTED, mActivity.finishIfPossible("test", false /* oomAdj */));
assertEquals(PAUSING, mActivity.getState());
verify(mActivity).setVisibility(eq(false));
- verify(mActivity.getDisplay().mDisplayContent)
+ verify(mActivity.mDisplayContent)
.prepareAppTransition(eq(TRANSIT_TASK_CLOSE), eq(false) /* alwaysKeepCurrent */);
}
@@ -888,9 +888,9 @@ public class ActivityRecordTests extends WindowTestsBase {
mActivity.finishIfPossible("test", false /* oomAdj */);
verify(mActivity).setVisibility(eq(false));
- verify(mActivity.getDisplay().mDisplayContent)
+ verify(mActivity.mDisplayContent)
.prepareAppTransition(eq(TRANSIT_TASK_CLOSE), eq(false) /* alwaysKeepCurrent */);
- verify(mActivity.getDisplay().mDisplayContent, never()).executeAppTransition();
+ verify(mActivity.mDisplayContent, never()).executeAppTransition();
}
/**
@@ -904,9 +904,9 @@ public class ActivityRecordTests extends WindowTestsBase {
mActivity.finishIfPossible("test", false /* oomAdj */);
verify(mActivity, atLeast(1)).setVisibility(eq(false));
- verify(mActivity.getDisplay().mDisplayContent)
+ verify(mActivity.mDisplayContent)
.prepareAppTransition(eq(TRANSIT_TASK_CLOSE), eq(false) /* alwaysKeepCurrent */);
- verify(mActivity.getDisplay().mDisplayContent).executeAppTransition();
+ verify(mActivity.mDisplayContent).executeAppTransition();
}
/**
@@ -922,7 +922,7 @@ public class ActivityRecordTests extends WindowTestsBase {
mActivity.finishIfPossible("test", false /* oomAdj */);
- verify(mActivity.getDisplay().mDisplayContent, never())
+ verify(mActivity.mDisplayContent, never())
.prepareAppTransition(eq(TRANSIT_TASK_CLOSE), eq(false) /* alwaysKeepCurrent */);
}
@@ -1166,7 +1166,7 @@ public class ActivityRecordTests extends WindowTestsBase {
// Finish the second activity
secondActivity.finishing = true;
secondActivity.completeFinishing("test");
- verify(secondActivity.getDisplay()).ensureActivitiesVisible(null /* starting */,
+ verify(secondActivity.mDisplayContent).ensureActivitiesVisible(null /* starting */,
0 /* configChanges */ , false /* preserveWindows */,
true /* notifyClients */);
@@ -1174,7 +1174,7 @@ public class ActivityRecordTests extends WindowTestsBase {
firstActivity.finishing = true;
firstActivity.mVisibleRequested = true;
firstActivity.completeFinishing("test");
- verify(firstActivity.getDisplay(), times(2)).ensureActivitiesVisible(null /* starting */,
+ verify(firstActivity.mDisplayContent, times(2)).ensureActivitiesVisible(null /* starting */,
0 /* configChanges */ , false /* preserveWindows */,
true /* notifyClients */);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index 4cad39762a7b..524f32deb864 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -1432,7 +1432,7 @@ public class ActivityStackTests extends WindowTestsBase {
final KeyguardController keyguardController = mSupervisor.getKeyguardController();
display.isDefaultDisplay = isDefaultDisplay;
- doReturn(display).when(mStack).getDisplay();
+ mStack.mDisplayContent = display;
doReturn(keyguardGoingAway).when(keyguardController).isKeyguardGoingAway();
doReturn(displaySleeping).when(display).isSleeping();
doReturn(focusedStack).when(mStack).isFocusedStackOnDisplay();
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 e5c9ecc7676d..e537b7c204cc 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -890,7 +890,7 @@ public class ActivityStarterTests extends WindowTestsBase {
.execute();
// Ensure the activity is moved to secondary display.
- assertEquals(secondaryDisplay, topActivity.getDisplay());
+ assertEquals(secondaryDisplay, topActivity.mDisplayContent);
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 982e469cba92..6c648a894821 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -90,7 +90,7 @@ public class SizeCompatTests extends WindowTestsBase {
prepareUnresizable(1.5f /* maxAspect */, SCREEN_ORIENTATION_UNSPECIFIED);
final Rect originalOverrideBounds = new Rect(mActivity.getBounds());
- resizeDisplay(mStack.getDisplay(), 600, 1200);
+ resizeDisplay(mStack.mDisplayContent, 600, 1200);
// The visible activity should recompute configuration according to the last parent bounds.
mAtm.restartActivityProcessIfVisible(mActivity.appToken);
@@ -218,7 +218,7 @@ public class SizeCompatTests extends WindowTestsBase {
final Rect currentBounds = mActivity.getWindowConfiguration().getBounds();
// Change the size of current display.
- resizeDisplay(mStack.getDisplay(), 1000, 2000);
+ resizeDisplay(mStack.mDisplayContent, 1000, 2000);
assertEquals(origBounds.width(), currentBounds.width());
assertEquals(origBounds.height(), currentBounds.height());
@@ -229,7 +229,7 @@ public class SizeCompatTests extends WindowTestsBase {
assertEquals(mActivity.getBounds().top, currentBounds.top);
// Change display size to a different orientation
- resizeDisplay(mStack.getDisplay(), 2000, 1000);
+ resizeDisplay(mStack.mDisplayContent, 2000, 1000);
assertEquals(origBounds.width(), currentBounds.width());
assertEquals(origBounds.height(), currentBounds.height());
}
@@ -412,7 +412,7 @@ public class SizeCompatTests extends WindowTestsBase {
public void testResetNonVisibleActivity() {
setUpDisplaySizeWithApp(1000, 2500);
prepareUnresizable(1.5f, SCREEN_ORIENTATION_UNSPECIFIED);
- final DisplayContent display = mStack.getDisplay();
+ final DisplayContent display = mStack.mDisplayContent;
// Resize the display so the activity is in size compatibility mode.
resizeDisplay(display, 900, 1800);
@@ -464,7 +464,7 @@ public class SizeCompatTests extends WindowTestsBase {
});
// Resize the display so that the activity exercises size-compat mode.
- resizeDisplay(mStack.getDisplay(), 1000, 2500);
+ resizeDisplay(mStack.mDisplayContent, 1000, 2500);
// Expect the exact token when the activity is in size compatibility mode.
assertEquals(1, compatTokens.size());
@@ -477,7 +477,7 @@ public class SizeCompatTests extends WindowTestsBase {
activity.restartProcessIfVisible();
// The full lifecycle isn't hooked up so manually set state to resumed
activity.setState(Task.ActivityState.RESUMED, "testHandleActivitySizeCompatMode");
- mStack.getDisplay().handleActivitySizeCompatModeIfNeeded(activity);
+ mStack.mDisplayContent.handleActivitySizeCompatModeIfNeeded(activity);
// Expect null token when switching to non-size-compat mode activity.
assertEquals(1, compatTokens.size());