Extend splash screen exception list to SC-V2

Extend the support of the exception list for SC-V2 and apps targeting
S and SC-V2.

Test: atest ActivityRecordTests
Test: com.android.server.wm.SplashScreenExceptionListTest
Bug: 231708538
Merged-In: I5412e81f70cbc9aac3861d13d85e199e949bedc7
Change-Id: I70a2aa4684c1267fe98e0e2260c61042db9c2e36
This commit is contained in:
wilsonshih
2022-07-12 14:11:10 +08:00
parent 7ec1c694b5
commit e16beeffe3
3 changed files with 38 additions and 16 deletions

View File

@@ -81,7 +81,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.S_V2) {
return false;
}

View File

@@ -2528,7 +2528,9 @@ 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.S_V2, TYPE_PARAMETER_LEGACY_SPLASH_SCREEN);
testLegacySplashScreen(Build.VERSION_CODES.S_V2 + 1, 0);
} finally {
try {
DeviceConfig.setProperties(properties);

View File

@@ -80,13 +80,19 @@ 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 SC-V2 included
assertIsException("com.test.nosplashscreen1", VERSION_CODES.R);
assertIsException("com.test.nosplashscreen1", VERSION_CODES.S);
assertIsException("com.test.nosplashscreen1", VERSION_CODES.S_V2);
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 SC-V2
assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.S_V2 + 1);
assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.CUR_DEVELOPMENT);
// Not in list, up to SC-V2 included
assertIsNotException("com.test.splashscreen", VERSION_CODES.R);
assertIsNotException("com.test.splashscreen", VERSION_CODES.S);
assertIsNotException("com.test.splashscreen", VERSION_CODES.S_V2);
}
private void setExceptionListAndWaitForCallback(String commaSeparatedList) {
@@ -123,16 +129,26 @@ public class SplashScreenExceptionListTest {
metaData.putBoolean("android.splashscreen.exception_opt_out", true);
assertIsNotException(packageName, VERSION_CODES.R, activityInfo);
assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
assertIsNotException(packageName, VERSION_CODES.S_V2, activityInfo);
// Exception Pre S
// Exception up to T
metaData.putBoolean("android.splashscreen.exception_opt_out", false);
assertIsException(packageName, activityInfo);
assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
assertIsException(packageName, VERSION_CODES.R, activityInfo);
assertIsException(packageName, VERSION_CODES.S, activityInfo);
assertIsException(packageName, VERSION_CODES.S_V2, activityInfo);
// No Exception after T
assertIsNotException(packageName, VERSION_CODES.S_V2 + 1, activityInfo);
assertIsNotException(packageName, VERSION_CODES.CUR_DEVELOPMENT, activityInfo);
// Edge Cases
activityInfo.metaData = null;
assertIsException(packageName, activityInfo);
assertIsException(packageName, null);
assertIsException(packageName, VERSION_CODES.R, activityInfo);
assertIsException(packageName, VERSION_CODES.R);
}
private void assertIsNotException(String packageName, int targetSdk) {
assertIsNotException(packageName, targetSdk, null);
}
private void assertIsNotException(String packageName, int targetSdk,
@@ -142,10 +158,14 @@ public class SplashScreenExceptionListTest {
mList.isException(packageName, targetSdk, () -> activityInfo));
}
private void assertIsException(String packageName,
private void assertIsException(String packageName, int targetSdk) {
assertIsException(packageName, targetSdk, null);
}
private void assertIsException(String packageName, 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));
}
}