DatabaseHelper.java revision 575d1af980f4b4866325bfc487455f54606cf49e
154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/* 254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * you may not use this file except in compliance with the License. 654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * You may obtain a copy of the License at 754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * See the License for the specific language governing permissions and 1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * limitations under the License. 1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpackage com.android.providers.settings; 1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ComponentName; 2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ContentValues; 2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Context; 2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Intent; 2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.ActivityInfo; 2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.PackageManager; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.Cursor; 2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase; 2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteOpenHelper; 2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteStatement; 3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioManager; 3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioService; 3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.net.ConnectivityManager; 3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Environment; 3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.SystemProperties; 3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.provider.Settings; 3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils; 3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Config; 3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log; 3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Xml; 4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.util.XmlUtils; 4104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.RILConstants; 4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternUtils; 4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternView; 4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException; 4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.File; 5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileNotFoundException; 5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileReader; 5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.IOException; 5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.List; 5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/** 5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Database helper class for {@link SettingsProvider}. 5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database. 5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 59074da8f9aa424b25d84f4e4eb762ca534ea96716James Wylderpublic class DatabaseHelper extends SQLiteOpenHelper { 6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Path to file containing default bookmarks, relative to ANDROID_ROOT. 6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private static final String DEFAULT_BOOKMARKS_PATH = "etc/bookmarks.xml"; 6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private static final String TAG = "SettingsProvider"; 6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private static final String DATABASE_NAME = "settings.db"; 67575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project private static final int DATABASE_VERSION = 36; 689bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private Context mContext; 7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public DatabaseHelper(Context context) { 7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project super(context, DATABASE_NAME, null, DATABASE_VERSION); 7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project mContext = context; 7454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 7554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 76f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void createSecureTable(SQLiteDatabase db) { 77f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("CREATE TABLE secure (" + 78f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 79f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 80f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "value TEXT" + 81f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project ");"); 82f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("CREATE INDEX secureIndex1 ON secure (name);"); 83f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project @Override 8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public void onCreate(SQLiteDatabase db) { 8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE system (" + 8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "value TEXT" + 9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX systemIndex1 ON system (name);"); 9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 94f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project createSecureTable(db); 95f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE gservices (" + 9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "value TEXT" + 10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX gservicesIndex1 ON gservices (name);"); 10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE bluetooth_devices (" + 10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY," + 10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "name TEXT," + 10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "addr TEXT," + 10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "channel INTEGER," + 10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "type INTEGER" + 10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE bookmarks (" + 11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY," + 11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "title TEXT," + 11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "folder TEXT," + 11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "intent TEXT," + 11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "shortcut INTEGER," + 11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "ordering INTEGER" + 11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);"); 12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);"); 12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Populate bookmarks table with initial bookmarks 12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadBookmarks(db); 12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Load initial volume levels into DB 12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadVolumeLevels(db); 12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Load inital settings values 13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadSettings(db); 13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project @Override 13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) { 13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to " 13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + currentVersion); 1379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project int upgradeVersion = oldVersion; 13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Pattern for upgrade blocks: 14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // 14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // if (upgradeVersion == [the DATABASE_VERSION you set] - 1) { 14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // .. your upgrade logic.. 14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // upgradeVersion = [the DATABASE_VERSION you set] 14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // } 1469bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 20) { 14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /* 14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Version 21 is part of the volume control refresh. There is no 15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * longer a UI-visible for setting notification vibrate on/off (in 15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * our design), but the functionality still exists. Force the 15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * notification vibrate to on. 15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadVibrateSetting(db, true); 15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (Config.LOGD) Log.d(TAG, "Reset system vibrate setting"); 15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 21; 15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 1599bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion < 22) { 16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 22; 16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Upgrade the lock gesture storage location and format 16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeLockPatternLocation(db); 16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion < 23) { 16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0"); 16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 23; 16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 23) { 17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.beginTransaction(); 17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanX INTEGER"); 17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanY INTEGER"); 17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Shortcuts, applications, folders 17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0"); 17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Photo frames, clocks 17904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville db.execSQL( 18004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002"); 18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Search boxes 18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001"); 18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.setTransactionSuccessful(); 18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } finally { 18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.endTransaction(); 18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 24; 18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 1899bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 24) { 19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.beginTransaction(); 19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // The value of the constants for preferring wifi or preferring mobile have been 19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // swapped, so reload the default. 19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='network_preference'"); 19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" + 19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')"); 19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.setTransactionSuccessful(); 19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } finally { 20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.endTransaction(); 20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 25; 20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 204f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 205f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 25) { 206f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 207f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 208f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD uri TEXT"); 209f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER"); 210f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 212f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 26; 215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2169bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 26) { 218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // This introduces the new secure settings table. 219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project createSecureTable(db); 222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 27; 227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2289bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 27) { 230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // Copy settings values from 'system' to 'secure' and delete them from 'system' 231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project SQLiteStatement insertStmt = null; 232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project SQLiteStatement deleteStmt = null; 2339bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project insertStmt = 237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM " 238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + "system WHERE name=?"); 239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?"); 240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project String[] settingsToMove = { 242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.ADB_ENABLED, 243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.ANDROID_ID, 244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.BLUETOOTH_ON, 245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.DATA_ROAMING, 246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.DEVICE_PROVISIONED, 247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.HTTP_PROXY, 248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.INSTALL_NON_MARKET_APPS, 249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.LOGGING_ID, 251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.NETWORK_PREFERENCE, 252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_ENABLED, 253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE, 254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL, 255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.SETTINGS_CLASSNAME, 256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.USB_MASS_STORAGE_ENABLED, 257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.USE_GOOGLE_MAIL, 258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, 261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_ON, 262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, 263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_AP_COUNT, 264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, 265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, 266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, 267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, 268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS, 269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ON, 270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_COUNT, 271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, 272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS, 273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project }; 2749bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project for (String setting : settingsToMove) { 276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project insertStmt.bindString(1, setting); 277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project insertStmt.execute(); 2789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project deleteStmt.bindString(1, setting); 280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project deleteStmt.execute(); 281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (insertStmt != null) { 286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project insertStmt.close(); 287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (deleteStmt != null) { 289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project deleteStmt.close(); 290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 28; 293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2949bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 28 || upgradeVersion == 29) { 296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // Note: The upgrade to 28 was flawed since it didn't delete the old 297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // setting first before inserting. Combining 28 and 29 with the 298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // fixed version. 299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // This upgrade adds the STREAM_NOTIFICATION type to the list of 301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // types affected by ringer modes (silent, vibrate, etc.) 302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project int newValue = (1 << AudioManager.STREAM_RING) 307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project | (1 << AudioManager.STREAM_NOTIFICATION) 308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project | (1 << AudioManager.STREAM_SYSTEM); 309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('" 310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + String.valueOf(newValue) + "')"); 312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 3169bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 30; 318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 3199bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 3209266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project if (upgradeVersion == 30) { 3219266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project /* 3229266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * Upgrade 31 clears the title for all quick launch shortcuts so the 3239266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * activities' titles will be resolved at display time. Also, the 3249266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * folder is changed to '@quicklaunch'. 3259266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project */ 3269266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.beginTransaction(); 3279266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project try { 3289266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'"); 3299266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.execSQL("UPDATE bookmarks SET title = ''"); 3309266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.setTransactionSuccessful(); 3319266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } finally { 3329266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.endTransaction(); 3339266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } 3349266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project upgradeVersion = 31; 3359266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } 336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 31) { 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 339ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Animations are now managed in preferences, and may be 340ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * enabled or disabled based on product resources. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.WINDOW_ANIMATION_SCALE + "'"); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.TRANSITION_ANIMATION_SCALE + "'"); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)" 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadDefaultAnimationSettings(stmt); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmt.close(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 32; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 32) { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The Wi-Fi watchdog SSID list is now seeded with the value of 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the property ro.com.android.wifi-watchlist 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(wifiWatchList)) { 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" + 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" + 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wifiWatchList + "');"); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 33; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 3774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (upgradeVersion == 33) { 3784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project // Set the default zoom controls to: tap-twice to bring up +/- 3794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.beginTransaction(); 3804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project try { 3814df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.execSQL("INSERT INTO system(name,value) values('zoom','2');"); 3824df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.setTransactionSuccessful(); 3834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } finally { 3844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.endTransaction(); 3854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project upgradeVersion = 34; 3874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood if (upgradeVersion == 34) { 390bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood db.beginTransaction(); 391bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood try { 392bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood String value = 393bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0"; 394bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" + 395bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood Settings.Secure.ASSISTED_GPS_ENABLED + "','" + value + "');"); 396bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood db.setTransactionSuccessful(); 397bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood } finally { 398bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood db.endTransaction(); 399bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood } 400bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood 401bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood upgradeVersion = 35; 402bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood } 403bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood 404575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project if (upgradeVersion == 35) { 405575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project db.beginTransaction(); 406575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project try { 407cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" 408cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn + " VALUES(?,?);"); 409cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadSecure35Settings(stmt); 410cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn stmt.close(); 411cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn db.setTransactionSuccessful(); 412cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } finally { 413cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn db.endTransaction(); 414cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 415575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project upgradeVersion = 36; 416cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 417cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn 41854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion != currentVersion) { 41954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion 42054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + ", must wipe the settings provider"); 42154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS system"); 42254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS systemIndex1"); 423f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS secure"); 424f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS secureIndex1"); 42554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS gservices"); 42654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); 42754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bluetooth_devices"); 42854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bookmarks"); 42954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1"); 43054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2"); 43154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS favorites"); 43254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project onCreate(db); 43354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 43454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 43554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 43654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void upgradeLockPatternLocation(SQLiteDatabase db) { 4379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'", 43854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project null, null, null, null); 43954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (c.getCount() > 0) { 44054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.moveToFirst(); 44154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String lockPattern = c.getString(1); 44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (!TextUtils.isEmpty(lockPattern)) { 44354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Convert lock pattern 44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project LockPatternUtils lpu = new LockPatternUtils(mContext.getContentResolver()); 4469bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh List<LockPatternView.Cell> cellPattern = 44754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project LockPatternUtils.stringToPattern(lockPattern); 44854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project lpu.saveLockPattern(cellPattern); 44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (IllegalArgumentException e) { 45054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Don't want corrupted lock pattern to hang the reboot process 45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 45254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.close(); 45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.delete("system", "name='lock_pattern'", null); 45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } else { 45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.close(); 45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 45954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 46054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 46154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Loads the default set of bookmarked shortcuts from an xml file. 46254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 46354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param db The database to write the values into 46454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param startingIndex The zero-based position at which bookmarks in this file should begin 46554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param subPath The relative path from ANDROID_ROOT to the file to read 46654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param quiet If true, do no complain if the file is missing 46754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 46854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private int loadBookmarks(SQLiteDatabase db, int startingIndex, String subPath, 46954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project boolean quiet) { 47054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project FileReader bookmarksReader; 47154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 47254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system". 47354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project final File favFile = new File(Environment.getRootDirectory(), subPath); 47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project bookmarksReader = new FileReader(favFile); 47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (FileNotFoundException e) { 47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (!quiet) { 47854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.e(TAG, "Couldn't find or open bookmarks file " + favFile); 47954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 48054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return 0; 48154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 48254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 48354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Intent intent = new Intent(Intent.ACTION_MAIN, null); 48454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project intent.addCategory(Intent.CATEGORY_LAUNCHER); 48554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ContentValues values = new ContentValues(); 48654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 48754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project PackageManager packageManager = mContext.getPackageManager(); 48854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ActivityInfo info; 48954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project int i = startingIndex; 49054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 49154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project XmlPullParser parser = Xml.newPullParser(); 49254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project parser.setInput(bookmarksReader); 49354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 49454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project XmlUtils.beginDocument(parser, "bookmarks"); 49554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 49654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project while (true) { 49754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project XmlUtils.nextElement(parser); 49854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 49954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String name = parser.getName(); 50054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (!"bookmark".equals(name)) { 50154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project break; 50254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 50354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 50454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String pkg = parser.getAttributeValue(null, "package"); 50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String cls = parser.getAttributeValue(null, "class"); 50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String shortcutStr = parser.getAttributeValue(null, "shortcut"); 50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project int shortcutValue = (int) shortcutStr.charAt(0); 50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (TextUtils.isEmpty(shortcutStr)) { 50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls); 51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ComponentName cn = new ComponentName(pkg, cls); 51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project info = packageManager.getActivityInfo(cn, 0); 51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project intent.setComponent(cn); 51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project values.put(Settings.Bookmarks.INTENT, intent.toURI()); 51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project values.put(Settings.Bookmarks.TITLE, 51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project info.loadLabel(packageManager).toString()); 51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project values.put(Settings.Bookmarks.SHORTCUT, shortcutValue); 52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.insert("bookmarks", null, values); 52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project i++; 52254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (PackageManager.NameNotFoundException e) { 52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e); 52454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 52654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (XmlPullParserException e) { 52754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (IOException e) { 52954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 53154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project return i; 53354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Loads the default set of bookmark packages. 53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 53854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param db The database to write the values into 53954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadBookmarks(SQLiteDatabase db) { 54154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadBookmarks(db, 0, DEFAULT_BOOKMARKS_PATH, false); 54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 54354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 54454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 54554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Loads the default volume levels. It is actually inserting the index of 54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * the volume array for each of the volume controls. 54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param db the database to insert the volume levels into 54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadVolumeLevels(SQLiteDatabase db) { 55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + " VALUES(?,?);"); 55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 554f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_MUSIC, 555f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]); 556f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_RING, 557f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]); 558f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_SYSTEM, 559f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]); 560f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting( 561f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project stmt, 562f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.System.VOLUME_VOICE, 563f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]); 564f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting(stmt, Settings.System.VOLUME_ALARM, 565f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]); 566f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting( 567f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project stmt, 568f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.System.VOLUME_NOTIFICATION, 569f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]); 570f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSetting(stmt, Settings.System.MODE_RINGER, 571f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project AudioManager.RINGER_MODE_NORMAL); 57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadVibrateSetting(db, false); 5749bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // By default, only the ring/notification and system streams are affected 57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED, 577f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project (1 << AudioManager.STREAM_RING) | (1 << AudioManager.STREAM_NOTIFICATION) | 578f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project (1 << AudioManager.STREAM_SYSTEM)); 5799bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED, 58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ((1 << AudioManager.STREAM_MUSIC) | 58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project (1 << AudioManager.STREAM_RING) | 583f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project (1 << AudioManager.STREAM_NOTIFICATION) | 58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project (1 << AudioManager.STREAM_SYSTEM))); 58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.close(); 58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) { 59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (deleteOld) { 59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'"); 59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 5939bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + " VALUES(?,?);"); 59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Vibrate off by default for ringer, on for notification 59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project int vibrate = 0; 59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project vibrate = AudioService.getValueForVibrateSetting(vibrate, 60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON); 60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project vibrate = AudioService.getValueForVibrateSetting(vibrate, 60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); 60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate); 60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadSettings(SQLiteDatabase db) { 607f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSystemSettings(db); 6089bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSecureSettings(db); 609f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 6109bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 611f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void loadSystemSettings(SQLiteDatabase db) { 61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + " VALUES(?,?);"); 6149bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Resources r = mContext.getResources(); 6169bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.DIM_SCREEN, 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_dim_screen); 6199bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN, 62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT, 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_screen_off_timeout); 6239bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 624d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause // Set default cdma emergency tone 625d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0); 626d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause 627d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause // Set default cdma call auto retry 628d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0); 629d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause 630d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause // Set default cdma DTMF type 631d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0); 632d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause 633d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause // Set default hearing aid 634d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause loadSetting(stmt, Settings.System.HEARING_AID, 0); 635d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause 636d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause // Set default tty mode 637d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause loadSetting(stmt, Settings.System.TTY_MODE, 0); 638d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON, 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_airplane_mode_on); 6419bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS, 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.string.def_airplane_mode_radios); 6449bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.AUTO_TIME, 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_auto_time); // Sync time to NITZ 6479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS, 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_screen_brightness); 6509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadDefaultAnimationSettings(stmt); 65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION, 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_accelerometer_rotation); 6559bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 656f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project stmt.close(); 657f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 6589bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadDefaultAnimationSettings(SQLiteStatement stmt) { 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE, 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_animation_scale, 1); 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE, 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_transition_scale, 1); 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6659bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 666f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void loadSecureSettings(SQLiteDatabase db) { 667f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" 668f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + " VALUES(?,?);"); 6699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON, 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_bluetooth_on); 6729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 673f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // Data roaming default, based on build 6749bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSetting(stmt, Settings.Secure.DATA_ROAMING, 675f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "true".equalsIgnoreCase( 6769bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.get("ro.com.android.dataroaming", 6779bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh "false")) ? 1 : 0); 6789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_install_non_market_apps); 6819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.string.def_location_providers_allowed); 6849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 685bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED, 686bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood R.bool.assisted_gps_enabled); 687bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE, 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.integer.def_network_preference); 6909bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED, 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_usb_mass_storage_enabled); 6939bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.WIFI_ON, 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_wifi_on); 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.bool.def_networks_available_notification_on); 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(wifiWatchList)) { 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList); 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 70404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // Set the preferred network mode to 0 = Global, CDMA default 705ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh int type = SystemProperties.getInt("ro.telephony.default_network", 70604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville RILConstants.PREFERRED_NETWORK_MODE); 707ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type); 70804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 70904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // Enable or disable Cell Broadcast SMS 71004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS, 71104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED); 71204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 71304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville // Set the preferred cdma subscription to 0 = Subscription from RUIM, when available 7149bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSetting(stmt, Settings.Secure.PREFERRED_CDMA_SUBSCRIPTION, 71504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville RILConstants.PREFERRED_CDMA_SUBSCRIPTION); 71604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville 71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Don't do this. The SystemServer will initialize ADB_ENABLED from a 71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // persistent system property instead. 719f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0); 7209bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Allow mock locations default, based on build 7229bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION, 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0); 7249bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 725cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadSecure35Settings(stmt); 726cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn 72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.close(); 72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 730cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn private void loadSecure35Settings(SQLiteStatement stmt) { 731cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED, 732cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn R.bool.def_backup_enabled); 733cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn 734cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT, 735cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn R.string.def_backup_transport); 736cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 737cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn 73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadSetting(SQLiteStatement stmt, String key, Object value) { 73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.bindString(1, key); 74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.bindString(2, value.toString()); 74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.execute(); 74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 7439bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadStringSetting(SQLiteStatement stmt, String key, int resid) { 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, mContext.getResources().getString(resid)); 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) { 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.getResources().getBoolean(resid) ? "1" : "0"); 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7529bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) { 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer.toString(mContext.getResources().getInteger(resid))); 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7579bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) { 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Float.toString(mContext.getResources().getFraction(resid, base, base))); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 763