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

Commit 49604792 authored by wilsonshih's avatar wilsonshih
Browse files

Skip predict back animation for translucent activity.

The cross-activity or cross-task animation can be weird when top
activity is translucent/floating/showWallpaper, skip animation for
those case.

Bug: 304976250
Bug: 305804265
Test: atest BackNavigationControllerTests
Change-Id: Ic95e5bb6baed89da8f5a5d0e29ae1040becd4c7a
parent bef66aca
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -276,6 +276,10 @@ class BackNavigationController {
                // activity, we won't close the activity.
                backType = BackNavigationInfo.TYPE_DIALOG_CLOSE;
                removedWindowContainer = window;
            } else if (!currentActivity.occludesParent() || currentActivity.showWallpaper()) {
                // skip if current activity is translucent
                backType = BackNavigationInfo.TYPE_CALLBACK;
                removedWindowContainer = window;
            } else if (prevActivity != null) {
                if (!isOccluded || prevActivity.canShowWhenLocked()) {
                    // We have another Activity in the same currentTask to go to
+15 −7
Original line number Diff line number Diff line
@@ -130,12 +130,22 @@ public class BackNavigationControllerTests extends WindowTestsBase {
        // verify if back animation would start.
        assertTrue("Animation scheduled", backNavigationInfo.isPrepareRemoteAnimation());

        // reset drawing status
        // reset drawing status to test translucent activity
        backNavigationInfo.onBackNavigationFinished(false);
        mBackNavigationController.clearBackAnimations();
        topTask.forAllWindows(w -> {
            makeWindowVisibleAndDrawn(w);
        }, true);
        final ActivityRecord topActivity = topTask.getTopMostActivity();
        makeWindowVisibleAndDrawn(topActivity.findMainWindow());
        // simulate translucent
        topActivity.setOccludesParent(false);
        backNavigationInfo = startBackNavigation();
        assertThat(typeToString(backNavigationInfo.getType()))
                .isEqualTo(typeToString(BackNavigationInfo.TYPE_CALLBACK));

        // reset drawing status to test keyguard occludes
        topActivity.setOccludesParent(true);
        backNavigationInfo.onBackNavigationFinished(false);
        mBackNavigationController.clearBackAnimations();
        makeWindowVisibleAndDrawn(topActivity.findMainWindow());
        setupKeyguardOccluded();
        backNavigationInfo = startBackNavigation();
        assertThat(typeToString(backNavigationInfo.getType()))
@@ -201,9 +211,7 @@ public class BackNavigationControllerTests extends WindowTestsBase {
        // reset drawing status
        backNavigationInfo.onBackNavigationFinished(false);
        mBackNavigationController.clearBackAnimations();
        testCase.recordFront.forAllWindows(w -> {
            makeWindowVisibleAndDrawn(w);
        }, true);
        makeWindowVisibleAndDrawn(testCase.recordFront.findMainWindow());
        setupKeyguardOccluded();
        backNavigationInfo = startBackNavigation();
        assertThat(typeToString(backNavigationInfo.getType()))