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.test.AndroidTestCase; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 33fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsuimport android.test.suitebuilder.annotation.SmallTest; 34f90177629a5b69ca3a80466c0ab55abfeb6d26b2Abodunrinwa Tokiimport android.test.suitebuilder.annotation.Suppress; 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 5443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // Apps should not be able to use System settings. 5543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 5643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.System.putString(r, "test_setting", "Value"); 5743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen fail("IllegalArgumentException expected"); 5843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } catch (java.lang.IllegalArgumentException e) { 5943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // expected 6043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 6143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen @MediumTest 6443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testRowNameContentUriForSecure() { 6543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testKey = "testRowNameContentUriForSecure"; 6643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testValue = "testValue"; 6743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String secondTestValue = "testValueNew"; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 7043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen testRowNameContentUri(Settings.Secure.CONTENT_URI, Settings.Secure.NAME, 7143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.VALUE, testKey, testValue, secondTestValue); 7243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } finally { 7343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // clean up 7443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(getContext().getContentResolver(), testKey, null); 7543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 7943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testRowNameContentUriForSystem() { 8043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testKey = Settings.System.VIBRATE_ON; 8143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue("Settings.System.PUBLIC_SETTINGS cannot be empty. We need to use one of it" 8243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen + " for testing. Only settings key in this collection will be accepted by the" 8343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen + " framework.", Settings.System.PUBLIC_SETTINGS.contains(testKey)); 8443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testValue = "0"; 8543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String secondTestValue = "1"; 8643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String oldValue = 8743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.System.getString(getContext().getContentResolver(), testKey); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 9043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen testRowNameContentUri(Settings.System.CONTENT_URI, Settings.System.NAME, 9143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.System.VALUE, testKey, testValue, secondTestValue); 9243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } finally { 9343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // restore old value 9443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen if (oldValue != null) { 9543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.System.putString(getContext().getContentResolver(), testKey, oldValue); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 9843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen private void testRowNameContentUri(Uri table, String nameField, String valueField, 10143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen String testKey, String testValue, String secondTestValue) { 10243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen ContentResolver r = getContext().getContentResolver(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen ContentValues v = new ContentValues(); 10543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen v.put(nameField, testKey); 10643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen v.put(valueField, testValue); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen r.insert(table, v); 10943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Uri uri = Uri.parse(table.toString() + "/" + testKey); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // Query with a specific URI and no WHERE clause succeeds. 11243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Cursor c = r.query(uri, null, null, null, null); 11343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 11443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(c.moveToNext()); 11543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testKey, c.getString(c.getColumnIndex(nameField))); 11643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testValue, c.getString(c.getColumnIndex(valueField))); 11743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(c.moveToNext()); 11843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } finally { 11943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen c.close(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // Query with a specific URI and a WHERE clause fails. 12343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 12443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen r.query(uri, null, "1", null, null); 12543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen fail("IllegalArgumentException expected"); 12643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } catch (IllegalArgumentException e) { 12743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // expected 12843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 12943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen 13043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // Query with a tablewide URI and a WHERE clause succeeds. 13143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen c = r.query(table, null, "name='" + testKey + "'", null, null); 13243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 13343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(c.moveToNext()); 13443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testKey, c.getString(c.getColumnIndex(nameField))); 13543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testValue, c.getString(c.getColumnIndex(valueField))); 13643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(c.moveToNext()); 13743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } finally { 13843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen c.close(); 13943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 14043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen 14143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen v = new ContentValues(); 14243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // NAME is still needed, although the uri should be specific enough. Why? 14343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen v.put(nameField, testKey); 14443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen v.put(valueField, secondTestValue); 14543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(1, r.update(uri, v, null, null)); 14643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen 14743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen c = r.query(uri, null, null, null, null); 14843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen try { 14943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(c.moveToNext()); 15043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testKey, c.getString(c.getColumnIndex(nameField))); 15143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(secondTestValue, c.getString(c.getColumnIndex(valueField))); 15243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(c.moveToNext()); 15343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } finally { 15443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen c.close(); 15543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 159d2726582f135383e56661bc41d750966642dab45Maggie Benthall public void testSettingsChangeForOtherUser() { 160d2726582f135383e56661bc41d750966642dab45Maggie Benthall UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 161d2726582f135383e56661bc41d750966642dab45Maggie Benthall ContentResolver r = getContext().getContentResolver(); 162d2726582f135383e56661bc41d750966642dab45Maggie Benthall 163d2726582f135383e56661bc41d750966642dab45Maggie Benthall // Make sure there's an owner 16443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(findUser(um, UserHandle.USER_SYSTEM)); 165d2726582f135383e56661bc41d750966642dab45Maggie Benthall 166d2726582f135383e56661bc41d750966642dab45Maggie Benthall // create a new user to use for testing 167d2726582f135383e56661bc41d750966642dab45Maggie Benthall UserInfo otherUser = um.createUser("TestUser1", UserInfo.FLAG_GUEST); 168d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertTrue(otherUser != null); 169d2726582f135383e56661bc41d750966642dab45Maggie Benthall try { 170d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertNotSame("Current calling user id should not be the new guest user", 171d2726582f135383e56661bc41d750966642dab45Maggie Benthall otherUser.id, UserHandle.getCallingUserId()); 172d2726582f135383e56661bc41d750966642dab45Maggie Benthall 17343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testKey = "testSettingsChangeForOtherUser"; 17443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testValue1 = "value1"; 17543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen final String testValue2 = "value2"; 17643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(r, testKey, testValue1); 17743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putStringForUser(r, testKey, testValue2, otherUser.id); 178d2726582f135383e56661bc41d750966642dab45Maggie Benthall 17943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testValue1, Settings.Secure.getString(r, testKey)); 18043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertEquals(testValue2, Settings.Secure.getStringForUser(r, testKey, otherUser.id)); 181d2726582f135383e56661bc41d750966642dab45Maggie Benthall 182d2726582f135383e56661bc41d750966642dab45Maggie Benthall assertNotSame("Current calling user id should not be the new guest user", 183d2726582f135383e56661bc41d750966642dab45Maggie Benthall otherUser.id, UserHandle.getCallingUserId()); 184d2726582f135383e56661bc41d750966642dab45Maggie Benthall } finally { 185d2726582f135383e56661bc41d750966642dab45Maggie Benthall // Tidy up 186d2726582f135383e56661bc41d750966642dab45Maggie Benthall um.removeUser(otherUser.id); 187d2726582f135383e56661bc41d750966642dab45Maggie Benthall } 188d2726582f135383e56661bc41d750966642dab45Maggie Benthall } 189d2726582f135383e56661bc41d750966642dab45Maggie Benthall 190d2726582f135383e56661bc41d750966642dab45Maggie Benthall @MediumTest 19143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen @Suppress // Settings.Bookmarks uses a query format that's not supported now. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRowNumberContentUri() { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The bookmarks table (and everything else) uses standard row number content URIs. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Settings.Bookmarks.add(r, new Intent("TEST"), 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Test Title", "Test Folder", '*', 123); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(ContentUris.parseId(uri) > 0); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TEST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues v = new ContentValues(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.Bookmarks.INTENT, "#Intent;action=TOAST;end"); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.update(uri, v, null, null)); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TOAST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(uri, null, null)); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.Bookmarks.getIntentForShortcut(r, '*')); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 213c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 214c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root @MediumTest 215c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root public void testParseProviderList() { 216c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root ContentResolver r = getContext().getContentResolver(); 217c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 21843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen // We only accept "+value" and "-value" 219c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a value 220c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test1"); 22143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 22243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test1")); 223c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 224c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a second value 225c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test2"); 22643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 22743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test1")); 22843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 22943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test2")); 230c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 231c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test adding a third value 232c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test3"); 23343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 23443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test1")); 23543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 23643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test2")); 23743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 23843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test3")); 239c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 240c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the first value in a 3 item list 241c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test1"); 24243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 24343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test1")); 244c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 245c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the middle value in a 3 item list 24643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test4"); 24743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 24843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test2")); 24943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 25043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test3")); 25143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 25243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test4")); 25343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test3"); 25443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 25543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test3")); 256c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root 257c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root // Test deleting the last value in a 3 item list 25843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+test5"); 25943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 26043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test2")); 26143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 26243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test4")); 26343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 26443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test5")); 26543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-test5"); 26643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertFalse(Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED) 26743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen .contains("test5")); 268c2591c14f77366f30cc83e9c6a2abf9d9cd12a5eKenny Root } 269fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu 27078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate private boolean findUser(UserManager um, int userHandle) { 27178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate for (UserInfo user : um.getUsers()) { 27278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate if (user.id == userHandle) { 27378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate return true; 27478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 27578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 27678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate return false; 27778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 27878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 27978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate @MediumTest 28078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate public void testPerUserSettings() { 28178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 28278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate ContentResolver r = getContext().getContentResolver(); 28378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 28478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Make sure there's an owner 28543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen assertTrue(findUser(um, UserHandle.USER_SYSTEM)); 28678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 28778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // create a new user to use for testing 28878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate UserInfo user = um.createUser("TestUser1", UserInfo.FLAG_GUEST); 28978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue(user != null); 29078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 29178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate try { 29278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Write some settings for that user as well as the current user 29378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final String TEST_KEY = "test_setting"; 29478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final int SELF_VALUE = 40; 29578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate final int OTHER_VALUE = 27; 29678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 29743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putInt(r, TEST_KEY, SELF_VALUE); 29843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen Settings.Secure.putIntForUser(r, TEST_KEY, OTHER_VALUE, user.id); 29978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 30078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Verify that they read back as intended 30143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen int myValue = Settings.Secure.getInt(r, TEST_KEY, 0); 30243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen int otherValue = Settings.Secure.getIntForUser(r, TEST_KEY, 0, user.id); 30378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue("Running as user " + UserHandle.myUserId() 30478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + " and reading/writing as user " + user.id 30578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + ", expected to read " + SELF_VALUE + " but got " + myValue, 30678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate myValue == SELF_VALUE); 30778d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate assertTrue("Running as user " + UserHandle.myUserId() 30878d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + " and reading/writing as user " + user.id 30978d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate + ", expected to read " + OTHER_VALUE + " but got " + otherValue, 31078d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate otherValue == OTHER_VALUE); 31178d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } finally { 31278d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate // Tidy up 31378d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate um.removeUser(user.id); 31478d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 31578d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate } 31678d2a66ac12e4c8f1303225514f573fb53af1dd9Christopher Tate 317fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu @SmallTest 318fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu public void testSettings() { 319fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)); 320fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_ADD_ACCOUNT)); 321fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS)); 322fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APN_SETTINGS)); 323fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) 324fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu .setData(Uri.parse("package:" + getContext().getPackageName()))); 325fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)); 326fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_APPLICATION_SETTINGS)); 327fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); 328fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); 329fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DATE_SETTINGS)); 330fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DEVICE_INFO_SETTINGS)); 331fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); 332fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS)); 333fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_INTERNAL_STORAGE_SETTINGS)); 334fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_LOCALE_SETTINGS)); 335fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 336fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS)); 337fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)); 338fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_MEMORY_CARD_SETTINGS)); 339fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS)); 340fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_PRIVACY_SETTINGS)); 34143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen //TODO: seems no one is using this anymore. 34243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen// assertCanBeHandled(new Intent(Settings.ACTION_QUICK_LAUNCH_SETTINGS)); 343fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SEARCH_SETTINGS)); 344fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SECURITY_SETTINGS)); 345fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SETTINGS)); 346fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SOUND_SETTINGS)); 347fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SYNC_SETTINGS)); 348fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_SYSTEM_UPDATE_SETTINGS)); 349fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_USER_DICTIONARY_SETTINGS)); 350fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIFI_IP_SETTINGS)); 351fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIFI_SETTINGS)); 352fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertCanBeHandled(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 35346bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski 35446bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN)) { 35546bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski assertCanBeHandled(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS)); 35646bea2e685915fe45d372389b0a90815e6067febBartosz Fabianowski } 357fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu } 358fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu 359fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu private void assertCanBeHandled(final Intent intent) { 360fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu PackageManager packageManager = mContext.getPackageManager(); 361fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0); 362fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertNotNull(resolveInfoList); 363fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu // one or more activity can handle this intent. 364fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu assertTrue(resolveInfoList.size() > 0); 365fe62e31914bef645851e11418ddaee279c845e99Brian Muramatsu } 366d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen 367d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen @SmallTest 368d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen public void testValidSsaid() { 369d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen ContentResolver r = getContext().getContentResolver(); 370d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen 371d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen // Verify ssaid 372d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen String ssaid = Settings.Secure.getString(r, Settings.Secure.ANDROID_ID); 373d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen assertTrue(ssaid != null); 374d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen assertTrue(ssaid.length() == 16); 375d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen 376d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen String ssaid2 = Settings.Secure.getString(r, Settings.Secure.ANDROID_ID); 377d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen assertTrue(ssaid2 != null); 378d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen assertTrue(ssaid2.length() == 16); 379d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen 380d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen assertTrue(ssaid.equals(ssaid2)); 381d891f01d96cbaa3b1329c3d476084f3fedb30a89Mark Rathjen } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 383