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

Commit 3788b906 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Do not prepare PB animation if previous activity has no process." into main

parents 76c26c13 fcb47c92
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -281,6 +281,10 @@ class BackNavigationController {
            } else if (hasTranslucentActivity(currentActivity, prevActivities)) {
                // skip if one of participant activity is translucent
                backType = BackNavigationInfo.TYPE_CALLBACK;
            } else if (!allActivitiesHaveProcesses(prevActivities)) {
                // Skip if one of previous activity has no process. Restart process can be slow, and
                // the final hierarchy could be different.
                backType = BackNavigationInfo.TYPE_CALLBACK;
            } else if (prevActivities.size() > 0
                    && requestOverride == SystemOverrideOnBackInvokedCallback.OVERRIDE_UNDEFINED) {
                if ((!isOccluded || isAllActivitiesCanShowWhenLocked(prevActivities))
@@ -603,6 +607,17 @@ class BackNavigationController {
        return false;
    }

    private static boolean allActivitiesHaveProcesses(
            @NonNull ArrayList<ActivityRecord> prevActivities) {
        for (int i = prevActivities.size() - 1; i >= 0; --i) {
            final ActivityRecord test = prevActivities.get(i);
            if (!test.hasProcess()) {
                return false;
            }
        }
        return true;
    }

    private static boolean isAllActivitiesCanShowWhenLocked(
            @NonNull ArrayList<ActivityRecord> prevActivities) {
        for (int i = prevActivities.size() - 1; i >= 0; --i) {
+8 −0
Original line number Diff line number Diff line
@@ -294,6 +294,14 @@ public class BackNavigationControllerTests extends WindowTestsBase {
        backNavigationInfo = startBackNavigation();
        assertThat(typeToString(backNavigationInfo.getType()))
                .isEqualTo(typeToString(BackNavigationInfo.TYPE_CROSS_ACTIVITY));

        // reset drawing status, test previous activity has no process.
        backNavigationInfo.onBackNavigationFinished(false);
        mBackNavigationController.clearBackAnimations(true);
        doReturn(false).when(testCase.recordBack).hasProcess();
        backNavigationInfo = startBackNavigation();
        assertThat(typeToString(backNavigationInfo.getType()))
                .isEqualTo(typeToString(BackNavigationInfo.TYPE_CALLBACK));
    }

    @Test