diff options
author | Maggie Benthall <mbenthall@google.com> | 2013-02-07 00:04:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-02-07 00:04:59 +0000 |
commit | 1095d9ac5df839408b9a549cc638c2909d98dfac (patch) | |
tree | d06c6f1bd7202a8e02e376028f3f080c6ffaecfc | |
parent | 08d11e1fa939ecdda1ecc8bda750c07e924f06aa (diff) | |
parent | d2726582f135383e56661bc41d750966642dab45 (diff) | |
download | frameworks_base-1095d9ac5df839408b9a549cc638c2909d98dfac.zip frameworks_base-1095d9ac5df839408b9a549cc638c2909d98dfac.tar.gz frameworks_base-1095d9ac5df839408b9a549cc638c2909d98dfac.tar.bz2 |
Merge "Fix for SettingsProvider to query for correct user."
-rw-r--r-- | core/tests/coretests/src/android/provider/SettingsProviderTest.java | 36 | ||||
-rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java | 6 |
2 files changed, 39 insertions, 3 deletions
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 @@ public class SettingsProviderTest extends AndroidTestCase { } @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 @@ public class SettingsProvider extends ContentProvider { * @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 @@ public class SettingsProvider extends ContentProvider { 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 @@ public class SettingsProvider extends ContentProvider { // 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, |