diff options
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()); |