DatabaseHelper.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.providers.settings; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ActivityInfo; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteOpenHelper; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteStatement; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioManager; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioService; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.ConnectivityManager; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Environment; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Settings; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Config; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Xml; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.util.XmlUtils; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.widget.LockPatternUtils; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.widget.LockPatternView; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileReader; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Database helper class for {@link SettingsProvider}. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DatabaseHelper extends SQLiteOpenHelper { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Path to file containing default bookmarks, relative to ANDROID_ROOT. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String DEFAULT_BOOKMARKS_PATH = "etc/bookmarks.xml"; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "SettingsProvider"; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String DATABASE_NAME = "settings.db"; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DATABASE_VERSION = 33; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Context mContext; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DatabaseHelper(Context context) { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, DATABASE_NAME, null, DATABASE_VERSION); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void createSecureTable(SQLiteDatabase db) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE TABLE secure (" + 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "value TEXT" + 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE INDEX secureIndex1 ON secure (name);"); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCreate(SQLiteDatabase db) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE TABLE system (" + 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "value TEXT" + 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE INDEX systemIndex1 ON system (name);"); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project createSecureTable(db); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE TABLE gservices (" + 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "value TEXT" + 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE INDEX gservicesIndex1 ON gservices (name);"); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE TABLE bluetooth_devices (" + 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY," + 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "name TEXT," + 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "addr TEXT," + 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "channel INTEGER," + 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "type INTEGER" + 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE TABLE bookmarks (" + 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY," + 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "title TEXT," + 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "folder TEXT," + 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "intent TEXT," + 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "shortcut INTEGER," + 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "ordering INTEGER" + 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);"); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);"); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Populate bookmarks table with initial bookmarks 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBookmarks(db); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Load initial volume levels into DB 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadVolumeLevels(db); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Load inital settings values 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSettings(db); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to " 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + currentVersion); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int upgradeVersion = oldVersion; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Pattern for upgrade blocks: 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (upgradeVersion == [the DATABASE_VERSION you set] - 1) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // .. your upgrade logic.. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // upgradeVersion = [the DATABASE_VERSION you set] 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 20) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Version 21 is part of the volume control refresh. There is no 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * longer a UI-visible for setting notification vibrate on/off (in 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * our design), but the functionality still exists. Force the 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notification vibrate to on. 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadVibrateSetting(db, true); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Config.LOGD) Log.d(TAG, "Reset system vibrate setting"); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 21; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion < 22) { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 22; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Upgrade the lock gesture storage location and format 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeLockPatternLocation(db); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion < 23) { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0"); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 23; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 23) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanX INTEGER"); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanY INTEGER"); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Shortcuts, applications, folders 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0"); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Photo frames, clocks 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002"); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Search boxes 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001"); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 24; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 24) { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The value of the constants for preferring wifi or preferring mobile have been 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // swapped, so reload the default. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='network_preference'"); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" + 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')"); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 25; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 25) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD uri TEXT"); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER"); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 26; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 26) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This introduces the new secure settings table. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project createSecureTable(db); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 27; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 27) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Copy settings values from 'system' to 'secure' and delete them from 'system' 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement insertStmt = null; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement deleteStmt = null; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertStmt = 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM " 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "system WHERE name=?"); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?"); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] settingsToMove = { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.ADB_ENABLED, 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.ANDROID_ID, 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.BLUETOOTH_ON, 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.DATA_ROAMING, 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.DEVICE_PROVISIONED, 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.HTTP_PROXY, 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.INSTALL_NON_MARKET_APPS, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.LOGGING_ID, 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.NETWORK_PREFERENCE, 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_ENABLED, 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE, 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL, 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.SETTINGS_CLASSNAME, 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.USB_MASS_STORAGE_ENABLED, 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.USE_GOOGLE_MAIL, 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_ON, 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_AP_COUNT, 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS, 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ON, 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_COUNT, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (String setting : settingsToMove) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertStmt.bindString(1, setting); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertStmt.execute(); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteStmt.bindString(1, setting); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteStmt.execute(); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (insertStmt != null) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertStmt.close(); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (deleteStmt != null) { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteStmt.close(); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 28; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 28 || upgradeVersion == 29) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Note: The upgrade to 28 was flawed since it didn't delete the old 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // setting first before inserting. Combining 28 and 29 with the 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // fixed version. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This upgrade adds the STREAM_NOTIFICATION type to the list of 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // types affected by ringer modes (silent, vibrate, etc.) 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int newValue = (1 << AudioManager.STREAM_RING) 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | (1 << AudioManager.STREAM_NOTIFICATION) 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | (1 << AudioManager.STREAM_SYSTEM); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('" 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + String.valueOf(newValue) + "')"); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 30; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 30) { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Upgrade 31 clears the title for all quick launch shortcuts so the 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities' titles will be resolved at display time. Also, the 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * folder is changed to '@quicklaunch'. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'"); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("UPDATE bookmarks SET title = ''"); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 31; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 31) { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Animations are now turned off by default. 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.WINDOW_ANIMATION_SCALE + "'"); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.TRANSITION_ANIMATION_SCALE + "'"); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)" 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadDefaultAnimationSettings(stmt); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.close(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 32; 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 32) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The Wi-Fi watchdog SSID list is now seeded with the value of 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the property ro.com.android.wifi-watchlist 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(wifiWatchList)) { 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" + 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" + 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wifiWatchList + "');"); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 33; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion != currentVersion) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", must wipe the settings provider"); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS system"); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS systemIndex1"); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS secure"); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS secureIndex1"); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS gservices"); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bluetooth_devices"); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bookmarks"); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1"); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2"); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS favorites"); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onCreate(db); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void upgradeLockPatternLocation(SQLiteDatabase db) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'", 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, null, null, null); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c.getCount() > 0) { 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String lockPattern = c.getString(1); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(lockPattern)) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert lock pattern 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LockPatternUtils lpu = new LockPatternUtils(mContext.getContentResolver()); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<LockPatternView.Cell> cellPattern = 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LockPatternUtils.stringToPattern(lockPattern); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpu.saveLockPattern(cellPattern); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalArgumentException e) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Don't want corrupted lock pattern to hang the reboot process 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.delete("system", "name='lock_pattern'", null); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Loads the default set of bookmarked shortcuts from an xml file. 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param db The database to write the values into 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param startingIndex The zero-based position at which bookmarks in this file should begin 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param subPath The relative path from ANDROID_ROOT to the file to read 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param quiet If true, do no complain if the file is missing 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int loadBookmarks(SQLiteDatabase db, int startingIndex, String subPath, 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean quiet) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileReader bookmarksReader; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system". 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final File favFile = new File(Environment.getRootDirectory(), subPath); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bookmarksReader = new FileReader(favFile); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (FileNotFoundException e) { 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!quiet) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(TAG, "Couldn't find or open bookmarks file " + favFile); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent intent = new Intent(Intent.ACTION_MAIN, null); 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.addCategory(Intent.CATEGORY_LAUNCHER); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PackageManager packageManager = mContext.getPackageManager(); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityInfo info; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i = startingIndex; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XmlPullParser parser = Xml.newPullParser(); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parser.setInput(bookmarksReader); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XmlUtils.beginDocument(parser, "bookmarks"); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (true) { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XmlUtils.nextElement(parser); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String name = parser.getName(); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!"bookmark".equals(name)) { 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String pkg = parser.getAttributeValue(null, "package"); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String cls = parser.getAttributeValue(null, "class"); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String shortcutStr = parser.getAttributeValue(null, "shortcut"); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int shortcutValue = (int) shortcutStr.charAt(0); 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(shortcutStr)) { 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName cn = new ComponentName(pkg, cls); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info = packageManager.getActivityInfo(cn, 0); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.setComponent(cn); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Settings.Bookmarks.INTENT, intent.toURI()); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Settings.Bookmarks.TITLE, 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.loadLabel(packageManager).toString()); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put(Settings.Bookmarks.SHORTCUT, shortcutValue); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.insert("bookmarks", null, values); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i++; 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (PackageManager.NameNotFoundException e) { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (XmlPullParserException e) { 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException e) { 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return i; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Loads the default set of bookmark packages. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param db The database to write the values into 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadBookmarks(SQLiteDatabase db) { 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBookmarks(db, 0, DEFAULT_BOOKMARKS_PATH, false); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Loads the default volume levels. It is actually inserting the index of 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the volume array for each of the volume controls. 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param db the database to insert the volume levels into 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadVolumeLevels(SQLiteDatabase db) { 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_MUSIC, 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]); 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_RING, 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_SYSTEM, 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting( 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt, 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.VOLUME_VOICE, 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_ALARM, 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]); 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting( 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt, 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.VOLUME_NOTIFICATION, 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.MODE_RINGER, 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.RINGER_MODE_NORMAL); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadVibrateSetting(db, false); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // By default, only the ring/notification and system streams are affected 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED, 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (1 << AudioManager.STREAM_RING) | (1 << AudioManager.STREAM_NOTIFICATION) | 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (1 << AudioManager.STREAM_SYSTEM)); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED, 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ((1 << AudioManager.STREAM_MUSIC) | 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (1 << AudioManager.STREAM_RING) | 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (1 << AudioManager.STREAM_NOTIFICATION) | 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (1 << AudioManager.STREAM_SYSTEM))); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.close(); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) { 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (deleteOld) { 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'"); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Vibrate off by default for ringer, on for notification 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int vibrate = 0; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vibrate = AudioService.getValueForVibrateSetting(vibrate, 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vibrate = AudioService.getValueForVibrateSetting(vibrate, 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadSettings(SQLiteDatabase db) { 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSystemSettings(db); 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSecureSettings(db); 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadSystemSettings(SQLiteDatabase db) { 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Resources r = mContext.getResources(); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.DIM_SCREEN, 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_dim_screen); 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN, 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT, 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_screen_off_timeout); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON, 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_airplane_mode_on); 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS, 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.string.def_airplane_mode_radios); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.AUTO_TIME, 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_auto_time); // Sync time to NITZ 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS, 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_screen_brightness); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadDefaultAnimationSettings(stmt); 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION, 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_accelerometer_rotation); 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Default date format based on build 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.System.DATE_FORMAT, 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SystemProperties.get("ro.com.android.dateformat", 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MM-dd-yyyy")); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.close(); 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadDefaultAnimationSettings(SQLiteStatement stmt) { 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE, 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_animation_scale, 1); 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE, 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_transition_scale, 1); 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadSecureSettings(SQLiteDatabase db) { 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON, 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_bluetooth_on); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Data roaming default, based on build 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.Secure.DATA_ROAMING, 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "true".equalsIgnoreCase( 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SystemProperties.get("ro.com.android.dataroaming", 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "false")) ? 1 : 0); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_install_non_market_apps); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.string.def_location_providers_allowed); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE, 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_network_preference); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED, 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_usb_mass_storage_enabled); 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.WIFI_ON, 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_wifi_on); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_networks_available_notification_on); 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(wifiWatchList)) { 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList); 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Don't do this. The SystemServer will initialize ADB_ENABLED from a 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // persistent system property instead. 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Allow mock locations default, based on build 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION, 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0); 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.close(); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadSetting(SQLiteStatement stmt, String key, Object value) { 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.bindString(1, key); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.bindString(2, value.toString()); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.execute(); 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadStringSetting(SQLiteStatement stmt, String key, int resid) { 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, mContext.getResources().getString(resid)); 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) { 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.getResources().getBoolean(resid) ? "1" : "0"); 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) { 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer.toString(mContext.getResources().getInteger(resid))); 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) { 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Float.toString(mContext.getResources().getFraction(resid, base, base))); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 681