From 1ced33a41cff0bd9d09a469bb8c9b42a79d566f0 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Tue, 4 Aug 2020 11:20:44 -0700 Subject: [PATCH] Pass current PIP bounds to #updateReentryBounds. When PIP exits, we attempt to save the current bounds so we know what bounds to be used on PIP re-entry. This uses PipTaskOrganizer#getLastReportedBounds, but this is not accessed in a synchornized banner; it is possible that by the time it is accessed, it is changed by something else (for example, PIP Animation). At the time of #onPipTransitionStarted, just save the current PIP bounds and pass it down. Bug: 160721096 Test: Multiple re-entry of PIP result in the same bounds Change-Id: I27a1ad3a2257333c9afedf13520f44406d07cd68 --- .../src/com/android/systemui/pip/PipTaskOrganizer.java | 5 +++-- .../src/com/android/systemui/pip/phone/PipManager.java | 8 +++----- .../com/android/systemui/pip/phone/PipMotionHelper.java | 2 +- .../src/com/android/systemui/pip/tv/PipManager.java | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index 7c3743bd8bcf6..118e0bd5f5f8d 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -454,10 +454,11 @@ public class PipTaskOrganizer extends TaskOrganizer implements private void sendOnPipTransitionStarted( @PipAnimationController.TransitionDirection int direction) { + final Rect pipBounds = new Rect(mLastReportedBounds); runOnMainHandler(() -> { for (int i = mPipTransitionCallbacks.size() - 1; i >= 0; i--) { final PipTransitionCallback callback = mPipTransitionCallbacks.get(i); - callback.onPipTransitionStarted(mTaskInfo.baseActivity, direction); + callback.onPipTransitionStarted(mTaskInfo.baseActivity, direction, pipBounds); } }); } @@ -973,7 +974,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements /** * Callback when the pip transition is started. */ - void onPipTransitionStarted(ComponentName activity, int direction); + void onPipTransitionStarted(ComponentName activity, int direction, Rect pipBounds); /** * Callback when the pip transition is finished. diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 6e75253d86046..7c5054cb05448 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -373,10 +373,10 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio } @Override - public void onPipTransitionStarted(ComponentName activity, int direction) { + public void onPipTransitionStarted(ComponentName activity, int direction, Rect pipBounds) { if (isOutPipDirection(direction)) { // Exiting PIP, save the reentry bounds to restore to when re-entering. - updateReentryBounds(); + updateReentryBounds(pipBounds); mPipBoundsHandler.onSaveReentryBounds(activity, mReentryBounds); } // Disable touches while the animation is running @@ -393,15 +393,13 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio /** * Update the bounds used to save the re-entry size and snap fraction when exiting PIP. */ - public void updateReentryBounds() { + public void updateReentryBounds(Rect bounds) { // On phones, the expansion animation that happens on pip tap before restoring // to fullscreen makes it so that the last reported bounds are the expanded // bounds. We want to restore to the unexpanded bounds when re-entering pip, // so we use the bounds before expansion (normal) instead of the reported // bounds. Rect reentryBounds = mTouchHandler.getNormalBounds(); - // Apply the snap fraction of the current bounds to the normal bounds. - final Rect bounds = mPipTaskOrganizer.getLastReportedBounds(); float snapFraction = mPipBoundsHandler.getSnapFraction(bounds); mPipBoundsHandler.applySnapFraction(reentryBounds, snapFraction); mReentryBounds.set(reentryBounds); diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java index ee8f295e0c30d..19138fdba7887 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java @@ -154,7 +154,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback, private final PipTaskOrganizer.PipTransitionCallback mPipTransitionCallback = new PipTaskOrganizer.PipTransitionCallback() { @Override - public void onPipTransitionStarted(ComponentName activity, int direction) {} + public void onPipTransitionStarted(ComponentName activity, int direction, Rect pipBounds) {} @Override public void onPipTransitionFinished(ComponentName activity, int direction) { diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index 2138f092b7906..01670285c0f48 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -663,7 +663,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio }; @Override - public void onPipTransitionStarted(ComponentName activity, int direction) { } + public void onPipTransitionStarted(ComponentName activity, int direction, Rect pipBounds) { } @Override public void onPipTransitionFinished(ComponentName activity, int direction) {