Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ public class PipScheduler { @Nullable private WindowContainerTransaction getExitPipViaExpandTransaction() { if (mPipTaskToken == null || mPinnedTaskLeash == null) { if (mPipTaskToken == null) { return null; } WindowContainerTransaction wct = new WindowContainerTransaction(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +66 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.pip2.phone; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_PIP; import static com.android.wm.shell.transition.Transitions.TRANSIT_EXIT_PIP; Loading Loading @@ -56,6 +57,8 @@ public class PipTransition extends PipTransitionController { private IBinder mAutoEnterButtonNavTransition; @Nullable private IBinder mExitViaExpandTransition; @Nullable private IBinder mLegacyEnterTransition; public PipTransition( @NonNull ShellInit shellInit, Loading Loading @@ -98,6 +101,9 @@ public class PipTransition extends PipTransitionController { if (isAutoEnterInButtonNavigation(request)) { mAutoEnterButtonNavTransition = transition; return getEnterPipTransaction(transition, request); } else if (isLegacyEnter(request)) { mLegacyEnterTransition = transition; return getEnterPipTransaction(transition, request); } return null; } Loading @@ -108,6 +114,9 @@ public class PipTransition extends PipTransitionController { if (isAutoEnterInButtonNavigation(request)) { outWct.merge(getEnterPipTransaction(transition, request), true /* transfer */); mAutoEnterButtonNavTransition = transition; } else if (isLegacyEnter(request)) { outWct.merge(getEnterPipTransaction(transition, request), true /* transfer */); mLegacyEnterTransition = transition; } } Loading Loading @@ -153,6 +162,10 @@ public class PipTransition extends PipTransitionController { && pipTask.pictureInPictureParams.isAutoEnterEnabled(); } private boolean isLegacyEnter(@NonNull TransitionRequestInfo requestInfo) { return requestInfo.getType() == TRANSIT_PIP; } @Override public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, Loading @@ -161,6 +174,23 @@ public class PipTransition extends PipTransitionController { @NonNull Transitions.TransitionFinishCallback finishCallback) { if (transition == mAutoEnterButtonNavTransition) { mAutoEnterButtonNavTransition = null; return startAutoEnterButtonNavAnimation(info, startTransaction, finishTransaction, finishCallback); } else if (transition == mLegacyEnterTransition) { mLegacyEnterTransition = null; return startLegacyEnterAnimation(info, startTransaction, finishTransaction, finishCallback); } else if (transition == mExitViaExpandTransition) { mExitViaExpandTransition = null; return startExpandAnimation(info, startTransaction, finishTransaction, finishCallback); } return false; } private boolean startAutoEnterButtonNavAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); if (pipChange == null) { return false; Loading @@ -169,19 +199,38 @@ public class PipTransition extends PipTransitionController { // cache the PiP task token and leash mPipScheduler.setPipTaskToken(mPipTaskToken); mPipScheduler.setPinnedTaskLeash(pipChange.getLeash()); startTransaction.apply(); finishCallback.onTransitionFinished(null); return true; } else if (transition == mExitViaExpandTransition) { mExitViaExpandTransition = null; } private boolean startLegacyEnterAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); if (pipChange == null) { return false; } mPipTaskToken = pipChange.getContainer(); // cache the PiP task token and leash mPipScheduler.setPipTaskToken(mPipTaskToken); startTransaction.apply(); finishCallback.onTransitionFinished(null); onExitPip(); return true; } return false; private boolean startExpandAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { startTransaction.apply(); finishCallback.onTransitionFinished(null); onExitPip(); return true; } @Nullable Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -3695,6 +3695,21 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { boolean originallyFromClient = fromClient && (!r.isState(PAUSING) || params.isAutoEnterEnabled()); // If PiP2 flag is on and client-request to enter PiP came via onUserLeaveHint(), // we request a direct transition from Shell to TRANSIT_PIP_LEGACY to get the startWct // with the right entry bounds. if (isPip2ExperimentEnabled() && !originallyFromClient && !params.isAutoEnterEnabled()) { final Transition legacyEnterPipTransition = new Transition(TRANSIT_PIP, 0 /* flags */, getTransitionController(), mWindowManager.mSyncEngine); legacyEnterPipTransition.setPipActivity(r); getTransitionController().startCollectOrQueue(legacyEnterPipTransition, (deferred) -> { getTransitionController().requestStartTransition(legacyEnterPipTransition, r.getTask(), null /* remoteTransition */, null /* displayChange */); }); return true; } // Create a transition only for this pip entry if it is coming from the app without the // system requesting that the app enter-pip. If the system requested it, that means it // should be part of that transition if possible. Loading services/core/java/com/android/server/wm/TransitionController.java +3 −3 Original line number Diff line number Diff line Loading @@ -731,9 +731,9 @@ class TransitionController { } // set the pip task in the request if provided if (mCollectingTransition.getPipActivity() != null) { pipTaskInfo = mCollectingTransition.getPipActivity().getTask().getTaskInfo(); mCollectingTransition.setPipActivity(null); if (transition.getPipActivity() != null) { pipTaskInfo = transition.getPipActivity().getTask().getTaskInfo(); transition.setPipActivity(null); } final TransitionRequestInfo request = new TransitionRequestInfo(transition.mType, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ public class PipScheduler { @Nullable private WindowContainerTransaction getExitPipViaExpandTransaction() { if (mPipTaskToken == null || mPinnedTaskLeash == null) { if (mPipTaskToken == null) { return null; } WindowContainerTransaction wct = new WindowContainerTransaction(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +66 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.pip2.phone; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_PIP; import static com.android.wm.shell.transition.Transitions.TRANSIT_EXIT_PIP; Loading Loading @@ -56,6 +57,8 @@ public class PipTransition extends PipTransitionController { private IBinder mAutoEnterButtonNavTransition; @Nullable private IBinder mExitViaExpandTransition; @Nullable private IBinder mLegacyEnterTransition; public PipTransition( @NonNull ShellInit shellInit, Loading Loading @@ -98,6 +101,9 @@ public class PipTransition extends PipTransitionController { if (isAutoEnterInButtonNavigation(request)) { mAutoEnterButtonNavTransition = transition; return getEnterPipTransaction(transition, request); } else if (isLegacyEnter(request)) { mLegacyEnterTransition = transition; return getEnterPipTransaction(transition, request); } return null; } Loading @@ -108,6 +114,9 @@ public class PipTransition extends PipTransitionController { if (isAutoEnterInButtonNavigation(request)) { outWct.merge(getEnterPipTransaction(transition, request), true /* transfer */); mAutoEnterButtonNavTransition = transition; } else if (isLegacyEnter(request)) { outWct.merge(getEnterPipTransaction(transition, request), true /* transfer */); mLegacyEnterTransition = transition; } } Loading Loading @@ -153,6 +162,10 @@ public class PipTransition extends PipTransitionController { && pipTask.pictureInPictureParams.isAutoEnterEnabled(); } private boolean isLegacyEnter(@NonNull TransitionRequestInfo requestInfo) { return requestInfo.getType() == TRANSIT_PIP; } @Override public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, Loading @@ -161,6 +174,23 @@ public class PipTransition extends PipTransitionController { @NonNull Transitions.TransitionFinishCallback finishCallback) { if (transition == mAutoEnterButtonNavTransition) { mAutoEnterButtonNavTransition = null; return startAutoEnterButtonNavAnimation(info, startTransaction, finishTransaction, finishCallback); } else if (transition == mLegacyEnterTransition) { mLegacyEnterTransition = null; return startLegacyEnterAnimation(info, startTransaction, finishTransaction, finishCallback); } else if (transition == mExitViaExpandTransition) { mExitViaExpandTransition = null; return startExpandAnimation(info, startTransaction, finishTransaction, finishCallback); } return false; } private boolean startAutoEnterButtonNavAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); if (pipChange == null) { return false; Loading @@ -169,19 +199,38 @@ public class PipTransition extends PipTransitionController { // cache the PiP task token and leash mPipScheduler.setPipTaskToken(mPipTaskToken); mPipScheduler.setPinnedTaskLeash(pipChange.getLeash()); startTransaction.apply(); finishCallback.onTransitionFinished(null); return true; } else if (transition == mExitViaExpandTransition) { mExitViaExpandTransition = null; } private boolean startLegacyEnterAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { TransitionInfo.Change pipChange = getPipChange(info); if (pipChange == null) { return false; } mPipTaskToken = pipChange.getContainer(); // cache the PiP task token and leash mPipScheduler.setPipTaskToken(mPipTaskToken); startTransaction.apply(); finishCallback.onTransitionFinished(null); onExitPip(); return true; } return false; private boolean startExpandAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback) { startTransaction.apply(); finishCallback.onTransitionFinished(null); onExitPip(); return true; } @Nullable Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -3695,6 +3695,21 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { boolean originallyFromClient = fromClient && (!r.isState(PAUSING) || params.isAutoEnterEnabled()); // If PiP2 flag is on and client-request to enter PiP came via onUserLeaveHint(), // we request a direct transition from Shell to TRANSIT_PIP_LEGACY to get the startWct // with the right entry bounds. if (isPip2ExperimentEnabled() && !originallyFromClient && !params.isAutoEnterEnabled()) { final Transition legacyEnterPipTransition = new Transition(TRANSIT_PIP, 0 /* flags */, getTransitionController(), mWindowManager.mSyncEngine); legacyEnterPipTransition.setPipActivity(r); getTransitionController().startCollectOrQueue(legacyEnterPipTransition, (deferred) -> { getTransitionController().requestStartTransition(legacyEnterPipTransition, r.getTask(), null /* remoteTransition */, null /* displayChange */); }); return true; } // Create a transition only for this pip entry if it is coming from the app without the // system requesting that the app enter-pip. If the system requested it, that means it // should be part of that transition if possible. Loading
services/core/java/com/android/server/wm/TransitionController.java +3 −3 Original line number Diff line number Diff line Loading @@ -731,9 +731,9 @@ class TransitionController { } // set the pip task in the request if provided if (mCollectingTransition.getPipActivity() != null) { pipTaskInfo = mCollectingTransition.getPipActivity().getTask().getTaskInfo(); mCollectingTransition.setPipActivity(null); if (transition.getPipActivity() != null) { pipTaskInfo = transition.getPipActivity().getTask().getTaskInfo(); transition.setPipActivity(null); } final TransitionRequestInfo request = new TransitionRequestInfo(transition.mType, Loading