diff options
3 files changed, 16 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 142c3b32bff0..e2421d6d1a93 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4781,18 +4781,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private void applyUpdateVrModeLocked(ActivityRecord r) { // VR apps are expected to run in a main display. If an app is turning on VR for - // itself, but lives in a dynamic stack, then make sure that it is moved to the main - // fullscreen stack before enabling VR Mode. - // TODO: The goal of this code is to keep the VR app on the main display. When the - // stack implementation changes in the future, keep in mind that the use of the fullscreen - // stack is a means to move the activity to the main display and a moveActivityToDisplay() - // option would be a better choice here. + // itself, but isn't on the main display, then move it there before enabling VR Mode. if (r.requestedVrComponent != null && r.getDisplayId() != DEFAULT_DISPLAY) { - Slog.i(TAG, "Moving " + r.shortComponentName + " from stack " + r.getStackId() - + " to main stack for VR"); - final ActivityStack stack = mRootActivityContainer.getDefaultDisplay().getOrCreateStack( - WINDOWING_MODE_FULLSCREEN, r.getActivityType(), true /* toTop */); - moveTaskToStack(r.getTaskRecord().taskId, stack.mStackId, true /* toTop */); + Slog.i(TAG, "Moving " + r.shortComponentName + " from display " + r.getDisplayId() + + " to main display for VR"); + mRootActivityContainer.moveStackToDisplay( + r.getStackId(), DEFAULT_DISPLAY, true /* toTop */); } mH.post(() -> { if (!mVrController.onVrModeChanged(r)) { diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 4a9a3f71f90e..03cae429904f 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1322,7 +1322,15 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (prevDc == null || prevDc == mDisplayContent) { return; } - if (prevDc.mChangingApps.contains(this)) { + + if (prevDc.mOpeningApps.remove(this)) { + // Transfer opening transition to new display. + mDisplayContent.mOpeningApps.add(this); + mDisplayContent.prepareAppTransition(prevDc.mAppTransition.getAppTransition(), true); + mDisplayContent.executeAppTransition(); + } + + if (prevDc.mChangingApps.remove(this)) { // This gets called *after* the AppWindowToken has been reparented to the new display. // That reparenting resulted in this window changing modes (eg. FREEFORM -> FULLSCREEN), // so this token is now "frozen" while waiting for the animation to start on prevDc @@ -1331,6 +1339,8 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree // so we need to cancel the change transition here. clearChangeLeash(getPendingTransaction(), true /* cancel */); } + prevDc.mClosingApps.remove(this); + if (prevDc.mFocusedApp == this) { prevDc.setFocusedApp(null); final TaskStack stack = dc.getTopStack(); @@ -3216,16 +3226,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree true /* topToBottom */); } - void removeFromPendingTransition() { - if (isWaitingForTransitionStart() && mDisplayContent != null) { - mDisplayContent.mOpeningApps.remove(this); - if (mDisplayContent.mChangingApps.remove(this)) { - clearChangeLeash(getPendingTransaction(), true /* cancel */); - } - mDisplayContent.mClosingApps.remove(this); - } - } - private void updateColorTransform() { if (mSurfaceControl != null && mLastAppSaturationInfo != null) { getPendingTransaction().setColorTransform(mSurfaceControl, diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index f54887807c7c..1659131d880d 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2398,9 +2398,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo + " to its current displayId=" + mDisplayId); } - // Clean up all pending transitions when stack reparent to another display. - stack.forAllAppWindows(AppWindowToken::removeFromPendingTransition); - prevDc.mTaskStackContainers.removeChild(stack); mTaskStackContainers.addStackToDisplay(stack, onTop); } |