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

Commit 8c7cb1e4 authored by shawnlin's avatar shawnlin
Browse files

Support nav fade anim for the case of swiping left/right to a new task

The ReorderMode of the swiping left/right to a new task is
REORDER_MOVE_TO_ORIGINAL_POSITION which is the same as the case swiping
up and then down to back to the original task.

Add a new flag to distinguish between these two cases.

Bug: 187783109
Test: atest RecentsAnimationControllerTests

Change-Id: I0bd1005b23041459286fcd7f6488b09b43ef3867
parent 532dd4e6
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -151,6 +151,8 @@ public class RecentsAnimationController implements DeathRecipient {
    // Whether to take a screenshot when handling a deferred cancel
    // Whether to take a screenshot when handling a deferred cancel
    private boolean mCancelDeferredWithScreenshot;
    private boolean mCancelDeferredWithScreenshot;


    @VisibleForTesting
    boolean mIsAddingTaskToTargets;
    @VisibleForTesting
    @VisibleForTesting
    boolean mShouldAttachNavBarToAppDuringTransition;
    boolean mShouldAttachNavBarToAppDuringTransition;
    private boolean mNavigationBarAttachedToApp;
    private boolean mNavigationBarAttachedToApp;
@@ -375,7 +377,8 @@ public class RecentsAnimationController implements DeathRecipient {
            final long token = Binder.clearCallingIdentity();
            final long token = Binder.clearCallingIdentity();
            try {
            try {
                synchronized (mService.getWindowManagerLock()) {
                synchronized (mService.getWindowManagerLock()) {
                    restoreNavigationBarFromApp(moveHomeToTop);
                    restoreNavigationBarFromApp(
                            moveHomeToTop || mIsAddingTaskToTargets /* animate */);
                    mService.mWindowPlacerLocked.requestTraversal();
                    mService.mWindowPlacerLocked.requestTraversal();
                }
                }
            } finally {
            } finally {
@@ -684,6 +687,7 @@ public class RecentsAnimationController implements DeathRecipient {


    void addTaskToTargets(Task task, OnAnimationFinishedCallback finishedCallback) {
    void addTaskToTargets(Task task, OnAnimationFinishedCallback finishedCallback) {
        if (mRunner != null) {
        if (mRunner != null) {
            mIsAddingTaskToTargets = task != null;
            // No need to send task appeared when the task target already exists, or when the
            // No need to send task appeared when the task target already exists, or when the
            // task is being managed as a multi-window mode outside of recents (e.g. bubbles).
            // task is being managed as a multi-window mode outside of recents (e.g. bubbles).
            if (isAnimatingTask(task) || skipAnimation(task)) {
            if (isAnimatingTask(task) || skipAnimation(task)) {
@@ -900,7 +904,8 @@ public class RecentsAnimationController implements DeathRecipient {
            removeWallpaperAnimation(wallpaperAdapter);
            removeWallpaperAnimation(wallpaperAdapter);
        }
        }


        restoreNavigationBarFromApp(reorderMode == REORDER_MOVE_TO_TOP);
        restoreNavigationBarFromApp(
                reorderMode == REORDER_MOVE_TO_TOP || mIsAddingTaskToTargets /* animate */);


        // Clear any pending failsafe runnables
        // Clear any pending failsafe runnables
        mService.mH.removeCallbacks(mFailsafeRunnable);
        mService.mH.removeCallbacks(mFailsafeRunnable);
+25 −0
Original line number Original line Diff line number Diff line
@@ -552,6 +552,31 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
        verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
        verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
    }
    }


    @Test
    public void testAddTaskToTargets_expectAnimation() {
        setupForShouldAttachNavBarDuringTransition();
        final ActivityRecord activity = createActivityRecord(mDefaultDisplay);
        final ActivityRecord homeActivity = createHomeActivity();
        initializeRecentsAnimationController(mController, homeActivity);

        final WindowToken navToken = mDefaultDisplay.getDisplayPolicy().getNavigationBar().mToken;
        final SurfaceControl.Transaction transaction = navToken.getPendingTransaction();

        verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
                eq(mDefaultDisplay.mDisplayId), eq(false));
        verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl());
        verify(transaction).setLayer(navToken.getSurfaceControl(), Integer.MAX_VALUE);

        final WindowContainer parent = navToken.getParent();

        mController.addTaskToTargets(createTask(mDefaultDisplay), (type, anim) -> {});
        mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
        verify(mController).restoreNavigationBarFromApp(eq(true));
        verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
                eq(mDefaultDisplay.mDisplayId), eq(true));
        verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
    }

    @Test
    @Test
    public void testNotAttachNavigationBar_controlledByFadeRotationAnimation() {
    public void testNotAttachNavigationBar_controlledByFadeRotationAnimation() {
        setupForShouldAttachNavBarDuringTransition();
        setupForShouldAttachNavBarDuringTransition();