Merge "Extend splash screen exception list to T" into tm-dev am: a92124a41e am: e52fa61538
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18185289 Change-Id: I225c231984761aec42f08534297c76d56ad57996 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -2314,7 +2314,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
final int type = getStartingWindowType(newTask, taskSwitch, processRunning,
|
||||
allowTaskSnapshot, activityCreated, activityAllDrawn, snapshot);
|
||||
|
||||
//TODO(191787740) Remove for T
|
||||
//TODO(191787740) Remove for T+
|
||||
final boolean useLegacy = type == STARTING_WINDOW_TYPE_SPLASH_SCREEN
|
||||
&& mWmService.mStartingSurfaceController.isExceptionApp(packageName, mTargetSdk,
|
||||
() -> {
|
||||
|
||||
@@ -70,7 +70,7 @@ class SplashScreenExceptionList {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the packageName is in the list and the target sdk is before S.
|
||||
* Returns true if the packageName is in the list and the target sdk is before or including T.
|
||||
*
|
||||
* @param packageName The package name of the application to check
|
||||
* @param targetSdk The target sdk of the application
|
||||
@@ -82,7 +82,7 @@ class SplashScreenExceptionList {
|
||||
@SuppressWarnings("AndroidFrameworkCompatChange") // Target sdk check
|
||||
public boolean isException(@NonNull String packageName, int targetSdk,
|
||||
@Nullable Supplier<ApplicationInfo> infoSupplier) {
|
||||
if (targetSdk >= Build.VERSION_CODES.S) {
|
||||
if (targetSdk > Build.VERSION_CODES.TIRAMISU) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -2600,7 +2600,11 @@ public class ActivityRecordTests extends WindowTestsBase {
|
||||
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
|
||||
"splash_screen_exception_list", DEFAULT_COMPONENT_PACKAGE_NAME, false);
|
||||
testLegacySplashScreen(Build.VERSION_CODES.R, TYPE_PARAMETER_LEGACY_SPLASH_SCREEN);
|
||||
testLegacySplashScreen(Build.VERSION_CODES.S, 0);
|
||||
testLegacySplashScreen(Build.VERSION_CODES.S, TYPE_PARAMETER_LEGACY_SPLASH_SCREEN);
|
||||
testLegacySplashScreen(Build.VERSION_CODES.TIRAMISU,
|
||||
TYPE_PARAMETER_LEGACY_SPLASH_SCREEN);
|
||||
// Above T
|
||||
testLegacySplashScreen(Build.VERSION_CODES.TIRAMISU + 1, 0);
|
||||
} finally {
|
||||
try {
|
||||
DeviceConfig.setProperties(properties);
|
||||
|
||||
@@ -90,13 +90,50 @@ public class SplashScreenExceptionListTest {
|
||||
public void packageFromDeviceConfigIgnored() {
|
||||
setExceptionListAndWaitForCallback("com.test.nosplashscreen1,com.test.nosplashscreen2");
|
||||
|
||||
assertIsException("com.test.nosplashscreen1", null);
|
||||
assertIsException("com.test.nosplashscreen2", null);
|
||||
// In list, up to T included
|
||||
assertIsException("com.test.nosplashscreen1", VERSION_CODES.R);
|
||||
assertIsException("com.test.nosplashscreen1", VERSION_CODES.S);
|
||||
assertIsException("com.test.nosplashscreen1", VERSION_CODES.TIRAMISU);
|
||||
|
||||
assertIsNotException("com.test.nosplashscreen1", VERSION_CODES.S, null);
|
||||
assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.S, null);
|
||||
assertIsNotException("com.test.splashscreen", VERSION_CODES.S, null);
|
||||
assertIsNotException("com.test.splashscreen", VERSION_CODES.R, null);
|
||||
// In list, after T
|
||||
assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.TIRAMISU + 1);
|
||||
assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.CUR_DEVELOPMENT);
|
||||
|
||||
// Not in list, up to T included
|
||||
assertIsNotException("com.test.splashscreen", VERSION_CODES.S);
|
||||
assertIsNotException("com.test.splashscreen", VERSION_CODES.R);
|
||||
assertIsNotException("com.test.splashscreen", VERSION_CODES.TIRAMISU);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void metaDataOptOut() {
|
||||
String packageName = "com.test.nosplashscreen_opt_out";
|
||||
setExceptionListAndWaitForCallback(packageName);
|
||||
|
||||
Bundle metaData = new Bundle();
|
||||
ApplicationInfo activityInfo = new ApplicationInfo();
|
||||
activityInfo.metaData = metaData;
|
||||
|
||||
// No Exceptions
|
||||
metaData.putBoolean("android.splashscreen.exception_opt_out", true);
|
||||
assertIsNotException(packageName, VERSION_CODES.R, activityInfo);
|
||||
assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
|
||||
assertIsNotException(packageName, VERSION_CODES.TIRAMISU, activityInfo);
|
||||
|
||||
// Exception up to T
|
||||
metaData.putBoolean("android.splashscreen.exception_opt_out", false);
|
||||
assertIsException(packageName, VERSION_CODES.R, activityInfo);
|
||||
assertIsException(packageName, VERSION_CODES.S, activityInfo);
|
||||
assertIsException(packageName, VERSION_CODES.TIRAMISU, activityInfo);
|
||||
|
||||
// No Exception after T
|
||||
assertIsNotException(packageName, VERSION_CODES.TIRAMISU + 1, activityInfo);
|
||||
assertIsNotException(packageName, VERSION_CODES.CUR_DEVELOPMENT, activityInfo);
|
||||
|
||||
// Edge Cases
|
||||
activityInfo.metaData = null;
|
||||
assertIsException(packageName, VERSION_CODES.R, activityInfo);
|
||||
assertIsException(packageName, VERSION_CODES.R);
|
||||
}
|
||||
|
||||
private void setExceptionListAndWaitForCallback(String commaSeparatedList) {
|
||||
@@ -116,42 +153,25 @@ public class SplashScreenExceptionListTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void metaDataOptOut() {
|
||||
String packageName = "com.test.nosplashscreen_opt_out";
|
||||
setExceptionListAndWaitForCallback(packageName);
|
||||
|
||||
Bundle metaData = new Bundle();
|
||||
ApplicationInfo activityInfo = new ApplicationInfo();
|
||||
activityInfo.metaData = metaData;
|
||||
|
||||
// No Exceptions
|
||||
metaData.putBoolean("android.splashscreen.exception_opt_out", true);
|
||||
assertIsNotException(packageName, VERSION_CODES.R, activityInfo);
|
||||
assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
|
||||
|
||||
// Exception Pre S
|
||||
metaData.putBoolean("android.splashscreen.exception_opt_out", false);
|
||||
assertIsException(packageName, activityInfo);
|
||||
assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
|
||||
|
||||
// Edge Cases
|
||||
activityInfo.metaData = null;
|
||||
assertIsException(packageName, activityInfo);
|
||||
assertIsException(packageName, null);
|
||||
private void assertIsNotException(String packageName, int targetSdk) {
|
||||
assertIsNotException(packageName, targetSdk, null);
|
||||
}
|
||||
|
||||
private void assertIsNotException(String packageName, int targetSdk,
|
||||
ApplicationInfo activityInfo) {
|
||||
assertFalse(String.format("%s (sdk=%d) should have not been considered as an exception",
|
||||
packageName, targetSdk),
|
||||
packageName, targetSdk),
|
||||
mList.isException(packageName, targetSdk, () -> activityInfo));
|
||||
}
|
||||
|
||||
private void assertIsException(String packageName, int targetSdk) {
|
||||
assertIsException(packageName, targetSdk, null);
|
||||
}
|
||||
|
||||
private void assertIsException(String packageName,
|
||||
ApplicationInfo activityInfo) {
|
||||
int targetSdk, ApplicationInfo activityInfo) {
|
||||
assertTrue(String.format("%s (sdk=%d) should have been considered as an exception",
|
||||
packageName, VERSION_CODES.R),
|
||||
mList.isException(packageName, VERSION_CODES.R, () -> activityInfo));
|
||||
packageName, targetSdk),
|
||||
mList.isException(packageName, targetSdk, () -> activityInfo));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user