summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2023-03-24 08:04:53 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-03-24 08:04:53 +0000
commit8cc83cc48e402abbfec14b7731d14f8c0744cc5e (patch)
tree48a0fa44a3b2604a8d88805cbd04956d6d5bc6e9
parentb7fff582dc77755f2c72db5c1aced634b87c8f3e (diff)
parentd19ad2aa09fd27ec11e626ab239babb929c32fd6 (diff)
Merge "Fix black screen while animating a closing and changing TF" into tm-qpr-dev
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java9
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java8
3 files changed, 15 insertions, 4 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
index dcc12ac07589..b917ac80256c 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java
@@ -215,6 +215,8 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub {
} else {
closingTargets.add(target);
closingWholeScreenBounds.union(target.screenSpaceBounds);
+ // Union the start bounds since this may be the ClosingChanging animation.
+ closingWholeScreenBounds.union(target.startBounds);
}
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 85e25ab077ea..f428d3e2237a 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -2498,13 +2498,18 @@ class TaskFragment extends WindowContainer<WindowContainer> {
}
}
- /** Records the starting bounds of the closing organized TaskFragment. */
- void setClosingChangingStartBoundsIfNeeded() {
+ /**
+ * Returns {@code true} if the starting bounds of the closing organized TaskFragment is
+ * recorded. Otherwise, return {@code false}.
+ */
+ boolean setClosingChangingStartBoundsIfNeeded() {
if (isOrganizedTaskFragment() && mDisplayContent != null
&& mDisplayContent.mChangingContainers.remove(this)) {
mDisplayContent.mClosingChangingContainers.put(
this, new Rect(mSurfaceFreezer.mFreezeBounds));
+ return true;
}
+ return false;
}
@Override
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 7ff92afc9d29..02d3af6da326 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -1299,14 +1299,18 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
// If we are losing visibility, then a snapshot isn't necessary and we are no-longer
// part of a change transition.
if (!visible) {
+ boolean skipUnfreeze = false;
if (asTaskFragment() != null) {
// If the organized TaskFragment is closing while resizing, we want to keep track of
// its starting bounds to make sure the animation starts at the correct position.
// This should be called before unfreeze() because we record the starting bounds
// in SurfaceFreezer.
- asTaskFragment().setClosingChangingStartBoundsIfNeeded();
+ skipUnfreeze = asTaskFragment().setClosingChangingStartBoundsIfNeeded();
+ }
+
+ if (!skipUnfreeze) {
+ mSurfaceFreezer.unfreeze(getSyncTransaction());
}
- mSurfaceFreezer.unfreeze(getSyncTransaction());
}
WindowContainer parent = getParent();
if (parent != null) {