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

Commit 6d81a4c6 authored by An An Yu's avatar An An Yu Committed by Automerger Merge Worker
Browse files

Merge "Implement merge animations for AE Shell animation." into udc-dev am: 0b922022

parents f861539c 0b922022
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -61,6 +61,9 @@ class ActivityEmbeddingAnimationRunner {
    @VisibleForTesting
    final ActivityEmbeddingAnimationSpec mAnimationSpec;

    @Nullable
    private Animator mActiveAnimator;

    ActivityEmbeddingAnimationRunner(@NonNull Context context,
            @NonNull ActivityEmbeddingController controller) {
        mController = controller;
@@ -75,8 +78,10 @@ class ActivityEmbeddingAnimationRunner {
        // applied to make sure the surface is ready.
        final List<Consumer<SurfaceControl.Transaction>> postStartTransactionCallbacks =
                new ArrayList<>();
        final Animator animator = createAnimator(info, startTransaction, finishTransaction,
        final Animator animator = createAnimator(info, startTransaction,
                finishTransaction,
                () -> mController.onAnimationFinished(transition), postStartTransactionCallbacks);
        mActiveAnimator = animator;

        // Start the animation.
        if (!postStartTransactionCallbacks.isEmpty()) {
@@ -98,6 +103,17 @@ class ActivityEmbeddingAnimationRunner {
        }
    }

    void cancelAnimationFromMerge() {
        if (mActiveAnimator == null) {
            Log.e(TAG,
                    "No active ActivityEmbedding animator running but mergeAnimation is "
                            + "trying to cancel one."
            );
            return;
        }
        mActiveAnimator.end();
    }

    /**
     * Sets transition animation scale settings value.
     * @param scale The setting value of transition animation scale.
@@ -153,6 +169,7 @@ class ActivityEmbeddingAnimationRunner {
                    adapter.onAnimationEnd(t);
                }
                t.apply();
                mActiveAnimator = null;
                animationFinishCallback.run();
            }

+7 −0
Original line number Diff line number Diff line
@@ -118,6 +118,13 @@ public class ActivityEmbeddingController implements Transitions.TransitionHandle
        return true;
    }

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

    private boolean handleNonEmbeddedChanges(List<TransitionInfo.Change> changes) {
        final Rect nonClosingEmbeddedArea = new Rect();
        for (int i = changes.size() - 1; i >= 0; i--) {
+4 −2
Original line number Diff line number Diff line
@@ -65,12 +65,14 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
        final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
                .addChange(createChange(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY))
                .build();
        doReturn(mAnimator).when(mAnimRunner).createAnimator(any(), any(), any(), any(), any());
        doReturn(mAnimator).when(mAnimRunner).createAnimator(any(), any(), any(), any(),
                any());

        mAnimRunner.startAnimation(mTransition, info, mStartTransaction, mFinishTransaction);

        final ArgumentCaptor<Runnable> finishCallback = ArgumentCaptor.forClass(Runnable.class);
        verify(mAnimRunner).createAnimator(eq(info), eq(mStartTransaction), eq(mFinishTransaction),
        verify(mAnimRunner).createAnimator(eq(info), eq(mStartTransaction),
                eq(mFinishTransaction),
                finishCallback.capture(), any());
        verify(mStartTransaction).apply();
        verify(mAnimator).start();
+1 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ abstract class ActivityEmbeddingAnimationTestBase extends ShellTestCase {

    @Mock
    ShellInit mShellInit;

    @Mock
    Transitions mTransitions;
    @Mock
+44 −1
Original line number Diff line number Diff line
@@ -29,9 +29,13 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

import android.animation.Animator;
import android.animation.ValueAnimator;
import android.graphics.Rect;
import android.view.SurfaceControl;
import android.window.TransitionInfo;

import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

@@ -58,7 +62,8 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
    @Before
    public void setup() {
        super.setUp();
        doReturn(mAnimator).when(mAnimRunner).createAnimator(any(), any(), any(), any(), any());
        doReturn(mAnimator).when(mAnimRunner).createAnimator(any(), any(), any(), any(),
                any());
    }

    @Test
@@ -182,6 +187,44 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
        verifyNoMoreInteractions(mFinishTransaction);
    }

    @UiThreadTest
    @Test
    public void testMergeAnimation() {
        final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
                .addChange(createEmbeddedChange(
                        EMBEDDED_LEFT_BOUNDS, EMBEDDED_LEFT_BOUNDS, TASK_BOUNDS))
                .build();

        final ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                mController.onAnimationFinished(mTransition);
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }
        });
        doReturn(animator).when(mAnimRunner).createAnimator(any(), any(), any(), any(), any());
        mController.startAnimation(mTransition, info, mStartTransaction,
                mFinishTransaction, mFinishCallback);
        verify(mFinishCallback, never()).onTransitionFinished(any(), any());
        mController.mergeAnimation(mTransition, info, new SurfaceControl.Transaction(),
                mTransition,
                (wct, cb) -> {
                });
        verify(mFinishCallback).onTransitionFinished(any(), any());
    }

    @Test
    public void testOnAnimationFinished() {
        // Should not call finish when there is no transition.