diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 189fff865ea0e..9fa68e959810e 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -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, () -> { diff --git a/services/core/java/com/android/server/wm/SplashScreenExceptionList.java b/services/core/java/com/android/server/wm/SplashScreenExceptionList.java index 9ca49fe9557e5..b3cd3f0df97ec 100644 --- a/services/core/java/com/android/server/wm/SplashScreenExceptionList.java +++ b/services/core/java/com/android/server/wm/SplashScreenExceptionList.java @@ -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 infoSupplier) { - if (targetSdk >= Build.VERSION_CODES.S) { + if (targetSdk > Build.VERSION_CODES.TIRAMISU) { return false; } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index a34896a419edd..12e5653949262 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -2630,7 +2630,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); diff --git a/services/tests/wmtests/src/com/android/server/wm/SplashScreenExceptionListTest.java b/services/tests/wmtests/src/com/android/server/wm/SplashScreenExceptionListTest.java index f5d915dee2574..8425844d8042a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SplashScreenExceptionListTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/SplashScreenExceptionListTest.java @@ -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)); } }