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

Commit 2f7ad75c authored by Winson Chung's avatar Winson Chung
Browse files

Provide the finish transaction when merging transitions

- Currently, the finish transaction for a transition is applied,
  followed by the start & finish transactions for all merged
  transitions.  This change provides the active handler the finish
  transaction so that it can choose to update the "final" state
  of the transition (with all merges taken into account).

Bug: 378657004
Flag: EXEMPT bugfix
Test: atest WMShellUnitTests
Change-Id: Iee54f2fd72c15c5f3b790124a51c70205b55001a
parent 4fdb695e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -168,7 +168,8 @@ public class ActivityEmbeddingController implements Transitions.TransitionHandle

    @Override
    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
            @NonNull SurfaceControl.Transaction startT, @NonNull SurfaceControl.Transaction finishT,
            @NonNull IBinder mergeTarget,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        mAnimationRunner.cancelAnimationFromMerge();
    }
+5 −3
Original line number Diff line number Diff line
@@ -1463,7 +1463,9 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont

        @Override
        public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
                @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
                @NonNull SurfaceControl.Transaction startT,
                @NonNull SurfaceControl.Transaction finishT,
                @NonNull IBinder mergeTarget,
                @NonNull Transitions.TransitionFinishCallback finishCallback) {
            if (mClosePrepareTransition == transition) {
                mClosePrepareTransition = null;
@@ -1476,7 +1478,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
            if (info.getType() == TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION
                    && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps == null) {
                finishCallback.onTransitionFinished(null);
                t.apply();
                startT.apply();
                applyFinishOpenTransition();
                return;
            }
@@ -1489,7 +1491,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
            }
            // Handle the commit transition if this handler is running the open transition.
            finishCallback.onTransitionFinished(null);
            t.apply();
            startT.apply();
            if (mCloseTransitionRequested) {
                if (mApps == null || mApps.length == 0) {
                    // animation was done
+6 −2
Original line number Diff line number Diff line
@@ -248,7 +248,9 @@ public class BubbleTransitions {

        @Override
        public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
                @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
                @NonNull SurfaceControl.Transaction startT,
                @NonNull SurfaceControl.Transaction finishT,
                @NonNull IBinder mergeTarget,
                @NonNull Transitions.TransitionFinishCallback finishCallback) {
        }

@@ -423,7 +425,9 @@ public class BubbleTransitions {

        @Override
        public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
                @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
                @NonNull SurfaceControl.Transaction startT,
                @NonNull SurfaceControl.Transaction finishT,
                @NonNull IBinder mergeTarget,
                @NonNull Transitions.TransitionFinishCallback finishCallback) {
        }

+6 −5
Original line number Diff line number Diff line
@@ -458,7 +458,8 @@ sealed class DragToDesktopTransitionHandler(
    override fun mergeAnimation(
        transition: IBinder,
        info: TransitionInfo,
        t: SurfaceControl.Transaction,
        startT: SurfaceControl.Transaction,
        finishT: SurfaceControl.Transaction,
        mergeTarget: IBinder,
        finishCallback: Transitions.TransitionFinishCallback,
    ) {
@@ -488,18 +489,18 @@ sealed class DragToDesktopTransitionHandler(
        if (isEndTransition) {
            setupEndDragToDesktop(
                info,
                startTransaction = t,
                startTransaction = startT,
                finishTransaction = startTransactionFinishT,
            )
            // Call finishCallback to merge animation before startTransitionFinishCb is called
            finishCallback.onTransitionFinished(/* wct= */ null)
            animateEndDragToDesktop(startTransaction = t, startTransitionFinishCb)
            animateEndDragToDesktop(startTransaction = startT, startTransitionFinishCb)
        } else if (isCancelTransition) {
            info.changes.forEach { change ->
                t.show(change.leash)
                startT.show(change.leash)
                startTransactionFinishT.show(change.leash)
            }
            t.apply()
            startT.apply()
            finishCallback.onTransitionFinished(/* wct= */ null)
            startTransitionFinishCb.onTransitionFinished(/* wct= */ null)
            clearState()
+3 −1
Original line number Diff line number Diff line
@@ -175,7 +175,9 @@ public class FreeformTaskTransitionHandler

    @Override
    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
            @NonNull SurfaceControl.Transaction startT,
            @NonNull SurfaceControl.Transaction finishT,
            @NonNull IBinder mergeTarget,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        ArrayList<Animator> animations = mAnimations.get(mergeTarget);
        if (animations == null) return;
Loading