BaseSettingsProviderTest.java revision 683914bfb13908bf380a25258cd45bcf43f13dc9
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.content.Context; 22683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.content.pm.UserInfo; 23683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.database.Cursor; 24683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.net.Uri; 25683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.UserHandle; 26683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.UserManager; 27683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.provider.Settings; 28683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.test.AndroidTestCase; 29683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 30683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport java.util.List; 31683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 32683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav/** 33683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Base class for the SettingContentProvider tests. 34683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav */ 35683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavabstract class BaseSettingsProviderTest extends AndroidTestCase { 36683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final int SETTING_TYPE_GLOBAL = 1; 37683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final int SETTING_TYPE_SECURE = 2; 38683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final int SETTING_TYPE_SYSTEM = 3; 39683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 40683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final String FAKE_SETTING_NAME = "fake_setting_name"; 41683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final String FAKE_SETTING_NAME_1 = "fake_setting_name1"; 42683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final String FAKE_SETTING_VALUE = "fake_setting_value"; 43683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static final String FAKE_SETTING_VALUE_1 = "fake_setting_value_1"; 44683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 45683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final String[] NAME_VALUE_COLUMNS = new String[] { 46683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE 47683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav }; 48683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 49683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected int mSecondaryUserId = UserHandle.USER_OWNER; 50683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 51683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav @Override 52683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void setContext(Context context) { 53683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav super.setContext(context); 54683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 55683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 56683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav List<UserInfo> users = userManager.getUsers(); 57683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int userCount = users.size(); 58683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav for (int i = 0; i < userCount; i++) { 59683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav UserInfo user = users.get(i); 60683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (!user.isPrimary() && !user.isManagedProfile()) { 61683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav mSecondaryUserId = user.id; 62683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav break; 63683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 64683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 65683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 66683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 67683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected void setStringViaFrontEndApiSetting(int type, String name, String value, int userId) { 68683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentResolver contentResolver = getContext().getContentResolver(); 69683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 70683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav switch (type) { 71683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_GLOBAL: { 72683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Settings.Global.putStringForUser(contentResolver, name, value, userId); 73683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } break; 74683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 75683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SECURE: { 76683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Settings.Secure.putStringForUser(contentResolver, name, value, userId); 77683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } break; 78683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 79683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SYSTEM: { 80683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Settings.System.putStringForUser(contentResolver, name, value, userId); 81683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } break; 82683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 83683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav default: { 84683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throw new IllegalArgumentException("Invalid type: " + type); 85683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 86683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 87683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 88683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 89683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected String getStringViaFrontEndApiSetting(int type, String name, int userId) { 90683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentResolver contentResolver = getContext().getContentResolver(); 91683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 92683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav switch (type) { 93683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_GLOBAL: { 94683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.Global.getStringForUser(contentResolver, name, userId); 95683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 96683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 97683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SECURE: { 98683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.Secure.getStringForUser(contentResolver, name, userId); 99683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 100683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 101683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SYSTEM: { 102683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.System.getStringForUser(contentResolver, name, userId); 103683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 104683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 105683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav default: { 106683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throw new IllegalArgumentException("Invalid type: " + type); 107683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 108683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 109683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 110683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 111683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected Uri insertStringViaProviderApi(int type, String name, String value, 112683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav boolean withTableRowUri) { 113683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 114683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (withTableRowUri) { 115683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav uri = Uri.withAppendedPath(uri, name); 116683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 117683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentValues values = new ContentValues(); 118683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav values.put(Settings.NameValueTable.NAME, name); 119683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav values.put(Settings.NameValueTable.VALUE, value); 120683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 121683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return getContext().getContentResolver().insert(uri, values); 122683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 123683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 124683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected int deleteStringViaProviderApi(int type, String name) { 125683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 126683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return getContext().getContentResolver().delete(uri, "name=?", new String[]{name}); 127683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 128683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 129683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected int updateStringViaProviderApiSetting(int type, String name, String value) { 130683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 131683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav ContentValues values = new ContentValues(); 132683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav values.put(Settings.NameValueTable.NAME, name); 133683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav values.put(Settings.NameValueTable.VALUE, value); 134683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return getContext().getContentResolver().update(uri, values, "name=?", 135683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav new String[]{name}); 136683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 137683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 138683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected String queryStringViaProviderApi(int type, String name) { 139683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return queryStringViaProviderApi(type, name, false); 140683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 141683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 142683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected String queryStringViaProviderApi(int type, String name, boolean queryStringInQuotes) { 143683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Uri uri = getBaseUriForType(type); 144683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 145683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String queryString = queryStringInQuotes ? "(name=?)" : "name=?"; 146683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 147683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Cursor cursor = getContext().getContentResolver().query(uri, NAME_VALUE_COLUMNS, 148683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav queryString, new String[]{name}, null); 149683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 150683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (cursor == null) { 151683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return null; 152683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 153683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 154683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 155683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav if (cursor.moveToFirst()) { 156683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final int valueColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.VALUE); 157683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return cursor.getString(valueColumnIdx); 158683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 159683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 160683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav cursor.close(); 161683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 162683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 163683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return null; 164683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 165683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 166683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav protected static Uri getBaseUriForType(int type) { 167683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav switch (type) { 168683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_GLOBAL: { 169683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.Global.CONTENT_URI; 170683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 171683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 172683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SECURE: { 173683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.Secure.CONTENT_URI; 174683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 175683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 176683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav case SETTING_TYPE_SYSTEM: { 177683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav return Settings.System.CONTENT_URI; 178683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 179683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 180683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav default: { 181683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav throw new IllegalArgumentException("Invalid type: " + type); 182683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 183683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 184683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 185683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav} 186