Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef92c9c8 authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Fix Split animations after single-root" into tm-qpr-dev am: 2447139f

parents 9ab5d59e 2447139f
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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) {
@@ -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
@@ -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;
            }

+5 −1
Original line number Diff line number Diff line
@@ -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);
    }

@@ -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;
    }

+6 −4
Original line number Diff line number Diff line
@@ -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 */);
                    }
                }