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

Commit b5a78b32 authored by lumark's avatar lumark
Browse files

Suppress transition when mCancelWithDeferredScreenshot as true.

Sometimes, back transition is being suppressed when pressing back key to back
previous task.
It seems that a home transition is active at this point, which suppresses the
activity animation.

If home transition is animate during RecentAnimation invoked, which will suppress
activity animation in AppWindowToken#shouldAnimation, this does not make sense.

Add mCancelWithDeferredScreenshot check to only suppress animation when canceling
recents animation with screenshot case to fix above case.

Bug: 129934735
Test: manual as below steps:
1. Have 2 button navigation enabled.
2. Go to Google News
3. Open article
4. Press back
5. Expect the back transition should not be suppressed.
Test: atest RecentsAnimationControllerTest

Change-Id: Id59b87fb7438b2bc9f4bf33e3009e726fce82562
parent f8e4e75d
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -2432,14 +2432,19 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
        }
    }

    private boolean shouldAnimate(int transit) {

    @VisibleForTesting
    boolean shouldAnimate(int transit) {
        final boolean isSplitScreenPrimary =
                getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
        final boolean allowSplitScreenPrimaryAnimation = transit != TRANSIT_WALLPAPER_OPEN;

        // Don't animate when the task runs recents animation.
        // Don't animate while the task runs recents animation but only if we are in the mode
        // where we cancel with deferred screenshot, which means that the controller has
        // transformed the task.
        final RecentsAnimationController controller = mWmService.getRecentsAnimationController();
        if (controller != null && controller.isAnimatingTask(getTask())) {
        if (controller != null && controller.isAnimatingTask(getTask())
                && controller.shouldCancelWithDeferredScreenshot()) {
            return false;
        }

+20 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -166,6 +167,25 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
        verify(mAnimationCallbacks).onAnimationFinished(REORDER_KEEP_IN_PLACE, true, false);
    }

    @Test
    public void testShouldAnimateWhenNoCancelWithDeferredScreenshot() {
        mWm.setRecentsAnimationController(mController);
        final AppWindowToken appWindow = createAppWindowToken(mDisplayContent,
                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
        final WindowState win1 = createWindow(null, TYPE_BASE_APPLICATION, appWindow, "win1");
        appWindow.addWindow(win1);
        assertEquals(appWindow.getTask().getTopVisibleAppToken(), appWindow);
        assertEquals(appWindow.findMainWindow(), win1);

        mController.addAnimation(appWindow.getTask(), false /* isRecentTaskInvisible */);
        assertTrue(mController.isAnimatingTask(appWindow.getTask()));

        // Assume appWindow transition should animate when no
        // IRecentsAnimationController#setCancelWithDeferredScreenshot called.
        assertFalse(mController.shouldCancelWithDeferredScreenshot());
        assertTrue(appWindow.shouldAnimate(TRANSIT_ACTIVITY_CLOSE));
    }

    private static void verifyNoMoreInteractionsExceptAsBinder(IInterface binder) {
        verify(binder, atLeast(0)).asBinder();
        verifyNoMoreInteractions(binder);