From 86edc8c5255358db6523aed030b4837bdc7c8970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Ciche=C5=84ski?= Date: Tue, 4 Apr 2023 21:28:32 +0000 Subject: [PATCH] Validate aspect ratio on PiP params change. If the params do not provide the aspect ratio we will return 0f, which impacts further computations on e.g. pinch resize gesture. Bug: 276455406 Test: manually modify ApiDemos to not provide aspect ratio, enter PiP and verify that aspect ratio is set to default value instead of 0 Change-Id: Ie734a4e35ccbccdad5a2bee0f0e1bd507dcc1025 --- .../com/android/wm/shell/pip/PipBoundsAlgorithm.java | 2 +- .../com/android/wm/shell/pip/PipTaskOrganizer.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java index 867162be4c6d0..24d0b996a3cb2 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java @@ -198,7 +198,7 @@ public class PipBoundsAlgorithm { /** * @return whether the given {@param aspectRatio} is valid. */ - private boolean isValidPictureInPictureAspectRatio(float aspectRatio) { + public boolean isValidPictureInPictureAspectRatio(float aspectRatio) { return Float.compare(mMinAspectRatio, aspectRatio) <= 0 && Float.compare(aspectRatio, mMaxAspectRatio) <= 0; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 448da28cd0c91..c4b5470f461ad 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -1230,7 +1230,16 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, protected void applyNewPictureInPictureParams(@NonNull PictureInPictureParams params) { if (mDeferredTaskInfo != null || PipUtils.aspectRatioChanged(params.getAspectRatioFloat(), mPictureInPictureParams.getAspectRatioFloat())) { - mPipParamsChangedForwarder.notifyAspectRatioChanged(params.getAspectRatioFloat()); + if (mPipBoundsAlgorithm.isValidPictureInPictureAspectRatio( + params.getAspectRatioFloat())) { + mPipParamsChangedForwarder.notifyAspectRatioChanged(params.getAspectRatioFloat()); + } else { + ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, + "%s: New aspect ratio is not valid." + + " hasAspectRatio=%b" + + " aspectRatio=%f", + TAG, params.hasSetAspectRatio(), params.getAspectRatioFloat()); + } } if (mDeferredTaskInfo != null || PipUtils.remoteActionsChanged(params.getActions(),