diff options
author | Yvonne Wong <ywong@cyngn.com> | 2015-12-03 15:33:56 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2015-12-07 15:17:35 -0800 |
commit | fc97734c060268941d06f739866873d22aa84d7c (patch) | |
tree | f597f414e0b00aa50c183ce6402e2098f2de6a55 /src/java/cyanogenmod/providers/CMSettings.java | |
parent | 0fa8756f319ae34488f9079468d4b37768313d34 (diff) | |
download | vendor_cmsdk-fc97734c060268941d06f739866873d22aa84d7c.zip vendor_cmsdk-fc97734c060268941d06f739866873d22aa84d7c.tar.gz vendor_cmsdk-fc97734c060268941d06f739866873d22aa84d7c.tar.bz2 |
CMSettings: Add secure validators and relocate protected apps validator
Move validators from CMSettings.System into CMSettings,
add validators for CMSettings.Secure, and move protected apps validator
from CMSettings.System to CMSettings.Secure
Change-Id: I9f4e1bef7ff5be100376d2d03d34483d12938158
Diffstat (limited to 'src/java/cyanogenmod/providers/CMSettings.java')
-rw-r--r-- | src/java/cyanogenmod/providers/CMSettings.java | 322 |
1 files changed, 169 insertions, 153 deletions
diff --git a/src/java/cyanogenmod/providers/CMSettings.java b/src/java/cyanogenmod/providers/CMSettings.java index 4b563bc..4b2fb7c 100644 --- a/src/java/cyanogenmod/providers/CMSettings.java +++ b/src/java/cyanogenmod/providers/CMSettings.java @@ -269,6 +269,140 @@ public final class CMSettings { } } + // region Validators + + /** @hide */ + public static interface Validator { + public boolean validate(String value); + } + + private static final Validator sBooleanValidator = + new DiscreteValueValidator(new String[] {"0", "1"}); + + private static final Validator sNonNegativeIntegerValidator = new Validator() { + @Override + public boolean validate(String value) { + try { + return Integer.parseInt(value) >= 0; + } catch (NumberFormatException e) { + return false; + } + } + }; + + private static final Validator sUriValidator = new Validator() { + @Override + public boolean validate(String value) { + try { + Uri.decode(value); + return true; + } catch (IllegalArgumentException e) { + return false; + } + } + }; + + private static final Validator sColorValidator = + new InclusiveIntegerRangeValidator(Integer.MIN_VALUE, Integer.MAX_VALUE); + + private static final Validator sAlwaysTrueValidator = new Validator() { + @Override + public boolean validate(String value) { + return true; + } + }; + + private static final class DiscreteValueValidator implements Validator { + private final String[] mValues; + + public DiscreteValueValidator(String[] values) { + mValues = values; + } + + @Override + public boolean validate(String value) { + return ArrayUtils.contains(mValues, value); + } + } + + private static final class InclusiveIntegerRangeValidator implements Validator { + private final int mMin; + private final int mMax; + + public InclusiveIntegerRangeValidator(int min, int max) { + mMin = min; + mMax = max; + } + + @Override + public boolean validate(String value) { + try { + final int intValue = Integer.parseInt(value); + return intValue >= mMin && intValue <= mMax; + } catch (NumberFormatException e) { + return false; + } + } + } + + private static final class InclusiveFloatRangeValidator implements Validator { + private final float mMin; + private final float mMax; + + public InclusiveFloatRangeValidator(float min, float max) { + mMin = min; + mMax = max; + } + + @Override + public boolean validate(String value) { + try { + final float floatValue = Float.parseFloat(value); + return floatValue >= mMin && floatValue <= mMax; + } catch (NumberFormatException e) { + return false; + } + } + } + + private static final class DelimitedListValidator implements Validator { + private final ArraySet<String> mValidValueSet; + private final String mDelimiter; + private final boolean mAllowEmptyList; + + public DelimitedListValidator(String[] validValues, String delimiter, + boolean allowEmptyList) { + mValidValueSet = new ArraySet<String>(Arrays.asList(validValues)); + mDelimiter = delimiter; + mAllowEmptyList = allowEmptyList; + } + + @Override + public boolean validate(String value) { + ArraySet<String> values = new ArraySet<String>(); + if (!TextUtils.isEmpty(value)) { + final String[] array = TextUtils.split(value, Pattern.quote(mDelimiter)); + for (String item : array) { + if (TextUtils.isEmpty(item)) { + continue; + } + values.add(item); + } + } + if (values.size() > 0) { + values.removeAll(mValidValueSet); + // values.size() will be non-zero if it contains any values not in + // mValidValueSet + return values.size() == 0; + } else if (mAllowEmptyList) { + return true; + } + + return false; + } + } + // endregion Validators + /** * System settings, containing miscellaneous CM system preferences. This table holds simple * name/value pairs. There are convenience functions for accessing individual settings entries. @@ -278,53 +412,12 @@ public final class CMSettings { public static final String SYS_PROP_CM_SETTING_VERSION = "sys.cm_settings_system_version"; - /** @hide */ - public static interface Validator { - public boolean validate(String value); - } - private static final NameValueCache sNameValueCache = new NameValueCache( SYS_PROP_CM_SETTING_VERSION, CONTENT_URI, CALL_METHOD_GET_SYSTEM, CALL_METHOD_PUT_SYSTEM); - private static final Validator sBooleanValidator = - new DiscreteValueValidator(new String[] {"0", "1"}); - - private static final Validator sNonNegativeIntegerValidator = new Validator() { - @Override - public boolean validate(String value) { - try { - return Integer.parseInt(value) >= 0; - } catch (NumberFormatException e) { - return false; - } - } - }; - - private static final Validator sUriValidator = new Validator() { - @Override - public boolean validate(String value) { - try { - Uri.decode(value); - return true; - } catch (IllegalArgumentException e) { - return false; - } - } - }; - - private static final Validator sColorValidator = - new InclusiveIntegerRangeValidator(Integer.MIN_VALUE, Integer.MAX_VALUE); - - private static final Validator sAlwaysTrueValidator = new Validator() { - @Override - public boolean validate(String value) { - return true; - } - }; - // region Methods /** @@ -671,116 +764,6 @@ public final class CMSettings { // endregion - private static final class DiscreteValueValidator implements Validator { - private final String[] mValues; - - public DiscreteValueValidator(String[] values) { - mValues = values; - } - - @Override - public boolean validate(String value) { - return ArrayUtils.contains(mValues, value); - } - } - - private static final class InclusiveIntegerRangeValidator implements Validator { - private final int mMin; - private final int mMax; - - public InclusiveIntegerRangeValidator(int min, int max) { - mMin = min; - mMax = max; - } - - @Override - public boolean validate(String value) { - try { - final int intValue = Integer.parseInt(value); - return intValue >= mMin && intValue <= mMax; - } catch (NumberFormatException e) { - return false; - } - } - } - - private static final class InclusiveFloatRangeValidator implements Validator { - private final float mMin; - private final float mMax; - - public InclusiveFloatRangeValidator(float min, float max) { - mMin = min; - mMax = max; - } - - @Override - public boolean validate(String value) { - try { - final float floatValue = Float.parseFloat(value); - return floatValue >= mMin && floatValue <= mMax; - } catch (NumberFormatException e) { - return false; - } - } - } - - private static final class DelimitedListValidator implements Validator { - private final ArraySet<String> mValidValueSet; - private final String mDelimiter; - private final boolean mAllowEmptyList; - - public DelimitedListValidator(String[] validValues, String delimiter, - boolean allowEmptyList) { - mValidValueSet = new ArraySet<String>(Arrays.asList(validValues)); - mDelimiter = delimiter; - mAllowEmptyList = allowEmptyList; - } - - @Override - public boolean validate(String value) { - ArraySet<String> values = new ArraySet<String>(); - if (!TextUtils.isEmpty(value)) { - final String[] array = TextUtils.split(value, Pattern.quote(mDelimiter)); - for (String item : array) { - if (TextUtils.isEmpty(item)) { - continue; - } - values.add(item); - } - } - if (values.size() > 0) { - values.removeAll(mValidValueSet); - // values.size() will be non-zero if it contains any values not in - // mValidValueSet - return values.size() == 0; - } else if (mAllowEmptyList) { - return true; - } - - return false; - } - } - - /** - * @hide - */ - public static final Validator PROTECTED_COMPONENTS_VALIDATOR = new Validator() { - private final String mDelimiter = "|"; - - @Override - public boolean validate(String value) { - if (!TextUtils.isEmpty(value)) { - final String[] array = TextUtils.split(value, Pattern.quote(mDelimiter)); - for (String item : array) { - if (TextUtils.isEmpty(item)) { - return false; // Empty components not allowed - } - } - } - return true; // Empty list is allowed though. - } - }; - // region System Settings /** @@ -2024,7 +2007,6 @@ public final class CMSettings { NOTIFICATION_LIGHT_PULSE_CUSTOM_ENABLE_VALIDATOR); VALIDATORS.put(NOTIFICATION_LIGHT_PULSE_CUSTOM_VALUES, NOTIFICATION_LIGHT_PULSE_CUSTOM_VALUES_VALIDATOR); - VALIDATORS.put(Secure.PROTECTED_COMPONENTS, PROTECTED_COMPONENTS_VALIDATOR); }; // endregion } @@ -2047,7 +2029,6 @@ public final class CMSettings { // region Methods - /** * Put a delimited list as a string * @param resolver to access the database with @@ -2668,6 +2649,41 @@ public final class CMSettings { public static boolean isLegacySetting(String key) { return ArrayUtils.contains(LEGACY_SECURE_SETTINGS, key); } + + /** + * @hide + */ + public static final Validator PROTECTED_COMPONENTS_VALIDATOR = new Validator() { + private final String mDelimiter = "|"; + + @Override + public boolean validate(String value) { + if (!TextUtils.isEmpty(value)) { + final String[] array = TextUtils.split(value, Pattern.quote(mDelimiter)); + for (String item : array) { + if (TextUtils.isEmpty(item)) { + return false; // Empty components not allowed + } + } + } + return true; // Empty list is allowed though. + } + }; + + /** + * Mapping of validators for all secure settings. This map is used to validate both valid + * keys as well as validating the values for those keys. + * + * Note: Make sure if you add a new Secure setting you create a Validator for it and add + * it to this map. + * + * @hide + */ + public static final Map<String, Validator> VALIDATORS = + new ArrayMap<String, Validator>(); + static { + VALIDATORS.put(PROTECTED_COMPONENTS, PROTECTED_COMPONENTS_VALIDATOR); + } } /** |