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
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user