blob: b17b4cc1e9caf9e021cd10026968d8b70cc5a6a4 [file] [log] [blame]
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.providers.settings;
18
19import android.content.ComponentName;
20import android.content.ContentValues;
21import android.content.Context;
22import android.content.Intent;
23import android.content.pm.ActivityInfo;
Dianne Hackborn13579ed2012-11-28 18:05:36 -080024import android.content.pm.IPackageManager;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070025import android.content.pm.PackageManager;
Romain Guyf02811f2010-03-09 16:33:51 -080026import android.content.res.XmlResourceParser;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070027import android.database.Cursor;
28import android.database.sqlite.SQLiteDatabase;
29import android.database.sqlite.SQLiteOpenHelper;
30import android.database.sqlite.SQLiteStatement;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070031import android.media.AudioManager;
32import android.media.AudioService;
33import android.net.ConnectivityManager;
Jerome Poichet147b4d72014-05-12 18:13:27 -070034import android.os.Build;
Christopher Tate06efb532012-08-24 15:29:27 -070035import android.os.Environment;
Dianne Hackborn13579ed2012-11-28 18:05:36 -080036import android.os.RemoteException;
37import android.os.ServiceManager;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070038import android.os.SystemProperties;
Christopher Tate06efb532012-08-24 15:29:27 -070039import android.os.UserHandle;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070040import android.provider.Settings;
Jeff Sharkey625239a2012-09-26 22:03:49 -070041import android.provider.Settings.Global;
Amith Yamasani156c4352010-03-05 17:10:03 -080042import android.provider.Settings.Secure;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070043import android.text.TextUtils;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070044import android.util.Log;
Suchi Amalapurapu40e47252010-04-07 16:15:50 -070045
Gilles Debunnefa53d302011-07-08 10:40:51 -070046import com.android.internal.content.PackageHelper;
Gilles Debunnefa53d302011-07-08 10:40:51 -070047import com.android.internal.telephony.RILConstants;
Naveen Kallab4d485c2013-07-03 16:39:27 -070048import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
Gilles Debunnefa53d302011-07-08 10:40:51 -070049import com.android.internal.util.XmlUtils;
50import com.android.internal.widget.LockPatternUtils;
51import com.android.internal.widget.LockPatternView;
52
53import org.xmlpull.v1.XmlPullParser;
54import org.xmlpull.v1.XmlPullParserException;
55
Christopher Tate06efb532012-08-24 15:29:27 -070056import java.io.File;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070057import java.io.IOException;
Dianne Hackborn24117ce2010-07-12 15:54:38 -070058import java.util.HashSet;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070059import java.util.List;
60
61/**
62 * Database helper class for {@link SettingsProvider}.
63 * Mostly just has a bit {@link #onCreate} to initialize the database.
64 */
James Wylder074da8f2009-02-25 08:38:31 -060065public class DatabaseHelper extends SQLiteOpenHelper {
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070066 private static final String TAG = "SettingsProvider";
67 private static final String DATABASE_NAME = "settings.db";
Jim Millerf1860552009-09-09 17:46:35 -070068
69 // Please, please please. If you update the database version, check to make sure the
70 // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
71 // is properly propagated through your change. Not doing so will result in a loss of user
72 // settings.
Jeff Brown05af6ad2014-09-30 20:54:30 -070073 private static final int DATABASE_VERSION = 113;
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -070074
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070075 private Context mContext;
Christopher Tate06efb532012-08-24 15:29:27 -070076 private int mUserHandle;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -070077
Dianne Hackborn24117ce2010-07-12 15:54:38 -070078 private static final HashSet<String> mValidTables = new HashSet<String>();
79
Christopher Tate06efb532012-08-24 15:29:27 -070080 private static final String TABLE_SYSTEM = "system";
81 private static final String TABLE_SECURE = "secure";
82 private static final String TABLE_GLOBAL = "global";
83
Dianne Hackborn24117ce2010-07-12 15:54:38 -070084 static {
Christopher Tate06efb532012-08-24 15:29:27 -070085 mValidTables.add(TABLE_SYSTEM);
86 mValidTables.add(TABLE_SECURE);
87 mValidTables.add(TABLE_GLOBAL);
Dianne Hackborn24117ce2010-07-12 15:54:38 -070088 mValidTables.add("bluetooth_devices");
89 mValidTables.add("bookmarks");
90
91 // These are old.
92 mValidTables.add("favorites");
93 mValidTables.add("gservices");
94 mValidTables.add("old_favorites");
95 }
96
Christopher Tate06efb532012-08-24 15:29:27 -070097 static String dbNameForUser(final int userHandle) {
98 // The owner gets the unadorned db name;
99 if (userHandle == UserHandle.USER_OWNER) {
100 return DATABASE_NAME;
101 } else {
102 // Place the database in the user-specific data tree so that it's
103 // cleaned up automatically when the user is deleted.
104 File databaseFile = new File(
105 Environment.getUserSystemDirectory(userHandle), DATABASE_NAME);
106 return databaseFile.getPath();
107 }
108 }
109
110 public DatabaseHelper(Context context, int userHandle) {
111 super(context, dbNameForUser(userHandle), null, DATABASE_VERSION);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700112 mContext = context;
Christopher Tate06efb532012-08-24 15:29:27 -0700113 mUserHandle = userHandle;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700114 }
115
Dianne Hackborn24117ce2010-07-12 15:54:38 -0700116 public static boolean isValidTable(String name) {
117 return mValidTables.contains(name);
118 }
119
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800120 private void createSecureTable(SQLiteDatabase db) {
121 db.execSQL("CREATE TABLE secure (" +
122 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
123 "name TEXT UNIQUE ON CONFLICT REPLACE," +
124 "value TEXT" +
125 ");");
126 db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
127 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700128
Christopher Tate06efb532012-08-24 15:29:27 -0700129 private void createGlobalTable(SQLiteDatabase db) {
130 db.execSQL("CREATE TABLE global (" +
131 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
132 "name TEXT UNIQUE ON CONFLICT REPLACE," +
133 "value TEXT" +
134 ");");
135 db.execSQL("CREATE INDEX globalIndex1 ON global (name);");
136 }
137
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700138 @Override
139 public void onCreate(SQLiteDatabase db) {
140 db.execSQL("CREATE TABLE system (" +
141 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
142 "name TEXT UNIQUE ON CONFLICT REPLACE," +
143 "value TEXT" +
144 ");");
145 db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
146
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800147 createSecureTable(db);
148
Christopher Tate06efb532012-08-24 15:29:27 -0700149 // Only create the global table for the singleton 'owner' user
150 if (mUserHandle == UserHandle.USER_OWNER) {
151 createGlobalTable(db);
152 }
153
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700154 db.execSQL("CREATE TABLE bluetooth_devices (" +
155 "_id INTEGER PRIMARY KEY," +
156 "name TEXT," +
157 "addr TEXT," +
158 "channel INTEGER," +
159 "type INTEGER" +
160 ");");
161
162 db.execSQL("CREATE TABLE bookmarks (" +
163 "_id INTEGER PRIMARY KEY," +
164 "title TEXT," +
165 "folder TEXT," +
166 "intent TEXT," +
167 "shortcut INTEGER," +
168 "ordering INTEGER" +
169 ");");
170
171 db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
172 db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
173
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700174 // Populate bookmarks table with initial bookmarks
Dianne Hackborn13579ed2012-11-28 18:05:36 -0800175 boolean onlyCore = false;
176 try {
177 onlyCore = IPackageManager.Stub.asInterface(ServiceManager.getService(
178 "package")).isOnlyCoreApps();
179 } catch (RemoteException e) {
180 }
181 if (!onlyCore) {
182 loadBookmarks(db);
183 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700184
185 // Load initial volume levels into DB
186 loadVolumeLevels(db);
187
188 // Load inital settings values
189 loadSettings(db);
190 }
191
192 @Override
193 public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700194 Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
195 + currentVersion);
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700196
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700197 int upgradeVersion = oldVersion;
198
199 // Pattern for upgrade blocks:
200 //
201 // if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
202 // .. your upgrade logic..
203 // upgradeVersion = [the DATABASE_VERSION you set]
204 // }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700205
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700206 if (upgradeVersion == 20) {
207 /*
208 * Version 21 is part of the volume control refresh. There is no
209 * longer a UI-visible for setting notification vibrate on/off (in
210 * our design), but the functionality still exists. Force the
211 * notification vibrate to on.
212 */
213 loadVibrateSetting(db, true);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700214
215 upgradeVersion = 21;
216 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700217
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700218 if (upgradeVersion < 22) {
219 upgradeVersion = 22;
220 // Upgrade the lock gesture storage location and format
221 upgradeLockPatternLocation(db);
222 }
223
224 if (upgradeVersion < 23) {
225 db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
226 upgradeVersion = 23;
227 }
228
229 if (upgradeVersion == 23) {
230 db.beginTransaction();
231 try {
232 db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
233 db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
234 // Shortcuts, applications, folders
235 db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
236 // Photo frames, clocks
Wink Saville04e71b32009-04-02 11:00:54 -0700237 db.execSQL(
238 "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700239 // Search boxes
240 db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
241 db.setTransactionSuccessful();
242 } finally {
243 db.endTransaction();
244 }
245 upgradeVersion = 24;
246 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700247
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -0700248 if (upgradeVersion == 24) {
249 db.beginTransaction();
250 try {
251 // The value of the constants for preferring wifi or preferring mobile have been
252 // swapped, so reload the default.
253 db.execSQL("DELETE FROM system WHERE name='network_preference'");
254 db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
255 ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
256 db.setTransactionSuccessful();
257 } finally {
258 db.endTransaction();
259 }
260 upgradeVersion = 25;
261 }
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800262
263 if (upgradeVersion == 25) {
264 db.beginTransaction();
265 try {
266 db.execSQL("ALTER TABLE favorites ADD uri TEXT");
267 db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
268 db.setTransactionSuccessful();
269 } finally {
270 db.endTransaction();
271 }
272 upgradeVersion = 26;
273 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700274
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800275 if (upgradeVersion == 26) {
276 // This introduces the new secure settings table.
277 db.beginTransaction();
278 try {
279 createSecureTable(db);
280 db.setTransactionSuccessful();
281 } finally {
282 db.endTransaction();
283 }
284 upgradeVersion = 27;
285 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700286
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800287 if (upgradeVersion == 27) {
Amith Yamasani156c4352010-03-05 17:10:03 -0800288 String[] settingsToMove = {
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800289 Settings.Secure.ADB_ENABLED,
290 Settings.Secure.ANDROID_ID,
291 Settings.Secure.BLUETOOTH_ON,
292 Settings.Secure.DATA_ROAMING,
293 Settings.Secure.DEVICE_PROVISIONED,
294 Settings.Secure.HTTP_PROXY,
295 Settings.Secure.INSTALL_NON_MARKET_APPS,
296 Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
297 Settings.Secure.LOGGING_ID,
298 Settings.Secure.NETWORK_PREFERENCE,
299 Settings.Secure.PARENTAL_CONTROL_ENABLED,
300 Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
301 Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
302 Settings.Secure.SETTINGS_CLASSNAME,
303 Settings.Secure.USB_MASS_STORAGE_ENABLED,
304 Settings.Secure.USE_GOOGLE_MAIL,
305 Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
306 Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
307 Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
308 Settings.Secure.WIFI_ON,
309 Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
310 Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
311 Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
312 Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
313 Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
314 Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
315 Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
316 Settings.Secure.WIFI_WATCHDOG_ON,
317 Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
318 Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
319 Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
320 };
Christopher Tate92198742012-09-07 12:00:13 -0700321 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800322 upgradeVersion = 28;
323 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700324
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800325 if (upgradeVersion == 28 || upgradeVersion == 29) {
326 // Note: The upgrade to 28 was flawed since it didn't delete the old
327 // setting first before inserting. Combining 28 and 29 with the
328 // fixed version.
329
330 // This upgrade adds the STREAM_NOTIFICATION type to the list of
331 // types affected by ringer modes (silent, vibrate, etc.)
332 db.beginTransaction();
333 try {
334 db.execSQL("DELETE FROM system WHERE name='"
335 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
336 int newValue = (1 << AudioManager.STREAM_RING)
337 | (1 << AudioManager.STREAM_NOTIFICATION)
338 | (1 << AudioManager.STREAM_SYSTEM);
339 db.execSQL("INSERT INTO system ('name', 'value') values ('"
340 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
341 + String.valueOf(newValue) + "')");
342 db.setTransactionSuccessful();
343 } finally {
344 db.endTransaction();
345 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700346
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800347 upgradeVersion = 30;
348 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700349
The Android Open Source Project9266c552009-01-15 16:12:10 -0800350 if (upgradeVersion == 30) {
351 /*
352 * Upgrade 31 clears the title for all quick launch shortcuts so the
353 * activities' titles will be resolved at display time. Also, the
354 * folder is changed to '@quicklaunch'.
355 */
356 db.beginTransaction();
357 try {
358 db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
359 db.execSQL("UPDATE bookmarks SET title = ''");
360 db.setTransactionSuccessful();
361 } finally {
362 db.endTransaction();
363 }
364 upgradeVersion = 31;
365 }
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -0800366
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800367 if (upgradeVersion == 31) {
368 /*
The Android Open Source Projectba87e3e2009-03-13 13:04:22 -0700369 * Animations are now managed in preferences, and may be
370 * enabled or disabled based on product resources.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800371 */
372 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700373 SQLiteStatement stmt = null;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800374 try {
375 db.execSQL("DELETE FROM system WHERE name='"
376 + Settings.System.WINDOW_ANIMATION_SCALE + "'");
377 db.execSQL("DELETE FROM system WHERE name='"
378 + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
Vasu Nori89206fd2010-03-22 10:37:03 -0700379 stmt = db.compileStatement("INSERT INTO system(name,value)"
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800380 + " VALUES(?,?);");
381 loadDefaultAnimationSettings(stmt);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800382 db.setTransactionSuccessful();
383 } finally {
384 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700385 if (stmt != null) stmt.close();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800386 }
387 upgradeVersion = 32;
388 }
389
390 if (upgradeVersion == 32) {
391 // The Wi-Fi watchdog SSID list is now seeded with the value of
392 // the property ro.com.android.wifi-watchlist
393 String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
394 if (!TextUtils.isEmpty(wifiWatchList)) {
395 db.beginTransaction();
396 try {
397 db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
398 Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
399 wifiWatchList + "');");
400 db.setTransactionSuccessful();
401 } finally {
402 db.endTransaction();
403 }
404 }
405 upgradeVersion = 33;
406 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -0700407
The Android Open Source Project4df24232009-03-05 14:34:35 -0800408 if (upgradeVersion == 33) {
409 // Set the default zoom controls to: tap-twice to bring up +/-
410 db.beginTransaction();
411 try {
412 db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
413 db.setTransactionSuccessful();
414 } finally {
415 db.endTransaction();
416 }
417 upgradeVersion = 34;
418 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800419
Mike Lockwoodbcab8df2009-06-25 16:39:09 -0400420 if (upgradeVersion == 34) {
421 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700422 SQLiteStatement stmt = null;
Mike Lockwoodbcab8df2009-06-25 16:39:09 -0400423 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700424 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
Dianne Hackborncf098292009-07-01 19:55:20 -0700425 + " VALUES(?,?);");
426 loadSecure35Settings(stmt);
Dianne Hackborncf098292009-07-01 19:55:20 -0700427 db.setTransactionSuccessful();
428 } finally {
429 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700430 if (stmt != null) stmt.close();
Dianne Hackborncf098292009-07-01 19:55:20 -0700431 }
Jim Millerf1860552009-09-09 17:46:35 -0700432 upgradeVersion = 35;
Mike Lockwood02901eb2009-08-25 15:11:17 -0700433 }
434 // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
435 // was accidentally done out of order here.
436 // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
437 // and we intentionally do nothing from 35 to 36 now.
438 if (upgradeVersion == 35) {
The Android Open Source Project575d1af2009-07-03 08:55:59 -0700439 upgradeVersion = 36;
Dianne Hackborncf098292009-07-01 19:55:20 -0700440 }
Mike Lockwood02901eb2009-08-25 15:11:17 -0700441
Eric Laurenta553c252009-07-17 12:17:14 -0700442 if (upgradeVersion == 36) {
443 // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
444 // types affected by ringer modes (silent, vibrate, etc.)
445 db.beginTransaction();
446 try {
447 db.execSQL("DELETE FROM system WHERE name='"
448 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
449 int newValue = (1 << AudioManager.STREAM_RING)
450 | (1 << AudioManager.STREAM_NOTIFICATION)
451 | (1 << AudioManager.STREAM_SYSTEM)
452 | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
453 db.execSQL("INSERT INTO system ('name', 'value') values ('"
454 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
455 + String.valueOf(newValue) + "')");
456 db.setTransactionSuccessful();
457 } finally {
458 db.endTransaction();
459 }
Jim Miller48805752009-08-04 18:59:20 -0700460 upgradeVersion = 37;
Eric Laurenta553c252009-07-17 12:17:14 -0700461 }
462
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -0700463 if (upgradeVersion == 37) {
464 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700465 SQLiteStatement stmt = null;
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -0700466 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700467 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -0700468 + " VALUES(?,?);");
469 loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
470 R.string.airplane_mode_toggleable_radios);
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -0700471 db.setTransactionSuccessful();
472 } finally {
473 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700474 if (stmt != null) stmt.close();
Mike Lockwoodbd5ddf02009-07-29 21:37:14 -0700475 }
476 upgradeVersion = 38;
477 }
478
Mike Lockwood02901eb2009-08-25 15:11:17 -0700479 if (upgradeVersion == 38) {
480 db.beginTransaction();
481 try {
482 String value =
483 mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
484 db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -0700485 Settings.Global.ASSISTED_GPS_ENABLED + "','" + value + "');");
Mike Lockwood02901eb2009-08-25 15:11:17 -0700486 db.setTransactionSuccessful();
487 } finally {
488 db.endTransaction();
489 }
490
491 upgradeVersion = 39;
492 }
493
Dan Murphy951764b2009-08-27 14:59:03 -0500494 if (upgradeVersion == 39) {
Amith Yamasanif50c5112011-01-07 11:32:30 -0800495 upgradeAutoBrightness(db);
Dan Murphy951764b2009-08-27 14:59:03 -0500496 upgradeVersion = 40;
497 }
498
Dianne Hackbornbfe319e2009-09-21 00:34:05 -0700499 if (upgradeVersion == 40) {
500 /*
501 * All animations are now turned on by default!
502 */
503 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700504 SQLiteStatement stmt = null;
Dianne Hackbornbfe319e2009-09-21 00:34:05 -0700505 try {
506 db.execSQL("DELETE FROM system WHERE name='"
507 + Settings.System.WINDOW_ANIMATION_SCALE + "'");
508 db.execSQL("DELETE FROM system WHERE name='"
509 + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
Vasu Nori89206fd2010-03-22 10:37:03 -0700510 stmt = db.compileStatement("INSERT INTO system(name,value)"
Dianne Hackbornbfe319e2009-09-21 00:34:05 -0700511 + " VALUES(?,?);");
512 loadDefaultAnimationSettings(stmt);
Dianne Hackbornbfe319e2009-09-21 00:34:05 -0700513 db.setTransactionSuccessful();
514 } finally {
515 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700516 if (stmt != null) stmt.close();
Dianne Hackbornbfe319e2009-09-21 00:34:05 -0700517 }
518 upgradeVersion = 41;
519 }
520
Dianne Hackborn075a18d2009-09-26 12:43:19 -0700521 if (upgradeVersion == 41) {
522 /*
523 * Initialize newly public haptic feedback setting
524 */
525 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700526 SQLiteStatement stmt = null;
Dianne Hackborn075a18d2009-09-26 12:43:19 -0700527 try {
528 db.execSQL("DELETE FROM system WHERE name='"
529 + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'");
Vasu Nori89206fd2010-03-22 10:37:03 -0700530 stmt = db.compileStatement("INSERT INTO system(name,value)"
Dianne Hackborn075a18d2009-09-26 12:43:19 -0700531 + " VALUES(?,?);");
532 loadDefaultHapticSettings(stmt);
Dianne Hackborn075a18d2009-09-26 12:43:19 -0700533 db.setTransactionSuccessful();
534 } finally {
535 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700536 if (stmt != null) stmt.close();
Dianne Hackborn075a18d2009-09-26 12:43:19 -0700537 }
538 upgradeVersion = 42;
539 }
540
Amith Yamasaniae3ed702009-12-01 19:02:05 -0800541 if (upgradeVersion == 42) {
542 /*
543 * Initialize new notification pulse setting
544 */
545 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700546 SQLiteStatement stmt = null;
Amith Yamasaniae3ed702009-12-01 19:02:05 -0800547 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700548 stmt = db.compileStatement("INSERT INTO system(name,value)"
Amith Yamasaniae3ed702009-12-01 19:02:05 -0800549 + " VALUES(?,?);");
550 loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
551 R.bool.def_notification_pulse);
Amith Yamasaniae3ed702009-12-01 19:02:05 -0800552 db.setTransactionSuccessful();
553 } finally {
554 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700555 if (stmt != null) stmt.close();
Amith Yamasaniae3ed702009-12-01 19:02:05 -0800556 }
557 upgradeVersion = 43;
558 }
559
Eric Laurent484d2882009-12-08 09:05:45 -0800560 if (upgradeVersion == 43) {
561 /*
562 * This upgrade stores bluetooth volume separately from voice volume
563 */
564 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700565 SQLiteStatement stmt = null;
Eric Laurent484d2882009-12-08 09:05:45 -0800566 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700567 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
Eric Laurent484d2882009-12-08 09:05:45 -0800568 + " VALUES(?,?);");
569 loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO,
570 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
Eric Laurent484d2882009-12-08 09:05:45 -0800571 db.setTransactionSuccessful();
572 } finally {
573 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700574 if (stmt != null) stmt.close();
Eric Laurent484d2882009-12-08 09:05:45 -0800575 }
576 upgradeVersion = 44;
577 }
578
Doug Zongkeraed8f8e2010-01-07 18:07:50 -0800579 if (upgradeVersion == 44) {
580 /*
581 * Gservices was moved into vendor/google.
582 */
583 db.execSQL("DROP TABLE IF EXISTS gservices");
584 db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
585 upgradeVersion = 45;
586 }
San Mehat87734d32010-01-08 12:53:06 -0800587
588 if (upgradeVersion == 45) {
589 /*
590 * New settings for MountService
591 */
592 db.beginTransaction();
593 try {
594 db.execSQL("INSERT INTO secure(name,value) values('" +
595 Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');");
596 db.execSQL("INSERT INTO secure(name,value) values('" +
597 Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');");
598 db.execSQL("INSERT INTO secure(name,value) values('" +
599 Settings.Secure.MOUNT_UMS_PROMPT + "','1');");
600 db.execSQL("INSERT INTO secure(name,value) values('" +
601 Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');");
602 db.setTransactionSuccessful();
603 } finally {
604 db.endTransaction();
605 }
606 upgradeVersion = 46;
607 }
608
Dianne Hackborndf83afa2010-01-20 13:37:26 -0800609 if (upgradeVersion == 46) {
610 /*
611 * The password mode constants have changed; reset back to no
612 * password.
613 */
614 db.beginTransaction();
615 try {
616 db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
617 db.setTransactionSuccessful();
618 } finally {
619 db.endTransaction();
620 }
621 upgradeVersion = 47;
622 }
623
Jim Miller61766772010-02-12 14:56:49 -0800624
Dianne Hackborn9327f4f2010-01-29 10:38:29 -0800625 if (upgradeVersion == 47) {
626 /*
627 * The password mode constants have changed again; reset back to no
628 * password.
629 */
630 db.beginTransaction();
631 try {
632 db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
633 db.setTransactionSuccessful();
634 } finally {
635 db.endTransaction();
636 }
637 upgradeVersion = 48;
638 }
Jim Miller61766772010-02-12 14:56:49 -0800639
Mike LeBeau5d34e9b2010-02-10 19:34:56 -0800640 if (upgradeVersion == 48) {
641 /*
Dianne Hackborn21f1bd12010-02-19 17:02:21 -0800642 * Default recognition service no longer initialized here,
643 * moved to RecognitionManagerService.
Mike LeBeau5d34e9b2010-02-10 19:34:56 -0800644 */
Mike LeBeau5d34e9b2010-02-10 19:34:56 -0800645 upgradeVersion = 49;
646 }
Jim Miller31f90b62010-01-20 13:35:20 -0800647
Daniel Sandler0e9d2af2010-01-25 11:33:03 -0500648 if (upgradeVersion == 49) {
649 /*
650 * New settings for new user interface noises.
651 */
652 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700653 SQLiteStatement stmt = null;
Daniel Sandler0e9d2af2010-01-25 11:33:03 -0500654 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700655 stmt = db.compileStatement("INSERT INTO system(name,value)"
Daniel Sandler0e9d2af2010-01-25 11:33:03 -0500656 + " VALUES(?,?);");
657 loadUISoundEffectsSettings(stmt);
Daniel Sandler0e9d2af2010-01-25 11:33:03 -0500658 db.setTransactionSuccessful();
659 } finally {
660 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700661 if (stmt != null) stmt.close();
Daniel Sandler0e9d2af2010-01-25 11:33:03 -0500662 }
663
664 upgradeVersion = 50;
665 }
666
Oscar Montemayorf1cbfff2010-02-22 16:12:07 -0800667 if (upgradeVersion == 50) {
668 /*
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700669 * Install location no longer initiated here.
Oscar Montemayorf1cbfff2010-02-22 16:12:07 -0800670 */
Oscar Montemayorf1cbfff2010-02-22 16:12:07 -0800671 upgradeVersion = 51;
672 }
673
Amith Yamasani156c4352010-03-05 17:10:03 -0800674 if (upgradeVersion == 51) {
675 /* Move the lockscreen related settings to Secure, including some private ones. */
676 String[] settingsToMove = {
677 Secure.LOCK_PATTERN_ENABLED,
678 Secure.LOCK_PATTERN_VISIBLE,
679 Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED,
680 "lockscreen.password_type",
681 "lockscreen.lockoutattemptdeadline",
682 "lockscreen.patterneverchosen",
683 "lock_pattern_autolock",
684 "lockscreen.lockedoutpermanently",
685 "lockscreen.password_salt"
686 };
Christopher Tate92198742012-09-07 12:00:13 -0700687 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
Amith Yamasani156c4352010-03-05 17:10:03 -0800688 upgradeVersion = 52;
689 }
690
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500691 if (upgradeVersion == 52) {
692 // new vibration/silent mode settings
693 db.beginTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700694 SQLiteStatement stmt = null;
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500695 try {
Vasu Nori89206fd2010-03-22 10:37:03 -0700696 stmt = db.compileStatement("INSERT INTO system(name,value)"
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500697 + " VALUES(?,?);");
698 loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
699 R.bool.def_vibrate_in_silent);
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500700 db.setTransactionSuccessful();
701 } finally {
702 db.endTransaction();
Vasu Nori89206fd2010-03-22 10:37:03 -0700703 if (stmt != null) stmt.close();
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500704 }
705
706 upgradeVersion = 53;
707 }
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -0700708
Suchi Amalapurapu089262d2010-03-10 14:19:21 -0800709 if (upgradeVersion == 53) {
710 /*
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700711 * New settings for set install location UI no longer initiated here.
Suchi Amalapurapu089262d2010-03-10 14:19:21 -0800712 */
Suchi Amalapurapu089262d2010-03-10 14:19:21 -0800713 upgradeVersion = 54;
714 }
Daniel Sandler1c7fa482010-03-10 09:45:01 -0500715
Amith Yamasanib6e6ffa2010-03-29 17:58:53 -0700716 if (upgradeVersion == 54) {
717 /*
718 * Update the screen timeout value if set to never
719 */
720 db.beginTransaction();
721 try {
722 upgradeScreenTimeoutFromNever(db);
723 db.setTransactionSuccessful();
724 } finally {
725 db.endTransaction();
726 }
727
728 upgradeVersion = 55;
729 }
730
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700731 if (upgradeVersion == 55) {
732 /* Move the install location settings. */
733 String[] settingsToMove = {
Jeff Sharkey625239a2012-09-26 22:03:49 -0700734 Global.SET_INSTALL_LOCATION,
735 Global.DEFAULT_INSTALL_LOCATION
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700736 };
Christopher Tate92198742012-09-07 12:00:13 -0700737 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700738 db.beginTransaction();
739 SQLiteStatement stmt = null;
740 try {
741 stmt = db.compileStatement("INSERT INTO system(name,value)"
742 + " VALUES(?,?);");
Jeff Sharkey625239a2012-09-26 22:03:49 -0700743 loadSetting(stmt, Global.SET_INSTALL_LOCATION, 0);
744 loadSetting(stmt, Global.DEFAULT_INSTALL_LOCATION,
Suchi Amalapurapu40e47252010-04-07 16:15:50 -0700745 PackageHelper.APP_INSTALL_AUTO);
746 db.setTransactionSuccessful();
747 } finally {
748 db.endTransaction();
749 if (stmt != null) stmt.close();
750 }
751 upgradeVersion = 56;
752 }
Jake Hamby66592842010-08-24 19:55:20 -0700753
754 if (upgradeVersion == 56) {
755 /*
756 * Add Bluetooth to list of toggleable radios in airplane mode
757 */
758 db.beginTransaction();
759 SQLiteStatement stmt = null;
760 try {
761 db.execSQL("DELETE FROM system WHERE name='"
762 + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
763 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
764 + " VALUES(?,?);");
765 loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
766 R.string.airplane_mode_toggleable_radios);
767 db.setTransactionSuccessful();
768 } finally {
769 db.endTransaction();
770 if (stmt != null) stmt.close();
771 }
772 upgradeVersion = 57;
773 }
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -0700774
Amith Yamasani5cd15002011-11-16 11:19:48 -0800775 /************* The following are Honeycomb changes ************/
776
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -0700777 if (upgradeVersion == 57) {
778 /*
779 * New settings to:
780 * 1. Enable injection of accessibility scripts in WebViews.
781 * 2. Define the key bindings for traversing web content in WebViews.
782 */
783 db.beginTransaction();
784 SQLiteStatement stmt = null;
785 try {
786 stmt = db.compileStatement("INSERT INTO secure(name,value)"
787 + " VALUES(?,?);");
788 loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
789 R.bool.def_accessibility_script_injection);
790 stmt.close();
791 stmt = db.compileStatement("INSERT INTO secure(name,value)"
792 + " VALUES(?,?);");
793 loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
794 R.string.def_accessibility_web_content_key_bindings);
795 db.setTransactionSuccessful();
796 } finally {
797 db.endTransaction();
798 if (stmt != null) stmt.close();
799 }
800 upgradeVersion = 58;
801 }
802
Amith Yamasaniad450be2010-09-16 16:47:00 -0700803 if (upgradeVersion == 58) {
804 /* Add default for new Auto Time Zone */
Amith Yamasani5cd15002011-11-16 11:19:48 -0800805 int autoTimeValue = getIntValueFromSystem(db, Settings.System.AUTO_TIME, 0);
Amith Yamasaniad450be2010-09-16 16:47:00 -0700806 db.beginTransaction();
807 SQLiteStatement stmt = null;
808 try {
Amith Yamasani5cd15002011-11-16 11:19:48 -0800809 stmt = db.compileStatement("INSERT INTO system(name,value)" + " VALUES(?,?);");
810 loadSetting(stmt, Settings.System.AUTO_TIME_ZONE,
811 autoTimeValue); // Sync timezone to NITZ if auto_time was enabled
Amith Yamasaniad450be2010-09-16 16:47:00 -0700812 db.setTransactionSuccessful();
813 } finally {
814 db.endTransaction();
815 if (stmt != null) stmt.close();
816 }
817 upgradeVersion = 59;
818 }
819
Daniel Sandlerb73617d2010-08-17 00:41:00 -0400820 if (upgradeVersion == 59) {
821 // Persistence for the rotation lock feature.
822 db.beginTransaction();
823 SQLiteStatement stmt = null;
824 try {
825 stmt = db.compileStatement("INSERT INTO system(name,value)"
826 + " VALUES(?,?);");
827 loadBooleanSetting(stmt, Settings.System.USER_ROTATION,
828 R.integer.def_user_rotation); // should be zero degrees
829 db.setTransactionSuccessful();
830 } finally {
831 db.endTransaction();
832 if (stmt != null) stmt.close();
833 }
834 upgradeVersion = 60;
835 }
836
Amith Yamasani00389312010-11-05 11:22:21 -0700837 if (upgradeVersion == 60) {
Amith Yamasani5cd15002011-11-16 11:19:48 -0800838 // Don't do this for upgrades from Gingerbread
839 // Were only required for intra-Honeycomb upgrades for testing
840 // upgradeScreenTimeout(db);
Amith Yamasani00389312010-11-05 11:22:21 -0700841 upgradeVersion = 61;
842 }
843
Amith Yamasani79373f62010-11-18 16:32:48 -0800844 if (upgradeVersion == 61) {
Amith Yamasani5cd15002011-11-16 11:19:48 -0800845 // Don't do this for upgrades from Gingerbread
846 // Were only required for intra-Honeycomb upgrades for testing
847 // upgradeScreenTimeout(db);
Amith Yamasani79373f62010-11-18 16:32:48 -0800848 upgradeVersion = 62;
849 }
850
Amith Yamasanif50c5112011-01-07 11:32:30 -0800851 // Change the default for screen auto-brightness mode
852 if (upgradeVersion == 62) {
Amith Yamasani5cd15002011-11-16 11:19:48 -0800853 // Don't do this for upgrades from Gingerbread
854 // Were only required for intra-Honeycomb upgrades for testing
855 // upgradeAutoBrightness(db);
Amith Yamasanif50c5112011-01-07 11:32:30 -0800856 upgradeVersion = 63;
857 }
858
Eric Laurent25101b02011-02-02 09:33:30 -0800859 if (upgradeVersion == 63) {
860 // This upgrade adds the STREAM_MUSIC type to the list of
861 // types affected by ringer modes (silent, vibrate, etc.)
862 db.beginTransaction();
863 try {
864 db.execSQL("DELETE FROM system WHERE name='"
865 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
866 int newValue = (1 << AudioManager.STREAM_RING)
867 | (1 << AudioManager.STREAM_NOTIFICATION)
868 | (1 << AudioManager.STREAM_SYSTEM)
869 | (1 << AudioManager.STREAM_SYSTEM_ENFORCED)
870 | (1 << AudioManager.STREAM_MUSIC);
871 db.execSQL("INSERT INTO system ('name', 'value') values ('"
872 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
873 + String.valueOf(newValue) + "')");
874 db.setTransactionSuccessful();
875 } finally {
876 db.endTransaction();
877 }
878 upgradeVersion = 64;
879 }
880
Svetoslav Ganov54d068e2011-03-02 12:58:40 -0800881 if (upgradeVersion == 64) {
882 // New setting to configure the long press timeout.
883 db.beginTransaction();
884 SQLiteStatement stmt = null;
885 try {
886 stmt = db.compileStatement("INSERT INTO secure(name,value)"
887 + " VALUES(?,?);");
888 loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
889 R.integer.def_long_press_timeout_millis);
890 stmt.close();
891 db.setTransactionSuccessful();
892 } finally {
893 db.endTransaction();
894 if (stmt != null) stmt.close();
895 }
896 upgradeVersion = 65;
897 }
898
Amith Yamasani5cd15002011-11-16 11:19:48 -0800899 /************* The following are Ice Cream Sandwich changes ************/
900
Gilles Debunnefa53d302011-07-08 10:40:51 -0700901 if (upgradeVersion == 65) {
902 /*
903 * Animations are removed from Settings. Turned on by default
904 */
905 db.beginTransaction();
906 SQLiteStatement stmt = null;
907 try {
908 db.execSQL("DELETE FROM system WHERE name='"
909 + Settings.System.WINDOW_ANIMATION_SCALE + "'");
910 db.execSQL("DELETE FROM system WHERE name='"
911 + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
912 stmt = db.compileStatement("INSERT INTO system(name,value)"
913 + " VALUES(?,?);");
914 loadDefaultAnimationSettings(stmt);
915 db.setTransactionSuccessful();
916 } finally {
917 db.endTransaction();
918 if (stmt != null) stmt.close();
919 }
920 upgradeVersion = 66;
921 }
922
Eric Laurentc1d41662011-07-19 11:21:13 -0700923 if (upgradeVersion == 66) {
Amith Yamasani42722bf2011-07-22 10:34:27 -0700924 // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set
925 // according to device voice capability
926 db.beginTransaction();
927 try {
928 int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
929 (1 << AudioManager.STREAM_NOTIFICATION) |
930 (1 << AudioManager.STREAM_SYSTEM) |
931 (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
932 if (!mContext.getResources().getBoolean(
933 com.android.internal.R.bool.config_voice_capable)) {
934 ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
935 }
936 db.execSQL("DELETE FROM system WHERE name='"
937 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
938 db.execSQL("INSERT INTO system ('name', 'value') values ('"
939 + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
940 + String.valueOf(ringerModeAffectedStreams) + "')");
941 db.setTransactionSuccessful();
942 } finally {
943 db.endTransaction();
944 }
945 upgradeVersion = 67;
946 }
Eric Laurentc1d41662011-07-19 11:21:13 -0700947
Svetoslav Ganova28a16d2011-07-28 11:24:21 -0700948 if (upgradeVersion == 67) {
949 // New setting to enable touch exploration.
950 db.beginTransaction();
951 SQLiteStatement stmt = null;
952 try {
953 stmt = db.compileStatement("INSERT INTO secure(name,value)"
954 + " VALUES(?,?);");
955 loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
956 R.bool.def_touch_exploration_enabled);
957 stmt.close();
958 db.setTransactionSuccessful();
959 } finally {
960 db.endTransaction();
961 if (stmt != null) stmt.close();
962 }
963 upgradeVersion = 68;
964 }
965
Amith Yamasani42722bf2011-07-22 10:34:27 -0700966 if (upgradeVersion == 68) {
967 // Enable all system sounds by default
968 db.beginTransaction();
Amith Yamasani42722bf2011-07-22 10:34:27 -0700969 try {
Amith Yamasani42722bf2011-07-22 10:34:27 -0700970 db.execSQL("DELETE FROM system WHERE name='"
971 + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
Amith Yamasani42722bf2011-07-22 10:34:27 -0700972 db.setTransactionSuccessful();
973 } finally {
974 db.endTransaction();
Amith Yamasani42722bf2011-07-22 10:34:27 -0700975 }
976 upgradeVersion = 69;
977 }
Svetoslav Ganova28a16d2011-07-28 11:24:21 -0700978
Nick Pelly8d32a012011-08-09 07:03:49 -0700979 if (upgradeVersion == 69) {
980 // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS
981 String airplaneRadios = mContext.getResources().getString(
982 R.string.def_airplane_mode_radios);
983 String toggleableRadios = mContext.getResources().getString(
984 R.string.airplane_mode_toggleable_radios);
985 db.beginTransaction();
986 try {
987 db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " +
988 "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'");
989 db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " +
990 "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
991 db.setTransactionSuccessful();
992 } finally {
993 db.endTransaction();
994 }
995 upgradeVersion = 70;
996 }
997
Jeff Brown6651a632011-11-28 12:59:11 -0800998 if (upgradeVersion == 70) {
999 // Update all built-in bookmarks. Some of the package names have changed.
1000 loadBookmarks(db);
1001 upgradeVersion = 71;
1002 }
1003
Svetoslav Ganov55f937a2011-12-05 11:42:07 -08001004 if (upgradeVersion == 71) {
1005 // New setting to specify whether to speak passwords in accessibility mode.
1006 db.beginTransaction();
1007 SQLiteStatement stmt = null;
1008 try {
1009 stmt = db.compileStatement("INSERT INTO secure(name,value)"
1010 + " VALUES(?,?);");
1011 loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
1012 R.bool.def_accessibility_speak_password);
Amith Yamasani6243edd2011-12-05 19:58:48 -08001013 db.setTransactionSuccessful();
Svetoslav Ganov55f937a2011-12-05 11:42:07 -08001014 } finally {
1015 db.endTransaction();
1016 if (stmt != null) stmt.close();
1017 }
1018 upgradeVersion = 72;
1019 }
1020
Amith Yamasani6243edd2011-12-05 19:58:48 -08001021 if (upgradeVersion == 72) {
1022 // update vibration settings
1023 db.beginTransaction();
1024 SQLiteStatement stmt = null;
1025 try {
1026 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1027 + " VALUES(?,?);");
1028 loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
1029 R.bool.def_vibrate_in_silent);
1030 db.setTransactionSuccessful();
1031 } finally {
1032 db.endTransaction();
1033 if (stmt != null) stmt.close();
1034 }
1035 upgradeVersion = 73;
1036 }
1037
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08001038 if (upgradeVersion == 73) {
Amith Yamasani398c83c2011-12-13 10:38:47 -08001039 upgradeVibrateSettingFromNone(db);
1040 upgradeVersion = 74;
1041 }
1042
1043 if (upgradeVersion == 74) {
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08001044 // URL from which WebView loads a JavaScript based screen-reader.
1045 db.beginTransaction();
1046 SQLiteStatement stmt = null;
1047 try {
1048 stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
1049 loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
1050 R.string.def_accessibility_screen_reader_url);
1051 db.setTransactionSuccessful();
1052 } finally {
1053 db.endTransaction();
1054 if (stmt != null) stmt.close();
1055 }
Amith Yamasani398c83c2011-12-13 10:38:47 -08001056 upgradeVersion = 75;
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08001057 }
Mike Lockwood7bef7392011-10-20 16:51:53 -04001058 if (upgradeVersion == 75) {
1059 db.beginTransaction();
1060 SQLiteStatement stmt = null;
1061 Cursor c = null;
1062 try {
Christopher Tate06efb532012-08-24 15:29:27 -07001063 c = db.query(TABLE_SECURE, new String[] {"_id", "value"},
Mike Lockwood7bef7392011-10-20 16:51:53 -04001064 "name='lockscreen.disabled'",
1065 null, null, null, null);
1066 // only set default if it has not yet been set
1067 if (c == null || c.getCount() == 0) {
1068 stmt = db.compileStatement("INSERT INTO system(name,value)"
1069 + " VALUES(?,?);");
1070 loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
1071 R.bool.def_lockscreen_disabled);
1072 }
1073 db.setTransactionSuccessful();
1074 } finally {
1075 db.endTransaction();
1076 if (c != null) c.close();
1077 if (stmt != null) stmt.close();
1078 }
1079 upgradeVersion = 76;
1080 }
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08001081
Eric Laurentbffc3d12012-05-07 17:43:49 -07001082 /************* The following are Jelly Bean changes ************/
1083
1084 if (upgradeVersion == 76) {
1085 // Removed VIBRATE_IN_SILENT setting
1086 db.beginTransaction();
1087 try {
1088 db.execSQL("DELETE FROM system WHERE name='"
1089 + Settings.System.VIBRATE_IN_SILENT + "'");
1090 db.setTransactionSuccessful();
1091 } finally {
1092 db.endTransaction();
1093 }
1094
1095 upgradeVersion = 77;
1096 }
1097
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07001098 if (upgradeVersion == 77) {
1099 // Introduce "vibrate when ringing" setting
1100 loadVibrateWhenRingingSetting(db);
1101
1102 upgradeVersion = 78;
1103 }
Eric Laurentbffc3d12012-05-07 17:43:49 -07001104
alanv3a67eb32012-06-22 10:47:28 -07001105 if (upgradeVersion == 78) {
1106 // The JavaScript based screen-reader URL changes in JellyBean.
1107 db.beginTransaction();
1108 SQLiteStatement stmt = null;
1109 try {
1110 stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1111 + " VALUES(?,?);");
1112 loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
1113 R.string.def_accessibility_screen_reader_url);
1114 db.setTransactionSuccessful();
1115 } finally {
1116 db.endTransaction();
1117 if (stmt != null) stmt.close();
1118 }
1119 upgradeVersion = 79;
1120 }
1121
Svetoslav Ganov86317012012-08-15 22:13:00 -07001122 if (upgradeVersion == 79) {
1123 // Before touch exploration was a global setting controlled by the user
1124 // via the UI. However, if the enabled accessibility services do not
1125 // handle touch exploration mode, enabling it makes no sense. Therefore,
1126 // now the services request touch exploration mode and the user is
1127 // presented with a dialog to allow that and if she does we store that
1128 // in the database. As a result of this change a user that has enabled
1129 // accessibility, touch exploration, and some accessibility services
1130 // may lose touch exploration state, thus rendering the device useless
1131 // unless sighted help is provided, since the enabled service(s) are
1132 // not in the list of services to which the user granted a permission
1133 // to put the device in touch explore mode. Here we are allowing all
1134 // enabled accessibility services to toggle touch exploration provided
1135 // accessibility and touch exploration are enabled and no services can
1136 // toggle touch exploration. Note that the user has already manually
1137 // enabled the services and touch exploration which means the she has
1138 // given consent to have these services work in touch exploration mode.
Christopher Tate06efb532012-08-24 15:29:27 -07001139 final boolean accessibilityEnabled = getIntValueFromTable(db, TABLE_SECURE,
Svetoslav Ganov86317012012-08-15 22:13:00 -07001140 Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
Christopher Tate06efb532012-08-24 15:29:27 -07001141 final boolean touchExplorationEnabled = getIntValueFromTable(db, TABLE_SECURE,
Svetoslav Ganov86317012012-08-15 22:13:00 -07001142 Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1;
1143 if (accessibilityEnabled && touchExplorationEnabled) {
Christopher Tate06efb532012-08-24 15:29:27 -07001144 String enabledServices = getStringValueFromTable(db, TABLE_SECURE,
Svetoslav Ganov86317012012-08-15 22:13:00 -07001145 Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "");
Christopher Tate06efb532012-08-24 15:29:27 -07001146 String touchExplorationGrantedServices = getStringValueFromTable(db, TABLE_SECURE,
Svetoslav Ganov86317012012-08-15 22:13:00 -07001147 Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, "");
1148 if (TextUtils.isEmpty(touchExplorationGrantedServices)
1149 && !TextUtils.isEmpty(enabledServices)) {
1150 SQLiteStatement stmt = null;
1151 try {
1152 db.beginTransaction();
1153 stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1154 + " VALUES(?,?);");
1155 loadSetting(stmt,
1156 Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
1157 enabledServices);
1158 db.setTransactionSuccessful();
1159 } finally {
1160 db.endTransaction();
1161 if (stmt != null) stmt.close();
1162 }
1163 }
1164 }
1165 upgradeVersion = 80;
1166 }
1167
Daniel Sandlerfdb7c362012-08-06 17:02:55 -04001168 // vvv Jelly Bean MR1 changes begin here vvv
1169
Svetoslav Ganovca34bcf2012-08-16 12:22:23 -07001170 if (upgradeVersion == 80) {
Daniel Sandlerfdb7c362012-08-06 17:02:55 -04001171 // update screensaver settings
1172 db.beginTransaction();
1173 SQLiteStatement stmt = null;
1174 try {
1175 stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1176 + " VALUES(?,?);");
1177 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
John Spurlocked108f32012-10-18 16:49:24 -04001178 com.android.internal.R.bool.config_dreamsEnabledByDefault);
Daniel Sandlerfdb7c362012-08-06 17:02:55 -04001179 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
John Spurlocked108f32012-10-18 16:49:24 -04001180 com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
John Spurlock1a868b72012-08-22 09:56:51 -04001181 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
John Spurlocked108f32012-10-18 16:49:24 -04001182 com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
John Spurlock1a868b72012-08-22 09:56:51 -04001183 loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
John Spurlocked108f32012-10-18 16:49:24 -04001184 com.android.internal.R.string.config_dreamsDefaultComponent);
1185 loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
1186 com.android.internal.R.string.config_dreamsDefaultComponent);
Christopher Tate06efb532012-08-24 15:29:27 -07001187
Daniel Sandlerfdb7c362012-08-06 17:02:55 -04001188 db.setTransactionSuccessful();
1189 } finally {
1190 db.endTransaction();
1191 if (stmt != null) stmt.close();
1192 }
Svetoslav Ganovca34bcf2012-08-16 12:22:23 -07001193 upgradeVersion = 81;
Daniel Sandlerfdb7c362012-08-06 17:02:55 -04001194 }
1195
rich cannings16e119e2012-09-06 12:04:37 -07001196 if (upgradeVersion == 81) {
1197 // Add package verification setting
1198 db.beginTransaction();
1199 SQLiteStatement stmt = null;
1200 try {
1201 stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1202 + " VALUES(?,?);");
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07001203 loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
rich cannings16e119e2012-09-06 12:04:37 -07001204 R.bool.def_package_verifier_enable);
1205 db.setTransactionSuccessful();
1206 } finally {
1207 db.endTransaction();
1208 if (stmt != null) stmt.close();
1209 }
1210 upgradeVersion = 82;
1211 }
1212
Christopher Tate06efb532012-08-24 15:29:27 -07001213 if (upgradeVersion == 82) {
1214 // Move to per-user settings dbs
Christopher Tate59c5bee2012-09-13 14:38:33 -07001215 if (mUserHandle == UserHandle.USER_OWNER) {
Christopher Tate06efb532012-08-24 15:29:27 -07001216
Christopher Tate59c5bee2012-09-13 14:38:33 -07001217 db.beginTransaction();
1218 SQLiteStatement stmt = null;
1219 try {
1220 // Migrate now-global settings. Note that this happens before
1221 // new users can be created.
1222 createGlobalTable(db);
1223 String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
1224 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false);
1225 settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
1226 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false);
1227
1228 db.setTransactionSuccessful();
1229 } finally {
1230 db.endTransaction();
1231 if (stmt != null) stmt.close();
1232 }
Christopher Tate06efb532012-08-24 15:29:27 -07001233 }
1234 upgradeVersion = 83;
1235 }
1236
Svetoslav Ganov1cf70bb2012-08-06 10:53:34 -07001237 if (upgradeVersion == 83) {
1238 // 1. Setting whether screen magnification is enabled.
1239 // 2. Setting for screen magnification scale.
1240 // 3. Setting for screen magnification auto update.
1241 db.beginTransaction();
1242 SQLiteStatement stmt = null;
1243 try {
1244 stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
1245 loadBooleanSetting(stmt,
1246 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
1247 R.bool.def_accessibility_display_magnification_enabled);
1248 stmt.close();
1249 stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
1250 loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
1251 R.fraction.def_accessibility_display_magnification_scale, 1);
1252 stmt.close();
1253 stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
1254 loadBooleanSetting(stmt,
1255 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
1256 R.bool.def_accessibility_display_magnification_auto_update);
Christopher Tate1a9c0dfd2012-09-06 22:17:43 -07001257
1258 db.setTransactionSuccessful();
Svetoslav Ganov1cf70bb2012-08-06 10:53:34 -07001259 } finally {
1260 db.endTransaction();
1261 if (stmt != null) stmt.close();
1262 }
1263 upgradeVersion = 84;
1264 }
1265
Christopher Tate1a9c0dfd2012-09-06 22:17:43 -07001266 if (upgradeVersion == 84) {
Christopher Tate59c5bee2012-09-13 14:38:33 -07001267 if (mUserHandle == UserHandle.USER_OWNER) {
1268 db.beginTransaction();
1269 SQLiteStatement stmt = null;
1270 try {
1271 // Patch up the slightly-wrong key migration from 82 -> 83 for those
1272 // devices that missed it, ignoring if the move is redundant
1273 String[] settingsToMove = {
1274 Settings.Secure.ADB_ENABLED,
1275 Settings.Secure.BLUETOOTH_ON,
1276 Settings.Secure.DATA_ROAMING,
1277 Settings.Secure.DEVICE_PROVISIONED,
1278 Settings.Secure.INSTALL_NON_MARKET_APPS,
1279 Settings.Secure.USB_MASS_STORAGE_ENABLED
1280 };
1281 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1282 db.setTransactionSuccessful();
1283 } finally {
1284 db.endTransaction();
1285 if (stmt != null) stmt.close();
1286 }
Christopher Tate1a9c0dfd2012-09-06 22:17:43 -07001287 }
1288 upgradeVersion = 85;
1289 }
1290
Christopher Tate92198742012-09-07 12:00:13 -07001291 if (upgradeVersion == 85) {
Christopher Tate59c5bee2012-09-13 14:38:33 -07001292 if (mUserHandle == UserHandle.USER_OWNER) {
1293 db.beginTransaction();
1294 try {
1295 // Fix up the migration, ignoring already-migrated elements, to snap up to
1296 // date with new changes to the set of global versus system/secure settings
1297 String[] settingsToMove = { Settings.System.STAY_ON_WHILE_PLUGGED_IN };
1298 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
Christopher Tate92198742012-09-07 12:00:13 -07001299
Christopher Tate59c5bee2012-09-13 14:38:33 -07001300 db.setTransactionSuccessful();
1301 } finally {
1302 db.endTransaction();
1303 }
Christopher Tate92198742012-09-07 12:00:13 -07001304 }
1305 upgradeVersion = 86;
1306 }
1307
rich cannings4d8fc792012-09-07 14:43:43 -07001308 if (upgradeVersion == 86) {
Christopher Tate59c5bee2012-09-13 14:38:33 -07001309 if (mUserHandle == UserHandle.USER_OWNER) {
1310 db.beginTransaction();
1311 try {
1312 String[] settingsToMove = {
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07001313 Settings.Global.PACKAGE_VERIFIER_ENABLE,
1314 Settings.Global.PACKAGE_VERIFIER_TIMEOUT,
1315 Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE
Christopher Tate59c5bee2012-09-13 14:38:33 -07001316 };
1317 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
rich cannings4d8fc792012-09-07 14:43:43 -07001318
Christopher Tate59c5bee2012-09-13 14:38:33 -07001319 db.setTransactionSuccessful();
1320 } finally {
1321 db.endTransaction();
1322 }
rich cannings4d8fc792012-09-07 14:43:43 -07001323 }
1324 upgradeVersion = 87;
1325 }
1326
Christopher Tatec868b642012-09-12 17:41:04 -07001327 if (upgradeVersion == 87) {
Christopher Tate59c5bee2012-09-13 14:38:33 -07001328 if (mUserHandle == UserHandle.USER_OWNER) {
1329 db.beginTransaction();
1330 try {
1331 String[] settingsToMove = {
Jeff Sharkeybdfce2e2012-09-26 15:54:06 -07001332 Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
1333 Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
1334 Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS
Christopher Tate59c5bee2012-09-13 14:38:33 -07001335 };
1336 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
Christopher Tatec868b642012-09-12 17:41:04 -07001337
Christopher Tate59c5bee2012-09-13 14:38:33 -07001338 db.setTransactionSuccessful();
1339 } finally {
1340 db.endTransaction();
1341 }
Christopher Tatec868b642012-09-12 17:41:04 -07001342 }
1343 upgradeVersion = 88;
1344 }
1345
Jeff Sharkey625239a2012-09-26 22:03:49 -07001346 if (upgradeVersion == 88) {
1347 if (mUserHandle == UserHandle.USER_OWNER) {
1348 db.beginTransaction();
1349 try {
1350 String[] settingsToMove = {
1351 Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
1352 Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
1353 Settings.Global.SEND_ACTION_APP_ERROR,
1354 Settings.Global.DROPBOX_AGE_SECONDS,
1355 Settings.Global.DROPBOX_MAX_FILES,
1356 Settings.Global.DROPBOX_QUOTA_KB,
1357 Settings.Global.DROPBOX_QUOTA_PERCENT,
1358 Settings.Global.DROPBOX_RESERVE_PERCENT,
1359 Settings.Global.DROPBOX_TAG_PREFIX,
1360 Settings.Global.ERROR_LOGCAT_PREFIX,
1361 Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
1362 Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
1363 Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
1364 Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
1365 Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
1366 Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
1367 Settings.Global.CONNECTIVITY_CHANGE_DELAY,
1368 Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
1369 Settings.Global.CAPTIVE_PORTAL_SERVER,
1370 Settings.Global.NSD_ON,
1371 Settings.Global.SET_INSTALL_LOCATION,
1372 Settings.Global.DEFAULT_INSTALL_LOCATION,
1373 Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
1374 Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
1375 Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
1376 Settings.Global.HTTP_PROXY,
1377 Settings.Global.GLOBAL_HTTP_PROXY_HOST,
1378 Settings.Global.GLOBAL_HTTP_PROXY_PORT,
1379 Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
1380 Settings.Global.SET_GLOBAL_HTTP_PROXY,
1381 Settings.Global.DEFAULT_DNS_SERVER,
1382 };
1383 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1384 db.setTransactionSuccessful();
1385 } finally {
1386 db.endTransaction();
1387 }
1388 }
1389 upgradeVersion = 89;
1390 }
1391
Jeff Sharkey0ac10282012-10-01 12:50:22 -07001392 if (upgradeVersion == 89) {
1393 if (mUserHandle == UserHandle.USER_OWNER) {
1394 db.beginTransaction();
1395 try {
1396 String[] prefixesToMove = {
1397 Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
1398 Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
1399 Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
1400 };
1401
1402 movePrefixedSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, prefixesToMove);
1403
1404 db.setTransactionSuccessful();
1405 } finally {
1406 db.endTransaction();
1407 }
1408 }
1409 upgradeVersion = 90;
1410 }
1411
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07001412 if (upgradeVersion == 90) {
1413 if (mUserHandle == UserHandle.USER_OWNER) {
1414 db.beginTransaction();
1415 try {
1416 String[] systemToGlobal = {
1417 Settings.Global.WINDOW_ANIMATION_SCALE,
1418 Settings.Global.TRANSITION_ANIMATION_SCALE,
1419 Settings.Global.ANIMATOR_DURATION_SCALE,
1420 Settings.Global.FANCY_IME_ANIMATIONS,
1421 Settings.Global.COMPATIBILITY_MODE,
1422 Settings.Global.EMERGENCY_TONE,
1423 Settings.Global.CALL_AUTO_RETRY,
1424 Settings.Global.DEBUG_APP,
1425 Settings.Global.WAIT_FOR_DEBUGGER,
1426 Settings.Global.SHOW_PROCESSES,
1427 Settings.Global.ALWAYS_FINISH_ACTIVITIES,
1428 };
1429 String[] secureToGlobal = {
1430 Settings.Global.PREFERRED_NETWORK_MODE,
Naveen Kallab4d485c2013-07-03 16:39:27 -07001431 Settings.Global.CDMA_SUBSCRIPTION_MODE,
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07001432 };
1433
1434 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, systemToGlobal, true);
1435 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, secureToGlobal, true);
1436
1437 db.setTransactionSuccessful();
1438 } finally {
1439 db.endTransaction();
1440 }
1441 }
1442 upgradeVersion = 91;
1443 }
1444
Eric Laurent55b02222012-10-03 11:56:23 -07001445 if (upgradeVersion == 91) {
1446 if (mUserHandle == UserHandle.USER_OWNER) {
1447 db.beginTransaction();
1448 try {
1449 // Move ringer mode from system to global settings
Amith Yamasani531c2372012-10-08 14:43:20 -07001450 String[] settingsToMove = { Settings.Global.MODE_RINGER };
Eric Laurent55b02222012-10-03 11:56:23 -07001451 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
1452
1453 db.setTransactionSuccessful();
1454 } finally {
1455 db.endTransaction();
1456 }
1457 }
1458 upgradeVersion = 92;
1459 }
1460
John Spurlock7f1c2482012-10-05 11:15:28 -04001461 if (upgradeVersion == 92) {
1462 SQLiteStatement stmt = null;
1463 try {
1464 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1465 + " VALUES(?,?);");
1466 if (mUserHandle == UserHandle.USER_OWNER) {
1467 // consider existing primary users to have made it through user setup
1468 // if the globally-scoped device-provisioned bit is set
1469 // (indicating they already made it through setup as primary)
1470 int deviceProvisioned = getIntValueFromTable(db, TABLE_GLOBAL,
1471 Settings.Global.DEVICE_PROVISIONED, 0);
1472 loadSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
1473 deviceProvisioned);
1474 } else {
1475 // otherwise use the default
1476 loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
1477 R.bool.def_user_setup_complete);
1478 }
1479 } finally {
1480 if (stmt != null) stmt.close();
1481 }
1482 upgradeVersion = 93;
1483 }
1484
Amith Yamasani531c2372012-10-08 14:43:20 -07001485 if (upgradeVersion == 93) {
1486 // Redo this step, since somehow it didn't work the first time for some users
1487 if (mUserHandle == UserHandle.USER_OWNER) {
1488 db.beginTransaction();
Amith Yamasani531c2372012-10-08 14:43:20 -07001489 try {
1490 // Migrate now-global settings
1491 String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
1492 moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
1493 settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
1494 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1495
1496 db.setTransactionSuccessful();
1497 } finally {
1498 db.endTransaction();
Amith Yamasani531c2372012-10-08 14:43:20 -07001499 }
1500 }
1501 upgradeVersion = 94;
1502 }
1503
Jeff Brown84e27562012-12-07 13:56:34 -08001504 if (upgradeVersion == 94) {
1505 // Add wireless charging started sound setting
Amith Yamasani2d43fab2012-12-12 09:52:26 -08001506 if (mUserHandle == UserHandle.USER_OWNER) {
1507 db.beginTransaction();
1508 SQLiteStatement stmt = null;
1509 try {
1510 stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1511 + " VALUES(?,?);");
1512 loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
1513 R.string.def_wireless_charging_started_sound);
1514 db.setTransactionSuccessful();
1515 } finally {
1516 db.endTransaction();
1517 if (stmt != null) stmt.close();
1518 }
Jeff Brown84e27562012-12-07 13:56:34 -08001519 }
1520 upgradeVersion = 95;
1521 }
1522
Christopher Tate58f41ec2013-01-11 15:40:36 -08001523 if (upgradeVersion == 95) {
1524 if (mUserHandle == UserHandle.USER_OWNER) {
1525 db.beginTransaction();
1526 try {
1527 String[] settingsToMove = { Settings.Global.BUGREPORT_IN_POWER_MENU };
1528 moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1529 db.setTransactionSuccessful();
1530 } finally {
1531 db.endTransaction();
1532 }
1533 }
1534 upgradeVersion = 96;
1535 }
1536
Mike Clerond1ed3ce2013-02-01 18:36:41 +00001537 if (upgradeVersion == 96) {
Svetoslav Ganov447d9462013-02-01 19:46:20 +00001538 // NOP bump due to a reverted change that some people got on upgrade.
Mike Clerond1ed3ce2013-02-01 18:36:41 +00001539 upgradeVersion = 97;
1540 }
1541
Daniel Sandlerdea64622013-09-23 16:05:57 -04001542 if (upgradeVersion == 97) {
1543 if (mUserHandle == UserHandle.USER_OWNER) {
1544 db.beginTransaction();
1545 SQLiteStatement stmt = null;
1546 try {
1547 stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1548 + " VALUES(?,?);");
1549 loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
1550 R.integer.def_low_battery_sound_timeout);
1551 db.setTransactionSuccessful();
1552 } finally {
1553 db.endTransaction();
1554 if (stmt != null) stmt.close();
1555 }
1556 }
1557 upgradeVersion = 98;
1558 }
1559
Dan Sandler82a6c5c2014-02-20 14:43:20 -05001560 if (upgradeVersion == 98) {
Dan Sandler52e57012014-07-22 23:14:54 -04001561 // no-op; LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
Dan Sandler82a6c5c2014-02-20 14:43:20 -05001562 upgradeVersion = 99;
1563 }
1564
Chris Wren1cdd7dd2014-02-28 17:49:20 -05001565 if (upgradeVersion == 99) {
Dan Sandler52e57012014-07-22 23:14:54 -04001566 // no-op; HEADS_UP_NOTIFICATIONS_ENABLED now handled in version 100
1567 upgradeVersion = 100;
1568 }
1569
1570 if (upgradeVersion == 100) {
1571 // note: LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
Chris Wren1cdd7dd2014-02-28 17:49:20 -05001572 if (mUserHandle == UserHandle.USER_OWNER) {
1573 db.beginTransaction();
1574 SQLiteStatement stmt = null;
1575 try {
1576 stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1577 + " VALUES(?,?);");
1578 loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
1579 R.integer.def_heads_up_enabled);
1580 db.setTransactionSuccessful();
1581 } finally {
1582 db.endTransaction();
1583 if (stmt != null) stmt.close();
1584 }
1585 }
Chris Wren5242cf32014-03-19 16:16:48 -04001586 upgradeVersion = 101;
1587 }
Chris Wren1cdd7dd2014-02-28 17:49:20 -05001588
Jerome Poichet147b4d72014-05-12 18:13:27 -07001589 if (upgradeVersion == 101) {
1590 if (mUserHandle == UserHandle.USER_OWNER) {
1591 db.beginTransaction();
1592 SQLiteStatement stmt = null;
1593 try {
1594 stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
1595 + " VALUES(?,?);");
1596 loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
1597 db.setTransactionSuccessful();
1598 } finally {
1599 db.endTransaction();
1600 if (stmt != null) stmt.close();
1601 }
1602 }
1603 upgradeVersion = 102;
1604 }
1605
Christopher Tateaa036a22014-05-19 16:33:27 -07001606 if (upgradeVersion == 102) {
1607 db.beginTransaction();
1608 SQLiteStatement stmt = null;
1609 try {
1610 // The INSTALL_NON_MARKET_APPS setting is becoming per-user rather
1611 // than device-global.
1612 if (mUserHandle == UserHandle.USER_OWNER) {
1613 // In the owner user, the global table exists so we can migrate the
1614 // entry from there to the secure table, preserving its value.
1615 String[] globalToSecure = {
1616 Settings.Secure.INSTALL_NON_MARKET_APPS
1617 };
1618 moveSettingsToNewTable(db, TABLE_GLOBAL, TABLE_SECURE, globalToSecure, true);
1619 } else {
1620 // Secondary users' dbs don't have the global table, so institute the
1621 // default.
1622 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1623 + " VALUES(?,?);");
1624 loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
1625 R.bool.def_install_non_market_apps);
1626 }
1627 db.setTransactionSuccessful();
1628 } finally {
1629 db.endTransaction();
1630 if (stmt != null) stmt.close();
1631 }
1632 upgradeVersion = 103;
1633 }
Jeff Browna20dda42014-05-27 20:57:24 -07001634
1635 if (upgradeVersion == 103) {
1636 db.beginTransaction();
1637 SQLiteStatement stmt = null;
1638 try {
1639 stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1640 + " VALUES(?,?);");
1641 loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
1642 R.bool.def_wake_gesture_enabled);
1643 db.setTransactionSuccessful();
1644 } finally {
1645 db.endTransaction();
1646 if (stmt != null) stmt.close();
1647 }
1648 upgradeVersion = 104;
1649 }
1650
Amith Yamasani1e9c2182014-06-11 17:25:51 -07001651 if (upgradeVersion < 105) {
1652 if (mUserHandle == UserHandle.USER_OWNER) {
1653 db.beginTransaction();
1654 SQLiteStatement stmt = null;
1655 try {
1656 stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
1657 + " VALUES(?,?);");
1658 loadBooleanSetting(stmt, Settings.Global.GUEST_USER_ENABLED,
1659 R.bool.def_guest_user_enabled);
1660 db.setTransactionSuccessful();
1661 } finally {
1662 db.endTransaction();
1663 if (stmt != null) stmt.close();
1664 }
1665 }
1666 upgradeVersion = 105;
1667 }
1668
Dan Sandler52e57012014-07-22 23:14:54 -04001669 if (upgradeVersion < 106) {
1670 // LOCK_SCREEN_SHOW_NOTIFICATIONS is now per-user.
1671 db.beginTransaction();
1672 SQLiteStatement stmt = null;
1673 try {
1674 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1675 + " VALUES(?,?);");
Chris Wrencd8f4f72014-08-27 18:48:13 -04001676 loadIntegerSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
1677 R.integer.def_lock_screen_show_notifications);
Dan Sandler52e57012014-07-22 23:14:54 -04001678 if (mUserHandle == UserHandle.USER_OWNER) {
1679 final int oldShow = getIntValueFromTable(db,
1680 TABLE_GLOBAL, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, -1);
1681 if (oldShow >= 0) {
1682 // overwrite the default with whatever you had
1683 loadSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, oldShow);
1684 final SQLiteStatement deleteStmt
1685 = db.compileStatement("DELETE FROM global WHERE name=?");
1686 deleteStmt.bindString(1, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS);
1687 deleteStmt.execute();
1688 }
1689 }
1690 db.setTransactionSuccessful();
1691 } finally {
1692 db.endTransaction();
1693 if (stmt != null) stmt.close();
1694 }
1695 upgradeVersion = 106;
1696 }
Adrian Roos49e057d2014-08-13 17:14:51 +02001697
1698 if (upgradeVersion < 107) {
1699 // Add trusted sound setting
1700 if (mUserHandle == UserHandle.USER_OWNER) {
1701 db.beginTransaction();
1702 SQLiteStatement stmt = null;
1703 try {
1704 stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1705 + " VALUES(?,?);");
1706 loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
1707 R.string.def_trusted_sound);
1708 db.setTransactionSuccessful();
1709 } finally {
1710 db.endTransaction();
1711 if (stmt != null) stmt.close();
1712 }
1713 }
1714 upgradeVersion = 107;
1715 }
1716
Jeff Brown49cb6132014-08-20 14:32:38 -07001717 if (upgradeVersion < 108) {
1718 // Reset the auto-brightness setting to default since the behavior
1719 // of the feature is now quite different and is being presented to
1720 // the user in a new way as "adaptive brightness".
1721 db.beginTransaction();
1722 SQLiteStatement stmt = null;
1723 try {
1724 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1725 + " VALUES(?,?);");
1726 loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
1727 R.bool.def_screen_brightness_automatic_mode);
1728 db.setTransactionSuccessful();
1729 } finally {
1730 db.endTransaction();
1731 if (stmt != null) stmt.close();
1732 }
1733 upgradeVersion = 108;
1734 }
1735
Chris Wrencd8f4f72014-08-27 18:48:13 -04001736 if (upgradeVersion < 109) {
1737 db.beginTransaction();
1738 SQLiteStatement stmt = null;
1739 try {
1740 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1741 + " VALUES(?,?);");
1742 loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
1743 R.bool.def_lock_screen_allow_private_notifications);
1744 db.setTransactionSuccessful();
1745 } finally {
1746 db.endTransaction();
1747 if (stmt != null) stmt.close();
1748 }
1749 upgradeVersion = 109;
1750 }
1751
Tyler Gunn2c830a22014-09-02 08:39:35 -07001752 if (upgradeVersion < 110) {
1753 // The SIP_CALL_OPTIONS value SIP_ASK_EACH_TIME is being deprecated.
1754 // If the SIP_CALL_OPTIONS setting is set to SIP_ASK_EACH_TIME, default to
1755 // SIP_ADDRESS_ONLY.
1756 db.beginTransaction();
1757 SQLiteStatement stmt = null;
1758 try {
1759 stmt = db.compileStatement("UPDATE system SET value = ? " +
1760 "WHERE name = ? AND value = ?;");
1761 stmt.bindString(1, Settings.System.SIP_ADDRESS_ONLY);
1762 stmt.bindString(2, Settings.System.SIP_CALL_OPTIONS);
1763 stmt.bindString(3, Settings.System.SIP_ASK_ME_EACH_TIME);
1764 stmt.execute();
1765 db.setTransactionSuccessful();
1766 } finally {
1767 db.endTransaction();
1768 if (stmt != null) stmt.close();
1769 }
1770 upgradeVersion = 110;
1771 }
1772
John Spurlock7d424b62014-09-09 17:05:54 -04001773 if (upgradeVersion < 111) {
1774 // reset ringer mode, so it doesn't force zen mode to follow
1775 if (mUserHandle == UserHandle.USER_OWNER) {
1776 db.beginTransaction();
1777 SQLiteStatement stmt = null;
1778 try {
1779 stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1780 + " VALUES(?,?);");
1781 loadSetting(stmt, Settings.Global.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
1782 db.setTransactionSuccessful();
1783 } finally {
1784 db.endTransaction();
1785 if (stmt != null) stmt.close();
1786 }
1787 }
1788 upgradeVersion = 111;
1789 }
1790
Jerome Poichet550021e2014-09-11 10:38:12 -07001791 if (upgradeVersion < 112) {
1792 if (mUserHandle == UserHandle.USER_OWNER) {
1793 // When device name was added, we went with Manufacturer + Model, device name should
1794 // actually be Model only.
1795 // Update device name to Model if it wasn't modified by user.
1796 db.beginTransaction();
1797 SQLiteStatement stmt = null;
1798 try {
1799 stmt = db.compileStatement("UPDATE global SET value = ? "
1800 + " WHERE name = ? AND value = ?");
1801 stmt.bindString(1, getDefaultDeviceName()); // new default device name
1802 stmt.bindString(2, Settings.Global.DEVICE_NAME);
1803 stmt.bindString(3, getOldDefaultDeviceName()); // old default device name
1804 stmt.execute();
1805 db.setTransactionSuccessful();
1806 } finally {
1807 db.endTransaction();
1808 if (stmt != null) stmt.close();
1809 }
1810 }
1811 upgradeVersion = 112;
1812 }
1813
Jeff Brown05af6ad2014-09-30 20:54:30 -07001814 if (upgradeVersion < 113) {
1815 db.beginTransaction();
1816 SQLiteStatement stmt = null;
1817 try {
1818 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1819 + " VALUES(?,?);");
1820 loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
1821 R.integer.def_sleep_timeout);
1822 db.setTransactionSuccessful();
1823 } finally {
1824 db.endTransaction();
1825 if (stmt != null) stmt.close();
1826 }
1827 upgradeVersion = 113;
1828 }
1829
Daniel Sandler1c7fa482010-03-10 09:45:01 -05001830 // *** Remember to update DATABASE_VERSION above!
1831
1832 if (upgradeVersion != currentVersion) {
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001833 Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
1834 + ", must wipe the settings provider");
Christopher Tate06efb532012-08-24 15:29:27 -07001835 db.execSQL("DROP TABLE IF EXISTS global");
1836 db.execSQL("DROP TABLE IF EXISTS globalIndex1");
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001837 db.execSQL("DROP TABLE IF EXISTS system");
1838 db.execSQL("DROP INDEX IF EXISTS systemIndex1");
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08001839 db.execSQL("DROP TABLE IF EXISTS secure");
1840 db.execSQL("DROP INDEX IF EXISTS secureIndex1");
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001841 db.execSQL("DROP TABLE IF EXISTS gservices");
1842 db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
1843 db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
1844 db.execSQL("DROP TABLE IF EXISTS bookmarks");
1845 db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
1846 db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
1847 db.execSQL("DROP TABLE IF EXISTS favorites");
1848 onCreate(db);
Jim Miller61766772010-02-12 14:56:49 -08001849
1850 // Added for diagnosing settings.db wipes after the fact
1851 String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion;
1852 db.execSQL("INSERT INTO secure(name,value) values('" +
1853 "wiped_db_reason" + "','" + wipeReason + "');");
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001854 }
1855 }
1856
Christopher Tatea96798e2012-09-06 19:07:19 -07001857 private String[] hashsetToStringArray(HashSet<String> set) {
1858 String[] array = new String[set.size()];
1859 return set.toArray(array);
1860 }
1861
Christopher Tate06efb532012-08-24 15:29:27 -07001862 private void moveSettingsToNewTable(SQLiteDatabase db,
1863 String sourceTable, String destTable,
Christopher Tate92198742012-09-07 12:00:13 -07001864 String[] settingsToMove, boolean doIgnore) {
Christopher Tate06efb532012-08-24 15:29:27 -07001865 // Copy settings values from the source table to the dest, and remove from the source
Amith Yamasani156c4352010-03-05 17:10:03 -08001866 SQLiteStatement insertStmt = null;
1867 SQLiteStatement deleteStmt = null;
1868
1869 db.beginTransaction();
1870 try {
Christopher Tate92198742012-09-07 12:00:13 -07001871 insertStmt = db.compileStatement("INSERT "
1872 + (doIgnore ? " OR IGNORE " : "")
1873 + " INTO " + destTable + " (name,value) SELECT name,value FROM "
Christopher Tate06efb532012-08-24 15:29:27 -07001874 + sourceTable + " WHERE name=?");
1875 deleteStmt = db.compileStatement("DELETE FROM " + sourceTable + " WHERE name=?");
Amith Yamasani156c4352010-03-05 17:10:03 -08001876
1877 for (String setting : settingsToMove) {
1878 insertStmt.bindString(1, setting);
1879 insertStmt.execute();
1880
1881 deleteStmt.bindString(1, setting);
1882 deleteStmt.execute();
1883 }
1884 db.setTransactionSuccessful();
1885 } finally {
1886 db.endTransaction();
1887 if (insertStmt != null) {
1888 insertStmt.close();
1889 }
1890 if (deleteStmt != null) {
1891 deleteStmt.close();
1892 }
1893 }
1894 }
1895
Jeff Sharkey0ac10282012-10-01 12:50:22 -07001896 /**
1897 * Move any settings with the given prefixes from the source table to the
1898 * destination table.
1899 */
1900 private void movePrefixedSettingsToNewTable(
1901 SQLiteDatabase db, String sourceTable, String destTable, String[] prefixesToMove) {
1902 SQLiteStatement insertStmt = null;
1903 SQLiteStatement deleteStmt = null;
1904
1905 db.beginTransaction();
1906 try {
1907 insertStmt = db.compileStatement("INSERT INTO " + destTable
1908 + " (name,value) SELECT name,value FROM " + sourceTable
1909 + " WHERE substr(name,0,?)=?");
1910 deleteStmt = db.compileStatement(
1911 "DELETE FROM " + sourceTable + " WHERE substr(name,0,?)=?");
1912
1913 for (String prefix : prefixesToMove) {
1914 insertStmt.bindLong(1, prefix.length() + 1);
1915 insertStmt.bindString(2, prefix);
1916 insertStmt.execute();
1917
1918 deleteStmt.bindLong(1, prefix.length() + 1);
1919 deleteStmt.bindString(2, prefix);
1920 deleteStmt.execute();
1921 }
1922 db.setTransactionSuccessful();
1923 } finally {
1924 db.endTransaction();
1925 if (insertStmt != null) {
1926 insertStmt.close();
1927 }
1928 if (deleteStmt != null) {
1929 deleteStmt.close();
1930 }
1931 }
1932 }
1933
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001934 private void upgradeLockPatternLocation(SQLiteDatabase db) {
Christopher Tate06efb532012-08-24 15:29:27 -07001935 Cursor c = db.query(TABLE_SYSTEM, new String[] {"_id", "value"}, "name='lock_pattern'",
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001936 null, null, null, null);
1937 if (c.getCount() > 0) {
1938 c.moveToFirst();
1939 String lockPattern = c.getString(1);
1940 if (!TextUtils.isEmpty(lockPattern)) {
1941 // Convert lock pattern
1942 try {
Jim Miller31f90b62010-01-20 13:35:20 -08001943 LockPatternUtils lpu = new LockPatternUtils(mContext);
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07001944 List<LockPatternView.Cell> cellPattern =
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001945 LockPatternUtils.stringToPattern(lockPattern);
1946 lpu.saveLockPattern(cellPattern);
1947 } catch (IllegalArgumentException e) {
1948 // Don't want corrupted lock pattern to hang the reboot process
1949 }
1950 }
1951 c.close();
Christopher Tate06efb532012-08-24 15:29:27 -07001952 db.delete(TABLE_SYSTEM, "name='lock_pattern'", null);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001953 } else {
1954 c.close();
1955 }
1956 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001957
Amith Yamasanib6e6ffa2010-03-29 17:58:53 -07001958 private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) {
1959 // See if the timeout is -1 (for "Never").
Christopher Tate06efb532012-08-24 15:29:27 -07001960 Cursor c = db.query(TABLE_SYSTEM, new String[] { "_id", "value" }, "name=? AND value=?",
Amith Yamasanib6e6ffa2010-03-29 17:58:53 -07001961 new String[] { Settings.System.SCREEN_OFF_TIMEOUT, "-1" },
1962 null, null, null);
1963
1964 SQLiteStatement stmt = null;
1965 if (c.getCount() > 0) {
1966 c.close();
1967 try {
1968 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1969 + " VALUES(?,?);");
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07001970
Amith Yamasanib6e6ffa2010-03-29 17:58:53 -07001971 // Set the timeout to 30 minutes in milliseconds
Amith Yamasanicd66caf2010-04-12 15:49:12 -07001972 loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
1973 Integer.toString(30 * 60 * 1000));
Amith Yamasanib6e6ffa2010-03-29 17:58:53 -07001974 } finally {
1975 if (stmt != null) stmt.close();
1976 }
1977 } else {
1978 c.close();
1979 }
1980 }
1981
Amith Yamasani398c83c2011-12-13 10:38:47 -08001982 private void upgradeVibrateSettingFromNone(SQLiteDatabase db) {
1983 int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0);
1984 // If the ringer vibrate value is invalid, set it to the default
1985 if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) {
1986 vibrateSetting = AudioService.getValueForVibrateSetting(0,
1987 AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
1988 }
1989 // Apply the same setting to the notification vibrate value
1990 vibrateSetting = AudioService.getValueForVibrateSetting(vibrateSetting,
1991 AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting);
1992
1993 SQLiteStatement stmt = null;
1994 try {
1995 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1996 + " VALUES(?,?);");
1997 loadSetting(stmt, Settings.System.VIBRATE_ON, vibrateSetting);
1998 } finally {
1999 if (stmt != null)
2000 stmt.close();
2001 }
2002 }
2003
Amith Yamasani79373f62010-11-18 16:32:48 -08002004 private void upgradeScreenTimeout(SQLiteDatabase db) {
2005 // Change screen timeout to current default
2006 db.beginTransaction();
2007 SQLiteStatement stmt = null;
2008 try {
2009 stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
2010 + " VALUES(?,?);");
2011 loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
2012 R.integer.def_screen_off_timeout);
2013 db.setTransactionSuccessful();
2014 } finally {
2015 db.endTransaction();
2016 if (stmt != null)
2017 stmt.close();
2018 }
2019 }
2020
Amith Yamasanif50c5112011-01-07 11:32:30 -08002021 private void upgradeAutoBrightness(SQLiteDatabase db) {
2022 db.beginTransaction();
2023 try {
2024 String value =
2025 mContext.getResources().getBoolean(
2026 R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
2027 db.execSQL("INSERT OR REPLACE INTO system(name,value) values('" +
2028 Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
2029 db.setTransactionSuccessful();
2030 } finally {
2031 db.endTransaction();
2032 }
2033 }
2034
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002035 /**
2036 * Loads the default set of bookmarked shortcuts from an xml file.
2037 *
2038 * @param db The database to write the values into
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002039 */
Jeff Brown6651a632011-11-28 12:59:11 -08002040 private void loadBookmarks(SQLiteDatabase db) {
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002041 ContentValues values = new ContentValues();
2042
2043 PackageManager packageManager = mContext.getPackageManager();
Romain Guyf02811f2010-03-09 16:33:51 -08002044 try {
2045 XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002046 XmlUtils.beginDocument(parser, "bookmarks");
2047
Romain Guyf02811f2010-03-09 16:33:51 -08002048 final int depth = parser.getDepth();
2049 int type;
2050
2051 while (((type = parser.next()) != XmlPullParser.END_TAG ||
2052 parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
2053
2054 if (type != XmlPullParser.START_TAG) {
2055 continue;
2056 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002057
2058 String name = parser.getName();
2059 if (!"bookmark".equals(name)) {
2060 break;
2061 }
2062
2063 String pkg = parser.getAttributeValue(null, "package");
2064 String cls = parser.getAttributeValue(null, "class");
2065 String shortcutStr = parser.getAttributeValue(null, "shortcut");
Jeff Brown6651a632011-11-28 12:59:11 -08002066 String category = parser.getAttributeValue(null, "category");
Romain Guyf02811f2010-03-09 16:33:51 -08002067
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07002068 int shortcutValue = shortcutStr.charAt(0);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002069 if (TextUtils.isEmpty(shortcutStr)) {
2070 Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
Jeff Brown6651a632011-11-28 12:59:11 -08002071 continue;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002072 }
Romain Guyf02811f2010-03-09 16:33:51 -08002073
Jeff Brown6651a632011-11-28 12:59:11 -08002074 final Intent intent;
2075 final String title;
2076 if (pkg != null && cls != null) {
2077 ActivityInfo info = null;
2078 ComponentName cn = new ComponentName(pkg, cls);
Romain Guyf02811f2010-03-09 16:33:51 -08002079 try {
2080 info = packageManager.getActivityInfo(cn, 0);
Jeff Brown6651a632011-11-28 12:59:11 -08002081 } catch (PackageManager.NameNotFoundException e) {
2082 String[] packages = packageManager.canonicalToCurrentPackageNames(
2083 new String[] { pkg });
2084 cn = new ComponentName(packages[0], cls);
2085 try {
2086 info = packageManager.getActivityInfo(cn, 0);
2087 } catch (PackageManager.NameNotFoundException e1) {
2088 Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
2089 continue;
2090 }
Romain Guyf02811f2010-03-09 16:33:51 -08002091 }
Jeff Brown6651a632011-11-28 12:59:11 -08002092
2093 intent = new Intent(Intent.ACTION_MAIN, null);
2094 intent.addCategory(Intent.CATEGORY_LAUNCHER);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002095 intent.setComponent(cn);
Jeff Brown6651a632011-11-28 12:59:11 -08002096 title = info.loadLabel(packageManager).toString();
2097 } else if (category != null) {
Dianne Hackbornf5b86712011-12-05 17:42:41 -08002098 intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category);
Jeff Brown6651a632011-11-28 12:59:11 -08002099 title = "";
2100 } else {
2101 Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutStr
2102 + ": missing package/class or category attributes");
2103 continue;
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002104 }
Jeff Brown6651a632011-11-28 12:59:11 -08002105
2106 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2107 values.put(Settings.Bookmarks.INTENT, intent.toUri(0));
2108 values.put(Settings.Bookmarks.TITLE, title);
2109 values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
2110 db.delete("bookmarks", "shortcut = ?",
2111 new String[] { Integer.toString(shortcutValue) });
2112 db.insert("bookmarks", null, values);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002113 }
2114 } catch (XmlPullParserException e) {
2115 Log.w(TAG, "Got execption parsing bookmarks.", e);
2116 } catch (IOException e) {
2117 Log.w(TAG, "Got execption parsing bookmarks.", e);
2118 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002119 }
2120
2121 /**
2122 * Loads the default volume levels. It is actually inserting the index of
2123 * the volume array for each of the volume controls.
2124 *
2125 * @param db the database to insert the volume levels into
2126 */
2127 private void loadVolumeLevels(SQLiteDatabase db) {
Vasu Nori89206fd2010-03-22 10:37:03 -07002128 SQLiteStatement stmt = null;
2129 try {
2130 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
2131 + " VALUES(?,?);");
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002132
Vasu Nori89206fd2010-03-22 10:37:03 -07002133 loadSetting(stmt, Settings.System.VOLUME_MUSIC,
2134 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
2135 loadSetting(stmt, Settings.System.VOLUME_RING,
2136 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]);
2137 loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
2138 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
2139 loadSetting(
2140 stmt,
2141 Settings.System.VOLUME_VOICE,
2142 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
2143 loadSetting(stmt, Settings.System.VOLUME_ALARM,
2144 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]);
2145 loadSetting(
2146 stmt,
2147 Settings.System.VOLUME_NOTIFICATION,
2148 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]);
2149 loadSetting(
2150 stmt,
2151 Settings.System.VOLUME_BLUETOOTH_SCO,
2152 AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002153
Eric Laurentc1d41662011-07-19 11:21:13 -07002154 // By default:
2155 // - ringtones, notification, system and music streams are affected by ringer mode
2156 // on non voice capable devices (tablets)
2157 // - ringtones, notification and system streams are affected by ringer mode
2158 // on voice capable devices (phones)
2159 int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
2160 (1 << AudioManager.STREAM_NOTIFICATION) |
2161 (1 << AudioManager.STREAM_SYSTEM) |
2162 (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
2163 if (!mContext.getResources().getBoolean(
2164 com.android.internal.R.bool.config_voice_capable)) {
2165 ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
2166 }
Vasu Nori89206fd2010-03-22 10:37:03 -07002167 loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
Eric Laurentc1d41662011-07-19 11:21:13 -07002168 ringerModeAffectedStreams);
2169
Vasu Nori89206fd2010-03-22 10:37:03 -07002170 loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
2171 ((1 << AudioManager.STREAM_MUSIC) |
2172 (1 << AudioManager.STREAM_RING) |
2173 (1 << AudioManager.STREAM_NOTIFICATION) |
2174 (1 << AudioManager.STREAM_SYSTEM)));
2175 } finally {
2176 if (stmt != null) stmt.close();
2177 }
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002178
2179 loadVibrateWhenRingingSetting(db);
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002180 }
2181
2182 private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
2183 if (deleteOld) {
2184 db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
2185 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002186
Vasu Nori89206fd2010-03-22 10:37:03 -07002187 SQLiteStatement stmt = null;
2188 try {
2189 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
2190 + " VALUES(?,?);");
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002191
Amith Yamasani5cd15002011-11-16 11:19:48 -08002192 // Vibrate on by default for ringer, on for notification
Vasu Nori89206fd2010-03-22 10:37:03 -07002193 int vibrate = 0;
2194 vibrate = AudioService.getValueForVibrateSetting(vibrate,
Amith Yamasani5cd15002011-11-16 11:19:48 -08002195 AudioManager.VIBRATE_TYPE_NOTIFICATION,
2196 AudioManager.VIBRATE_SETTING_ONLY_SILENT);
Joe Onorato89320202010-06-24 17:49:44 -07002197 vibrate |= AudioService.getValueForVibrateSetting(vibrate,
Amith Yamasani5cd15002011-11-16 11:19:48 -08002198 AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
Vasu Nori89206fd2010-03-22 10:37:03 -07002199 loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
2200 } finally {
2201 if (stmt != null) stmt.close();
2202 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002203 }
2204
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002205 private void loadVibrateWhenRingingSetting(SQLiteDatabase db) {
2206 // The default should be off. VIBRATE_SETTING_ONLY_SILENT should also be ignored here.
2207 // Phone app should separately check whether AudioManager#getRingerMode() returns
2208 // RINGER_MODE_VIBRATE, with which the device should vibrate anyway.
2209 int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON,
2210 AudioManager.VIBRATE_SETTING_OFF);
2211 boolean vibrateWhenRinging = ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_ON);
2212
2213 SQLiteStatement stmt = null;
2214 try {
2215 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
2216 + " VALUES(?,?);");
2217 loadSetting(stmt, Settings.System.VIBRATE_WHEN_RINGING, vibrateWhenRinging ? 1 : 0);
2218 } finally {
2219 if (stmt != null) stmt.close();
2220 }
2221 }
2222
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002223 private void loadSettings(SQLiteDatabase db) {
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08002224 loadSystemSettings(db);
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002225 loadSecureSettings(db);
Christopher Tate06efb532012-08-24 15:29:27 -07002226 // The global table only exists for the 'owner' user
2227 if (mUserHandle == UserHandle.USER_OWNER) {
2228 loadGlobalSettings(db);
2229 }
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08002230 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002231
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08002232 private void loadSystemSettings(SQLiteDatabase db) {
Vasu Nori89206fd2010-03-22 10:37:03 -07002233 SQLiteStatement stmt = null;
2234 try {
2235 stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
2236 + " VALUES(?,?);");
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002237
Vasu Nori89206fd2010-03-22 10:37:03 -07002238 loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
2239 R.bool.def_dim_screen);
Vasu Nori89206fd2010-03-22 10:37:03 -07002240 loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
2241 R.integer.def_screen_off_timeout);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002242
Vasu Nori89206fd2010-03-22 10:37:03 -07002243 // Set default cdma DTMF type
2244 loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002245
Vasu Nori89206fd2010-03-22 10:37:03 -07002246 // Set default hearing aid
2247 loadSetting(stmt, Settings.System.HEARING_AID, 0);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002248
Vasu Nori89206fd2010-03-22 10:37:03 -07002249 // Set default tty mode
2250 loadSetting(stmt, Settings.System.TTY_MODE, 0);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002251
Vasu Nori89206fd2010-03-22 10:37:03 -07002252 loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
2253 R.integer.def_screen_brightness);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002254
Vasu Nori89206fd2010-03-22 10:37:03 -07002255 loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
2256 R.bool.def_screen_brightness_automatic_mode);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002257
Vasu Nori89206fd2010-03-22 10:37:03 -07002258 loadDefaultAnimationSettings(stmt);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002259
Vasu Nori89206fd2010-03-22 10:37:03 -07002260 loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
2261 R.bool.def_accelerometer_rotation);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002262
Vasu Nori89206fd2010-03-22 10:37:03 -07002263 loadDefaultHapticSettings(stmt);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002264
Vasu Nori89206fd2010-03-22 10:37:03 -07002265 loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
2266 R.bool.def_notification_pulse);
Amith Yamasani42722bf2011-07-22 10:34:27 -07002267
Vasu Nori89206fd2010-03-22 10:37:03 -07002268 loadUISoundEffectsSettings(stmt);
Amith Yamasani42722bf2011-07-22 10:34:27 -07002269
Jeff Brown1a84fd12011-06-02 01:26:32 -07002270 loadIntegerSetting(stmt, Settings.System.POINTER_SPEED,
2271 R.integer.def_pointer_speed);
Vasu Nori89206fd2010-03-22 10:37:03 -07002272 } finally {
2273 if (stmt != null) stmt.close();
2274 }
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08002275 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002276
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05002277 private void loadUISoundEffectsSettings(SQLiteStatement stmt) {
Amith Yamasani42722bf2011-07-22 10:34:27 -07002278 loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING,
2279 R.bool.def_dtmf_tones_enabled);
2280 loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED,
2281 R.bool.def_sound_effects_enabled);
2282 loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
2283 R.bool.def_haptic_feedback);
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05002284
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05002285 loadIntegerSetting(stmt, Settings.System.LOCKSCREEN_SOUNDS_ENABLED,
2286 R.integer.def_lockscreen_sounds_enabled);
Daniel Sandler0e9d2af2010-01-25 11:33:03 -05002287 }
2288
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002289 private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
2290 loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
2291 R.fraction.def_window_animation_scale, 1);
2292 loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
2293 R.fraction.def_window_transition_scale, 1);
2294 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002295
Dianne Hackborn075a18d2009-09-26 12:43:19 -07002296 private void loadDefaultHapticSettings(SQLiteStatement stmt) {
2297 loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
2298 R.bool.def_haptic_feedback);
2299 }
2300
The Android Open Source Projectf013e1a2008-12-17 18:05:43 -08002301 private void loadSecureSettings(SQLiteDatabase db) {
Vasu Nori89206fd2010-03-22 10:37:03 -07002302 SQLiteStatement stmt = null;
2303 try {
2304 stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
2305 + " VALUES(?,?);");
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002306
Vasu Nori89206fd2010-03-22 10:37:03 -07002307 loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
2308 R.string.def_location_providers_allowed);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002309
Vasu Nori89206fd2010-03-22 10:37:03 -07002310 String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
2311 if (!TextUtils.isEmpty(wifiWatchList)) {
2312 loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
2313 }
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002314
Vasu Nori89206fd2010-03-22 10:37:03 -07002315 // Don't do this. The SystemServer will initialize ADB_ENABLED from a
2316 // persistent system property instead.
2317 //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002318
Vasu Nori89206fd2010-03-22 10:37:03 -07002319 // Allow mock locations default, based on build
2320 loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
2321 "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002322
Vasu Nori89206fd2010-03-22 10:37:03 -07002323 loadSecure35Settings(stmt);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002324
Vasu Nori89206fd2010-03-22 10:37:03 -07002325 loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
2326 R.bool.def_mount_play_notification_snd);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002327
Vasu Nori89206fd2010-03-22 10:37:03 -07002328 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
2329 R.bool.def_mount_ums_autostart);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002330
Vasu Nori89206fd2010-03-22 10:37:03 -07002331 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
2332 R.bool.def_mount_ums_prompt);
Daisuke Miyakawa3c60eeb2012-05-08 12:08:25 -07002333
Vasu Nori89206fd2010-03-22 10:37:03 -07002334 loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
2335 R.bool.def_mount_ums_notify_enabled);
Svetoslav Ganov585f13f8d2010-08-10 07:59:15 -07002336
2337 loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
2338 R.bool.def_accessibility_script_injection);
2339
2340 loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
2341 R.string.def_accessibility_web_content_key_bindings);
Paul Westbrookd99d0dc2011-02-01 14:26:16 -08002342
Svetoslav Ganov54d068e2011-03-02 12:58:40 -08002343 loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
2344 R.integer.def_long_press_timeout_millis);
Svetoslav Ganova28a16d2011-07-28 11:24:21 -07002345
2346 loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
2347 R.bool.def_touch_exploration_enabled);
Svetoslav Ganov55f937a2011-12-05 11:42:07 -08002348
2349 loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
2350 R.bool.def_accessibility_speak_password);
Svetoslav Ganov3ca5a742011-12-06 15:24:37 -08002351
2352 loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
2353 R.string.def_accessibility_screen_reader_url);
Mike Lockwood86aeb062011-10-21 13:29:58 -04002354
Amith Yamasanid1645f82012-06-12 11:53:26 -07002355 if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {
2356 loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");
2357 } else {
2358 loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
2359 R.bool.def_lockscreen_disabled);
2360 }
Mike Lockwood23955272011-10-21 11:22:48 -04002361
John Spurlock634471e2012-08-09 10:41:37 -04002362 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
John Spurlocked108f32012-10-18 16:49:24 -04002363 com.android.internal.R.bool.config_dreamsEnabledByDefault);
John Spurlock634471e2012-08-09 10:41:37 -04002364 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
John Spurlocked108f32012-10-18 16:49:24 -04002365 com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
John Spurlock1a868b72012-08-22 09:56:51 -04002366 loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
John Spurlocked108f32012-10-18 16:49:24 -04002367 com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
John Spurlock1a868b72012-08-22 09:56:51 -04002368 loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
John Spurlocked108f32012-10-18 16:49:24 -04002369 com.android.internal.R.string.config_dreamsDefaultComponent);
John Spurlock1a868b72012-08-22 09:56:51 -04002370 loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
John Spurlocked108f32012-10-18 16:49:24 -04002371 com.android.internal.R.string.config_dreamsDefaultComponent);
Svetoslav Ganov1cf70bb2012-08-06 10:53:34 -07002372
2373 loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
2374 R.bool.def_accessibility_display_magnification_enabled);
2375
2376 loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
2377 R.fraction.def_accessibility_display_magnification_scale, 1);
2378
2379 loadBooleanSetting(stmt,
2380 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
2381 R.bool.def_accessibility_display_magnification_auto_update);
John Spurlock7f1c2482012-10-05 11:15:28 -04002382
2383 loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
2384 R.bool.def_user_setup_complete);
Mike Lockwoodc02c4a72014-01-07 14:46:22 -08002385
2386 loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
2387 R.string.def_immersive_mode_confirmations);
2388
Christopher Tateaa036a22014-05-19 16:33:27 -07002389 loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
2390 R.bool.def_install_non_market_apps);
2391
Jeff Browna20dda42014-05-27 20:57:24 -07002392 loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
2393 R.bool.def_wake_gesture_enabled);
2394
Dan Sandler52e57012014-07-22 23:14:54 -04002395 loadIntegerSetting(stmt, Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
2396 R.integer.def_lock_screen_show_notifications);
2397
Chris Wrencd8f4f72014-08-27 18:48:13 -04002398 loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
2399 R.bool.def_lock_screen_allow_private_notifications);
2400
Jeff Brown05af6ad2014-09-30 20:54:30 -07002401 loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
2402 R.integer.def_sleep_timeout);
Vasu Nori89206fd2010-03-22 10:37:03 -07002403 } finally {
2404 if (stmt != null) stmt.close();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002405 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002406 }
2407
Dianne Hackborncf098292009-07-01 19:55:20 -07002408 private void loadSecure35Settings(SQLiteStatement stmt) {
2409 loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
2410 R.bool.def_backup_enabled);
Jim Miller31f90b62010-01-20 13:35:20 -08002411
Dianne Hackborncf098292009-07-01 19:55:20 -07002412 loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
2413 R.string.def_backup_transport);
2414 }
Jim Miller61766772010-02-12 14:56:49 -08002415
Christopher Tate06efb532012-08-24 15:29:27 -07002416 private void loadGlobalSettings(SQLiteDatabase db) {
2417 SQLiteStatement stmt = null;
2418 try {
2419 stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
2420 + " VALUES(?,?);");
2421
2422 // --- Previously in 'system'
2423 loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,
2424 R.bool.def_airplane_mode_on);
2425
2426 loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
2427 R.string.def_airplane_mode_radios);
2428
2429 loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
2430 R.string.airplane_mode_toggleable_radios);
2431
2432 loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED,
2433 R.bool.assisted_gps_enabled);
2434
2435 loadBooleanSetting(stmt, Settings.Global.AUTO_TIME,
2436 R.bool.def_auto_time); // Sync time to NITZ
2437
2438 loadBooleanSetting(stmt, Settings.Global.AUTO_TIME_ZONE,
2439 R.bool.def_auto_time_zone); // Sync timezone to NITZ
2440
2441 loadSetting(stmt, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
2442 ("1".equals(SystemProperties.get("ro.kernel.qemu")) ||
2443 mContext.getResources().getBoolean(R.bool.def_stay_on_while_plugged_in))
2444 ? 1 : 0);
2445
2446 loadIntegerSetting(stmt, Settings.Global.WIFI_SLEEP_POLICY,
2447 R.integer.def_wifi_sleep_policy);
2448
Eric Laurent55b02222012-10-03 11:56:23 -07002449 loadSetting(stmt, Settings.Global.MODE_RINGER,
2450 AudioManager.RINGER_MODE_NORMAL);
2451
Christopher Tate06efb532012-08-24 15:29:27 -07002452 // --- Previously in 'secure'
Christopher Tate6f5a9a92012-09-14 17:24:28 -07002453 loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
2454 R.bool.def_package_verifier_enable);
2455
2456 loadBooleanSetting(stmt, Settings.Global.WIFI_ON,
2457 R.bool.def_wifi_on);
2458
2459 loadBooleanSetting(stmt, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
2460 R.bool.def_networks_available_notification_on);
2461
Christopher Tate06efb532012-08-24 15:29:27 -07002462 loadBooleanSetting(stmt, Settings.Global.BLUETOOTH_ON,
2463 R.bool.def_bluetooth_on);
2464
2465 // Enable or disable Cell Broadcast SMS
2466 loadSetting(stmt, Settings.Global.CDMA_CELL_BROADCAST_SMS,
2467 RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
2468
2469 // Data roaming default, based on build
2470 loadSetting(stmt, Settings.Global.DATA_ROAMING,
2471 "true".equalsIgnoreCase(
2472 SystemProperties.get("ro.com.android.dataroaming",
2473 "false")) ? 1 : 0);
2474
2475 loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED,
2476 R.bool.def_device_provisioned);
2477
2478 final int maxBytes = mContext.getResources().getInteger(
2479 R.integer.def_download_manager_max_bytes_over_mobile);
2480 if (maxBytes > 0) {
2481 loadSetting(stmt, Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
2482 Integer.toString(maxBytes));
2483 }
2484
2485 final int recommendedMaxBytes = mContext.getResources().getInteger(
2486 R.integer.def_download_manager_recommended_max_bytes_over_mobile);
2487 if (recommendedMaxBytes > 0) {
2488 loadSetting(stmt, Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
2489 Integer.toString(recommendedMaxBytes));
2490 }
2491
2492 // Mobile Data default, based on build
2493 loadSetting(stmt, Settings.Global.MOBILE_DATA,
2494 "true".equalsIgnoreCase(
2495 SystemProperties.get("ro.com.android.mobiledata",
2496 "true")) ? 1 : 0);
2497
2498 loadBooleanSetting(stmt, Settings.Global.NETSTATS_ENABLED,
2499 R.bool.def_netstats_enabled);
2500
Christopher Tate06efb532012-08-24 15:29:27 -07002501 loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED,
2502 R.bool.def_usb_mass_storage_enabled);
2503
2504 loadIntegerSetting(stmt, Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
2505 R.integer.def_max_dhcp_retries);
2506
Jeff Brown89d55462012-09-19 11:33:42 -07002507 loadBooleanSetting(stmt, Settings.Global.WIFI_DISPLAY_ON,
2508 R.bool.def_wifi_display_on);
2509
Jim Millerb14288d2012-09-30 18:25:05 -07002510 loadStringSetting(stmt, Settings.Global.LOCK_SOUND,
2511 R.string.def_lock_sound);
Jim Millerb14288d2012-09-30 18:25:05 -07002512 loadStringSetting(stmt, Settings.Global.UNLOCK_SOUND,
2513 R.string.def_unlock_sound);
Adrian Roos49e057d2014-08-13 17:14:51 +02002514 loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
2515 R.string.def_trusted_sound);
Amith Yamasani531c2372012-10-08 14:43:20 -07002516 loadIntegerSetting(stmt, Settings.Global.POWER_SOUNDS_ENABLED,
2517 R.integer.def_power_sounds_enabled);
2518 loadStringSetting(stmt, Settings.Global.LOW_BATTERY_SOUND,
2519 R.string.def_low_battery_sound);
2520 loadIntegerSetting(stmt, Settings.Global.DOCK_SOUNDS_ENABLED,
2521 R.integer.def_dock_sounds_enabled);
2522 loadStringSetting(stmt, Settings.Global.DESK_DOCK_SOUND,
2523 R.string.def_desk_dock_sound);
2524 loadStringSetting(stmt, Settings.Global.DESK_UNDOCK_SOUND,
2525 R.string.def_desk_undock_sound);
2526 loadStringSetting(stmt, Settings.Global.CAR_DOCK_SOUND,
2527 R.string.def_car_dock_sound);
2528 loadStringSetting(stmt, Settings.Global.CAR_UNDOCK_SOUND,
2529 R.string.def_car_undock_sound);
Jeff Brown84e27562012-12-07 13:56:34 -08002530 loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
2531 R.string.def_wireless_charging_started_sound);
Jim Millerb14288d2012-09-30 18:25:05 -07002532
Dmytro Dubovyk729f6682012-12-18 18:07:50 +02002533 loadIntegerSetting(stmt, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
2534 R.integer.def_dock_audio_media_enabled);
2535
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002536 loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
2537 loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
2538 PackageHelper.APP_INSTALL_AUTO);
2539
2540 // Set default cdma emergency tone
2541 loadSetting(stmt, Settings.Global.EMERGENCY_TONE, 0);
2542
2543 // Set default cdma call auto retry
2544 loadSetting(stmt, Settings.Global.CALL_AUTO_RETRY, 0);
2545
Naveen Kalla97ecc9e2012-07-13 20:10:22 -07002546 // Set the preferred network mode to target desired value or Default
2547 // value defined in RILConstants
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002548 int type;
Naveen Kalla97ecc9e2012-07-13 20:10:22 -07002549 type = SystemProperties.getInt("ro.telephony.default_network",
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002550 RILConstants.PREFERRED_NETWORK_MODE);
Jeff Sharkey6e2bee72012-10-01 13:39:08 -07002551 loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, type);
2552
Naveen Kallab4d485c2013-07-03 16:39:27 -07002553 // Set the preferred cdma subscription source to target desired value or default
2554 // value defined in CdmaSubscriptionSourceManager
2555 type = SystemProperties.getInt("ro.telephony.default_cdma_sub",
2556 CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION);
2557 loadSetting(stmt, Settings.Global.CDMA_SUBSCRIPTION_MODE, type);
2558
Daniel Sandlerdea64622013-09-23 16:05:57 -04002559 loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
2560 R.integer.def_low_battery_sound_timeout);
2561
Oskar Grönqvist2c4254e2013-12-11 14:14:33 +01002562 loadIntegerSetting(stmt, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
2563 R.integer.def_wifi_scan_always_available);
2564
Chris Wren5242cf32014-03-19 16:16:48 -04002565 loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
2566 R.integer.def_heads_up_enabled);
2567
Jerome Poichet147b4d72014-05-12 18:13:27 -07002568 loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
2569
Amith Yamasani1e9c2182014-06-11 17:25:51 -07002570 loadBooleanSetting(stmt, Settings.Global.GUEST_USER_ENABLED,
2571 R.bool.def_guest_user_enabled);
Christopher Tate06efb532012-08-24 15:29:27 -07002572 // --- New global settings start here
2573 } finally {
2574 if (stmt != null) stmt.close();
2575 }
2576 }
2577
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002578 private void loadSetting(SQLiteStatement stmt, String key, Object value) {
2579 stmt.bindString(1, key);
2580 stmt.bindString(2, value.toString());
2581 stmt.execute();
2582 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002583
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002584 private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
2585 loadSetting(stmt, key, mContext.getResources().getString(resid));
2586 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002587
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002588 private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
2589 loadSetting(stmt, key,
2590 mContext.getResources().getBoolean(resid) ? "1" : "0");
2591 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002592
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002593 private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
2594 loadSetting(stmt, key,
2595 Integer.toString(mContext.getResources().getInteger(resid)));
2596 }
Jaikumar Ganesh9bfbfbd2009-05-15 12:05:56 -07002597
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002598 private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
2599 loadSetting(stmt, key,
2600 Float.toString(mContext.getResources().getFraction(resid, base, base)));
2601 }
Amith Yamasani5cd15002011-11-16 11:19:48 -08002602
2603 private int getIntValueFromSystem(SQLiteDatabase db, String name, int defaultValue) {
Christopher Tate06efb532012-08-24 15:29:27 -07002604 return getIntValueFromTable(db, TABLE_SYSTEM, name, defaultValue);
Svetoslav Ganov86317012012-08-15 22:13:00 -07002605 }
2606
2607 private int getIntValueFromTable(SQLiteDatabase db, String table, String name,
2608 int defaultValue) {
2609 String value = getStringValueFromTable(db, table, name, null);
2610 return (value != null) ? Integer.parseInt(value) : defaultValue;
2611 }
2612
2613 private String getStringValueFromTable(SQLiteDatabase db, String table, String name,
2614 String defaultValue) {
Amith Yamasani5cd15002011-11-16 11:19:48 -08002615 Cursor c = null;
2616 try {
Svetoslav Ganov86317012012-08-15 22:13:00 -07002617 c = db.query(table, new String[] { Settings.System.VALUE }, "name='" + name + "'",
Amith Yamasani5cd15002011-11-16 11:19:48 -08002618 null, null, null, null);
2619 if (c != null && c.moveToFirst()) {
2620 String val = c.getString(0);
Svetoslav Ganov86317012012-08-15 22:13:00 -07002621 return val == null ? defaultValue : val;
Amith Yamasani5cd15002011-11-16 11:19:48 -08002622 }
2623 } finally {
2624 if (c != null) c.close();
2625 }
Svetoslav Ganov86317012012-08-15 22:13:00 -07002626 return defaultValue;
Amith Yamasani5cd15002011-11-16 11:19:48 -08002627 }
Jerome Poichet147b4d72014-05-12 18:13:27 -07002628
Jerome Poichet550021e2014-09-11 10:38:12 -07002629 private String getOldDefaultDeviceName() {
Jeff Sharkeyad59c432014-09-12 15:56:30 -07002630 return mContext.getResources().getString(R.string.def_device_name,
Jerome Poichet550021e2014-09-11 10:38:12 -07002631 Build.MANUFACTURER, Build.MODEL);
2632 }
2633
Jerome Poichet147b4d72014-05-12 18:13:27 -07002634 private String getDefaultDeviceName() {
Jeff Sharkeyad59c432014-09-12 15:56:30 -07002635 return mContext.getResources().getString(R.string.def_device_name_simple, Build.MODEL);
Jerome Poichet147b4d72014-05-12 18:13:27 -07002636 }
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07002637}