diff options
| author | 2023-03-24 08:04:53 +0000 | |
|---|---|---|
| committer | 2023-03-24 08:04:53 +0000 | |
| commit | 8cc83cc48e402abbfec14b7731d14f8c0744cc5e (patch) | |
| tree | 48a0fa44a3b2604a8d88805cbd04956d6d5bc6e9 | |
| parent | b7fff582dc77755f2c72db5c1aced634b87c8f3e (diff) | |
| parent | d19ad2aa09fd27ec11e626ab239babb929c32fd6 (diff) | |
Merge "Fix black screen while animating a closing and changing TF" into tm-qpr-dev
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) { |