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

Commit 7d970c6f authored by wilsonshih's avatar wilsonshih Committed by Wei Sheng Shih
Browse files

Re-order preferred starting window type.

Prioritize the snapshot starting window than allDrawn condition, so
there should show snapshot on phone when unlock keyguard or do quick
switch.
There should not affect low-ram device such as wear since there may
not capture snapshot, so there should still show splash screen starting
window for haven't drawn condition.
Also correct one of the shouldUseEmptySplashScreen condition that
launchedFromSystemSurface should only allowed when starting activity.

Test: Start app, go to lockscreen and unlock, verify there should choose
snapshot starting window.
Test: atest ActivityRecordTests SplashscreenTests
Bug: 176837715

Change-Id: I9112f93da35526f578df805dd5f126236c520d6a
parent 6773eb32
Loading
Loading
Loading
Loading
+20 −13
Original line number Diff line number Diff line
@@ -75,17 +75,13 @@ public class PhoneStartingWindowTypeAlgorithm implements StartingWindowTypeAlgor
        }

        if (!topIsHome) {
            if (!processRunning
                    || newTask
                    || (taskSwitch && (!activityCreated || !activityDrawn))) {
                return useEmptySplashScreen
                        ? STARTING_WINDOW_TYPE_EMPTY_SPLASH_SCREEN
                        : legacySplashScreen
                                ? STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN
                                : STARTING_WINDOW_TYPE_SPLASH_SCREEN;
            if (!processRunning || newTask || (taskSwitch && !activityCreated)) {
                return getSplashscreenType(useEmptySplashScreen, legacySplashScreen);
            }
        }
        if (taskSwitch && allowTaskSnapshot) {

        if (taskSwitch) {
            if (allowTaskSnapshot) {
                if (isSnapshotCompatible(windowInfo)) {
                    return STARTING_WINDOW_TYPE_SNAPSHOT;
                }
@@ -93,9 +89,20 @@ public class PhoneStartingWindowTypeAlgorithm implements StartingWindowTypeAlgor
                    return STARTING_WINDOW_TYPE_EMPTY_SPLASH_SCREEN;
                }
            }
            if (!activityDrawn && !topIsHome) {
                return getSplashscreenType(useEmptySplashScreen, legacySplashScreen);
            }
        }
        return STARTING_WINDOW_TYPE_NONE;
    }

    private static int getSplashscreenType(boolean emptySplashScreen, boolean legacySplashScreen) {
        return emptySplashScreen
                ? STARTING_WINDOW_TYPE_EMPTY_SPLASH_SCREEN
                : legacySplashScreen
                        ? STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN
                        : STARTING_WINDOW_TYPE_SPLASH_SCREEN;
    }

    /**
     * Returns {@code true} if the task snapshot is compatible with this activity (at least the
+18 −16
Original line number Diff line number Diff line
@@ -2131,21 +2131,26 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    private int getStartingWindowType(boolean newTask, boolean taskSwitch, boolean processRunning,
            boolean allowTaskSnapshot, boolean activityCreated, boolean activityAllDrawn,
            TaskSnapshot snapshot) {
        if ((newTask || !processRunning || (taskSwitch && !activityCreated)
                || (taskSwitch && !activityAllDrawn)) && !isActivityTypeHome()) {
        final boolean isActivityHome = isActivityTypeHome();
        if ((newTask || !processRunning || (taskSwitch && !activityCreated))
                && !isActivityHome) {
            return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
        } else if (taskSwitch && allowTaskSnapshot) {
        }
        if (taskSwitch) {
            if (allowTaskSnapshot) {
                if (isSnapshotCompatible(snapshot)) {
                    return STARTING_WINDOW_TYPE_SNAPSHOT;
                }
            if (!isActivityTypeHome()) {
                if (!isActivityHome) {
                    return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
                }
            return STARTING_WINDOW_TYPE_NONE;
        } else {
            return STARTING_WINDOW_TYPE_NONE;
            }
            if (!activityAllDrawn && !isActivityHome) {
                return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
            }
        }
        return STARTING_WINDOW_TYPE_NONE;
    }

    /**
     * Returns {@code true} if the task snapshot is compatible with this activity (at least the
@@ -6433,14 +6438,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return sourceRecord.mSplashScreenStyleEmpty;
        }

        // If this activity was launched from a system surface, never use an empty splash screen
        // Need to check sourceRecord before in case this activity is launched from service.
        if (launchedFromSystemSurface()) {
            return false;
        }

        // If this activity was launched from a system surface for first start, never use an empty
        // splash screen. Need to check sourceRecord before in case this activity is launched from
        // service.
        // Otherwise use empty.
        return true;
        return !startActivity || !launchedFromSystemSurface();
    }

    private int getSplashscreenTheme() {