Loading libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java +10 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java +10 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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, Loading