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

Commit c10d48c4 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Set starting frame to startTransaction for ActivityEmbedding transition"

parents ea7bdc06 4f3deb87
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import static android.graphics.Matrix.MTRANS_Y;
import android.annotation.CallSuper;
import android.graphics.Point;
import android.graphics.Rect;
import android.view.Choreographer;
import android.view.SurfaceControl;
import android.view.animation.Animation;
import android.view.animation.Transformation;
@@ -71,7 +70,6 @@ class ActivityEmbeddingAnimationAdapter {
    final float[] mVecs = new float[4];
    @NonNull
    final Rect mRect = new Rect();
    private boolean mIsFirstFrame = true;
    private int mOverrideLayer = LAYER_NO_OVERRIDE;

    ActivityEmbeddingAnimationAdapter(@NonNull Animation animation,
@@ -117,20 +115,21 @@ class ActivityEmbeddingAnimationAdapter {
        mOverrideLayer = layer;
    }

    /** Called on frame update. */
    final void onAnimationUpdate(@NonNull SurfaceControl.Transaction t, long currentPlayTime) {
        if (mIsFirstFrame) {
            t.show(mLeash);
    /** Called to prepare for the starting state. */
    final void prepareForFirstFrame(@NonNull SurfaceControl.Transaction startTransaction) {
        startTransaction.show(mLeash);
        if (mOverrideLayer != LAYER_NO_OVERRIDE) {
                t.setLayer(mLeash, mOverrideLayer);
            startTransaction.setLayer(mLeash, mOverrideLayer);
        }
            mIsFirstFrame = false;
        mAnimation.getTransformationAt(0, mTransformation);
        onAnimationUpdateInner(startTransaction);
    }

    /** Called on frame update. */
    final void onAnimationUpdate(@NonNull SurfaceControl.Transaction t, long currentPlayTime) {
        // Extract the transformation to the current time.
        mAnimation.getTransformation(Math.min(currentPlayTime, mAnimation.getDuration()),
                mTransformation);
        t.setFrameTimelineVsync(Choreographer.getInstance().getVsyncId());
        onAnimationUpdateInner(t);
    }

+12 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.graphics.Rect;
import android.os.IBinder;
import android.util.ArraySet;
import android.util.Log;
import android.view.Choreographer;
import android.view.SurfaceControl;
import android.view.animation.Animation;
import android.window.TransitionInfo;
@@ -130,11 +131,13 @@ class ActivityEmbeddingAnimationRunner {
            animator.addUpdateListener((anim) -> {
                // Update all adapters in the same transaction.
                final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
                t.setFrameTimelineVsync(Choreographer.getInstance().getVsyncId());
                for (ActivityEmbeddingAnimationAdapter adapter : adapters) {
                    adapter.onAnimationUpdate(t, animator.getCurrentPlayTime());
                }
                t.apply();
            });
            prepareForFirstFrame(startTransaction, adapters);
        }
        animator.setDuration(duration);
        animator.addListener(new Animator.AnimatorListener() {
@@ -248,6 +251,15 @@ class ActivityEmbeddingAnimationRunner {
        return adapters;
    }

    /** Sets the first frame to the {@code startTransaction} to avoid any flicker on start. */
    private void prepareForFirstFrame(@NonNull SurfaceControl.Transaction startTransaction,
            @NonNull List<ActivityEmbeddingAnimationAdapter> adapters) {
        startTransaction.setFrameTimelineVsync(Choreographer.getInstance().getVsyncId());
        for (ActivityEmbeddingAnimationAdapter adapter : adapters) {
            adapter.prepareForFirstFrame(startTransaction);
        }
    }

    /** Adds edge extension to the surfaces that have such an animation property. */
    private void addEdgeExtensionIfNeeded(@NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,