Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java +8 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,8 @@ class SplitScreenTransitions { @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) { mFinishCallback = finishCallback; mAnimatingTransition = transition; if (mPendingRemoteHandler != null) { Loading @@ -100,12 +101,12 @@ class SplitScreenTransitions { mPendingRemoteHandler = null; return; } playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot); playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot, topRoot); } private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) { mFinishTransaction = mTransactionPool.acquire(); // Play some place-holder fade animations Loading Loading @@ -136,7 +137,10 @@ class SplitScreenTransitions { endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y); startExampleResizeAnimation(leash, startBounds, endBounds); } if (change.getParent() != null) { boolean isRootOrSplitSideRoot = change.getParent() == null || topRoot.equals(change.getParent()); // For enter or exit, we only want to animate the side roots but not the top-root. if (!isRootOrSplitSideRoot || topRoot.equals(change.getContainer())) { continue; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +5 −1 Original line number Diff line number Diff line Loading @@ -1128,6 +1128,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, final int dismissTop = mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE; final WindowContainerTransaction wct = new WindowContainerTransaction(); prepareExitSplitScreen(dismissTop, wct); if (mRootTaskInfo != null) { wct.setDoNotPip(mRootTaskInfo.token); } mSplitTransitions.startDismissTransition(wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER); } Loading Loading @@ -1506,7 +1509,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, if (!shouldAnimate) return false; mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction, finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token); finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token, mRootTaskInfo.token); return true; } Loading services/core/java/com/android/server/wm/WindowOrganizerController.java +6 −4 Original line number Diff line number Diff line Loading @@ -411,11 +411,13 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } if (transition != null) transition.collect(wc); if (finishTransition != null) { // Deal with edge-cases in recents where it pretends to finish itself. if ((entry.getValue().getChangeMask() & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) { // Disable entering pip (eg. when recents pretends to finish itself) if (finishTransition != null) { finishTransition.setCanPipOnFinish(false /* canPipOnFinish */); } else if (transition != null) { transition.setCanPipOnFinish(false /* canPipOnFinish */); } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java +8 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,8 @@ class SplitScreenTransitions { @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) { mFinishCallback = finishCallback; mAnimatingTransition = transition; if (mPendingRemoteHandler != null) { Loading @@ -100,12 +101,12 @@ class SplitScreenTransitions { mPendingRemoteHandler = null; return; } playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot); playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot, topRoot); } private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) { mFinishTransaction = mTransactionPool.acquire(); // Play some place-holder fade animations Loading Loading @@ -136,7 +137,10 @@ class SplitScreenTransitions { endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y); startExampleResizeAnimation(leash, startBounds, endBounds); } if (change.getParent() != null) { boolean isRootOrSplitSideRoot = change.getParent() == null || topRoot.equals(change.getParent()); // For enter or exit, we only want to animate the side roots but not the top-root. if (!isRootOrSplitSideRoot || topRoot.equals(change.getContainer())) { continue; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +5 −1 Original line number Diff line number Diff line Loading @@ -1128,6 +1128,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, final int dismissTop = mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE; final WindowContainerTransaction wct = new WindowContainerTransaction(); prepareExitSplitScreen(dismissTop, wct); if (mRootTaskInfo != null) { wct.setDoNotPip(mRootTaskInfo.token); } mSplitTransitions.startDismissTransition(wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER); } Loading Loading @@ -1506,7 +1509,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, if (!shouldAnimate) return false; mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction, finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token); finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token, mRootTaskInfo.token); return true; } Loading
services/core/java/com/android/server/wm/WindowOrganizerController.java +6 −4 Original line number Diff line number Diff line Loading @@ -411,11 +411,13 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } if (transition != null) transition.collect(wc); if (finishTransition != null) { // Deal with edge-cases in recents where it pretends to finish itself. if ((entry.getValue().getChangeMask() & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) { // Disable entering pip (eg. when recents pretends to finish itself) if (finishTransition != null) { finishTransition.setCanPipOnFinish(false /* canPipOnFinish */); } else if (transition != null) { transition.setCanPipOnFinish(false /* canPipOnFinish */); } } Loading