19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 2278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tateimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 24fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsuimport android.content.pm.PackageManager; 25fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsuimport android.content.pm.ResolveInfo; 2678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tateimport android.content.pm.UserInfo; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 2978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tateimport android.os.UserHandle; 3078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tateimport android.os.UserManager; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Settings; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 34fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsuimport android.test.suitebuilder.annotation.SmallTest; 35fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu 36fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsuimport java.util.List; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** Unit test for SettingsProvider. */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SettingsProviderTest extends AndroidTestCase { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testNameValueCache() { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 43edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.putString(r, "test_service", "Value"); 44edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals("Value", Settings.Secure.getString(r, "test_service")); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Make sure the value can be overwritten. 47edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.putString(r, "test_service", "New"); 48edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals("New", Settings.Secure.getString(r, "test_service")); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Also that delete works. 51edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(1, r.delete(Settings.Secure.getUriFor("test_service"), null, null)); 52edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(null, Settings.Secure.getString(r, "test_service")); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Try all the same things in the System table 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.putString(r, "test_setting", "Value"); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Value", Settings.System.getString(r, "test_setting")); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.putString(r, "test_setting", "New"); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("New", Settings.System.getString(r, "test_setting")); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(Settings.System.getUriFor("test_setting"), null, null)); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.System.getString(r, "test_setting")); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRowNameContentUri() { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("content://settings/system/test_setting", 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.getUriFor("test_setting").toString()); 71d0ca3379c2dd0f987af328baa3fdad69d0a8d70aAmith Yamasani assertEquals("content://settings/secure/test_service", 72edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.getUriFor("test_service").toString()); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // These tables use the row name (not ID) as their content URI. 75edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Uri tables[] = { Settings.System.CONTENT_URI, Settings.Secure.CONTENT_URI }; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Uri table : tables) { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues v = new ContentValues(); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.NAME, "test_key"); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.VALUE, "Test"); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = r.insert(table, v); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(table.toString() + "/test_key", uri.toString()); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a specific URI and no WHERE clause succeeds. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = r.query(uri, null, null, null, null); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a specific URI and a WHERE clause fails. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.query(uri, null, "1", null, null); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("UnsupportedOperationException expected"); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (UnsupportedOperationException e) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!e.toString().contains("WHERE clause")) throw e; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a tablewide URI and a WHERE clause succeeds. 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = r.query(table, null, "name='test_key'", null, null); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = new ContentValues(); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.VALUE, "Toast"); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.update(uri, v, null, null)); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = r.query(uri, null, null, null, null); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Toast", c.getString(c.getColumnIndex(Settings.System.VALUE))); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(uri, null, null)); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.System.getString(r, "test_key")); 131edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(null, Settings.Secure.getString(r, "test_key")); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 135d2726582f135383e56661bc41d750966642dab45Maggie Benthall public void testSettingsChangeForOtherUser() { 136d2726582f135383e56661bc41d750966642dab45Maggie Benthall UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 137d2726582f135383e56661bc41d750966642dab45Maggie Benthall ContentResolver r = getContext().getContentResolver(); 138d2726582f135383e56661bc41d750966642dab45Maggie Benthall 139d2726582f135383e56661bc41d750966642dab45Maggie Benthall // Make sure there's an owner 140d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertTrue(findUser(um, UserHandle.USER_OWNER)); 141d2726582f135383e56661bc41d750966642dab45Maggie Benthall 142d2726582f135383e56661bc41d750966642dab45Maggie Benthall // create a new user to use for testing 143d2726582f135383e56661bc41d750966642dab45Maggie Benthall UserInfo otherUser = um.createUser("TestUser1", UserInfo.FLAG_GUEST); 144d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertTrue(otherUser != null); 145d2726582f135383e56661bc41d750966642dab45Maggie Benthall try { 146d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertNotSame("Current calling user id should not be the new guest user", 147d2726582f135383e56661bc41d750966642dab45Maggie Benthall otherUser.id, UserHandle.getCallingUserId()); 148d2726582f135383e56661bc41d750966642dab45Maggie Benthall 149d2726582f135383e56661bc41d750966642dab45Maggie Benthall Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "gps"); 150d2726582f135383e56661bc41d750966642dab45Maggie Benthall Settings.Secure.putStringForUser(r, 151d2726582f135383e56661bc41d750966642dab45Maggie Benthall Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "network", otherUser.id); 152d2726582f135383e56661bc41d750966642dab45Maggie Benthall 153d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertEquals("gps", 154d2726582f135383e56661bc41d750966642dab45Maggie Benthall Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 155d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertEquals("network", Settings.Secure.getStringForUser( 156d2726582f135383e56661bc41d750966642dab45Maggie Benthall r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id)); 157d2726582f135383e56661bc41d750966642dab45Maggie Benthall 158d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertNotSame("Current calling user id should not be the new guest user", 159d2726582f135383e56661bc41d750966642dab45Maggie Benthall otherUser.id, UserHandle.getCallingUserId()); 160d2726582f135383e56661bc41d750966642dab45Maggie Benthall Settings.Secure.setLocationProviderEnabledForUser(r, "network", false, otherUser.id); 161d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertEquals("", Settings.Secure.getStringForUser( 162d2726582f135383e56661bc41d750966642dab45Maggie Benthall r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, otherUser.id)); 163d2726582f135383e56661bc41d750966642dab45Maggie Benthall 164d2726582f135383e56661bc41d750966642dab45Maggie Benthall } finally { 165d2726582f135383e56661bc41d750966642dab45Maggie Benthall // Tidy up 166d2726582f135383e56661bc41d750966642dab45Maggie Benthall um.removeUser(otherUser.id); 167d2726582f135383e56661bc41d750966642dab45Maggie Benthall } 168d2726582f135383e56661bc41d750966642dab45Maggie Benthall } 169d2726582f135383e56661bc41d750966642dab45Maggie Benthall 170d2726582f135383e56661bc41d750966642dab45Maggie Benthall @MediumTest 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRowNumberContentUri() { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The bookmarks table (and everything else) uses standard row number content URIs. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Settings.Bookmarks.add(r, new Intent("TEST"), 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Test Title", "Test Folder", '*', 123); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(ContentUris.parseId(uri) > 0); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TEST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues v = new ContentValues(); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.Bookmarks.INTENT, "#Intent;action=TOAST;end"); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.update(uri, v, null, null)); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TOAST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(uri, null, null)); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.Bookmarks.getIntentForShortcut(r, '*')); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 192c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 193c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root @MediumTest 194c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root public void testParseProviderList() { 195c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root ContentResolver r = getContext().getContentResolver(); 196c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 197c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Make sure we get out what we put in. 198c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 199c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root "test1,test2,test3"); 200c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED), 201c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root "test1,test2,test3"); 202c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 203c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a value 204c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 205c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root ""); 206c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test1"); 207c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test1", 208c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 209c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 210c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a second value 211c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test2"); 212c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test1,test2", 213c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 214c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 215c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a third value 216c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test3"); 217c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test1,test2,test3", 218c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 219c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 220c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the first value in a 3 item list 221c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test1"); 222c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test2,test3", 223c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 224c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 225c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the middle value in a 3 item list 226c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 227c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root "test1,test2,test3"); 228c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test2"); 229c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test1,test3", 230c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 231c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 232c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the last value in a 3 item list 233c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 234c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root "test1,test2,test3"); 235c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test3"); 236c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root assertEquals("test1,test2", 237c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)); 238c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root } 239fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu 24078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate private boolean findUser(UserManager um, int userHandle) { 24178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate for (UserInfo user : um.getUsers()) { 24278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate if (user.id == userHandle) { 24378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate return true; 24478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 24578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 24678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate return false; 24778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 24878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 24978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate @MediumTest 25078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate public void testPerUserSettings() { 25178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 25278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate ContentResolver r = getContext().getContentResolver(); 25378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 25478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Make sure there's an owner 25578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue(findUser(um, UserHandle.USER_OWNER)); 25678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 25778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // create a new user to use for testing 25878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate UserInfo user = um.createUser("TestUser1", UserInfo.FLAG_GUEST); 25978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue(user != null); 26078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 26178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate try { 26278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Write some settings for that user as well as the current user 26378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final String TEST_KEY = "test_setting"; 26478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final int SELF_VALUE = 40; 26578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final int OTHER_VALUE = 27; 26678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 26778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate Settings.System.putInt(r, TEST_KEY, SELF_VALUE); 26878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate Settings.System.putIntForUser(r, TEST_KEY, OTHER_VALUE, user.id); 26978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 27078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Verify that they read back as intended 27178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate int myValue = Settings.System.getInt(r, TEST_KEY, 0); 27278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate int otherValue = Settings.System.getIntForUser(r, TEST_KEY, 0, user.id); 27378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue("Running as user " + UserHandle.myUserId() 27478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + " and reading/writing as user " + user.id 27578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + ", expected to read " + SELF_VALUE + " but got " + myValue, 27678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate myValue == SELF_VALUE); 27778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue("Running as user " + UserHandle.myUserId() 27878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + " and reading/writing as user " + user.id 27978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + ", expected to read " + OTHER_VALUE + " but got " + otherValue, 28078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate otherValue == OTHER_VALUE); 28178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } finally { 28278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Tidy up 28378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate um.removeUser(user.id); 28478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 28578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 28678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 287fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu @SmallTest 288fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu public void testSettings() { 289fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)); 290fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_ADD_ACCOUNT)); 291fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS)); 292fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APN_SETTINGS)); 293fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) 294fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu .setData(Uri.parse("package:" + getContext().getPackageName()))); 295fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)); 296fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_SETTINGS)); 297fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); 298fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); 299fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DATE_SETTINGS)); 300fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DEVICE_INFO_SETTINGS)); 301fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); 302fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS)); 303fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_INTERNAL_STORAGE_SETTINGS)); 304fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_LOCALE_SETTINGS)); 305fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 306fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS)); 307fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)); 308fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MEMORY_CARD_SETTINGS)); 309fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS)); 310fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_PRIVACY_SETTINGS)); 311fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_QUICK_LAUNCH_SETTINGS)); 312fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SEARCH_SETTINGS)); 313fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SECURITY_SETTINGS)); 314fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SETTINGS)); 315fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SOUND_SETTINGS)); 316fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SYNC_SETTINGS)); 317fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SYSTEM_UPDATE_SETTINGS)); 318fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_USER_DICTIONARY_SETTINGS)); 319fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIFI_IP_SETTINGS)); 320fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIFI_SETTINGS)); 321fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 322fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu } 323fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu 324fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu private void assertCanBeHandled(final Intent intent) { 325fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu PackageManager packageManager = mContext.getPackageManager(); 326fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0); 327fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertNotNull(resolveInfoList); 328fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu // one or more activity can handle this intent. 329fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertTrue(resolveInfoList.size() > 0); 330fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 332