Merge "Fix for SettingsProvider to query for correct user."
diff --git a/core/tests/coretests/src/android/provider/SettingsProviderTest.java b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
index 6edd2dc..131651a 100644
--- a/core/tests/coretests/src/android/provider/SettingsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
@@ -132,6 +132,42 @@
}
@MediumTest
+ public void testSettingsChangeForOtherUser() {
+ UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+ ContentResolver r = getContext().getContentResolver();
+
+ // Make sure there's an owner
+ assertTrue(findUser(um, UserHandle.USER_OWNER));
+
+ // create a new user to use for testing
+ UserInfo otherUser = um.createUser("TestUser1", UserInfo.FLAG_GUEST);
+ assertTrue(otherUser != null);
+ try {
+ assertNotSame("Current calling user id should not be the new guest user",
+ otherUser.id, UserHandle.getCallingUserId());
+
+ Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "gps");
+ Settings.Secure.putStringForUser(r,
+ Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "network", otherUser.id);
+
+ assertEquals("gps",
+ Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED));
+ assertEquals("network", Settings.Secure.getStringForUser(
+ r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id));
+
+ assertNotSame("Current calling user id should not be the new guest user",
+ otherUser.id, UserHandle.getCallingUserId());
+ Settings.Secure.setLocationProviderEnabledForUser(r, "network", false, otherUser.id);
+ assertEquals("", Settings.Secure.getStringForUser(
+ r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id));
+
+ } finally {
+ // Tidy up
+ um.removeUser(otherUser.id);
+ }
+ }
+
+ @MediumTest
public void testRowNumberContentUri() {
ContentResolver r = getContext().getContentResolver();
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 485908e..45319a8 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -775,7 +775,7 @@
* @returns whether the database needs to be updated or not, also modifying
* 'initialValues' if needed.
*/
- private boolean parseProviderList(Uri url, ContentValues initialValues) {
+ private boolean parseProviderList(Uri url, ContentValues initialValues, int desiredUser) {
String value = initialValues.getAsString(Settings.Secure.VALUE);
String newProviders = null;
if (value != null && value.length() > 1) {
@@ -788,7 +788,7 @@
String providers = "";
String[] columns = {Settings.Secure.VALUE};
String where = Settings.Secure.NAME + "=\'" + Settings.Secure.LOCATION_PROVIDERS_ALLOWED + "\'";
- Cursor cursor = query(url, columns, where, null, null);
+ Cursor cursor = queryForUser(url, columns, where, null, null, desiredUser);
if (cursor != null && cursor.getCount() == 1) {
try {
cursor.moveToFirst();
@@ -865,7 +865,7 @@
// Support enabling/disabling a single provider (using "+" or "-" prefix)
String name = initialValues.getAsString(Settings.Secure.NAME);
if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) {
- if (!parseProviderList(url, initialValues)) return null;
+ if (!parseProviderList(url, initialValues, desiredUserHandle)) return null;
}
// If this is an insert() of a key that has been migrated to the global store,