Merge "Fix Split animations after single-root" into tm-qpr-dev

This commit is contained in:
Evan Rosky
2022-04-18 17:24:43 +00:00
committed by Android (Google) Code Review
3 changed files with 19 additions and 9 deletions

View File

@@ -90,7 +90,8 @@ class SplitScreenTransitions {
@NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction, @NonNull SurfaceControl.Transaction finishTransaction,
@NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull Transitions.TransitionFinishCallback finishCallback,
@NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot,
@NonNull WindowContainerToken topRoot) {
mFinishCallback = finishCallback; mFinishCallback = finishCallback;
mAnimatingTransition = transition; mAnimatingTransition = transition;
if (mPendingRemoteHandler != null) { if (mPendingRemoteHandler != null) {
@@ -100,12 +101,12 @@ class SplitScreenTransitions {
mPendingRemoteHandler = null; mPendingRemoteHandler = null;
return; return;
} }
playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot); playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot, topRoot);
} }
private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot, @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot,
@NonNull WindowContainerToken sideRoot) { @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) {
mFinishTransaction = mTransactionPool.acquire(); mFinishTransaction = mTransactionPool.acquire();
// Play some place-holder fade animations // Play some place-holder fade animations
@@ -136,7 +137,10 @@ class SplitScreenTransitions {
endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y); endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
startExampleResizeAnimation(leash, startBounds, endBounds); 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; continue;
} }

View File

@@ -1128,6 +1128,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
final int dismissTop = mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE; final int dismissTop = mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
final WindowContainerTransaction wct = new WindowContainerTransaction(); final WindowContainerTransaction wct = new WindowContainerTransaction();
prepareExitSplitScreen(dismissTop, wct); prepareExitSplitScreen(dismissTop, wct);
if (mRootTaskInfo != null) {
wct.setDoNotPip(mRootTaskInfo.token);
}
mSplitTransitions.startDismissTransition(wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER); mSplitTransitions.startDismissTransition(wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER);
} }
@@ -1506,7 +1509,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
if (!shouldAnimate) return false; if (!shouldAnimate) return false;
mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction, mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction,
finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token); finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token,
mRootTaskInfo.token);
return true; return true;
} }

View File

@@ -411,11 +411,13 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
} }
if (transition != null) transition.collect(wc); if (transition != null) transition.collect(wc);
if (finishTransition != null) { if ((entry.getValue().getChangeMask()
// Deal with edge-cases in recents where it pretends to finish itself. & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {
if ((entry.getValue().getChangeMask() // Disable entering pip (eg. when recents pretends to finish itself)
& WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) { if (finishTransition != null) {
finishTransition.setCanPipOnFinish(false /* canPipOnFinish */); finishTransition.setCanPipOnFinish(false /* canPipOnFinish */);
} else if (transition != null) {
transition.setCanPipOnFinish(false /* canPipOnFinish */);
} }
} }