Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PhonePipMenuController.java +1 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java +29 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -86,6 +90,7 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener, ShellTaskOrganizer.TASK_LISTENER_TYPE_PIP); }); } mPipResizeAnimatorSupplier = PipResizeAnimator::new; } void setPictureInPictureParams(@Nullable PictureInPictureParams params) { Loading Loading @@ -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; Loading @@ -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
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PhonePipMenuController.java +1 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java +29 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -86,6 +90,7 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener, ShellTaskOrganizer.TASK_LISTENER_TYPE_PIP); }); } mPipResizeAnimatorSupplier = PipResizeAnimator::new; } void setPictureInPictureParams(@Nullable PictureInPictureParams params) { Loading Loading @@ -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; Loading @@ -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; } }