Don't clear source bounds when set to null during an animation.
There are several places where sysui will re-adjust the pip bounds.
When doing so, it accidentally clears the source bounds the app set when
entering pip. This causes the enter animation to look incorrect.
This change will not clear the source bounds if set to null during an
animation. They will get set the next time the pinned stack is resized.
Test: Youtube entering PIP crops correctly instead of scaling
Fixes: 132729493
Change-Id: Ifa247c2e2fff1b608a977762939570bfdf3f9f1b
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 8fa915d..1b1eac6 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -327,7 +327,8 @@
* Sets the bounds animation target bounds ahead of an animation. This can't currently be done
* in onAnimationStart() since that is started on the UiThread.
*/
- void setAnimationFinalBounds(Rect sourceHintBounds, Rect destBounds, boolean toFullscreen) {
+ private void setAnimationFinalBounds(Rect sourceHintBounds, Rect destBounds,
+ boolean toFullscreen) {
mBoundsAnimatingRequested = true;
mBoundsAnimatingToFullscreen = toFullscreen;
if (destBounds != null) {
@@ -337,7 +338,11 @@
}
if (sourceHintBounds != null) {
mBoundsAnimationSourceHintBounds.set(sourceHintBounds);
- } else {
+ } else if (!mBoundsAnimating) {
+ // If the bounds are already animating, we don't want to reset the source hint. This is
+ // because the source hint is sent when starting the animation from the client that
+ // requested to enter pip. Other requests can adjust the pip bounds during an animation,
+ // but could accidentally reset the source hint bounds.
mBoundsAnimationSourceHintBounds.setEmpty();
}