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

Commit 18184eac authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Support regular expression for condition pattern

Bug: 8556975
Change-Id: Iffc53d6a40dd77860434c5f7f4f59af5cd1ba92b
parent ec83457d
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -103,12 +103,12 @@ public final class ResourceUtils {
    /**
     * Find the condition that fulfills specified key value pairs from an array of
     * "condition,constant", and return the corresponding string constant. A condition is
     * "pattern1[:pattern2...] (or an empty string for the default). A pattern is "key=value"
     * string. The condition matches only if all patterns of the condition are true for the
     * specified key value pairs.
     * "pattern1[:pattern2...] (or an empty string for the default). A pattern is
     * "key=regexp_value" string. The condition matches only if all patterns of the condition
     * are true for the specified key value pairs.
     *
     * For example, "condition,constant" has the following format.
     * (See {@link ResourceUtilsTests#testFindConstantForKeyValuePairsCombined()})
     * (See {@link ResourceUtilsTests#testFindConstantForKeyValuePairsRegexp()})
     *  - HARDWARE=mako,constantForNexus4
     *  - MODEL=Nexus 4:MANUFACTURER=LGE,constantForNexus4
     *  - ,defaultConstant
@@ -156,8 +156,8 @@ public final class ResourceUtils {
            if (value == null) {
                throw new RuntimeException("Found unknown key: " + condition);
            }
            final String patternValue = pattern.substring(posEqual + 1);
            if (!value.equals(patternValue)) {
            final String patternRegexpValue = pattern.substring(posEqual + 1);
            if (!value.matches(patternRegexpValue)) {
                return false;
            }
        }
+36 −0
Original line number Diff line number Diff line
@@ -137,4 +137,40 @@ public class ResourceUtilsTests extends AndroidTestCase {
        assertNull(ResourceUtils.findConstantForKeyValuePairs(keyValues, array));
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, failArray), "0.2");
    }

    public void testFindConstantForKeyValuePairsRegexp() {
        final String HARDWARE_KEY = "HARDWARE";
        final String MODEL_KEY = "MODEL";
        final String MANUFACTURER_KEY = "MANUFACTURER";
        final String[] array = {
            ",defaultValue",
            "HARDWARE=grouper|tilapia:MANUFACTURER=asus,0.3",
            "HARDWARE=[mM][aA][kK][oO]:MODEL=Nexus 4,0.4",
            "HARDWARE=manta.*:MODEL=Nexus 10:MANUFACTURER=samsung,0.2"
        };

        final HashMap<String,String> keyValues = CollectionUtils.newHashMap();
        keyValues.put(HARDWARE_KEY, "grouper");
        keyValues.put(MODEL_KEY, "Nexus 7");
        keyValues.put(MANUFACTURER_KEY, "asus");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.3");
        keyValues.put(HARDWARE_KEY, "tilapia");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.3");

        keyValues.clear();
        keyValues.put(HARDWARE_KEY, "mako");
        keyValues.put(MODEL_KEY, "Nexus 4");
        keyValues.put(MANUFACTURER_KEY, "LGE");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.4");
        keyValues.put(HARDWARE_KEY, "MAKO");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.4");

        keyValues.clear();
        keyValues.put(HARDWARE_KEY, "manta");
        keyValues.put(MODEL_KEY, "Nexus 10");
        keyValues.put(MANUFACTURER_KEY, "samsung");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.2");
        keyValues.put(HARDWARE_KEY, "mantaray");
        assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.2");
    }
}