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