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

Commit b1e4053c authored by Jerry Chang's avatar Jerry Chang
Browse files

Use the proper transaction when finishing a split screen transition

It will restore the shifted split layout after entered overview panel,
this makes sure to update the proper finish transaction so the split
layout will be updated properly after animated the transition.

Also support to modify the finish transaction when a transition got
merged, so we can append clean-up operations for the cases like merging
an enter split screen transition to another handler.

Fix: 238856352
Test: enabled shell transition, verified split layout has been
      shifted/restored properly after re-entering a split pair.

Change-Id: I630c54ed7c25246634c314eb9b2561a8556d8570
parent 99933f97
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1130,16 +1130,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
            boolean adjusted = false;
            if (mYOffsetForIme != 0) {
                if (dividerLeash != null) {
                    mTempRect.set(mDividerBounds);
                    getRefDividerBounds(mTempRect);
                    mTempRect.offset(0, mYOffsetForIme);
                    t.setPosition(dividerLeash, mTempRect.left, mTempRect.top);
                }

                mTempRect.set(mBounds1);
                getRefBounds1(mTempRect);
                mTempRect.offset(0, mYOffsetForIme);
                t.setPosition(leash1, mTempRect.left, mTempRect.top);

                mTempRect.set(mBounds2);
                getRefBounds2(mTempRect);
                mTempRect.offset(0, mYOffsetForIme);
                t.setPosition(leash2, mTempRect.left, mTempRect.top);
                adjusted = true;
+2 −1
Original line number Diff line number Diff line
@@ -315,7 +315,8 @@ public class PipTransition extends PipTransitionController {
    }

    @Override
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) {
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
            @Nullable SurfaceControl.Transaction finishT) {
        if (transition != mExitTransition) {
            return;
        }
+5 −13
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ class SplitScreenTransitions {
            @NonNull WindowContainerToken topRoot) {
        mFinishCallback = finishCallback;
        mAnimatingTransition = transition;
        mFinishTransaction = finishTransaction;
        if (mPendingRemoteHandler != null) {
            mPendingRemoteHandler.startAnimation(transition, info, startTransaction,
                    finishTransaction, mRemoteFinishCB);
@@ -107,8 +108,6 @@ class SplitScreenTransitions {
    private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot,
            @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) {
        mFinishTransaction = mTransactionPool.acquire();

        // Play some place-holder fade animations
        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
            final TransitionInfo.Change change = info.getChanges().get(i);
@@ -287,16 +286,14 @@ class SplitScreenTransitions {
        return true;
    }

    void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) {
    void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
            @Nullable SurfaceControl.Transaction finishT) {
        if (isPendingEnter(transition)) {
            if (!aborted) {
                // An enter transition got merged, appends the rest operations to finish entering
                // split screen.
                // TODO (b/238856352): Passed-in the proper finish transition to merge instead.
                if (mFinishTransaction == null) {
                    mFinishTransaction = mTransactionPool.acquire();
                }
                mStageCoordinator.finishEnterSplitScreen(mFinishTransaction);
                mStageCoordinator.finishEnterSplitScreen(finishT);
                mPendingRemoteHandler = null;
            }

            mPendingEnter.mCallback.onTransitionConsumed(aborted);
@@ -339,11 +336,6 @@ class SplitScreenTransitions {
        mAnimatingTransition = null;

        mOnFinish.run();
        if (mFinishTransaction != null) {
            mFinishTransaction.apply();
            mTransactionPool.release(mFinishTransaction);
            mFinishTransaction = null;
        }
        if (mFinishCallback != null) {
            mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
            mFinishCallback = null;
+4 −2
Original line number Diff line number Diff line
@@ -229,6 +229,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                if (op.getType() == HIERARCHY_OP_TYPE_REORDER && op.getToTop()
                        && (mMainStage.containsContainer(container)
                        || mSideStage.containsContainer(container))) {
                    updateSurfaceBounds(mSplitLayout, finishT, false /* applyResizingOffset */);
                    setDividerVisibility(true, finishT);
                    return;
                }
@@ -1677,8 +1678,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    }

    @Override
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) {
        mSplitTransitions.onTransitionConsumed(transition, aborted);
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
            @Nullable SurfaceControl.Transaction finishT) {
        mSplitTransitions.onTransitionConsumed(transition, aborted, finishT);
    }

    @Override
+3 −2
Original line number Diff line number Diff line
@@ -274,7 +274,8 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler {
    }

    @Override
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) {
    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
            @Nullable SurfaceControl.Transaction finishT) {
        MixedTransition mixed = null;
        for (int i = mActiveTransitions.size() - 1; i >= 0; --i) {
            if (mActiveTransitions.get(i).mTransition != transition) continue;
@@ -283,7 +284,7 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler {
        }
        if (mixed == null) return;
        if (mixed.mType == MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT) {
            mPipHandler.onTransitionConsumed(transition, aborted);
            mPipHandler.onTransitionConsumed(transition, aborted, finishT);
        }
    }
}
Loading