Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a299afe authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Automerger Merge Worker
Browse files

Merge "Extend splash screen exception list to T" into tm-dev am: a92124a4 am: 320dc641

parents b10e6d3e 320dc641
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2319,7 +2319,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        final int type = getStartingWindowType(newTask, taskSwitch, processRunning,
        final int type = getStartingWindowType(newTask, taskSwitch, processRunning,
                allowTaskSnapshot, activityCreated, activityAllDrawn, snapshot);
                allowTaskSnapshot, activityCreated, activityAllDrawn, snapshot);


        //TODO(191787740) Remove for T
        //TODO(191787740) Remove for T+
        final boolean useLegacy = type == STARTING_WINDOW_TYPE_SPLASH_SCREEN
        final boolean useLegacy = type == STARTING_WINDOW_TYPE_SPLASH_SCREEN
                && mWmService.mStartingSurfaceController.isExceptionApp(packageName, mTargetSdk,
                && mWmService.mStartingSurfaceController.isExceptionApp(packageName, mTargetSdk,
                    () -> {
                    () -> {
+2 −2
Original line number Original line Diff line number Diff line
@@ -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 packageName  The package name of the application to check
     * @param targetSdk    The target sdk of the application
     * @param targetSdk    The target sdk of the application
@@ -82,7 +82,7 @@ class SplashScreenExceptionList {
    @SuppressWarnings("AndroidFrameworkCompatChange") // Target sdk check
    @SuppressWarnings("AndroidFrameworkCompatChange") // Target sdk check
    public boolean isException(@NonNull String packageName, int targetSdk,
    public boolean isException(@NonNull String packageName, int targetSdk,
            @Nullable Supplier<ApplicationInfo> infoSupplier) {
            @Nullable Supplier<ApplicationInfo> infoSupplier) {
        if (targetSdk >= Build.VERSION_CODES.S) {
        if (targetSdk > Build.VERSION_CODES.TIRAMISU) {
            return false;
            return false;
        }
        }


+5 −1
Original line number Original line Diff line number Diff line
@@ -2633,7 +2633,11 @@ public class ActivityRecordTests extends WindowTestsBase {
            DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
            DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
                    "splash_screen_exception_list", DEFAULT_COMPONENT_PACKAGE_NAME, false);
                    "splash_screen_exception_list", DEFAULT_COMPONENT_PACKAGE_NAME, false);
            testLegacySplashScreen(Build.VERSION_CODES.R, TYPE_PARAMETER_LEGACY_SPLASH_SCREEN);
            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 {
        } finally {
            try {
            try {
                DeviceConfig.setProperties(properties);
                DeviceConfig.setProperties(properties);
+53 −33
Original line number Original line Diff line number Diff line
@@ -90,30 +90,19 @@ public class SplashScreenExceptionListTest {
    public void packageFromDeviceConfigIgnored() {
    public void packageFromDeviceConfigIgnored() {
        setExceptionListAndWaitForCallback("com.test.nosplashscreen1,com.test.nosplashscreen2");
        setExceptionListAndWaitForCallback("com.test.nosplashscreen1,com.test.nosplashscreen2");


        assertIsException("com.test.nosplashscreen1", null);
        // In list, up to T included
        assertIsException("com.test.nosplashscreen2", null);
        assertIsException("com.test.nosplashscreen1", VERSION_CODES.R);

        assertIsException("com.test.nosplashscreen1", VERSION_CODES.S);
        assertIsNotException("com.test.nosplashscreen1", VERSION_CODES.S, null);
        assertIsException("com.test.nosplashscreen1", VERSION_CODES.TIRAMISU);
        assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.S, null);

        assertIsNotException("com.test.splashscreen", VERSION_CODES.S, null);
        // In list, after T
        assertIsNotException("com.test.splashscreen", VERSION_CODES.R, null);
        assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.TIRAMISU + 1);
    }
        assertIsNotException("com.test.nosplashscreen2", VERSION_CODES.CUR_DEVELOPMENT);


    private void setExceptionListAndWaitForCallback(String commaSeparatedList) {
        // Not in list, up to T included
        CountDownLatch latch = new CountDownLatch(1);
        assertIsNotException("com.test.splashscreen", VERSION_CODES.S);
        mOnUpdateDeviceConfig = rawList -> {
        assertIsNotException("com.test.splashscreen", VERSION_CODES.R);
            if (commaSeparatedList.equals(rawList)) {
        assertIsNotException("com.test.splashscreen", VERSION_CODES.TIRAMISU);
                latch.countDown();
            }
        };
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
                KEY_SPLASH_SCREEN_EXCEPTION_LIST, commaSeparatedList, false);
        try {
            assertTrue("Timed out waiting for DeviceConfig to be updated.",
                    latch.await(1, TimeUnit.SECONDS));
        } catch (InterruptedException e) {
            Assert.fail(e.getMessage());
        }
    }
    }


    @Test
    @Test
@@ -129,16 +118,43 @@ public class SplashScreenExceptionListTest {
        metaData.putBoolean("android.splashscreen.exception_opt_out", true);
        metaData.putBoolean("android.splashscreen.exception_opt_out", true);
        assertIsNotException(packageName, VERSION_CODES.R, activityInfo);
        assertIsNotException(packageName, VERSION_CODES.R, activityInfo);
        assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
        assertIsNotException(packageName, VERSION_CODES.S, activityInfo);
        assertIsNotException(packageName, VERSION_CODES.TIRAMISU, activityInfo);


        // Exception Pre S
        // Exception up to T
        metaData.putBoolean("android.splashscreen.exception_opt_out", false);
        metaData.putBoolean("android.splashscreen.exception_opt_out", false);
        assertIsException(packageName, activityInfo);
        assertIsException(packageName, VERSION_CODES.R, activityInfo);
        assertIsNotException(packageName, VERSION_CODES.S, 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
        // Edge Cases
        activityInfo.metaData = null;
        activityInfo.metaData = null;
        assertIsException(packageName, activityInfo);
        assertIsException(packageName, VERSION_CODES.R, activityInfo);
        assertIsException(packageName, null);
        assertIsException(packageName, VERSION_CODES.R);
    }

    private void setExceptionListAndWaitForCallback(String commaSeparatedList) {
        CountDownLatch latch = new CountDownLatch(1);
        mOnUpdateDeviceConfig = rawList -> {
            if (commaSeparatedList.equals(rawList)) {
                latch.countDown();
            }
        };
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
                KEY_SPLASH_SCREEN_EXCEPTION_LIST, commaSeparatedList, false);
        try {
            assertTrue("Timed out waiting for DeviceConfig to be updated.",
                    latch.await(1, TimeUnit.SECONDS));
        } catch (InterruptedException e) {
            Assert.fail(e.getMessage());
        }
    }

    private void assertIsNotException(String packageName, int targetSdk) {
        assertIsNotException(packageName, targetSdk, null);
    }
    }


    private void assertIsNotException(String packageName, int targetSdk,
    private void assertIsNotException(String packageName, int targetSdk,
@@ -148,10 +164,14 @@ public class SplashScreenExceptionListTest {
                mList.isException(packageName, targetSdk, () -> activityInfo));
                mList.isException(packageName, targetSdk, () -> activityInfo));
    }
    }


    private void assertIsException(String packageName, int targetSdk) {
        assertIsException(packageName, targetSdk, null);
    }

    private void assertIsException(String packageName,
    private void assertIsException(String packageName,
            ApplicationInfo activityInfo) {
            int targetSdk, ApplicationInfo activityInfo) {
        assertTrue(String.format("%s (sdk=%d) should have been considered as an exception",
        assertTrue(String.format("%s (sdk=%d) should have been considered as an exception",
                packageName, VERSION_CODES.R),
                        packageName, targetSdk),
                mList.isException(packageName, VERSION_CODES.R, () -> activityInfo));
                mList.isException(packageName, targetSdk, () -> activityInfo));
    }
    }
}
}