diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index d38c481752c6..cba40f417ae2 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -190,6 +190,7 @@ public class PipTaskOrganizer extends TaskOrganizer { private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS; private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory mSurfaceControlTransactionFactory; + private PictureInPictureParams mPictureInPictureParams; public PipTaskOrganizer(Context context, @NonNull PipBoundsHandler boundsHandler, @NonNull PipSurfaceTransactionHelper surfaceTransactionHelper, @@ -252,8 +253,9 @@ public class PipTaskOrganizer extends TaskOrganizer { @Override public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) { Objects.requireNonNull(info, "Requires RunningTaskInfo"); + mPictureInPictureParams = info.pictureInPictureParams; final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds( - info.topActivity, getAspectRatioOrDefault(info.pictureInPictureParams), + info.topActivity, getAspectRatioOrDefault(mPictureInPictureParams), null /* bounds */, getMinimalSize(info.topActivityInfo)); Objects.requireNonNull(destinationBounds, "Missing destination bounds"); mTaskInfo = info; @@ -299,6 +301,7 @@ public class PipTaskOrganizer extends TaskOrganizer { Log.wtf(TAG, "Unrecognized token: " + token); return; } + mPictureInPictureParams = null; mInPip = false; } @@ -306,7 +309,7 @@ public class PipTaskOrganizer extends TaskOrganizer { public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) { Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken"); final PictureInPictureParams newParams = info.pictureInPictureParams; - if (!shouldUpdateDestinationBounds(newParams)) { + if (!applyPictureInPictureParams(newParams)) { Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams); return; } @@ -354,7 +357,7 @@ public class PipTaskOrganizer extends TaskOrganizer { } final Rect newDestinationBounds = mPipBoundsHandler.getDestinationBounds( - mTaskInfo.topActivity, getAspectRatioOrDefault(mTaskInfo.pictureInPictureParams), + mTaskInfo.topActivity, getAspectRatioOrDefault(mPictureInPictureParams), null /* bounds */, getMinimalSize(mTaskInfo.topActivityInfo)); if (newDestinationBounds.equals(currentDestinationBounds)) return; if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) { @@ -368,12 +371,14 @@ public class PipTaskOrganizer extends TaskOrganizer { * @return {@code true} if the aspect ratio is changed since no other parameters within * {@link PictureInPictureParams} would affect the bounds. */ - private boolean shouldUpdateDestinationBounds(PictureInPictureParams params) { - if (params == null || mTaskInfo.pictureInPictureParams == null) { - return params != mTaskInfo.pictureInPictureParams; + private boolean applyPictureInPictureParams(@NonNull PictureInPictureParams params) { + final boolean changed = (mPictureInPictureParams == null) ? true : !Objects.equals( + mPictureInPictureParams.getAspectRatioRational(), params.getAspectRatioRational()); + if (changed) { + mPictureInPictureParams = params; + mPipBoundsHandler.onAspectRatioChanged(params.getAspectRatio()); } - return !Objects.equals(mTaskInfo.pictureInPictureParams.getAspectRatioRational(), - params.getAspectRatioRational()); + return changed; } /** |