Merge "Fix Split animations after single-root" into tm-qpr-dev
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user