Merge "Reland: Clear transitions for app windows display change." into qt-dev am: bf4eee2181
am: c5116d9d30
Change-Id: I2018b395d7242a9a6e5e8a6b5be61e771fe2c2b9
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user