Schedule new transition on aspect ratio change only

When we receive TaskOrganizer#onTaskInfoChanged callback, there is no
need to schedule new transition if the aspect ratio remains same since
no other parameters in PictureInPictureParams affect bounds.

Bug: 150606166
Test: Next/Prev on expanded YouTube PiP
Change-Id: I69d269f379308d0d3a333ce56acd3976b4a54983
This commit is contained in:
Hongwei Wang
2020-03-03 11:06:56 -08:00
parent e6d6f5f87d
commit 8e8a8ae567

View File

@@ -219,12 +219,28 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
@Override
public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
final PictureInPictureParams newParams = info.pictureInPictureParams;
if (!shouldUpdateDestinationBounds(newParams)) {
Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams);
return;
}
final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds(
getAspectRatioOrDefault(info.pictureInPictureParams), null /* bounds */);
getAspectRatioOrDefault(newParams), null /* bounds */);
Objects.requireNonNull(destinationBounds, "Missing destination bounds");
animateResizePip(destinationBounds, DURATION_DEFAULT_MS);
}
/**
* @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;
}
return !Objects.equals(mTaskInfo.pictureInPictureParams.getAspectRatioRational(),
params.getAspectRatioRational());
}
/**
* Directly perform manipulation/resize on the leash. This will not perform any