Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -1747,6 +1747,7 @@ package android { field public static final int windowSplashScreenAnimatedIcon = 16844333; // 0x101062d field public static final int windowSplashScreenAnimationDuration = 16844334; // 0x101062e field public static final int windowSplashScreenBackground = 16844332; // 0x101062c field public static final int windowSplashScreenBehavior; field public static final int windowSplashScreenBrandingImage = 16844335; // 0x101062f field public static final int windowSplashScreenIconBackgroundColor = 16844336; // 0x1010630 field @Deprecated public static final int windowSplashscreenContent = 16844132; // 0x1010564 core/res/res/values/attrs.xml +11 −0 Original line number Diff line number Diff line Loading @@ -2332,6 +2332,17 @@ contrast between the window background and the icon. Note the shape would also be masking like an icon. --> <attr name="windowSplashScreenIconBackgroundColor" format="color"/> <!-- Specify whether this application always wants the icon to be displayed on the splash screen. --> <attr name="windowSplashScreenBehavior"> <!-- The icon is shown when the launching activity sets the splashScreenStyle to SPLASH_SCREEN_STYLE_ICON. If the launching activity does not specify any style, follow the system behavior. --> <enum name="default" value="0" /> <!-- The icon is shown unless the launching app specified SPLASH_SCREEN_STYLE_EMPTY --> <enum name="icon_preferred" value="1" /> </attr> </declare-styleable> <!-- The set of attributes that describe a AlertDialog's theme. --> Loading core/res/res/values/public.xml +1 −0 Original line number Diff line number Diff line Loading @@ -3275,6 +3275,7 @@ <public name="toExtendRight" /> <public name="toExtendBottom" /> <public name="tileService" /> <public name="windowSplashScreenBehavior" /> </staging-public-group> <staging-public-group type="id" first-id="0x01de0000"> Loading services/core/java/com/android/server/wm/ActivityRecord.java +46 −5 Original line number Diff line number Diff line Loading @@ -811,6 +811,27 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // How long we wait until giving up transfer splash screen. private static final int TRANSFER_SPLASH_SCREEN_TIMEOUT = 2000; /** * The icon is shown when the launching activity sets the splashScreenStyle to * SPLASH_SCREEN_STYLE_ICON. If the launching activity does not specify any style, * follow the system behavior. * * @see android.R.attr#windowSplashScreenBehavior */ private static final int SPLASH_SCREEN_BEHAVIOR_DEFAULT = 0; /** * The icon is shown unless the launching app specified SPLASH_SCREEN_STYLE_EMPTY. * * @see android.R.attr#windowSplashScreenBehavior */ private static final int SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED = 1; @IntDef(prefix = {"SPLASH_SCREEN_BEHAVIOR_"}, value = { SPLASH_SCREEN_BEHAVIOR_DEFAULT, SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED }) @interface SplashScreenBehavior { } // TODO: Have a WindowContainer state for tracking exiting/deferred removal. boolean mIsExiting; // Force an app transition to be ran in the case the visibility of the app did not change. Loading Loading @@ -6594,8 +6615,23 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return null; } private boolean isIconStylePreferred(int theme) { if (theme == 0) { return false; } final AttributeCache.Entry ent = AttributeCache.instance().get(packageName, theme, R.styleable.Window, mWmService.mCurrentUserId); if (ent != null) { if (ent.array.hasValue(R.styleable.Window_windowSplashScreenBehavior)) { return ent.array.getInt(R.styleable.Window_windowSplashScreenBehavior, SPLASH_SCREEN_BEHAVIOR_DEFAULT) == SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED; } } return false; } private boolean shouldUseEmptySplashScreen(ActivityRecord sourceRecord, boolean startActivity, ActivityOptions options) { ActivityOptions options, int resolvedTheme) { if (sourceRecord == null && !startActivity) { // Use empty style if this activity is not top activity. This could happen when adding // a splash screen window to the warm start activity which is re-create because top is Loading @@ -6605,11 +6641,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return true; } } // setSplashScreenStyle decide in priority of windowSplashScreenBehavior. if (options != null) { final int optionsStyle = options.getSplashScreenStyle(); if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_EMPTY) { return true; } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON) { } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON || isIconStylePreferred(resolvedTheme)) { return false; } // Choose the default behavior for Launcher and SystemUI when the SplashScreen style is Loading @@ -6619,6 +6658,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEMUI) { return true; } } else if (isIconStylePreferred(resolvedTheme)) { return false; } if (sourceRecord == null) { sourceRecord = searchCandidateLaunchingActivity(); Loading Loading @@ -6691,13 +6732,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } mSplashScreenStyleEmpty = shouldUseEmptySplashScreen( sourceRecord, startActivity, startOptions); final int splashScreenTheme = startActivity ? getSplashscreenTheme(startOptions) : 0; final int resolvedTheme = evaluateStartingWindowTheme(prev, packageName, theme, splashScreenTheme); mSplashScreenStyleEmpty = shouldUseEmptySplashScreen(sourceRecord, startActivity, startOptions, resolvedTheme); final boolean activityCreated = mState.ordinal() >= STARTED.ordinal() && mState.ordinal() <= STOPPED.ordinal(); // If this activity is just created and all activities below are finish, treat this Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -1747,6 +1747,7 @@ package android { field public static final int windowSplashScreenAnimatedIcon = 16844333; // 0x101062d field public static final int windowSplashScreenAnimationDuration = 16844334; // 0x101062e field public static final int windowSplashScreenBackground = 16844332; // 0x101062c field public static final int windowSplashScreenBehavior; field public static final int windowSplashScreenBrandingImage = 16844335; // 0x101062f field public static final int windowSplashScreenIconBackgroundColor = 16844336; // 0x1010630 field @Deprecated public static final int windowSplashscreenContent = 16844132; // 0x1010564
core/res/res/values/attrs.xml +11 −0 Original line number Diff line number Diff line Loading @@ -2332,6 +2332,17 @@ contrast between the window background and the icon. Note the shape would also be masking like an icon. --> <attr name="windowSplashScreenIconBackgroundColor" format="color"/> <!-- Specify whether this application always wants the icon to be displayed on the splash screen. --> <attr name="windowSplashScreenBehavior"> <!-- The icon is shown when the launching activity sets the splashScreenStyle to SPLASH_SCREEN_STYLE_ICON. If the launching activity does not specify any style, follow the system behavior. --> <enum name="default" value="0" /> <!-- The icon is shown unless the launching app specified SPLASH_SCREEN_STYLE_EMPTY --> <enum name="icon_preferred" value="1" /> </attr> </declare-styleable> <!-- The set of attributes that describe a AlertDialog's theme. --> Loading
core/res/res/values/public.xml +1 −0 Original line number Diff line number Diff line Loading @@ -3275,6 +3275,7 @@ <public name="toExtendRight" /> <public name="toExtendBottom" /> <public name="tileService" /> <public name="windowSplashScreenBehavior" /> </staging-public-group> <staging-public-group type="id" first-id="0x01de0000"> Loading
services/core/java/com/android/server/wm/ActivityRecord.java +46 −5 Original line number Diff line number Diff line Loading @@ -811,6 +811,27 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // How long we wait until giving up transfer splash screen. private static final int TRANSFER_SPLASH_SCREEN_TIMEOUT = 2000; /** * The icon is shown when the launching activity sets the splashScreenStyle to * SPLASH_SCREEN_STYLE_ICON. If the launching activity does not specify any style, * follow the system behavior. * * @see android.R.attr#windowSplashScreenBehavior */ private static final int SPLASH_SCREEN_BEHAVIOR_DEFAULT = 0; /** * The icon is shown unless the launching app specified SPLASH_SCREEN_STYLE_EMPTY. * * @see android.R.attr#windowSplashScreenBehavior */ private static final int SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED = 1; @IntDef(prefix = {"SPLASH_SCREEN_BEHAVIOR_"}, value = { SPLASH_SCREEN_BEHAVIOR_DEFAULT, SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED }) @interface SplashScreenBehavior { } // TODO: Have a WindowContainer state for tracking exiting/deferred removal. boolean mIsExiting; // Force an app transition to be ran in the case the visibility of the app did not change. Loading Loading @@ -6594,8 +6615,23 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return null; } private boolean isIconStylePreferred(int theme) { if (theme == 0) { return false; } final AttributeCache.Entry ent = AttributeCache.instance().get(packageName, theme, R.styleable.Window, mWmService.mCurrentUserId); if (ent != null) { if (ent.array.hasValue(R.styleable.Window_windowSplashScreenBehavior)) { return ent.array.getInt(R.styleable.Window_windowSplashScreenBehavior, SPLASH_SCREEN_BEHAVIOR_DEFAULT) == SPLASH_SCREEN_BEHAVIOR_ICON_PREFERRED; } } return false; } private boolean shouldUseEmptySplashScreen(ActivityRecord sourceRecord, boolean startActivity, ActivityOptions options) { ActivityOptions options, int resolvedTheme) { if (sourceRecord == null && !startActivity) { // Use empty style if this activity is not top activity. This could happen when adding // a splash screen window to the warm start activity which is re-create because top is Loading @@ -6605,11 +6641,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return true; } } // setSplashScreenStyle decide in priority of windowSplashScreenBehavior. if (options != null) { final int optionsStyle = options.getSplashScreenStyle(); if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_EMPTY) { return true; } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON) { } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON || isIconStylePreferred(resolvedTheme)) { return false; } // Choose the default behavior for Launcher and SystemUI when the SplashScreen style is Loading @@ -6619,6 +6658,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEMUI) { return true; } } else if (isIconStylePreferred(resolvedTheme)) { return false; } if (sourceRecord == null) { sourceRecord = searchCandidateLaunchingActivity(); Loading Loading @@ -6691,13 +6732,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } mSplashScreenStyleEmpty = shouldUseEmptySplashScreen( sourceRecord, startActivity, startOptions); final int splashScreenTheme = startActivity ? getSplashscreenTheme(startOptions) : 0; final int resolvedTheme = evaluateStartingWindowTheme(prev, packageName, theme, splashScreenTheme); mSplashScreenStyleEmpty = shouldUseEmptySplashScreen(sourceRecord, startActivity, startOptions, resolvedTheme); final boolean activityCreated = mState.ordinal() >= STARTED.ordinal() && mState.ordinal() <= STOPPED.ordinal(); // If this activity is just created and all activities below are finish, treat this Loading