aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorYvonne Wong <ywong@cyngn.com>2015-08-27 12:19:54 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2015-09-25 13:17:19 -0700
commit05d01294782115b652a0ef28e5cb35ab3a7ad642 (patch)
tree3c7abc8666e1fd1c17ca68df1c364a81b2e9f651 /src/java
parent8fc6affd388f70784e0850ebe4bf8d774389d79c (diff)
downloadvendor_cmsdk-05d01294782115b652a0ef28e5cb35ab3a7ad642.zip
vendor_cmsdk-05d01294782115b652a0ef28e5cb35ab3a7ad642.tar.gz
vendor_cmsdk-05d01294782115b652a0ef28e5cb35ab3a7ad642.tar.bz2
Add way to migrate CM specific settings to CMSettingsProvider
issue-id: CYNGNOS-829 Change-Id: I08743ebf9ffd3846ae501ed41e396b1556dc41cf
Diffstat (limited to 'src/java')
-rw-r--r--src/java/cyanogenmod/providers/CMSettings.java472
1 files changed, 400 insertions, 72 deletions
diff --git a/src/java/cyanogenmod/providers/CMSettings.java b/src/java/cyanogenmod/providers/CMSettings.java
index afeacc8..3178378 100644
--- a/src/java/cyanogenmod/providers/CMSettings.java
+++ b/src/java/cyanogenmod/providers/CMSettings.java
@@ -20,6 +20,7 @@ import android.content.ContentResolver;
import android.content.IContentProvider;
import android.database.Cursor;
import android.net.Uri;
+import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -44,10 +45,57 @@ public final class CMSettings {
}
}
+ // region Call Methods
+
+ /**
+ * @hide - User handle argument extra to the fast-path call()-based requests
+ */
+ public static final String CALL_METHOD_USER_KEY = "_user";
+
+ /**
+ * @hide - Private call() method on SettingsProvider to read from 'system' table.
+ */
+ public static final String CALL_METHOD_GET_SYSTEM = "GET_system";
+
+ /**
+ * @hide - Private call() method on SettingsProvider to read from 'secure' table.
+ */
+ public static final String CALL_METHOD_GET_SECURE = "GET_secure";
+
+ /**
+ * @hide - Private call() method on SettingsProvider to read from 'global' table.
+ */
+ public static final String CALL_METHOD_GET_GLOBAL = "GET_global";
+
+ /**
+ * @hide - Private call() method to write to 'system' table
+ */
+ public static final String CALL_METHOD_PUT_SYSTEM = "PUT_system";
+
+ /**
+ * @hide - Private call() method to write to 'secure' table
+ */
+ public static final String CALL_METHOD_PUT_SECURE = "PUT_secure";
+
+ /**
+ * @hide - Private call() method to write to 'global' table
+ */
+ public static final String CALL_METHOD_PUT_GLOBAL= "PUT_global";
+
+ /**
+ * @hide - Private call() method on CMSettingsProvider to migrate CM settings
+ */
+ public static final String CALL_METHOD_MIGRATE_SETTINGS = "migrate_settings";
+
+ /**
+ * @hide - Private call() method on CMSettingsProvider to migrate CM settings for a user
+ */
+ public static final String CALL_METHOD_MIGRATE_SETTINGS_FOR_USER = "migrate_settings_for_user";
+
+ // endregion
+
// Thread-safe.
private static class NameValueCache {
- // TODO Add call options for fast path at insert and get
-
private final String mVersionSystemProperty;
private final Uri mUri;
@@ -62,9 +110,17 @@ public final class CMSettings {
// Initially null; set lazily and held forever. Synchronized on 'this'.
private IContentProvider mContentProvider = null;
- public NameValueCache(String versionSystemProperty, Uri uri) {
+ // The method we'll call (or null, to not use) on the provider
+ // for the fast path of retrieving settings.
+ private final String mCallGetCommand;
+ private final String mCallSetCommand;
+
+ public NameValueCache(String versionSystemProperty, Uri uri,
+ String getCommand, String setCommand) {
mVersionSystemProperty = versionSystemProperty;
mUri = uri;
+ mCallGetCommand = getCommand;
+ mCallSetCommand = setCommand;
}
private IContentProvider lazyGetProvider(ContentResolver cr) {
@@ -79,7 +135,30 @@ public final class CMSettings {
}
/**
- * Gets a a string value with the specified name from the name/value cache if possible. If
+ * Puts a string name/value pair into the content provider for the specified user.
+ * @param cr The content resolver to use.
+ * @param name The name of the key to put into the content provider.
+ * @param value The value to put into the content provider.
+ * @param userId The user id to use for the content provider.
+ * @return Whether the put was successful.
+ */
+ public boolean putStringForUser(ContentResolver cr, String name, String value,
+ final int userId) {
+ try {
+ Bundle arg = new Bundle();
+ arg.putString(Settings.NameValueTable.VALUE, value);
+ arg.putInt(CALL_METHOD_USER_KEY, userId);
+ IContentProvider cp = lazyGetProvider(cr);
+ cp.call(cr.getPackageName(), mCallSetCommand, name, arg);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Can't set key " + name + " in " + mUri, e);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Gets a string value with the specified name from the name/value cache if possible. If
* not, it will use the content resolver and perform a query.
* @param cr Content resolver to use if name/value cache does not contain the name or if
* the cache version is older than the current version.
@@ -90,6 +169,7 @@ public final class CMSettings {
public String getStringForUser(ContentResolver cr, String name, final int userId) {
final boolean isSelf = (userId == UserHandle.myUserId());
if (isSelf) {
+ if (LOCAL_LOGV) Log.d(TAG, "get setting for self");
long newValuesVersion = SystemProperties.getLong(mVersionSystemProperty, 0);
// Our own user's settings data uses a client-side cache
@@ -115,6 +195,40 @@ public final class CMSettings {
IContentProvider cp = lazyGetProvider(cr);
+ // Try the fast path first, not using query(). If this
+ // fails (alternate Settings provider that doesn't support
+ // this interface?) then we fall back to the query/table
+ // interface.
+ if (mCallGetCommand != null) {
+ try {
+ Bundle args = null;
+ if (!isSelf) {
+ args = new Bundle();
+ args.putInt(CALL_METHOD_USER_KEY, userId);
+ }
+ Bundle b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
+ if (b != null) {
+ String value = b.getPairValue();
+ // Don't update our cache for reads of other users' data
+ if (isSelf) {
+ synchronized (this) {
+ mValues.put(name, value);
+ }
+ } else {
+ if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userId
+ + " by " + UserHandle.myUserId()
+ + " so not updating cache");
+ }
+ return value;
+ }
+ // If the response Bundle is null, we fall through
+ // to the query interface below.
+ } catch (RemoteException e) {
+ // Not supported by the remote side? Fall through
+ // to query().
+ }
+ }
+
Cursor c = null;
try {
c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE, NAME_EQ_PLACEHOLDER,
@@ -143,9 +257,8 @@ public final class CMSettings {
}
/**
- * System settings, containing miscellaneous CM system preferences. This
- * table holds simple name/value pairs. There are convenience
- * functions for accessing individual settings entries.
+ * System settings, containing miscellaneous CM system preferences. This table holds simple
+ * name/value pairs. There are convenience functions for accessing individual settings entries.
*/
public static final class System extends Settings.NameValueTable {
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/system");
@@ -154,11 +267,23 @@ public final class CMSettings {
private static final NameValueCache sNameValueCache = new NameValueCache(
SYS_PROP_CM_SETTING_VERSION,
- CONTENT_URI);
+ CONTENT_URI,
+ CALL_METHOD_GET_SYSTEM,
+ CALL_METHOD_PUT_SYSTEM);
// region Methods
/**
+ * Construct the content URI for a particular name/value pair, useful for monitoring changes
+ * with a ContentObserver.
+ * @param name to look up in the table
+ * @return the corresponding content URI
+ */
+ public static Uri getUriFor(String name) {
+ return Settings.NameValueTable.getUriFor(CONTENT_URI, name);
+ }
+
+ /**
* Look up a name in the database.
* @param resolver to access the database with
* @param name to look up in the table
@@ -170,8 +295,8 @@ public final class CMSettings {
/** @hide */
public static String getStringForUser(ContentResolver resolver, String name,
- int userHandle) {
- return sNameValueCache.getStringForUser(resolver, name, userHandle);
+ int userId) {
+ return sNameValueCache.getStringForUser(resolver, name, userId);
}
/**
@@ -182,11 +307,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putString(ContentResolver resolver, String name, String value) {
- return putString(resolver, CONTENT_URI, name, value);
+ return putStringForUser(resolver, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putStringForUser(ContentResolver resolver, String name, String value,
+ int userId) {
+ return sNameValueCache.putStringForUser(resolver, name, value, userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you. The default value will be returned if the setting is
@@ -200,7 +331,12 @@ public final class CMSettings {
* or not a valid integer.
*/
public static int getInt(ContentResolver cr, String name, int def) {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int def, int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Integer.parseInt(v) : def;
} catch (NumberFormatException e) {
@@ -209,7 +345,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you.
@@ -228,7 +364,13 @@ public final class CMSettings {
*/
public static int getInt(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
try {
return Integer.parseInt(v);
} catch (NumberFormatException e) {
@@ -250,11 +392,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putInt(ContentResolver cr, String name, int value) {
- return putString(cr, name, Integer.toString(value));
+ return putIntForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putIntForUser(ContentResolver cr, String name, int value,
+ int userId) {
+ return putStringForUser(cr, name, Integer.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you. The default value will be returned if the setting is
@@ -268,7 +416,13 @@ public final class CMSettings {
* or not a valid {@code long}.
*/
public static long getLong(ContentResolver cr, String name, long def) {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, long def,
+ int userId) {
+ String valString = getStringForUser(cr, name, userId);
long value;
try {
value = valString != null ? Long.parseLong(valString) : def;
@@ -279,7 +433,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you.
@@ -297,7 +451,13 @@ public final class CMSettings {
*/
public static long getLong(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String valString = getStringForUser(cr, name, userId);
try {
return Long.parseLong(valString);
} catch (NumberFormatException e) {
@@ -306,7 +466,7 @@ public final class CMSettings {
}
/**
- * Convenience function for updating a secure settings value as a long
+ * Convenience function for updating a single settings value as a long
* integer. This will either create a new entry in the table if the
* given name does not exist, or modify the value of the existing row
* with that name. Note that internally setting values are always
@@ -319,11 +479,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putLong(ContentResolver cr, String name, long value) {
- return putString(cr, name, Long.toString(value));
+ return putLongForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putLongForUser(ContentResolver cr, String name, long value,
+ int userId) {
+ return putStringForUser(cr, name, Long.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a floating point number. Note that internally setting values are
* always stored as strings; this function converts the string to an
* float for you. The default value will be returned if the setting
@@ -337,7 +503,13 @@ public final class CMSettings {
* or not a valid float.
*/
public static float getFloat(ContentResolver cr, String name, float def) {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, float def,
+ int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Float.parseFloat(v) : def;
} catch (NumberFormatException e) {
@@ -346,7 +518,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single system settings value
* as a float. Note that internally setting values are always
* stored as strings; this function converts the string to a float
* for you.
@@ -365,7 +537,13 @@ public final class CMSettings {
*/
public static float getFloat(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
if (v == null) {
throw new CMSettingNotFoundException(name);
}
@@ -390,7 +568,13 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putFloat(ContentResolver cr, String name, float value) {
- return putString(cr, name, Float.toString(value));
+ return putFloatForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putFloatForUser(ContentResolver cr, String name, float value,
+ int userId) {
+ return putStringForUser(cr, name, Float.toString(value), userId);
}
// endregion
@@ -408,8 +592,8 @@ public final class CMSettings {
}
/**
- * Secure settings, containing miscellaneous CM secure preferences. This
- * table holds simple name/value pairs. There are convenience
+ * Secure settings, containing miscellaneous CM secure preferences. This
+ * table holds simple name/value pairs. There are convenience
* functions for accessing individual settings entries.
*/
public static final class Secure extends Settings.NameValueTable {
@@ -419,7 +603,21 @@ public final class CMSettings {
private static final NameValueCache sNameValueCache = new NameValueCache(
SYS_PROP_CM_SETTING_VERSION,
- CONTENT_URI);
+ CONTENT_URI,
+ CALL_METHOD_GET_SECURE,
+ CALL_METHOD_PUT_SECURE);
+
+ // region Methods
+
+ /**
+ * Construct the content URI for a particular name/value pair, useful for monitoring changes
+ * with a ContentObserver.
+ * @param name to look up in the table
+ * @return the corresponding content URI
+ */
+ public static Uri getUriFor(String name) {
+ return Settings.NameValueTable.getUriFor(CONTENT_URI, name);
+ }
/**
* Look up a name in the database.
@@ -433,8 +631,8 @@ public final class CMSettings {
/** @hide */
public static String getStringForUser(ContentResolver resolver, String name,
- int userHandle) {
- return sNameValueCache.getStringForUser(resolver, name, userHandle);
+ int userId) {
+ return sNameValueCache.getStringForUser(resolver, name, userId);
}
/**
@@ -445,11 +643,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putString(ContentResolver resolver, String name, String value) {
- return putString(resolver, CONTENT_URI, name, value);
+ return putStringForUser(resolver, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putStringForUser(ContentResolver resolver, String name, String value,
+ int userId) {
+ return sNameValueCache.putStringForUser(resolver, name, value, userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you. The default value will be returned if the setting is
@@ -463,7 +667,12 @@ public final class CMSettings {
* or not a valid integer.
*/
public static int getInt(ContentResolver cr, String name, int def) {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int def, int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Integer.parseInt(v) : def;
} catch (NumberFormatException e) {
@@ -472,7 +681,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you.
@@ -491,7 +700,13 @@ public final class CMSettings {
*/
public static int getInt(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
try {
return Integer.parseInt(v);
} catch (NumberFormatException e) {
@@ -513,11 +728,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putInt(ContentResolver cr, String name, int value) {
- return putString(cr, name, Integer.toString(value));
+ return putIntForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putIntForUser(ContentResolver cr, String name, int value,
+ int userId) {
+ return putStringForUser(cr, name, Integer.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you. The default value will be returned if the setting is
@@ -531,7 +752,13 @@ public final class CMSettings {
* or not a valid {@code long}.
*/
public static long getLong(ContentResolver cr, String name, long def) {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, long def,
+ int userId) {
+ String valString = getStringForUser(cr, name, userId);
long value;
try {
value = valString != null ? Long.parseLong(valString) : def;
@@ -542,7 +769,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you.
@@ -560,7 +787,13 @@ public final class CMSettings {
*/
public static long getLong(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String valString = getStringForUser(cr, name, userId);
try {
return Long.parseLong(valString);
} catch (NumberFormatException e) {
@@ -569,7 +802,7 @@ public final class CMSettings {
}
/**
- * Convenience function for updating a secure settings value as a long
+ * Convenience function for updating a single settings value as a long
* integer. This will either create a new entry in the table if the
* given name does not exist, or modify the value of the existing row
* with that name. Note that internally setting values are always
@@ -582,11 +815,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putLong(ContentResolver cr, String name, long value) {
- return putString(cr, name, Long.toString(value));
+ return putLongForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putLongForUser(ContentResolver cr, String name, long value,
+ int userId) {
+ return putStringForUser(cr, name, Long.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a floating point number. Note that internally setting values are
* always stored as strings; this function converts the string to an
* float for you. The default value will be returned if the setting
@@ -600,7 +839,13 @@ public final class CMSettings {
* or not a valid float.
*/
public static float getFloat(ContentResolver cr, String name, float def) {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, float def,
+ int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Float.parseFloat(v) : def;
} catch (NumberFormatException e) {
@@ -609,7 +854,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single system settings value
* as a float. Note that internally setting values are always
* stored as strings; this function converts the string to a float
* for you.
@@ -628,7 +873,13 @@ public final class CMSettings {
*/
public static float getFloat(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
if (v == null) {
throw new CMSettingNotFoundException(name);
}
@@ -653,7 +904,13 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putFloat(ContentResolver cr, String name, float value) {
- return putString(cr, name, Float.toString(value));
+ return putFloatForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putFloatForUser(ContentResolver cr, String name, float value,
+ int userId) {
+ return putStringForUser(cr, name, Float.toString(value), userId);
}
// endregion
@@ -770,8 +1027,8 @@ public final class CMSettings {
}
/**
- * Global settings, containing miscellaneous CM global preferences. This
- * table holds simple name/value pairs. There are convenience
+ * Global settings, containing miscellaneous CM global preferences. This
+ * table holds simple name/value pairs. There are convenience
* functions for accessing individual settings entries.
*/
public static final class Global extends Settings.NameValueTable {
@@ -781,11 +1038,23 @@ public final class CMSettings {
private static final NameValueCache sNameValueCache = new NameValueCache(
SYS_PROP_CM_SETTING_VERSION,
- CONTENT_URI);
+ CONTENT_URI,
+ CALL_METHOD_GET_GLOBAL,
+ CALL_METHOD_PUT_GLOBAL);
// region Methods
/**
+ * Construct the content URI for a particular name/value pair, useful for monitoring changes
+ * with a ContentObserver.
+ * @param name to look up in the table
+ * @return the corresponding content URI
+ */
+ public static Uri getUriFor(String name) {
+ return Settings.NameValueTable.getUriFor(CONTENT_URI, name);
+ }
+
+ /**
* Look up a name in the database.
* @param resolver to access the database with
* @param name to look up in the table
@@ -797,8 +1066,8 @@ public final class CMSettings {
/** @hide */
public static String getStringForUser(ContentResolver resolver, String name,
- int userHandle) {
- return sNameValueCache.getStringForUser(resolver, name, userHandle);
+ int userId) {
+ return sNameValueCache.getStringForUser(resolver, name, userId);
}
/**
@@ -809,11 +1078,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putString(ContentResolver resolver, String name, String value) {
- return putString(resolver, CONTENT_URI, name, value);
+ return putStringForUser(resolver, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putStringForUser(ContentResolver resolver, String name, String value,
+ int userId) {
+ return sNameValueCache.putStringForUser(resolver, name, value, userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you. The default value will be returned if the setting is
@@ -827,7 +1102,12 @@ public final class CMSettings {
* or not a valid integer.
*/
public static int getInt(ContentResolver cr, String name, int def) {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int def, int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Integer.parseInt(v) : def;
} catch (NumberFormatException e) {
@@ -836,7 +1116,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as an integer. Note that internally setting values are always
* stored as strings; this function converts the string to an integer
* for you.
@@ -855,7 +1135,13 @@ public final class CMSettings {
*/
public static int getInt(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getIntForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static int getIntForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
try {
return Integer.parseInt(v);
} catch (NumberFormatException e) {
@@ -877,11 +1163,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putInt(ContentResolver cr, String name, int value) {
- return putString(cr, name, Integer.toString(value));
+ return putIntForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putIntForUser(ContentResolver cr, String name, int value,
+ int userId) {
+ return putStringForUser(cr, name, Integer.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you. The default value will be returned if the setting is
@@ -895,7 +1187,13 @@ public final class CMSettings {
* or not a valid {@code long}.
*/
public static long getLong(ContentResolver cr, String name, long def) {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, long def,
+ int userId) {
+ String valString = getStringForUser(cr, name, userId);
long value;
try {
value = valString != null ? Long.parseLong(valString) : def;
@@ -906,7 +1204,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a {@code long}. Note that internally setting values are always
* stored as strings; this function converts the string to a {@code long}
* for you.
@@ -924,7 +1222,13 @@ public final class CMSettings {
*/
public static long getLong(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String valString = getString(cr, name);
+ return getLongForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static long getLongForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String valString = getStringForUser(cr, name, userId);
try {
return Long.parseLong(valString);
} catch (NumberFormatException e) {
@@ -933,7 +1237,7 @@ public final class CMSettings {
}
/**
- * Convenience function for updating a secure settings value as a long
+ * Convenience function for updating a single settings value as a long
* integer. This will either create a new entry in the table if the
* given name does not exist, or modify the value of the existing row
* with that name. Note that internally setting values are always
@@ -946,11 +1250,17 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putLong(ContentResolver cr, String name, long value) {
- return putString(cr, name, Long.toString(value));
+ return putLongForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putLongForUser(ContentResolver cr, String name, long value,
+ int userId) {
+ return putStringForUser(cr, name, Long.toString(value), userId);
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single settings value
* as a floating point number. Note that internally setting values are
* always stored as strings; this function converts the string to an
* float for you. The default value will be returned if the setting
@@ -964,7 +1274,13 @@ public final class CMSettings {
* or not a valid float.
*/
public static float getFloat(ContentResolver cr, String name, float def) {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, def, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, float def,
+ int userId) {
+ String v = getStringForUser(cr, name, userId);
try {
return v != null ? Float.parseFloat(v) : def;
} catch (NumberFormatException e) {
@@ -973,7 +1289,7 @@ public final class CMSettings {
}
/**
- * Convenience function for retrieving a single secure settings value
+ * Convenience function for retrieving a single system settings value
* as a float. Note that internally setting values are always
* stored as strings; this function converts the string to a float
* for you.
@@ -992,7 +1308,13 @@ public final class CMSettings {
*/
public static float getFloat(ContentResolver cr, String name)
throws CMSettingNotFoundException {
- String v = getString(cr, name);
+ return getFloatForUser(cr, name, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static float getFloatForUser(ContentResolver cr, String name, int userId)
+ throws CMSettingNotFoundException {
+ String v = getStringForUser(cr, name, userId);
if (v == null) {
throw new CMSettingNotFoundException(name);
}
@@ -1017,7 +1339,13 @@ public final class CMSettings {
* @return true if the value was set, false on database errors
*/
public static boolean putFloat(ContentResolver cr, String name, float value) {
- return putString(cr, name, Float.toString(value));
+ return putFloatForUser(cr, name, value, UserHandle.myUserId());
+ }
+
+ /** @hide */
+ public static boolean putFloatForUser(ContentResolver cr, String name, float value,
+ int userId) {
+ return putStringForUser(cr, name, Float.toString(value), userId);
}
// endregion
@@ -1032,7 +1360,7 @@ public final class CMSettings {
public static final String DEVICE_NAME = "device_name";
/**
- * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON.
+ * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON.
*
* @hide
*/