Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java +10 −2 Original line number Diff line number Diff line Loading @@ -300,6 +300,10 @@ public class PipController implements ConfigurationChangeListener, int launcherRotation, Rect hotseatKeepClearArea) { ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "getSwipePipToHomeBounds: %s", componentName); // preemptively add the keep clear area for Hotseat, so that it is taken into account // when calculating the entry destination bounds of PiP window mPipBoundsState.setNamedUnrestrictedKeepClearArea( PipBoundsState.NAMED_KCA_LAUNCHER_SHELF, hotseatKeepClearArea); mPipBoundsState.setBoundsStateForEntry(componentName, activityInfo, pictureInPictureParams, mPipBoundsAlgorithm); return mPipBoundsAlgorithm.getEntryDestinationBounds(); Loading Loading @@ -349,10 +353,14 @@ public class PipController implements ConfigurationChangeListener, if (mPipTransitionState.isInSwipePipToHomeTransition()) { mPipTransitionState.resetSwipePipToHomeState(); } if (mOnIsInPipStateChangedListener != null) { mOnIsInPipStateChangedListener.accept(true /* inPip */); } break; case PipTransitionState.EXITED_PIP: if (mOnIsInPipStateChangedListener != null) { mOnIsInPipStateChangedListener.accept(false /* inPip */); } break; } } Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +16 −8 Original line number Diff line number Diff line Loading @@ -107,10 +107,6 @@ public class PipTransition extends PipTransitionController implements // Internal state and relevant cached info // @Nullable private WindowContainerToken mPipTaskToken; @Nullable private SurfaceControl mPipLeash; @Nullable private Transitions.TransitionFinishCallback mFinishCallback; Loading Loading @@ -402,7 +398,6 @@ public class PipTransition extends PipTransitionController implements finishWct.setBoundsChangeTransaction(pipTaskToken, tx); animator.setAnimationEndCallback(() -> { mPipTransitionState.setState(PipTransitionState.ENTERED_PIP); finishCallback.onTransitionFinished(finishWct.isEmpty() ? null : finishWct); }); Loading Loading @@ -444,15 +439,16 @@ public class PipTransition extends PipTransitionController implements @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); WindowContainerToken pipToken = mPipTransitionState.mPipTaskToken; TransitionInfo.Change pipChange = getChangeByToken(info, pipToken); if (pipChange == null) { return false; } Rect startBounds = pipChange.getStartAbsBounds(); Rect endBounds = pipChange.getEndAbsBounds(); SurfaceControl pipLeash = mPipTransitionState.mPinnedTaskLeash; Preconditions.checkNotNull(pipLeash, "Leash is null for bounds transition."); SurfaceControl pipLeash = pipChange.getLeash(); PipEnterExitAnimator animator = new PipEnterExitAnimator(mContext, pipLeash, startTransaction, startBounds, startBounds, endBounds, Loading Loading @@ -491,6 +487,18 @@ public class PipTransition extends PipTransitionController implements return null; } @Nullable private TransitionInfo.Change getChangeByToken(TransitionInfo info, WindowContainerToken token) { for (TransitionInfo.Change change : info.getChanges()) { if (change.getTaskInfo() != null && change.getTaskInfo().getToken().equals(token)) { return change; } } return null; } private WindowContainerTransaction getEnterPipTransaction(@NonNull IBinder transition, @NonNull TransitionRequestInfo request) { // cache the original task token to check for multi-activity case later Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java +10 −2 Original line number Diff line number Diff line Loading @@ -300,6 +300,10 @@ public class PipController implements ConfigurationChangeListener, int launcherRotation, Rect hotseatKeepClearArea) { ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "getSwipePipToHomeBounds: %s", componentName); // preemptively add the keep clear area for Hotseat, so that it is taken into account // when calculating the entry destination bounds of PiP window mPipBoundsState.setNamedUnrestrictedKeepClearArea( PipBoundsState.NAMED_KCA_LAUNCHER_SHELF, hotseatKeepClearArea); mPipBoundsState.setBoundsStateForEntry(componentName, activityInfo, pictureInPictureParams, mPipBoundsAlgorithm); return mPipBoundsAlgorithm.getEntryDestinationBounds(); Loading Loading @@ -349,10 +353,14 @@ public class PipController implements ConfigurationChangeListener, if (mPipTransitionState.isInSwipePipToHomeTransition()) { mPipTransitionState.resetSwipePipToHomeState(); } if (mOnIsInPipStateChangedListener != null) { mOnIsInPipStateChangedListener.accept(true /* inPip */); } break; case PipTransitionState.EXITED_PIP: if (mOnIsInPipStateChangedListener != null) { mOnIsInPipStateChangedListener.accept(false /* inPip */); } break; } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +16 −8 Original line number Diff line number Diff line Loading @@ -107,10 +107,6 @@ public class PipTransition extends PipTransitionController implements // Internal state and relevant cached info // @Nullable private WindowContainerToken mPipTaskToken; @Nullable private SurfaceControl mPipLeash; @Nullable private Transitions.TransitionFinishCallback mFinishCallback; Loading Loading @@ -402,7 +398,6 @@ public class PipTransition extends PipTransitionController implements finishWct.setBoundsChangeTransaction(pipTaskToken, tx); animator.setAnimationEndCallback(() -> { mPipTransitionState.setState(PipTransitionState.ENTERED_PIP); finishCallback.onTransitionFinished(finishWct.isEmpty() ? null : finishWct); }); Loading Loading @@ -444,15 +439,16 @@ public class PipTransition extends PipTransitionController implements @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); WindowContainerToken pipToken = mPipTransitionState.mPipTaskToken; TransitionInfo.Change pipChange = getChangeByToken(info, pipToken); if (pipChange == null) { return false; } Rect startBounds = pipChange.getStartAbsBounds(); Rect endBounds = pipChange.getEndAbsBounds(); SurfaceControl pipLeash = mPipTransitionState.mPinnedTaskLeash; Preconditions.checkNotNull(pipLeash, "Leash is null for bounds transition."); SurfaceControl pipLeash = pipChange.getLeash(); PipEnterExitAnimator animator = new PipEnterExitAnimator(mContext, pipLeash, startTransaction, startBounds, startBounds, endBounds, Loading Loading @@ -491,6 +487,18 @@ public class PipTransition extends PipTransitionController implements return null; } @Nullable private TransitionInfo.Change getChangeByToken(TransitionInfo info, WindowContainerToken token) { for (TransitionInfo.Change change : info.getChanges()) { if (change.getTaskInfo() != null && change.getTaskInfo().getToken().equals(token)) { return change; } } return null; } private WindowContainerTransaction getEnterPipTransaction(@NonNull IBinder transition, @NonNull TransitionRequestInfo request) { // cache the original task token to check for multi-activity case later Loading