summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Nelloms <davidln@google.com> 2019-06-25 16:12:54 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-06-25 16:12:54 +0000
commitea470ecb6fb6c37e5403f2bb056ba644199009cc (patch)
tree581ea6bd4dc918b895c54e9b5aafcddc59377324
parentc760a652ab4bf5cd909abf1b647fe1a84b3a7870 (diff)
parent149a6f09cc98a9eedb22dd773ae64850db38cb9e (diff)
Merge "Revert "Clear transitions for app windows display change."" into qt-dev
-rw-r--r--services/core/java/com/android/server/wm/AppWindowToken.java16
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java3
2 files changed, 14 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index be3b924aaeb7..deae923a334e 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -1331,9 +1331,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
if (prevDc == null || prevDc == mDisplayContent) {
return;
}
-
- prevDc.mOpeningApps.remove(this);
- if (prevDc.mChangingApps.remove(this)) {
+ if (prevDc.mChangingApps.contains(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
@@ -1342,8 +1340,6 @@ 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();
@@ -3229,6 +3225,16 @@ 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 80848a8f24f0..c3a769b63e5a 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -2377,6 +2377,9 @@ 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);
}