summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java21
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;
}
/**