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

Commit a19270f2 authored by wilsonshih's avatar wilsonshih
Browse files

Provide default splash screen style for Launcher and SystemUI.

Previous the splash screen style can either be EMPTY or ICON, and need
to be set by new hidden API #setSplashscreenStyle, so the flag will
always be "EMPTY" for those 3rd party Launcher Apps which may have not
upgrade to targetSDK 31.
To correct the default behaivor for Launcher Apps, create a new
UNDEFINED style as default value for splashScreenStyle, and if the
value is UNDEFINED, determine the style by checking the launch source.

Test: Verify no change when default home is NexusLauncher.
Test: Set 3rd-party Launcher as default home, verify the splash screen
style should be ICON style when launch app from Launcher.
Test: atest SplashscreenTests
Bug: 206746601

Change-Id: I105e2fcfc7a6ee8de7f442931cbeb4b6e517850d
parent 544739c6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -431,7 +431,7 @@ public class ActivityOptions extends ComponentOptions {
    private boolean mOverrideTaskTransition;
    private String mSplashScreenThemeResName;
    @SplashScreen.SplashScreenStyle
    private int mSplashScreenStyle;
    private int mSplashScreenStyle = SplashScreen.SPLASH_SCREEN_STYLE_UNDEFINED;
    private boolean mRemoveWithTaskOrganizer;
    private boolean mLaunchedFromBubble;
    private boolean mTransientLaunch;
+6 −0
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@ import java.util.ArrayList;
 * <code>Activity.getSplashScreen()</code> to get the SplashScreen.</p>
 */
public interface SplashScreen {
    /**
     * The splash screen style is not defined.
     * @hide
     */
    int SPLASH_SCREEN_STYLE_UNDEFINED = -1;
    /**
     * Force splash screen to be empty.
     * @hide
@@ -55,6 +60,7 @@ public interface SplashScreen {

    /** @hide */
    @IntDef(prefix = { "SPLASH_SCREEN_STYLE_" }, value = {
            SPLASH_SCREEN_STYLE_UNDEFINED,
            SPLASH_SCREEN_STYLE_EMPTY,
            SPLASH_SCREEN_STYLE_ICON
    })
+12 −5
Original line number Diff line number Diff line
@@ -6432,6 +6432,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON) {
                return false;
            }
            // Choose the default behavior for Launcher and SystemUI when the SplashScreen style is
            // not specified in the ActivityOptions.
            if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME) {
                return false;
            } else if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEMUI) {
                return true;
            }
        }
        if (sourceRecord == null) {
            sourceRecord = searchCandidateLaunchingActivity();
@@ -6441,11 +6448,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return sourceRecord.mSplashScreenStyleEmpty;
        }

        // 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 !startActivity || !launchedFromSystemSurface();
        // If this activity was launched from Launcher or System for first start, never use an
        // empty splash screen.
        // Need to check sourceRecord before in case this activity is launched from service.
        return !startActivity || !(mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEM
                || mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME);
    }

    private int getSplashscreenTheme() {