Loading packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +3 −3 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import static android.provider.settings.validators.SettingsValidators.COMMA_SEPA import static android.provider.settings.validators.SettingsValidators.COMPONENT_NAME_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.CREDENTIAL_SERVICE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.JSON_OBJECT_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.LOCALE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.LOCALE_LOOSE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NONE_NEGATIVE_LONG_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR; Loading Loading @@ -96,7 +96,7 @@ public class SecureSettingsValidators { Secure.ACCESSIBILITY_CAPTIONING_PRESET, new DiscreteValueValidator(new String[] {"-1", "0", "1", "2", "3", "4"})); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_LOCALE, LOCALE_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_LOCALE, LOCALE_LOOSE_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put( Loading @@ -109,7 +109,7 @@ public class SecureSettingsValidators { new String[] {"DEFAULT", "MONOSPACE", "SANS_SERIF", "SERIF"})); VALIDATORS.put( Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE, new InclusiveFloatRangeValidator(0.5f, 2.0f)); new InclusiveFloatRangeValidator(0.25f, 2.0f)); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.FONT_WEIGHT_ADJUSTMENT, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.REDUCE_BRIGHT_COLORS_LEVEL, PERCENTAGE_INTEGER_VALIDATOR); Loading packages/SettingsProvider/src/android/provider/settings/validators/SettingsValidators.java +32 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,38 @@ public class SettingsValidators { } }; /** * Similar to {@link #LOCALE_VALIDATOR} but allows loose/subset matches against the list * from {@link Locale#getAvailableLocales()}. * * <p>Expects that the string is '_'-separated with 1 to 3 parts. Then checks the parts against * the locale list, returning true if any available locale matches the parts provided using * case insensitive string comparison. * <li>Part 1: match against {@link Locale#getLanguage()}</li> * <li>Part 2, if present: match against {@link Locale#getCountry()}</li> * <li>Part 3, if present: match against {@link Locale#getVariant()}</li> */ public static final Validator LOCALE_LOOSE_VALIDATOR = value -> { if (value == null) { return true; } String[] parts = value.split("_", 3); Locale[] validLocales = Locale.getAvailableLocales(); for (Locale locale : validLocales) { if (!parts[0].equalsIgnoreCase(locale.getLanguage())) { continue; } if (parts.length >= 2 && !parts[1].equalsIgnoreCase(locale.getCountry())) { continue; } if (parts.length == 3 && !parts[2].equalsIgnoreCase(locale.getVariant())) { continue; } return true; } return false; }; /** {@link Validator} that checks whether a value is a valid {@link JSONObject}. */ public static final Validator JSON_OBJECT_VALIDATOR = (value) -> { if (value == null) { Loading packages/SettingsProvider/test/src/android/provider/settings/validators/SettingsValidatorsTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,19 @@ public class SettingsValidatorsTest { assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate(null)); } @Test public void testLocaleLooseValidator() { assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate(null)); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_us")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("es")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("zh_TW")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US_POSIX")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_FAKE")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US_FAKE")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("rectangle")); } @Test public void testPackageNameValidator() { assertTrue(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate( Loading Loading
packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +3 −3 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import static android.provider.settings.validators.SettingsValidators.COMMA_SEPA import static android.provider.settings.validators.SettingsValidators.COMPONENT_NAME_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.CREDENTIAL_SERVICE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.JSON_OBJECT_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.LOCALE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.LOCALE_LOOSE_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NONE_NEGATIVE_LONG_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR; import static android.provider.settings.validators.SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR; Loading Loading @@ -96,7 +96,7 @@ public class SecureSettingsValidators { Secure.ACCESSIBILITY_CAPTIONING_PRESET, new DiscreteValueValidator(new String[] {"-1", "0", "1", "2", "3", "4"})); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_LOCALE, LOCALE_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_LOCALE, LOCALE_LOOSE_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put( Loading @@ -109,7 +109,7 @@ public class SecureSettingsValidators { new String[] {"DEFAULT", "MONOSPACE", "SANS_SERIF", "SERIF"})); VALIDATORS.put( Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE, new InclusiveFloatRangeValidator(0.5f, 2.0f)); new InclusiveFloatRangeValidator(0.25f, 2.0f)); VALIDATORS.put(Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.FONT_WEIGHT_ADJUSTMENT, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Secure.REDUCE_BRIGHT_COLORS_LEVEL, PERCENTAGE_INTEGER_VALIDATOR); Loading
packages/SettingsProvider/src/android/provider/settings/validators/SettingsValidators.java +32 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,38 @@ public class SettingsValidators { } }; /** * Similar to {@link #LOCALE_VALIDATOR} but allows loose/subset matches against the list * from {@link Locale#getAvailableLocales()}. * * <p>Expects that the string is '_'-separated with 1 to 3 parts. Then checks the parts against * the locale list, returning true if any available locale matches the parts provided using * case insensitive string comparison. * <li>Part 1: match against {@link Locale#getLanguage()}</li> * <li>Part 2, if present: match against {@link Locale#getCountry()}</li> * <li>Part 3, if present: match against {@link Locale#getVariant()}</li> */ public static final Validator LOCALE_LOOSE_VALIDATOR = value -> { if (value == null) { return true; } String[] parts = value.split("_", 3); Locale[] validLocales = Locale.getAvailableLocales(); for (Locale locale : validLocales) { if (!parts[0].equalsIgnoreCase(locale.getLanguage())) { continue; } if (parts.length >= 2 && !parts[1].equalsIgnoreCase(locale.getCountry())) { continue; } if (parts.length == 3 && !parts[2].equalsIgnoreCase(locale.getVariant())) { continue; } return true; } return false; }; /** {@link Validator} that checks whether a value is a valid {@link JSONObject}. */ public static final Validator JSON_OBJECT_VALIDATOR = (value) -> { if (value == null) { Loading
packages/SettingsProvider/test/src/android/provider/settings/validators/SettingsValidatorsTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,19 @@ public class SettingsValidatorsTest { assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate(null)); } @Test public void testLocaleLooseValidator() { assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate(null)); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_us")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("es")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("zh_TW")); assertTrue(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US_POSIX")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_FAKE")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("en_US_FAKE")); assertFalse(SettingsValidators.LOCALE_LOOSE_VALIDATOR.validate("rectangle")); } @Test public void testPackageNameValidator() { assertTrue(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate( Loading