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

Commit ed39dcb0 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Compare undefined fields of Configuration in ResourcesKey

By default diffPublicOnly doesn't compare undefined, that will
cause an empty config to match any other non empty config.

Also correct the object to compare.

Bug: 413273054
Flag: android.content.res.ignore_non_public_config_diff_for_resources_key
Test: atest FrameworksCoreTests:ResourcesManagerTest# \
      testNonPublicDiffOverrideConfigShareImpl
Change-Id: I23cc94da673326343f30fbb0e4865d500c4afec2
parent 7a299db3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -167,7 +167,8 @@ public final class ResourcesKey {
        }
        if (android.content.res.Flags.ignoreNonPublicConfigDiffForResourcesKey()) {
            // Do not compare the configuration fields that won't affect resources.
            if (mOverrideConfiguration.diffPublicOnly(mOverrideConfiguration) != 0) {
            if (mOverrideConfiguration.diff(peer.mOverrideConfiguration,
                    true /* compareUndefined */, true /* publicOnly */) != 0) {
                return false;
            }
        } else if (!Objects.equals(mOverrideConfiguration, peer.mOverrideConfiguration)) {
+10 −0
Original line number Diff line number Diff line
@@ -378,6 +378,7 @@ public class ResourcesManagerTest {
    @RequiresFlagsEnabled(Flags.FLAG_IGNORE_NON_PUBLIC_CONFIG_DIFF_FOR_RESOURCES_KEY)
    public void testNonPublicDiffOverrideConfigShareImpl() {
        final Configuration overrideConfig1 = new Configuration();
        overrideConfig1.densityDpi = 100;
        overrideConfig1.windowConfiguration.setAppBounds(0, 0, 500, 1000);
        final Resources resources1 = mResourcesManager.getResources(
                null, APP_ONE_RES_DIR, null, null, null, null, null, overrideConfig1,
@@ -390,9 +391,18 @@ public class ResourcesManagerTest {
                null, APP_ONE_RES_DIR, null, null, null, null, null, overrideConfig2,
                CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null, null);

        // Verify that ResourcesKey distinguishes undefined fields.
        final Configuration emptyConfig = new Configuration();
        final Resources resources3 = mResourcesManager.getResources(
                null, APP_ONE_RES_DIR, null, null, null, null, null, emptyConfig,
                CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null, null);

        assertNotNull(resources1);
        assertNotNull(resources2);
        assertNotNull(emptyConfig);
        assertSame(resources1.getImpl(), resources2.getImpl());
        assertNotSame(resources3.getImpl(), resources1.getImpl());
        assertNotSame(resources3.getImpl(), resources2.getImpl());
    }

    @Test