diff options
| author | 2019-06-28 20:15:14 -0700 | |
|---|---|---|
| committer | 2019-06-28 20:15:14 -0700 | |
| commit | d14d6bc21855d4ea734096a7fa488b0a5b65ebfd (patch) | |
| tree | 66104a905b6d6037767180fd4c74f4bdcb2322b4 | |
| parent | e74647d6777ddf18bb90cc390295cb79e7dcb5bd (diff) | |
| parent | c5116d9d308f8ecf4c4987126d68e29b1224adf7 (diff) | |
Merge "Reland: Clear transitions for app windows display change." into qt-dev am: bf4eee2181
am: c5116d9d30
Change-Id: I2018b395d7242a9a6e5e8a6b5be61e771fe2c2b9
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 9fc278e5639d..a70ea607cf26 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 7431a2c0100a..3c29e5d84bec 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); } |