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

Commit bf09fa1d authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Pass in finishTransaction to TransitionHandler#startAnimation" into sc-v2-dev

parents d0ec490c a8b36186
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -204,7 +204,8 @@ public class LegacySplitScreenTransitions implements Transitions.TransitionHandl

    @Override
    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        if (transition != mPendingDismiss && transition != mPendingEnter) {
            // If we're not in split-mode, just abort
@@ -239,12 +240,12 @@ public class LegacySplitScreenTransitions implements Transitions.TransitionHandl
                if (change.getParent() != null) {
                    // This is probably reparented, so we want the parent to be immediately visible
                    final TransitionInfo.Change parentChange = info.getChange(change.getParent());
                    t.show(parentChange.getLeash());
                    t.setAlpha(parentChange.getLeash(), 1.f);
                    startTransaction.show(parentChange.getLeash());
                    startTransaction.setAlpha(parentChange.getLeash(), 1.f);
                    // and then animate this layer outside the parent (since, for example, this is
                    // the home task animating from fullscreen to part-screen).
                    t.reparent(leash, info.getRootLeash());
                    t.setLayer(leash, info.getChanges().size() - i);
                    startTransaction.reparent(leash, info.getRootLeash());
                    startTransaction.setLayer(leash, info.getChanges().size() - i);
                    // build the finish reparent/reposition
                    mFinishTransaction.reparent(leash, parentChange.getLeash());
                    mFinishTransaction.setPosition(leash,
@@ -271,12 +272,12 @@ public class LegacySplitScreenTransitions implements Transitions.TransitionHandl
            if (transition == mPendingEnter
                    && mListener.mPrimary.token.equals(change.getContainer())
                    || mListener.mSecondary.token.equals(change.getContainer())) {
                t.setWindowCrop(leash, change.getStartAbsBounds().width(),
                startTransaction.setWindowCrop(leash, change.getStartAbsBounds().width(),
                        change.getStartAbsBounds().height());
                if (mListener.mPrimary.token.equals(change.getContainer())) {
                    // Move layer to top since we want it above the oversized home task during
                    // animation even though home task is on top in hierarchy.
                    t.setLayer(leash, info.getChanges().size() + 1);
                    startTransaction.setLayer(leash, info.getChanges().size() + 1);
                }
            }
            boolean isOpening = Transitions.isOpeningType(info.getType());
@@ -289,7 +290,7 @@ public class LegacySplitScreenTransitions implements Transitions.TransitionHandl
                    // Dismissing via snap-to-top/bottom means that the dismissed task is already
                    // not-visible (usually cropped to oblivion) so immediately set its alpha to 0
                    // and don't animate it so it doesn't pop-in when reparented.
                    t.setAlpha(leash, 0.f);
                    startTransaction.setAlpha(leash, 0.f);
                } else {
                    startExampleAnimation(leash, false /* show */);
                }
@@ -311,7 +312,7 @@ public class LegacySplitScreenTransitions implements Transitions.TransitionHandl
            }
            mSplitScreen.finishEnterSplitTransition(homeIsVisible);
        }
        t.apply();
        startTransaction.apply();
        onFinish();
        return true;
    }
