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

Commit 08d21f27 authored by Hongwei Wang's avatar Hongwei Wang Committed by Android (Google) Code Review
Browse files

Merge "[PiP2] Add PipTaskListenerTest" into main

parents d581ba49 bf4a1d7b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -573,7 +573,7 @@ public class PhonePipMenuController implements PipMenuController,
            @PipTransitionState.TransitionState int newState, Bundle extra) {
        switch (newState) {
            case PipTransitionState.ENTERED_PIP:
                attach(mPipTransitionState.mPinnedTaskLeash);
                attach(mPipTransitionState.getPinnedTaskLeash());
                break;
            case PipTransitionState.EXITED_PIP:
                detach();
+2 −2
Original line number Diff line number Diff line
@@ -785,7 +785,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,

    private void handleFlingTransition(SurfaceControl.Transaction startTx,
            SurfaceControl.Transaction finishTx, Rect destinationBounds) {
        startTx.setPosition(mPipTransitionState.mPinnedTaskLeash,
        startTx.setPosition(mPipTransitionState.getPinnedTaskLeash(),
                destinationBounds.left, destinationBounds.top);
        startTx.apply();

@@ -799,7 +799,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,

    private void startResizeAnimation(SurfaceControl.Transaction startTx,
            SurfaceControl.Transaction finishTx, Rect destinationBounds, int duration) {
        SurfaceControl pipLeash = mPipTransitionState.mPinnedTaskLeash;
        SurfaceControl pipLeash = mPipTransitionState.getPinnedTaskLeash();
        Preconditions.checkState(pipLeash != null,
                "No leash cached by mPipTransitionState=" + mPipTransitionState);

+1 −1
Original line number Diff line number Diff line
@@ -531,7 +531,7 @@ public class PipResizeGestureHandler implements
                // If resize transition was scheduled from this component, handle leash updates.
                mWaitingForBoundsChangeTransition = false;

                SurfaceControl pipLeash = mPipTransitionState.mPinnedTaskLeash;
                SurfaceControl pipLeash = mPipTransitionState.getPinnedTaskLeash();
                Preconditions.checkState(pipLeash != null,
                        "No leash cached by mPipTransitionState=" + mPipTransitionState);

+2 −2
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ public class PipScheduler {
    public void removePipAfterAnimation() {
        SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction();
        PipAlphaAnimator animator = new PipAlphaAnimator(mContext,
                mPipTransitionState.mPinnedTaskLeash, tx, PipAlphaAnimator.FADE_OUT);
                mPipTransitionState.getPinnedTaskLeash(), tx, PipAlphaAnimator.FADE_OUT);
        animator.setAnimationEndCallback(this::scheduleRemovePipImmediately);
        animator.start();
    }
@@ -203,7 +203,7 @@ public class PipScheduler {
                    "%s: Attempted to user resize PIP to empty bounds, aborting.", TAG);
            return;
        }
        SurfaceControl leash = mPipTransitionState.mPinnedTaskLeash;
        SurfaceControl leash = mPipTransitionState.getPinnedTaskLeash();
        final SurfaceControl.Transaction tx = new SurfaceControl.Transaction();

        Matrix transformTensor = new Matrix();
+29 −7
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.view.SurfaceControl;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.ProtoLog;
import com.android.internal.util.Preconditions;
import com.android.wm.shell.ShellTaskOrganizer;
@@ -51,7 +52,8 @@ import java.util.List;
public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
        PipTransitionState.PipTransitionStateChangedListener {
    private static final int ASPECT_RATIO_CHANGE_DURATION = 250;
    private static final String ANIMATING_ASPECT_RATIO_CHANGE = "animating_aspect_ratio_change";
    @VisibleForTesting
    static final String ANIMATING_ASPECT_RATIO_CHANGE = "animating_aspect_ratio_change";

    private final Context mContext;
    private final PipTransitionState mPipTransitionState;
@@ -65,6 +67,8 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
    private boolean mWaitingForAspectRatioChange = false;
    private final List<PipParamsChangedCallback> mPipParamsChangedListeners = new ArrayList<>();

    private PipResizeAnimatorSupplier mPipResizeAnimatorSupplier;

    public PipTaskListener(Context context,
            ShellTaskOrganizer shellTaskOrganizer,
            PipTransitionState pipTransitionState,
@@ -86,6 +90,7 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
                        ShellTaskOrganizer.TASK_LISTENER_TYPE_PIP);
            });
        }
        mPipResizeAnimatorSupplier = PipResizeAnimator::new;
    }

    void setPictureInPictureParams(@Nullable PictureInPictureParams params) {
@@ -172,19 +177,18 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
                final int duration = extra.getInt(ANIMATING_BOUNDS_CHANGE_DURATION,
                        PipTransition.BOUNDS_CHANGE_JUMPCUT_DURATION);

                Preconditions.checkNotNull(mPipTransitionState.mPinnedTaskLeash,
                Preconditions.checkNotNull(mPipTransitionState.getPinnedTaskLeash(),
                        "Leash is null for bounds transition.");

                if (mWaitingForAspectRatioChange) {
                    mWaitingForAspectRatioChange = false;
                    PipResizeAnimator animator = new PipResizeAnimator(mContext,
                            mPipTransitionState.mPinnedTaskLeash, startTx, finishTx,
                    PipResizeAnimator animator = mPipResizeAnimatorSupplier.get(mContext,
                            mPipTransitionState.getPinnedTaskLeash(), startTx, finishTx,
                            destinationBounds,
                            mPipBoundsState.getBounds(), destinationBounds, duration,
                            0f /* delta */);
                    animator.setAnimationEndCallback(() -> {
                        mPipScheduler.scheduleFinishResizePip(destinationBounds);
                    });
                    animator.setAnimationEndCallback(
                            () -> mPipScheduler.scheduleFinishResizePip(destinationBounds));
                    animator.start();
                }
                break;
@@ -198,4 +202,22 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
        default void onActionsChanged(List<RemoteAction> actions, RemoteAction closeAction) {
        }
    }

    @VisibleForTesting
    interface PipResizeAnimatorSupplier {
        PipResizeAnimator get(@NonNull Context context,
                @NonNull SurfaceControl leash,
                @Nullable SurfaceControl.Transaction startTx,
                @Nullable SurfaceControl.Transaction finishTx,
                @NonNull Rect baseBounds,
                @NonNull Rect startBounds,
                @NonNull Rect endBounds,
                int duration,
                float delta);
    }

    @VisibleForTesting
    void setPipResizeAnimatorSupplier(@NonNull PipResizeAnimatorSupplier supplier) {
        mPipResizeAnimatorSupplier = supplier;
    }
}
Loading