From faead856f4516301489661a2e9b8e175ad1a36a6 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Fri, 28 Aug 2020 14:10:44 +0800 Subject: Clean up access of display content - ActivityRecord and Task get their own display instead of from parent. Because the hierarchy should guarantee the display instances are the same. - Remove redundant getDisplay().mDisplayContent since there is no ActivityDisplay after hierarchy unifying. - Access mDisplayContent directly because WindowContainer#reparent, setParent, onDisplayChanged never pass null DisplayContent. Currently the only place that clears mDisplayContent is in Task#onParentChanged. So the nullity check of mDisplayContent only exists in Task or other level's onConfigurationChanged if it is called the first time when adding to parent without display. - The best practice of handling non-attached container might be to check at upper entry, e.g. ActivityRecord.isInStackLocked, or use WindowContainer#isAttached. Instead of checking the nullity of display content everywhere. Bug: 163976519 Test: WmTests Change-Id: Ibf6c1368cfeadcad63ad5040a6166d654b906275 --- .../java/com/android/server/wm/ActivityRecord.java | 34 +++++-------- .../android/server/wm/ActivityStackSupervisor.java | 2 +- .../com/android/server/wm/ActivityStarter.java | 4 +- .../server/wm/ActivityTaskManagerService.java | 16 +++--- .../com/android/server/wm/KeyguardController.java | 11 ++-- .../com/android/server/wm/LockTaskController.java | 2 +- .../java/com/android/server/wm/RecentTasks.java | 7 +-- .../com/android/server/wm/RootWindowContainer.java | 4 +- services/core/java/com/android/server/wm/Task.java | 58 ++++++++-------------- .../android/server/wm/WindowProcessController.java | 10 ++-- .../com/android/server/wm/ActivityRecordTests.java | 28 +++++------ .../com/android/server/wm/ActivityStackTests.java | 2 +- .../android/server/wm/ActivityStarterTests.java | 2 +- .../src/com/android/server/wm/SizeCompatTests.java | 12 ++--- 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 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 { taskDisplayArea.onStackWindowingModeChanged(this); } - final DisplayContent display = getDisplay(); - if (display == null ) { + if (mDisplayContent == null) { return; } @@ -2336,7 +2335,7 @@ class Task extends 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 { 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 { } } - @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 { !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 { * 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 { * {@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 { // 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 { 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 { 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 { 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 { ActivityOptions.abort(options); } } - getDisplay().mDisplayContent.prepareAppTransition(transit, false, + mDisplayContent.prepareAppTransition(transit, false, 0 /* flags */, forceOverride); } @@ -6855,7 +6837,7 @@ class Task extends 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 { 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 { mAtmService.getTaskChangeNotificationController() .notifyTaskMovedToFront(tr.getTaskInfo()); } finally { - getDisplay().continueUpdateImeTarget(); + mDisplayContent.continueUpdateImeTarget(); } } @@ -6959,7 +6941,7 @@ class Task extends 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 { } 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 { 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 { } 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