Merge "Fix black screen while animating a closing and changing TF" into tm-qpr-dev
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 dcc12ac..b917ac8 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 @@
} 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 85e25ab..f428d3e 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 @@
}
}
- /** 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 7ff92af..02d3af6 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 @@
// 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();
}
- mSurfaceFreezer.unfreeze(getSyncTransaction());
+
+ if (!skipUnfreeze) {
+ mSurfaceFreezer.unfreeze(getSyncTransaction());
+ }
}
WindowContainer parent = getParent();
if (parent != null) {