Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e8a8ae5 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

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
parent e6d6f5f8
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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