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