SettingsProviderTest.java revision 43765b77a0286403fd9f7f5305219f0d9a10c953
1683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav/* 2683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Copyright (C) 2015 The Android Open Source Project 3683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 4683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Licensed under the Apache License, Version 2.0 (the "License"); 5683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * you may not use this file except in compliance with the License. 6683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * You may obtain a copy of the License at 7683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 8683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * http://www.apache.org/licenses/LICENSE-2.0 9683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 10683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Unless required by applicable law or agreed to in writing, software 11683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * distributed under the License is distributed on an "AS IS" BASIS, 12683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * See the License for the specific language governing permissions and 14683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * limitations under the License. 15683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav */ 16683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 17683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavpackage com.android.providers.settings; 18683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 19683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.content.ContentResolver; 20683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.content.ContentValues; 21683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.database.ContentObserver; 22683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.database.Cursor; 23683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.net.Uri; 24683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.Handler; 25683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.Looper; 26683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.SystemClock; 27683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.UserHandle; 28683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.provider.Settings; 29683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.util.Log; 30683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 31683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport java.util.concurrent.atomic.AtomicBoolean; 32683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 33683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav/** 34683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Tests for the SettingContentProvider. 35683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 36683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Before you run this test you must add a secondary user. 37683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav */ 38683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavpublic class SettingsProviderTest extends BaseSettingsProviderTest { 39683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final String LOG_TAG = "SettingsProviderTest"; 40683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 41683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final long WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS = 2000; // 2 sec 42683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 43683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final String[] NAME_VALUE_COLUMNS = new String[]{ 44683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE 45683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav }; 46683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 47683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private final Object mLock = new Object(); 48683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 4943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetGlobalViaFrontEndApiForSystemUser() throws Exception { 5043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_GLOBAL, UserHandle.USER_SYSTEM); 51683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 52683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 5343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetGlobalViaFrontEndApiForNonSystemUser() throws Exception { 5443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen if (mSecondaryUserId == UserHandle.USER_SYSTEM) { 55683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.w(LOG_TAG, "No secondary user. Skipping " 5643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen + "testSetAndGetGlobalViaFrontEndApiForNonSystemUser"); 57683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return; 58683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 59683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_GLOBAL, mSecondaryUserId); 60683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 61683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 6243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetSecureViaFrontEndApiForSystemUser() throws Exception { 6343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SECURE, UserHandle.USER_SYSTEM); 64683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 65683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 6643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetSecureViaFrontEndApiForNonSystemUser() throws Exception { 6743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen if (mSecondaryUserId == UserHandle.USER_SYSTEM) { 68683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.w(LOG_TAG, "No secondary user. Skipping " 6943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen + "testSetAndGetSecureViaFrontEndApiForNonSystemUser"); 70683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return; 71683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 72683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SECURE, mSecondaryUserId); 73683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 74683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 7543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetSystemViaFrontEndApiForSystemUser() throws Exception { 7643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SYSTEM, UserHandle.USER_SYSTEM); 77683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 78683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 7943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen public void testSetAndGetSystemViaFrontEndApiForNonSystemUser() throws Exception { 8043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen if (mSecondaryUserId == UserHandle.USER_SYSTEM) { 81683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.w(LOG_TAG, "No secondary user. Skipping " 8243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen + "testSetAndGetSystemViaFrontEndApiForNonSystemUser"); 83683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return; 84683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 85683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SYSTEM, mSecondaryUserId); 86683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 87683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 88683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSetAndGetGlobalViaProviderApi() throws Exception { 89683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_GLOBAL); 90683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 91683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 92683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSetAndGetSecureViaProviderApi() throws Exception { 93683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_SECURE); 94683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 95683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 96683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSetAndGetSystemViaProviderApi() throws Exception { 97683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_SYSTEM); 98683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 99683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 100683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSelectAllGlobalViaProviderApi() throws Exception { 101683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_GLOBAL, 102683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); 103683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 104683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_GLOBAL, 105683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME); 106683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 107683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 108683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 109683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 110683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 111683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSelectAllSecureViaProviderApi() throws Exception { 112683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_SECURE, 113683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); 114683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 115683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_SECURE, 116683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME); 117683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 118683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_SECURE, FAKE_SETTING_NAME); 119683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 120683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 121683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 122683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSelectAllSystemViaProviderApi() throws Exception { 123683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_SYSTEM, 124683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE, true); 125683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 126683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_SYSTEM, 127683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME); 128683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 129683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); 130683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 131683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 132683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 133683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryUpdateDeleteGlobalViaProviderApi() throws Exception { 134683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_GLOBAL); 135683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 136683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 137683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryUpdateDeleteSecureViaProviderApi() throws Exception { 138683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_SECURE); 139683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 140683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 141683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryUpdateDeleteSystemViaProviderApi() throws Exception { 142683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_SYSTEM); 143683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 144683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 145683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testBulkInsertGlobalViaProviderApi() throws Exception { 146683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav toTestBulkInsertViaProviderApiForType(SETTING_TYPE_GLOBAL); 147683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 148683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 149683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testBulkInsertSystemViaProviderApi() throws Exception { 150683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav toTestBulkInsertViaProviderApiForType(SETTING_TYPE_SYSTEM); 151683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 152683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 153683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testBulkInsertSecureViaProviderApi() throws Exception { 154683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav toTestBulkInsertViaProviderApiForType(SETTING_TYPE_SECURE); 155683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 156683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 157683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testAppCannotRunsSystemOutOfMemoryWritingSystemSettings() throws Exception { 158683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav int insertedCount = 0; 159683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 160683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav for (; insertedCount < 1200; insertedCount++) { 161683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.w(LOG_TAG, "Adding app specific setting: " + insertedCount); 162683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav insertStringViaProviderApi(SETTING_TYPE_SYSTEM, 163683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String.valueOf(insertedCount), FAKE_SETTING_VALUE, false); 164683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 165683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav fail("Adding app specific settings must be bound."); 166683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } catch (Exception e) { 167683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav for (; insertedCount >= 0; insertedCount--) { 168683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.w(LOG_TAG, "Removing app specific setting: " + insertedCount); 169683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, 170683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String.valueOf(insertedCount)); 171683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 172683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 173683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 174683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 175683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryStringInBracketsGlobalViaProviderApiForType() throws Exception { 176683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_GLOBAL); 177683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 178683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 179683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryStringInBracketsSecureViaProviderApiForType() throws Exception { 180683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_SECURE); 181683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 182683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 183683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testQueryStringInBracketsSystemViaProviderApiForType() throws Exception { 184683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_SYSTEM); 185683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 186683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 1872849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav public void testQueryStringWithAppendedNameToUriViaProviderApi() throws Exception { 1882849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav // Make sure we have a clean slate. 1892849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); 1902849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav 1912849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav try { 1922849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav // Insert the setting. 1932849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav final Uri uri = insertStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME, 1942849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav FAKE_SETTING_VALUE, false); 1952849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav Uri expectUri = Uri.withAppendedPath(getBaseUriForType(SETTING_TYPE_SYSTEM), 1962849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav FAKE_SETTING_NAME); 1972849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav assertEquals("Did not get expected Uri.", expectUri, uri); 1982849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav 1992849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav // Make sure the first setting is there. 2002849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav String firstValue = queryStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME, 2012849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav false, true); 2022849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav assertEquals("Setting must be present", FAKE_SETTING_VALUE, firstValue); 2032849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav } finally { 2042849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav // Clean up. 2052849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); 2062849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav } 2072849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav } 2082849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav 209683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void doTestQueryStringInBracketsViaProviderApiForType(int type) { 210683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure we have a clean slate. 211683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME); 212683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 213683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 214683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Insert the setting. 215683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final Uri uri = insertStringViaProviderApi(type, FAKE_SETTING_NAME, 216683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_VALUE, false); 217683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri expectUri = Uri.withAppendedPath(getBaseUriForType(type), FAKE_SETTING_NAME); 218683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Did not get expected Uri.", expectUri, uri); 219683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 220683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the first setting is there. 2212849465ee19febd5135cb6ab8cb548a3c8ac6a24Svetoslav String firstValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME, true, false); 222683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting must be present", FAKE_SETTING_VALUE, firstValue); 223683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 224683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Clean up. 225683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME); 226683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 227683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 228683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 229683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void toTestBulkInsertViaProviderApiForType(int type) { 230683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure we have a clean slate. 231683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME); 232683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME_1); 2333a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki deleteStringViaProviderApi(type, FAKE_SETTING_NAME_2); 234683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 235683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 236683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 2373a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki ContentValues[] allValues = new ContentValues[3]; 238683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 239683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Insert the first setting. 240683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentValues firstValues = new ContentValues(); 241683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav firstValues.put(Settings.NameValueTable.NAME, FAKE_SETTING_NAME); 242683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav firstValues.put(Settings.NameValueTable.VALUE, FAKE_SETTING_VALUE); 243683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav allValues[0] = firstValues; 244683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 2453a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki // Insert the second setting. 246683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentValues secondValues = new ContentValues(); 247683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav secondValues.put(Settings.NameValueTable.NAME, FAKE_SETTING_NAME_1); 248683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav secondValues.put(Settings.NameValueTable.VALUE, FAKE_SETTING_VALUE_1); 249683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav allValues[1] = secondValues; 250683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 2513a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki // Insert the third setting. (null) 2523a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki ContentValues thirdValues = new ContentValues(); 2533a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki thirdValues.put(Settings.NameValueTable.NAME, FAKE_SETTING_NAME_2); 2543a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki thirdValues.put(Settings.NameValueTable.VALUE, FAKE_SETTING_VALUE_2); 2553a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki allValues[2] = thirdValues; 2563a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki 257683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Verify insertion count. 258683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int insertCount = getContext().getContentResolver().bulkInsert(uri, allValues); 2593a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki assertSame("Couldn't insert both values", 3, insertCount); 260683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 261683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the first setting is there. 262683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String firstValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME); 263683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("First setting must be present", FAKE_SETTING_VALUE, firstValue); 264683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 265683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the second setting is there. 266683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String secondValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME_1); 267683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Second setting must be present", FAKE_SETTING_VALUE_1, secondValue); 2683a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki 2693a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki // Make sure the third setting is there. 2703a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki String thirdValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME_2); 2713a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki assertEquals("Third setting must be present", FAKE_SETTING_VALUE_2, thirdValue); 272683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 273683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Clean up. 274683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME); 275683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME_1); 2763a2c3578ba5bf8642c994fa357a96eaa4a38cdc9Makoto Onuki deleteStringViaProviderApi(type, FAKE_SETTING_NAME_2); 277683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 278683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 279683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 280683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void doTestQueryUpdateDeleteGlobalViaProviderApiForType(int type) throws Exception { 281683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure it is not there. 282683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(type, FAKE_SETTING_NAME); 283683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 284683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Now selection should return nothing. 285683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); 286683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertNull("Setting should not be present.", value); 287683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 288683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Insert the setting. 289683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = insertStringViaProviderApi(type, 290683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); 291683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri expectUri = Uri.withAppendedPath(getBaseUriForType(type), FAKE_SETTING_NAME); 292683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Did not get expected Uri.", expectUri, uri); 293683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 294683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Now selection should return the setting. 295683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); 296683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting should be present.", FAKE_SETTING_VALUE, value); 297683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 298683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Update the setting. 299683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int changeCount = updateStringViaProviderApiSetting(type, 300683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE_1); 301683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Did not get expected change count.", 1, changeCount); 302683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 303683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Now selection should return the new setting. 304683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); 305683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting should be present.", FAKE_SETTING_VALUE_1, value); 306683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 307683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Delete the setting. 308683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int deletedCount = deleteStringViaProviderApi(type, 309683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME); 310683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Did not get expected deleted count", 1, deletedCount); 311683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 312683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Now selection should return nothing. 313683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); 314683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertNull("Setting should not be present.", value); 315683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 316683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 317683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void performSetAndGetSettingTestViaFrontEndApi(int type, int userId) 318683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throws Exception { 319683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 320683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Change the setting and assert a successful change. 321683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaFrontEndApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, 322683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_VALUE, userId); 323683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 324683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Remove the setting. 325683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setStringViaFrontEndApiSetting(type, FAKE_SETTING_NAME, null, userId); 326683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 327683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 328683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 329683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void performSetAndGetSettingTestViaProviderApi(int type) 330683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throws Exception { 331683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 332683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Change the setting and assert a successful change. 333683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaProviderApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, 334683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_VALUE, true); 335683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 336683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Remove the setting. 337683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingViaProviderApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, null, 338683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav true); 339683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 340683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 341683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 342683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void setSettingViaFrontEndApiAndAssertSuccessfulChange(final int type, 343683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final String name, final String value, final int userId) throws Exception { 344683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingAndAssertSuccessfulChange(new Runnable() { 345683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav @Override 346683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void run() { 347683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setStringViaFrontEndApiSetting(type, name, value, userId); 348683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 349683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav }, type, name, value, userId); 350683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 351683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 352683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void setSettingViaProviderApiAndAssertSuccessfulChange(final int type, 353683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final String name, final String value, final boolean withTableRowUri) 354683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throws Exception { 355683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setSettingAndAssertSuccessfulChange(new Runnable() { 356683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav @Override 357683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void run() { 358683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav insertStringViaProviderApi(type, name, value, withTableRowUri); 359683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 36043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen }, type, name, value, UserHandle.USER_SYSTEM); 361683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 362683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 363683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void setSettingAndAssertSuccessfulChange(Runnable setCommand, final int type, 364683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final String name, final String value, final int userId) throws Exception { 365683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentResolver contentResolver = getContext().getContentResolver(); 366683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 367683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final Uri settingUri = getBaseUriForType(type); 368683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 369683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final AtomicBoolean success = new AtomicBoolean(); 370683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 371683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentObserver contentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { 372683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void onChange(boolean selfChange, Uri changeUri, int changeId) { 373683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.i(LOG_TAG, "onChange(" + selfChange + ", " + changeUri + ", " + changeId + ")"); 374683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Wrong change Uri", changeUri, settingUri); 375683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Wrong user id", userId, changeId); 376683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String changeValue = getStringViaFrontEndApiSetting(type, name, userId); 377683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Wrong setting value", value, changeValue); 378683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 379683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav success.set(true); 380683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 381683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav synchronized (mLock) { 382683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav mLock.notifyAll(); 383683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 384683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 385683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav }; 386683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 387683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav contentResolver.registerContentObserver(settingUri, false, contentObserver, userId); 388683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 389683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 390683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setCommand.run(); 391683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 392683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long startTimeMillis = SystemClock.uptimeMillis(); 393683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav synchronized (mLock) { 394683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (success.get()) { 395683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return; 396683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 397683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis; 398683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (elapsedTimeMillis > WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS) { 399683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav fail("Could not change setting for " 400683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav + WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS + " ms"); 401683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 402683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long remainingTimeMillis = WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS 403683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav - elapsedTimeMillis; 404683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 405683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav mLock.wait(remainingTimeMillis); 406683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } catch (InterruptedException ie) { 407683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav /* ignore */ 408683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 409683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 410683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 411683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav contentResolver.unregisterContentObserver(contentObserver); 412683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 413683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 414683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 415683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private void queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(int type, 416683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String name) { 417683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 418683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 419683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Cursor cursor = getContext().getContentResolver().query(uri, NAME_VALUE_COLUMNS, 420683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav null, null, null); 421683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 422683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (cursor == null || !cursor.moveToFirst()) { 423683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav fail("Nothing selected"); 424683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 425683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 426683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 427683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int nameColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.NAME); 428683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 429683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav while (cursor.moveToNext()) { 430683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String currentName = cursor.getString(nameColumnIdx); 431683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (name.equals(currentName)) { 432683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return; 433683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 434683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 435683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 436683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav fail("Not found setting: " + name); 437683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 438683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav cursor.close(); 439683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 440683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 441683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav} 442