Loading api/system-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -5826,7 +5826,12 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(String, String, boolean); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(String, String, float); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(String, String, int); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(String, String, long); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(String, String); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(String, String, String); method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(String, String, String, boolean); Loading api/test-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1921,7 +1921,12 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static boolean getBoolean(String, String, boolean); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static float getFloat(String, String, float); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static int getInt(String, String, int); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static long getLong(String, String, long); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getProperty(String, String); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getString(String, String, String); method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static void resetToDefaults(int, @Nullable String); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static boolean setProperty(String, String, String, boolean); Loading core/java/android/provider/DeviceConfig.java +94 −0 Original line number Diff line number Diff line Loading @@ -411,6 +411,100 @@ public final class DeviceConfig { return Settings.Config.getString(contentResolver, compositeName); } /** * Look up the String value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if none exists. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static String getString(String namespace, String name, String defaultValue) { String value = getProperty(namespace, name); return value != null ? value : defaultValue; } /** * Look up the boolean value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if none exists. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static boolean getBoolean(String namespace, String name, boolean defaultValue) { String value = getProperty(namespace, name); return value != null ? Boolean.parseBoolean(value) : defaultValue; } /** * Look up the int value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static int getInt(String namespace, String name, int defaultValue) { String value = getProperty(namespace, name); try { return Integer.parseInt(value); } catch (NumberFormatException e) { return defaultValue; } } /** * Look up the long value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static long getLong(String namespace, String name, long defaultValue) { String value = getProperty(namespace, name); try { return Long.parseLong(value); } catch (NumberFormatException e) { return defaultValue; } } /** * Look up the float value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static float getFloat(String namespace, String name, float defaultValue) { String value = getProperty(namespace, name); try { return Float.parseFloat(value); } catch (NumberFormatException e) { return defaultValue; } catch (NullPointerException e) { return defaultValue; } } /** * Create a new property with the the provided name and value in the provided namespace, or * update the value of such a property if it already exists. The same name can exist in multiple Loading core/tests/coretests/src/android/provider/DeviceConfigTest.java +125 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,131 @@ public class DeviceConfigTest { assertThat(result).isNull(); } @Test public void getString_empty() { final String default_value = "default_value"; final String result = DeviceConfig.getString(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getString_nonEmpty() { final String value = "new_value"; final String default_value = "default"; DeviceConfig.setProperty(sNamespace, sKey, value, false); final String result = DeviceConfig.getString(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getBoolean_empty() { final boolean default_value = true; final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getBoolean_valid() { final boolean value = true; final boolean default_value = false; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getBoolean_invalid() { final boolean default_value = true; DeviceConfig.setProperty(sNamespace, sKey, "not_a_boolean", false); final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); // Anything non-null other than case insensitive "true" parses to false. assertThat(result).isFalse(); } @Test public void getInt_empty() { final int default_value = 999; final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getInt_valid() { final int value = 123; final int default_value = 999; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getInt_invalid() { final int default_value = 999; DeviceConfig.setProperty(sNamespace, sKey, "not_an_int", false); final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void getLong_empty() { final long default_value = 123456; final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getLong_valid() { final long value = 456789; final long default_value = 123456; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getLong_invalid() { final long default_value = 123456; DeviceConfig.setProperty(sNamespace, sKey, "not_a_long", false); final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void getFloat_empty() { final float default_value = 123.456f; final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getFloat_valid() { final float value = 456.789f; final float default_value = 123.456f; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getFloat_invalid() { final float default_value = 123.456f; DeviceConfig.setProperty(sNamespace, sKey, "not_a_float", false); final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void setAndGetProperty_sameNamespace() { DeviceConfig.setProperty(sNamespace, sKey, sValue, false); Loading Loading
api/system-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -5826,7 +5826,12 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(String, String, boolean); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(String, String, float); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(String, String, int); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(String, String, long); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(String, String); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(String, String, String); method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String); method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(String, String, String, boolean); Loading
api/test-current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1921,7 +1921,12 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static boolean getBoolean(String, String, boolean); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static float getFloat(String, String, float); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static int getInt(String, String, int); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static long getLong(String, String, long); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getProperty(String, String); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getString(String, String, String); method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static void resetToDefaults(int, @Nullable String); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static boolean setProperty(String, String, String, boolean); Loading
core/java/android/provider/DeviceConfig.java +94 −0 Original line number Diff line number Diff line Loading @@ -411,6 +411,100 @@ public final class DeviceConfig { return Settings.Config.getString(contentResolver, compositeName); } /** * Look up the String value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if none exists. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static String getString(String namespace, String name, String defaultValue) { String value = getProperty(namespace, name); return value != null ? value : defaultValue; } /** * Look up the boolean value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if none exists. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static boolean getBoolean(String namespace, String name, boolean defaultValue) { String value = getProperty(namespace, name); return value != null ? Boolean.parseBoolean(value) : defaultValue; } /** * Look up the int value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static int getInt(String namespace, String name, int defaultValue) { String value = getProperty(namespace, name); try { return Integer.parseInt(value); } catch (NumberFormatException e) { return defaultValue; } } /** * Look up the long value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static long getLong(String namespace, String name, long defaultValue) { String value = getProperty(namespace, name); try { return Long.parseLong(value); } catch (NumberFormatException e) { return defaultValue; } } /** * Look up the float value of a property for a particular namespace. * * @param namespace The namespace containing the property to look up. * @param name The name of the property to look up. * @return the corresponding value, or defaultValue if either none exists or it does not parse. * @hide */ @SystemApi @TestApi @RequiresPermission(READ_DEVICE_CONFIG) public static float getFloat(String namespace, String name, float defaultValue) { String value = getProperty(namespace, name); try { return Float.parseFloat(value); } catch (NumberFormatException e) { return defaultValue; } catch (NullPointerException e) { return defaultValue; } } /** * Create a new property with the the provided name and value in the provided namespace, or * update the value of such a property if it already exists. The same name can exist in multiple Loading
core/tests/coretests/src/android/provider/DeviceConfigTest.java +125 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,131 @@ public class DeviceConfigTest { assertThat(result).isNull(); } @Test public void getString_empty() { final String default_value = "default_value"; final String result = DeviceConfig.getString(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getString_nonEmpty() { final String value = "new_value"; final String default_value = "default"; DeviceConfig.setProperty(sNamespace, sKey, value, false); final String result = DeviceConfig.getString(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getBoolean_empty() { final boolean default_value = true; final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getBoolean_valid() { final boolean value = true; final boolean default_value = false; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getBoolean_invalid() { final boolean default_value = true; DeviceConfig.setProperty(sNamespace, sKey, "not_a_boolean", false); final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value); // Anything non-null other than case insensitive "true" parses to false. assertThat(result).isFalse(); } @Test public void getInt_empty() { final int default_value = 999; final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getInt_valid() { final int value = 123; final int default_value = 999; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getInt_invalid() { final int default_value = 999; DeviceConfig.setProperty(sNamespace, sKey, "not_an_int", false); final int result = DeviceConfig.getInt(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void getLong_empty() { final long default_value = 123456; final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getLong_valid() { final long value = 456789; final long default_value = 123456; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getLong_invalid() { final long default_value = 123456; DeviceConfig.setProperty(sNamespace, sKey, "not_a_long", false); final long result = DeviceConfig.getLong(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void getFloat_empty() { final float default_value = 123.456f; final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); assertThat(result).isEqualTo(default_value); } @Test public void getFloat_valid() { final float value = 456.789f; final float default_value = 123.456f; DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false); final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); assertThat(result).isEqualTo(value); } @Test public void getFloat_invalid() { final float default_value = 123.456f; DeviceConfig.setProperty(sNamespace, sKey, "not_a_float", false); final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value); // Failure to parse results in using the default value assertThat(result).isEqualTo(default_value); } @Test public void setAndGetProperty_sameNamespace() { DeviceConfig.setProperty(sNamespace, sKey, sValue, false); Loading