+17 −7
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.view.SurfaceControl;
import android.window.TransitionInfo;
import android.window.TransitionRequestInfo;
import android.window.WindowContainerTransaction;
import android.window.WindowContainerTransactionCallback;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -68,7 +69,8 @@ public class PipTransition extends PipTransitionController {
    @Override
    public boolean startAnimation(@android.annotation.NonNull IBinder transition,
            @android.annotation.NonNull TransitionInfo info,
            @android.annotation.NonNull SurfaceControl.Transaction t,
            @android.annotation.NonNull SurfaceControl.Transaction startTransaction,
            @android.annotation.NonNull SurfaceControl.Transaction finishTransaction,
            @android.annotation.NonNull Transitions.TransitionFinishCallback finishCallback) {
        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
            final TransitionInfo.Change change = info.getChanges().get(i);
@@ -76,7 +78,8 @@ public class PipTransition extends PipTransitionController {
                    && change.getTaskInfo().configuration.windowConfiguration.getWindowingMode()
                    == WINDOWING_MODE_PINNED) {
                mFinishCallback = finishCallback;
                return startEnterAnimation(change.getTaskInfo(), change.getLeash(), t);
                return startEnterAnimation(change.getTaskInfo(), change.getLeash(),
                        startTransaction, finishTransaction);
            }
        }
        return false;
@@ -96,17 +99,25 @@ public class PipTransition extends PipTransitionController {
        WindowContainerTransaction wct = new WindowContainerTransaction();
        prepareFinishResizeTransaction(taskInfo, destinationBounds,
                direction, tx, wct);
        mFinishCallback.onTransitionFinished(wct, null);
        mFinishCallback.onTransitionFinished(wct, new WindowContainerTransactionCallback() {
            @Override
            public void onTransactionReady(int id, @NonNull SurfaceControl.Transaction t) {
                t.merge(tx);
                t.apply();
            }
        });
        finishResizeForMenu(destinationBounds);
    }

    private boolean startEnterAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
            final SurfaceControl.Transaction t) {
            final SurfaceControl.Transaction startTransaction,
            final SurfaceControl.Transaction finishTransaction) {
        setBoundsStateForEntry(taskInfo.topActivity, taskInfo.pictureInPictureParams,
                taskInfo.topActivityInfo);
        final Rect destinationBounds = mPipBoundsAlgorithm.getEntryDestinationBounds();
        final Rect currentBounds = taskInfo.configuration.windowConfiguration.getBounds();
        PipAnimationController.PipTransitionAnimator animator;
        finishTransaction.setPosition(leash, destinationBounds.left, destinationBounds.top);
        if (mOneShotAnimationType == ANIM_TYPE_BOUNDS) {
            final Rect sourceHintRect =
                    PipBoundsAlgorithm.getValidSourceHintRect(
@@ -115,8 +126,8 @@ public class PipTransition extends PipTransitionController {
                    currentBounds, destinationBounds, sourceHintRect, TRANSITION_DIRECTION_TO_PIP,
                    0 /* startingAngle */, Surface.ROTATION_0);
        } else if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
            t.setAlpha(leash, 0f);
            t.apply();
            startTransaction.setAlpha(leash, 0f);
            startTransaction.apply();
            animator = mPipAnimationController.getAnimator(taskInfo, leash, destinationBounds,
                    0f, 1f);
            mOneShotAnimationType = ANIM_TYPE_BOUNDS;
@@ -158,6 +169,5 @@ public class PipTransition extends PipTransitionController {
        }

        wct.setBounds(taskInfo.token, taskBounds);
        wct.setBoundsChangeTransaction(taskInfo.token, tx);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ public class TvPipTransition extends PipTransitionController {

    @Override
    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t,
            @NonNull SurfaceControl.Transaction startTransaction,
            @android.annotation.NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        return false;
    }
+5 −3
Original line number Diff line number Diff line
@@ -84,17 +84,19 @@ class SplitScreenTransitions {
    }

    void playAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback,
            @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) {
        mFinishCallback = finishCallback;
        mAnimatingTransition = transition;
        if (mRemoteHandler != null) {
            mRemoteHandler.startAnimation(transition, info, t, mRemoteFinishCB);
            mRemoteHandler.startAnimation(transition, info, startTransaction, finishTransaction,
                    mRemoteFinishCB);
            mRemoteHandler = null;
            return;
        }
        playInternalAnimation(transition, info, t, mainRoot, sideRoot);
        playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot);
    }

    private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+6 −5
Original line number Diff line number Diff line
@@ -672,7 +672,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    @Override
    public boolean startAnimation(@NonNull IBinder transition,
            @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        if (transition != mSplitTransitions.mPendingDismiss
                && transition != mSplitTransitions.mPendingEnter) {
@@ -717,14 +718,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,

        boolean shouldAnimate = true;
        if (mSplitTransitions.mPendingEnter == transition) {
            shouldAnimate = startPendingEnterAnimation(transition, info, t);
            shouldAnimate = startPendingEnterAnimation(transition, info, startTransaction);
        } else if (mSplitTransitions.mPendingDismiss == transition) {
            shouldAnimate = startPendingDismissAnimation(transition, info, t);
            shouldAnimate = startPendingDismissAnimation(transition, info, startTransaction);
        }
        if (!shouldAnimate) return false;

        mSplitTransitions.playAnimation(transition, info, t, finishCallback,
                mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
        mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction,
                finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
        return true;
    }

Loading