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

Commit a0d15ddf authored by Hongwei Wang's avatar Hongwei Wang Committed by Automerger Merge Worker
Browse files

Merge "Track PictureInPictureParams in PipTaskOrganizer" into rvc-dev am: bb5aa1cb

Change-Id: I9a4ed30ecb119d4c6834fed768226d1a8b59bd59
parents e5f8bd15 bb5aa1cb
Loading
Loading
Loading
Loading
+13 −8
Original line number Original line Diff line number Diff line
@@ -190,6 +190,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
    private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS;
    private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS;
    private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
    private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
            mSurfaceControlTransactionFactory;
            mSurfaceControlTransactionFactory;
    private PictureInPictureParams mPictureInPictureParams;


    public PipTaskOrganizer(Context context, @NonNull PipBoundsHandler boundsHandler,
    public PipTaskOrganizer(Context context, @NonNull PipBoundsHandler boundsHandler,
            @NonNull PipSurfaceTransactionHelper surfaceTransactionHelper,
            @NonNull PipSurfaceTransactionHelper surfaceTransactionHelper,
@@ -257,8 +258,9 @@ public class PipTaskOrganizer extends TaskOrganizer {
    @Override
    @Override
    public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) {
    public void onTaskAppeared(ActivityManager.RunningTaskInfo info, SurfaceControl leash) {
        Objects.requireNonNull(info, "Requires RunningTaskInfo");
        Objects.requireNonNull(info, "Requires RunningTaskInfo");
        mPictureInPictureParams = info.pictureInPictureParams;
        final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds(
        final Rect destinationBounds = mPipBoundsHandler.getDestinationBounds(
                info.topActivity, getAspectRatioOrDefault(info.pictureInPictureParams),
                info.topActivity, getAspectRatioOrDefault(mPictureInPictureParams),
                null /* bounds */, getMinimalSize(info.topActivityInfo));
                null /* bounds */, getMinimalSize(info.topActivityInfo));
        Objects.requireNonNull(destinationBounds, "Missing destination bounds");
        Objects.requireNonNull(destinationBounds, "Missing destination bounds");
        mTaskInfo = info;
        mTaskInfo = info;
@@ -304,6 +306,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
            Log.wtf(TAG, "Unrecognized token: " + token);
            Log.wtf(TAG, "Unrecognized token: " + token);
            return;
            return;
        }
        }
        mPictureInPictureParams = null;
        mInPip = false;
        mInPip = false;
    }
    }


@@ -311,7 +314,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
        Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken");
        Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken");
        final PictureInPictureParams newParams = info.pictureInPictureParams;
        final PictureInPictureParams newParams = info.pictureInPictureParams;
        if (!shouldUpdateDestinationBounds(newParams)) {
        if (!applyPictureInPictureParams(newParams)) {
            Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams);
            Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams);
            return;
            return;
        }
        }
@@ -359,7 +362,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
        }
        }


        final Rect newDestinationBounds = mPipBoundsHandler.getDestinationBounds(
        final Rect newDestinationBounds = mPipBoundsHandler.getDestinationBounds(
                mTaskInfo.topActivity, getAspectRatioOrDefault(mTaskInfo.pictureInPictureParams),
                mTaskInfo.topActivity, getAspectRatioOrDefault(mPictureInPictureParams),
                null /* bounds */, getMinimalSize(mTaskInfo.topActivityInfo));
                null /* bounds */, getMinimalSize(mTaskInfo.topActivityInfo));
        if (newDestinationBounds.equals(currentDestinationBounds)) return;
        if (newDestinationBounds.equals(currentDestinationBounds)) return;
        if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) {
        if (animator.getAnimationType() == ANIM_TYPE_BOUNDS) {
@@ -373,12 +376,14 @@ public class PipTaskOrganizer extends TaskOrganizer {
     * @return {@code true} if the aspect ratio is changed since no other parameters within
     * @return {@code true} if the aspect ratio is changed since no other parameters within
     * {@link PictureInPictureParams} would affect the bounds.
     * {@link PictureInPictureParams} would affect the bounds.
     */
     */
    private boolean shouldUpdateDestinationBounds(PictureInPictureParams params) {
    private boolean applyPictureInPictureParams(@NonNull PictureInPictureParams params) {
        if (params == null || mTaskInfo.pictureInPictureParams == null) {
        final boolean changed = (mPictureInPictureParams == null) ? true : !Objects.equals(
            return params != mTaskInfo.pictureInPictureParams;
                mPictureInPictureParams.getAspectRatioRational(), params.getAspectRatioRational());
        }
        if (changed) {
        return !Objects.equals(mTaskInfo.pictureInPictureParams.getAspectRatioRational(),
            mPictureInPictureParams = params;
                params.getAspectRatioRational());
            mPipBoundsHandler.onAspectRatioChanged(params.getAspectRatio());
        }
        return changed;
    }
    }


    /**
    /**