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; 25f02811f7853202c0934622702ebb9c82e6ab0592Romain Guyimport android.content.res.XmlResourceParser; 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.SystemProperties; 3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.provider.Settings; 35156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasaniimport android.provider.Settings.Secure; 3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils; 3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log; 3840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu 39fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.content.PackageHelper; 40fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.telephony.BaseCommands; 41fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.telephony.Phone; 42fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.telephony.RILConstants; 43fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.util.XmlUtils; 44fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.widget.LockPatternUtils; 45fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.widget.LockPatternView; 46fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne 47fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport org.xmlpull.v1.XmlPullParser; 48fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport org.xmlpull.v1.XmlPullParserException; 49fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne 5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.IOException; 5124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackbornimport java.util.HashSet; 5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.List; 5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/** 5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Database helper class for {@link SettingsProvider}. 5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database. 5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 58074da8f9aa424b25d84f4e4eb762ca534ea96716James Wylderpublic class DatabaseHelper extends SQLiteOpenHelper { 5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private static final String TAG = "SettingsProvider"; 6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private static final String DATABASE_NAME = "settings.db"; 61f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller 62f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller // Please, please please. If you update the database version, check to make sure the 63f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion' 64f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller // is properly propagated through your change. Not doing so will result in a loss of user 65f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller // settings. 663066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani private static final int DATABASE_VERSION = 74; 679bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private Context mContext; 6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 7024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn private static final HashSet<String> mValidTables = new HashSet<String>(); 7124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn 7224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn static { 7324117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("system"); 7424117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("secure"); 7524117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("bluetooth_devices"); 7624117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("bookmarks"); 7724117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn 7824117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn // These are old. 7924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("favorites"); 8024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("gservices"); 8124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn mValidTables.add("old_favorites"); 8224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn } 8324117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn 8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public DatabaseHelper(Context context) { 8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project super(context, DATABASE_NAME, null, DATABASE_VERSION); 8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project mContext = context; 8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 8924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn public static boolean isValidTable(String name) { 9024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn return mValidTables.contains(name); 9124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn } 9224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn 93f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void createSecureTable(SQLiteDatabase db) { 94f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("CREATE TABLE secure (" + 95f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 96f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 97f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project "value TEXT" + 98f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project ");"); 99f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("CREATE INDEX secureIndex1 ON secure (name);"); 100f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 1019bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project @Override 10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public void onCreate(SQLiteDatabase db) { 10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE system (" + 10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY AUTOINCREMENT," + 10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "name TEXT UNIQUE ON CONFLICT REPLACE," + 10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "value TEXT" + 10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX systemIndex1 ON system (name);"); 11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 111f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project createSecureTable(db); 112f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE bluetooth_devices (" + 11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY," + 11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "name TEXT," + 11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "addr TEXT," + 11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "channel INTEGER," + 11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "type INTEGER" + 11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE TABLE bookmarks (" + 12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "_id INTEGER PRIMARY KEY," + 12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "title TEXT," + 12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "folder TEXT," + 12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "intent TEXT," + 12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "shortcut INTEGER," + 12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project "ordering INTEGER" + 12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ");"); 12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);"); 13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);"); 13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Populate bookmarks table with initial bookmarks 13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadBookmarks(db); 13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Load initial volume levels into DB 13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadVolumeLevels(db); 13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Load inital settings values 14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadSettings(db); 14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project @Override 14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) { 14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to " 14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + currentVersion); 1479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project int upgradeVersion = oldVersion; 14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Pattern for upgrade blocks: 15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // 15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // if (upgradeVersion == [the DATABASE_VERSION you set] - 1) { 15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // .. your upgrade logic.. 15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // upgradeVersion = [the DATABASE_VERSION you set] 15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // } 1569bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 20) { 15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /* 15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Version 21 is part of the volume control refresh. There is no 16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * longer a UI-visible for setting notification vibrate on/off (in 16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * our design), but the functionality still exists. Force the 16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * notification vibrate to on. 16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project loadVibrateSetting(db, true); 16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 21; 16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 1689bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion < 22) { 17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 22; 17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Upgrade the lock gesture storage location and format 17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeLockPatternLocation(db); 17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion < 23) { 17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0"); 17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 23; 17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 23) { 18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.beginTransaction(); 18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanX INTEGER"); 18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD spanY INTEGER"); 18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Shortcuts, applications, folders 18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0"); 18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Photo frames, clocks 18804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville db.execSQL( 18904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002"); 19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Search boxes 19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001"); 19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.setTransactionSuccessful(); 19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } finally { 19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.endTransaction(); 19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 24; 19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 1989bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (upgradeVersion == 24) { 20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.beginTransaction(); 20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // The value of the constants for preferring wifi or preferring mobile have been 20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // swapped, so reload the default. 20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='network_preference'"); 20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" + 20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')"); 20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.setTransactionSuccessful(); 20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } finally { 20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.endTransaction(); 21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project upgradeVersion = 25; 21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 25) { 215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD uri TEXT"); 218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER"); 219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 26; 224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2259bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 26) { 227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // This introduces the new secure settings table. 228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project createSecureTable(db); 231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 27; 236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 27) { 239156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani String[] settingsToMove = { 240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.ADB_ENABLED, 241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.ANDROID_ID, 242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.BLUETOOTH_ON, 243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.DATA_ROAMING, 244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.DEVICE_PROVISIONED, 245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.HTTP_PROXY, 246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.INSTALL_NON_MARKET_APPS, 247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.LOGGING_ID, 249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.NETWORK_PREFERENCE, 250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_ENABLED, 251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE, 252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL, 253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.SETTINGS_CLASSNAME, 254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.USB_MASS_STORAGE_ENABLED, 255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.USE_GOOGLE_MAIL, 256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, 259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_ON, 260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, 261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_AP_COUNT, 262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, 263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, 264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, 265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, 266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS, 267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_ON, 268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_COUNT, 269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, 270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS, 271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project }; 272156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani moveFromSystemToSecure(db, settingsToMove); 273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 28; 274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project if (upgradeVersion == 28 || upgradeVersion == 29) { 277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // Note: The upgrade to 28 was flawed since it didn't delete the old 278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // setting first before inserting. Combining 28 and 29 with the 279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // fixed version. 280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // This upgrade adds the STREAM_NOTIFICATION type to the list of 282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project // types affected by ringer modes (silent, vibrate, etc.) 283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.beginTransaction(); 284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project try { 285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project int newValue = (1 << AudioManager.STREAM_RING) 288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project | (1 << AudioManager.STREAM_NOTIFICATION) 289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project | (1 << AudioManager.STREAM_SYSTEM); 290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("INSERT INTO system ('name', 'value') values ('" 291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project + String.valueOf(newValue) + "')"); 293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.setTransactionSuccessful(); 294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } finally { 295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.endTransaction(); 296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 2979bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project upgradeVersion = 30; 299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 3009bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 3019266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project if (upgradeVersion == 30) { 3029266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project /* 3039266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * Upgrade 31 clears the title for all quick launch shortcuts so the 3049266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * activities' titles will be resolved at display time. Also, the 3059266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project * folder is changed to '@quicklaunch'. 3069266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project */ 3079266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.beginTransaction(); 3089266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project try { 3099266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'"); 3109266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.execSQL("UPDATE bookmarks SET title = ''"); 3119266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.setTransactionSuccessful(); 3129266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } finally { 3139266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project db.endTransaction(); 3149266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } 3159266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project upgradeVersion = 31; 3169266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project } 317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 31) { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 320ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Animations are now managed in preferences, and may be 321ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * enabled or disabled based on product resources. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 32489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.WINDOW_ANIMATION_SCALE + "'"); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Settings.System.TRANSITION_ANIMATION_SCALE + "'"); 33089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " VALUES(?,?);"); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadDefaultAnimationSettings(stmt); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 33689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 32; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (upgradeVersion == 32) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The Wi-Fi watchdog SSID list is now seeded with the value of 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the property ro.com.android.wifi-watchlist 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!TextUtils.isEmpty(wifiWatchList)) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.beginTransaction(); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" + 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" + 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wifiWatchList + "');"); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.setTransactionSuccessful(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db.endTransaction(); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project upgradeVersion = 33; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 3594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (upgradeVersion == 33) { 3604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project // Set the default zoom controls to: tap-twice to bring up +/- 3614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.beginTransaction(); 3624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project try { 3634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.execSQL("INSERT INTO system(name,value) values('zoom','2');"); 3644df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.setTransactionSuccessful(); 3654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } finally { 3664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project db.endTransaction(); 3674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project upgradeVersion = 34; 3694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 371bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood if (upgradeVersion == 34) { 372bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood db.beginTransaction(); 37389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 374bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood try { 37589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" 376cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn + " VALUES(?,?);"); 377cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadSecure35Settings(stmt); 378cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn db.setTransactionSuccessful(); 379cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } finally { 380cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn db.endTransaction(); 38189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 382cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 383f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller upgradeVersion = 35; 38402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood } 38502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED 38602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood // was accidentally done out of order here. 38702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39, 38802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood // and we intentionally do nothing from 35 to 36 now. 38902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood if (upgradeVersion == 35) { 390575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project upgradeVersion = 36; 391cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 39202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood 393a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent if (upgradeVersion == 36) { 394a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of 395a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent // types affected by ringer modes (silent, vibrate, etc.) 396a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent db.beginTransaction(); 397a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent try { 398a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent db.execSQL("DELETE FROM system WHERE name='" 399a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 400a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent int newValue = (1 << AudioManager.STREAM_RING) 401a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent | (1 << AudioManager.STREAM_NOTIFICATION) 402a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent | (1 << AudioManager.STREAM_SYSTEM) 403a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent | (1 << AudioManager.STREAM_SYSTEM_ENFORCED); 404a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent db.execSQL("INSERT INTO system ('name', 'value') values ('" 405a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 406a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent + String.valueOf(newValue) + "')"); 407a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent db.setTransactionSuccessful(); 408a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } finally { 409a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent db.endTransaction(); 410a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 4114880575bacd9f49d864e8b61efca8cdeb231895cJim Miller upgradeVersion = 37; 412a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent } 413a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 414bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood if (upgradeVersion == 37) { 415bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood db.beginTransaction(); 41689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 417bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood try { 41889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 419bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood + " VALUES(?,?);"); 420bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS, 421bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood R.string.airplane_mode_toggleable_radios); 422bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood db.setTransactionSuccessful(); 423bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood } finally { 424bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood db.endTransaction(); 42589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 426bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood } 427bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood upgradeVersion = 38; 428bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood } 429bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood 43002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood if (upgradeVersion == 38) { 43102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood db.beginTransaction(); 43202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood try { 43302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood String value = 43402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0"; 43502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" + 43602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood Settings.Secure.ASSISTED_GPS_ENABLED + "','" + value + "');"); 43702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood db.setTransactionSuccessful(); 43802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood } finally { 43902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood db.endTransaction(); 44002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood } 44102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood 44202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood upgradeVersion = 39; 44302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood } 44402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood 445951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy if (upgradeVersion == 39) { 446f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani upgradeAutoBrightness(db); 447951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy upgradeVersion = 40; 448951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy } 449951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy 450bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn if (upgradeVersion == 40) { 451bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn /* 452bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn * All animations are now turned on by default! 453bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn */ 454bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn db.beginTransaction(); 45589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 456bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn try { 457bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn db.execSQL("DELETE FROM system WHERE name='" 458bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn + Settings.System.WINDOW_ANIMATION_SCALE + "'"); 459bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn db.execSQL("DELETE FROM system WHERE name='" 460bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn + Settings.System.TRANSITION_ANIMATION_SCALE + "'"); 46189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 462bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn + " VALUES(?,?);"); 463bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn loadDefaultAnimationSettings(stmt); 464bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn db.setTransactionSuccessful(); 465bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn } finally { 466bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn db.endTransaction(); 46789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 468bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn } 469bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn upgradeVersion = 41; 470bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn } 471bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn 472075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn if (upgradeVersion == 41) { 473075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn /* 474075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn * Initialize newly public haptic feedback setting 475075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn */ 476075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn db.beginTransaction(); 47789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 478075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn try { 479075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn db.execSQL("DELETE FROM system WHERE name='" 480075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'"); 48189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 482075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn + " VALUES(?,?);"); 483075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn loadDefaultHapticSettings(stmt); 484075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn db.setTransactionSuccessful(); 485075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn } finally { 486075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn db.endTransaction(); 48789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 488075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn } 489075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn upgradeVersion = 42; 490075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn } 491075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn 492ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani if (upgradeVersion == 42) { 493ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani /* 494ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani * Initialize new notification pulse setting 495ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani */ 496ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani db.beginTransaction(); 49789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 498ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani try { 49989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 500ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani + " VALUES(?,?);"); 501ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE, 502ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani R.bool.def_notification_pulse); 503ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani db.setTransactionSuccessful(); 504ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani } finally { 505ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani db.endTransaction(); 50689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 507ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani } 508ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani upgradeVersion = 43; 509ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani } 510ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani 511484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent if (upgradeVersion == 43) { 512484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent /* 513484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent * This upgrade stores bluetooth volume separately from voice volume 514484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent */ 515484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent db.beginTransaction(); 51689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 517484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent try { 51889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 519484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent + " VALUES(?,?);"); 520484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO, 521484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]); 522484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent db.setTransactionSuccessful(); 523484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent } finally { 524484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent db.endTransaction(); 52589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 526484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent } 527484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent upgradeVersion = 44; 528484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent } 529484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent 530aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker if (upgradeVersion == 44) { 531aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker /* 532aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker * Gservices was moved into vendor/google. 533aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker */ 534aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker db.execSQL("DROP TABLE IF EXISTS gservices"); 535aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); 536aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker upgradeVersion = 45; 537aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker } 53887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat 53987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat if (upgradeVersion == 45) { 54087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat /* 54187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat * New settings for MountService 54287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat */ 54387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.beginTransaction(); 54487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat try { 54587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.execSQL("INSERT INTO secure(name,value) values('" + 54687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');"); 54787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.execSQL("INSERT INTO secure(name,value) values('" + 54887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');"); 54987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.execSQL("INSERT INTO secure(name,value) values('" + 55087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat Settings.Secure.MOUNT_UMS_PROMPT + "','1');"); 55187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.execSQL("INSERT INTO secure(name,value) values('" + 55287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');"); 55387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.setTransactionSuccessful(); 55487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat } finally { 55587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat db.endTransaction(); 55687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat } 55787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat upgradeVersion = 46; 55887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat } 55987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat 560df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn if (upgradeVersion == 46) { 561df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn /* 562df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn * The password mode constants have changed; reset back to no 563df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn * password. 564df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn */ 565df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn db.beginTransaction(); 566df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn try { 567df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';"); 568df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn db.setTransactionSuccessful(); 569df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn } finally { 570df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn db.endTransaction(); 571df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn } 572df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn upgradeVersion = 47; 573df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn } 574df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn 5756176677e01964cb5751ff217c091571ce6a8b5fbJim Miller 5769327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn if (upgradeVersion == 47) { 5779327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn /* 5789327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * The password mode constants have changed again; reset back to no 5799327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * password. 5809327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn */ 5819327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn db.beginTransaction(); 5829327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn try { 5839327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';"); 5849327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn db.setTransactionSuccessful(); 5859327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } finally { 5869327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn db.endTransaction(); 5879327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 5889327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn upgradeVersion = 48; 5899327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 5906176677e01964cb5751ff217c091571ce6a8b5fbJim Miller 5915d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau if (upgradeVersion == 48) { 5925d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau /* 59321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn * Default recognition service no longer initialized here, 59421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn * moved to RecognitionManagerService. 5955d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau */ 5965d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau upgradeVersion = 49; 5975d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau } 59831f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller 5990e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler if (upgradeVersion == 49) { 6000e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler /* 6010e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler * New settings for new user interface noises. 6020e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler */ 6030e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler db.beginTransaction(); 60489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 6050e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler try { 60689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 6070e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler + " VALUES(?,?);"); 6080e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadUISoundEffectsSettings(stmt); 6090e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler db.setTransactionSuccessful(); 6100e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } finally { 6110e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler db.endTransaction(); 61289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 6130e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 6140e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 6150e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler upgradeVersion = 50; 6160e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 6170e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 618f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor if (upgradeVersion == 50) { 619f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor /* 62040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu * Install location no longer initiated here. 621f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor */ 622f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor upgradeVersion = 51; 623f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor } 624f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor 625156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani if (upgradeVersion == 51) { 626156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani /* Move the lockscreen related settings to Secure, including some private ones. */ 627156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani String[] settingsToMove = { 628156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani Secure.LOCK_PATTERN_ENABLED, 629156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani Secure.LOCK_PATTERN_VISIBLE, 630156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED, 631156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lockscreen.password_type", 632156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lockscreen.lockoutattemptdeadline", 633156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lockscreen.patterneverchosen", 634156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lock_pattern_autolock", 635156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lockscreen.lockedoutpermanently", 636156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani "lockscreen.password_salt" 637156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani }; 638156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani moveFromSystemToSecure(db, settingsToMove); 639156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani upgradeVersion = 52; 640156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 641156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 6421c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler if (upgradeVersion == 52) { 6431c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler // new vibration/silent mode settings 6441c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler db.beginTransaction(); 64589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 6461c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler try { 64789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT INTO system(name,value)" 6481c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler + " VALUES(?,?);"); 6491c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT, 6501c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler R.bool.def_vibrate_in_silent); 6511c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler db.setTransactionSuccessful(); 6521c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler } finally { 6531c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler db.endTransaction(); 65489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 6551c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler } 6561c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler 6571c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler upgradeVersion = 53; 6581c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler } 659089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu 660089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu if (upgradeVersion == 53) { 661089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu /* 66240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu * New settings for set install location UI no longer initiated here. 663089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu */ 664089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu upgradeVersion = 54; 665089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu } 6661c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler 667b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani if (upgradeVersion == 54) { 668b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani /* 669b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani * Update the screen timeout value if set to never 670b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani */ 671b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani db.beginTransaction(); 672b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani try { 673b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani upgradeScreenTimeoutFromNever(db); 674b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani db.setTransactionSuccessful(); 675b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } finally { 676b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani db.endTransaction(); 677b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } 678b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani 679b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani upgradeVersion = 55; 680b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } 681b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani 68240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu if (upgradeVersion == 55) { 68340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu /* Move the install location settings. */ 68440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu String[] settingsToMove = { 68540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu Secure.SET_INSTALL_LOCATION, 68640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu Secure.DEFAULT_INSTALL_LOCATION 68740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu }; 68840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu moveFromSystemToSecure(db, settingsToMove); 68940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu db.beginTransaction(); 69040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu SQLiteStatement stmt = null; 69140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu try { 69240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu stmt = db.compileStatement("INSERT INTO system(name,value)" 69340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu + " VALUES(?,?);"); 69440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu loadSetting(stmt, Secure.SET_INSTALL_LOCATION, 0); 69540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu loadSetting(stmt, Secure.DEFAULT_INSTALL_LOCATION, 69640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu PackageHelper.APP_INSTALL_AUTO); 69740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu db.setTransactionSuccessful(); 69840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu } finally { 69940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu db.endTransaction(); 70040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu if (stmt != null) stmt.close(); 70140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu } 70240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu upgradeVersion = 56; 70340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu } 7046659284d68bb04539891456700c8da2d0bae7d09Jake Hamby 7056659284d68bb04539891456700c8da2d0bae7d09Jake Hamby if (upgradeVersion == 56) { 7066659284d68bb04539891456700c8da2d0bae7d09Jake Hamby /* 7076659284d68bb04539891456700c8da2d0bae7d09Jake Hamby * Add Bluetooth to list of toggleable radios in airplane mode 7086659284d68bb04539891456700c8da2d0bae7d09Jake Hamby */ 7096659284d68bb04539891456700c8da2d0bae7d09Jake Hamby db.beginTransaction(); 7106659284d68bb04539891456700c8da2d0bae7d09Jake Hamby SQLiteStatement stmt = null; 7116659284d68bb04539891456700c8da2d0bae7d09Jake Hamby try { 7126659284d68bb04539891456700c8da2d0bae7d09Jake Hamby db.execSQL("DELETE FROM system WHERE name='" 7136659284d68bb04539891456700c8da2d0bae7d09Jake Hamby + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'"); 7146659284d68bb04539891456700c8da2d0bae7d09Jake Hamby stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 7156659284d68bb04539891456700c8da2d0bae7d09Jake Hamby + " VALUES(?,?);"); 7166659284d68bb04539891456700c8da2d0bae7d09Jake Hamby loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS, 7176659284d68bb04539891456700c8da2d0bae7d09Jake Hamby R.string.airplane_mode_toggleable_radios); 7186659284d68bb04539891456700c8da2d0bae7d09Jake Hamby db.setTransactionSuccessful(); 7196659284d68bb04539891456700c8da2d0bae7d09Jake Hamby } finally { 7206659284d68bb04539891456700c8da2d0bae7d09Jake Hamby db.endTransaction(); 7216659284d68bb04539891456700c8da2d0bae7d09Jake Hamby if (stmt != null) stmt.close(); 7226659284d68bb04539891456700c8da2d0bae7d09Jake Hamby } 7236659284d68bb04539891456700c8da2d0bae7d09Jake Hamby upgradeVersion = 57; 7246659284d68bb04539891456700c8da2d0bae7d09Jake Hamby } 725585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov 7265cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani /************* The following are Honeycomb changes ************/ 7275cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani 728585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov if (upgradeVersion == 57) { 729585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov /* 730585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov * New settings to: 731585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov * 1. Enable injection of accessibility scripts in WebViews. 732585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov * 2. Define the key bindings for traversing web content in WebViews. 733585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov */ 734585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov db.beginTransaction(); 735585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov SQLiteStatement stmt = null; 736585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov try { 737585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov stmt = db.compileStatement("INSERT INTO secure(name,value)" 738585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov + " VALUES(?,?);"); 739585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 740585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov R.bool.def_accessibility_script_injection); 741585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov stmt.close(); 742585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov stmt = db.compileStatement("INSERT INTO secure(name,value)" 743585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov + " VALUES(?,?);"); 744585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS, 745585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov R.string.def_accessibility_web_content_key_bindings); 746585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov db.setTransactionSuccessful(); 747585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov } finally { 748585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov db.endTransaction(); 749585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov if (stmt != null) stmt.close(); 750585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov } 751585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov upgradeVersion = 58; 752585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov } 753585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov 754ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani if (upgradeVersion == 58) { 755ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani /* Add default for new Auto Time Zone */ 7565cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani int autoTimeValue = getIntValueFromSystem(db, Settings.System.AUTO_TIME, 0); 757ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani db.beginTransaction(); 758ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani SQLiteStatement stmt = null; 759ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani try { 7605cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani stmt = db.compileStatement("INSERT INTO system(name,value)" + " VALUES(?,?);"); 7615cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani loadSetting(stmt, Settings.System.AUTO_TIME_ZONE, 7625cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani autoTimeValue); // Sync timezone to NITZ if auto_time was enabled 763ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani db.setTransactionSuccessful(); 764ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani } finally { 765ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani db.endTransaction(); 766ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani if (stmt != null) stmt.close(); 767ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani } 768ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani upgradeVersion = 59; 769ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani } 770ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani 771b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler if (upgradeVersion == 59) { 772b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler // Persistence for the rotation lock feature. 773b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler db.beginTransaction(); 774b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler SQLiteStatement stmt = null; 775b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler try { 776b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler stmt = db.compileStatement("INSERT INTO system(name,value)" 777b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler + " VALUES(?,?);"); 778b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler loadBooleanSetting(stmt, Settings.System.USER_ROTATION, 779b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler R.integer.def_user_rotation); // should be zero degrees 780b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler db.setTransactionSuccessful(); 781b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler } finally { 782b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler db.endTransaction(); 783b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler if (stmt != null) stmt.close(); 784b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler } 785b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler upgradeVersion = 60; 786b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler } 787b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler 7880038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani if (upgradeVersion == 60) { 7895cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Don't do this for upgrades from Gingerbread 7905cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Were only required for intra-Honeycomb upgrades for testing 7915cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // upgradeScreenTimeout(db); 7920038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani upgradeVersion = 61; 7930038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani } 7940038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani 79579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani if (upgradeVersion == 61) { 7965cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Don't do this for upgrades from Gingerbread 7975cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Were only required for intra-Honeycomb upgrades for testing 7985cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // upgradeScreenTimeout(db); 79979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani upgradeVersion = 62; 80079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani } 80179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani 802f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani // Change the default for screen auto-brightness mode 803f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani if (upgradeVersion == 62) { 8045cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Don't do this for upgrades from Gingerbread 8055cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Were only required for intra-Honeycomb upgrades for testing 8065cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // upgradeAutoBrightness(db); 807f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani upgradeVersion = 63; 808f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani } 809f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani 81025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent if (upgradeVersion == 63) { 81125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent // This upgrade adds the STREAM_MUSIC type to the list of 81225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent // types affected by ringer modes (silent, vibrate, etc.) 81325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent db.beginTransaction(); 81425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent try { 81525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent db.execSQL("DELETE FROM system WHERE name='" 81625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 81725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent int newValue = (1 << AudioManager.STREAM_RING) 81825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent | (1 << AudioManager.STREAM_NOTIFICATION) 81925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent | (1 << AudioManager.STREAM_SYSTEM) 82025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent | (1 << AudioManager.STREAM_SYSTEM_ENFORCED) 82125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent | (1 << AudioManager.STREAM_MUSIC); 82225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent db.execSQL("INSERT INTO system ('name', 'value') values ('" 82325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 82425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent + String.valueOf(newValue) + "')"); 82525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent db.setTransactionSuccessful(); 82625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent } finally { 82725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent db.endTransaction(); 82825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent } 82925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent upgradeVersion = 64; 83025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent } 83125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent 83254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov if (upgradeVersion == 64) { 83354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov // New setting to configure the long press timeout. 83454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov db.beginTransaction(); 83554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov SQLiteStatement stmt = null; 83654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov try { 83754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov stmt = db.compileStatement("INSERT INTO secure(name,value)" 83854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov + " VALUES(?,?);"); 83954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT, 84054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov R.integer.def_long_press_timeout_millis); 84154d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov stmt.close(); 84254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov db.setTransactionSuccessful(); 84354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov } finally { 84454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov db.endTransaction(); 84554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov if (stmt != null) stmt.close(); 84654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov } 84754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov upgradeVersion = 65; 84854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov } 84954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov 8505cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani /************* The following are Ice Cream Sandwich changes ************/ 8515cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani 852fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne if (upgradeVersion == 65) { 853fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne /* 854fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne * Animations are removed from Settings. Turned on by default 855fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne */ 856fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne db.beginTransaction(); 857fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne SQLiteStatement stmt = null; 858fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne try { 859fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne db.execSQL("DELETE FROM system WHERE name='" 860fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne + Settings.System.WINDOW_ANIMATION_SCALE + "'"); 861fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne db.execSQL("DELETE FROM system WHERE name='" 862fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne + Settings.System.TRANSITION_ANIMATION_SCALE + "'"); 863fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne stmt = db.compileStatement("INSERT INTO system(name,value)" 864fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne + " VALUES(?,?);"); 865fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne loadDefaultAnimationSettings(stmt); 866fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne db.setTransactionSuccessful(); 867fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne } finally { 868fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne db.endTransaction(); 869fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne if (stmt != null) stmt.close(); 870fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne } 871fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne upgradeVersion = 66; 872fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne } 873fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne 874c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent if (upgradeVersion == 66) { 87542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set 87642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani // according to device voice capability 87742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.beginTransaction(); 87842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani try { 87942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) | 88042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani (1 << AudioManager.STREAM_NOTIFICATION) | 88142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani (1 << AudioManager.STREAM_SYSTEM) | 88242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani (1 << AudioManager.STREAM_SYSTEM_ENFORCED); 88342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani if (!mContext.getResources().getBoolean( 88442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani com.android.internal.R.bool.config_voice_capable)) { 88542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC); 88642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } 88742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.execSQL("DELETE FROM system WHERE name='" 88842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); 88942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.execSQL("INSERT INTO system ('name', 'value') values ('" 89042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" 89142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani + String.valueOf(ringerModeAffectedStreams) + "')"); 89242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.setTransactionSuccessful(); 89342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } finally { 89442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.endTransaction(); 89542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } 89642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani upgradeVersion = 67; 89742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } 898c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent 899a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov if (upgradeVersion == 67) { 900a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov // New setting to enable touch exploration. 901a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov db.beginTransaction(); 902a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov SQLiteStatement stmt = null; 903a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov try { 904a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov stmt = db.compileStatement("INSERT INTO secure(name,value)" 905a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov + " VALUES(?,?);"); 906a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED, 907a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov R.bool.def_touch_exploration_enabled); 908a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov stmt.close(); 909a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov db.setTransactionSuccessful(); 910a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov } finally { 911a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov db.endTransaction(); 912a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov if (stmt != null) stmt.close(); 913a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov } 914a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov upgradeVersion = 68; 915a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov } 916a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov 91742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani if (upgradeVersion == 68) { 91842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani // Enable all system sounds by default 91942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.beginTransaction(); 92042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani try { 92142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.execSQL("DELETE FROM system WHERE name='" 92242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'"); 92342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.setTransactionSuccessful(); 92442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } finally { 92542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani db.endTransaction(); 92642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } 92742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani upgradeVersion = 69; 92842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani } 929a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov 9308d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly if (upgradeVersion == 69) { 9318d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS 9328d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly String airplaneRadios = mContext.getResources().getString( 9338d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly R.string.def_airplane_mode_radios); 9348d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly String toggleableRadios = mContext.getResources().getString( 9358d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly R.string.airplane_mode_toggleable_radios); 9368d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly db.beginTransaction(); 9378d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly try { 9388d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " + 9398d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'"); 9408d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " + 9418d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'"); 9428d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly db.setTransactionSuccessful(); 9438d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly } finally { 9448d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly db.endTransaction(); 9458d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly } 9468d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly upgradeVersion = 70; 9478d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly } 9488d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly 9496651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown if (upgradeVersion == 70) { 9506651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown // Update all built-in bookmarks. Some of the package names have changed. 9516651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown loadBookmarks(db); 9526651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown upgradeVersion = 71; 9536651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } 9546651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown 95555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov if (upgradeVersion == 71) { 95655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov // New setting to specify whether to speak passwords in accessibility mode. 95755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov db.beginTransaction(); 95855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov SQLiteStatement stmt = null; 95955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov try { 96055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov stmt = db.compileStatement("INSERT INTO secure(name,value)" 96155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov + " VALUES(?,?);"); 96255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 96355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov R.bool.def_accessibility_speak_password); 9646243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani db.setTransactionSuccessful(); 96555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov } finally { 96655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov db.endTransaction(); 96755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov if (stmt != null) stmt.close(); 96855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov } 96955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov upgradeVersion = 72; 97055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov } 97155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov 9726243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani if (upgradeVersion == 72) { 9736243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani // update vibration settings 9746243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani db.beginTransaction(); 9756243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani SQLiteStatement stmt = null; 9766243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani try { 9776243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)" 9786243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani + " VALUES(?,?);"); 9796243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT, 9806243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani R.bool.def_vibrate_in_silent); 9816243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani db.setTransactionSuccessful(); 9826243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani } finally { 9836243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani db.endTransaction(); 9846243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani if (stmt != null) stmt.close(); 9856243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani } 9866243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani upgradeVersion = 73; 9876243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani } 9886243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani 9893066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani if (upgradeVersion == 73) { 9903066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani // update vibration settings 9913066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani upgradeVibrateSettingFromNone(db); 9923066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani upgradeVersion = 74; 9933066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani } 9943066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani 9951c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler // *** Remember to update DATABASE_VERSION above! 9961c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler 9971c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler if (upgradeVersion != currentVersion) { 99854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion 99954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project + ", must wipe the settings provider"); 100054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS system"); 100154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS systemIndex1"); 1002f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS secure"); 1003f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS secureIndex1"); 100454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS gservices"); 100554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); 100654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bluetooth_devices"); 100754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS bookmarks"); 100854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1"); 100954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2"); 101054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DROP TABLE IF EXISTS favorites"); 101154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project onCreate(db); 10126176677e01964cb5751ff217c091571ce6a8b5fbJim Miller 10136176677e01964cb5751ff217c091571ce6a8b5fbJim Miller // Added for diagnosing settings.db wipes after the fact 10146176677e01964cb5751ff217c091571ce6a8b5fbJim Miller String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion; 10156176677e01964cb5751ff217c091571ce6a8b5fbJim Miller db.execSQL("INSERT INTO secure(name,value) values('" + 10166176677e01964cb5751ff217c091571ce6a8b5fbJim Miller "wiped_db_reason" + "','" + wipeReason + "');"); 101754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 101854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 101954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1020156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani private void moveFromSystemToSecure(SQLiteDatabase db, String [] settingsToMove) { 1021156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani // Copy settings values from 'system' to 'secure' and delete them from 'system' 1022156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani SQLiteStatement insertStmt = null; 1023156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani SQLiteStatement deleteStmt = null; 1024156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 1025156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani db.beginTransaction(); 1026156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani try { 1027156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani insertStmt = 1028156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM " 1029156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani + "system WHERE name=?"); 1030156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?"); 1031156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 1032156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 1033156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani for (String setting : settingsToMove) { 1034156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani insertStmt.bindString(1, setting); 1035156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani insertStmt.execute(); 1036156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 1037156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani deleteStmt.bindString(1, setting); 1038156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani deleteStmt.execute(); 1039156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 1040156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani db.setTransactionSuccessful(); 1041156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } finally { 1042156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani db.endTransaction(); 1043156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani if (insertStmt != null) { 1044156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani insertStmt.close(); 1045156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 1046156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani if (deleteStmt != null) { 1047156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani deleteStmt.close(); 1048156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 1049156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 1050156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani } 1051156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani 105254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void upgradeLockPatternLocation(SQLiteDatabase db) { 10539bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'", 105454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project null, null, null, null); 105554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (c.getCount() > 0) { 105654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.moveToFirst(); 105754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String lockPattern = c.getString(1); 105854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (!TextUtils.isEmpty(lockPattern)) { 105954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Convert lock pattern 106054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project try { 106131f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller LockPatternUtils lpu = new LockPatternUtils(mContext); 10629bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh List<LockPatternView.Cell> cellPattern = 106354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project LockPatternUtils.stringToPattern(lockPattern); 106454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project lpu.saveLockPattern(cellPattern); 106554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (IllegalArgumentException e) { 106654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project // Don't want corrupted lock pattern to hang the reboot process 106754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 106854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 106954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.close(); 107054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.delete("system", "name='lock_pattern'", null); 107154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } else { 107254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project c.close(); 107354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 107454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 107554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1076b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) { 1077b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani // See if the timeout is -1 (for "Never"). 1078b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani Cursor c = db.query("system", new String[] { "_id", "value" }, "name=? AND value=?", 1079b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani new String[] { Settings.System.SCREEN_OFF_TIMEOUT, "-1" }, 1080b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani null, null, null); 1081b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani 1082b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani SQLiteStatement stmt = null; 1083b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani if (c.getCount() > 0) { 1084b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani c.close(); 1085b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani try { 1086b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)" 1087b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani + " VALUES(?,?);"); 1088b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani 1089b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani // Set the timeout to 30 minutes in milliseconds 1090cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT, 1091cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani Integer.toString(30 * 60 * 1000)); 1092b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } finally { 1093b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani if (stmt != null) stmt.close(); 1094b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } 1095b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } else { 1096b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani c.close(); 1097b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } 1098b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani } 1099b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani 11003066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani private void upgradeVibrateSettingFromNone(SQLiteDatabase db) { 11013066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0); 11023066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani // If the ringer vibrate value is invalid, set it to the default 11033066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) { 11043066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani vibrateSetting = AudioService.getValueForVibrateSetting(0, 11053066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); 11063066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani } 11073066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani // Apply the same setting to the notification vibrate value 11083066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani vibrateSetting = AudioService.getValueForVibrateSetting(vibrateSetting, 11093066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting); 11103066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani 11113066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani SQLiteStatement stmt = null; 11123066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani try { 11133066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)" 11143066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani + " VALUES(?,?);"); 11153066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani loadSetting(stmt, Settings.System.VIBRATE_ON, vibrateSetting); 11163066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani } finally { 11173066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani if (stmt != null) 11183066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani stmt.close(); 11193066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani } 11203066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani } 11213066afdc6f729279b1dfd743bbdead73f889249fAmith Yamasani 112279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani private void upgradeScreenTimeout(SQLiteDatabase db) { 112379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani // Change screen timeout to current default 112479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani db.beginTransaction(); 112579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani SQLiteStatement stmt = null; 112679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani try { 112779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)" 112879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani + " VALUES(?,?);"); 112979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT, 113079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani R.integer.def_screen_off_timeout); 113179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani db.setTransactionSuccessful(); 113279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani } finally { 113379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani db.endTransaction(); 113479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani if (stmt != null) 113579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani stmt.close(); 113679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani } 113779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani } 113879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani 1139f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani private void upgradeAutoBrightness(SQLiteDatabase db) { 1140f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani db.beginTransaction(); 1141f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani try { 1142f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani String value = 1143f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani mContext.getResources().getBoolean( 1144f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani R.bool.def_screen_brightness_automatic_mode) ? "1" : "0"; 1145f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani db.execSQL("INSERT OR REPLACE INTO system(name,value) values('" + 1146f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');"); 1147f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani db.setTransactionSuccessful(); 1148f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani } finally { 1149f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani db.endTransaction(); 1150f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani } 1151f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani } 1152f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani 115354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 115454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Loads the default set of bookmarked shortcuts from an xml file. 115554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 115654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param db The database to write the values into 115754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 11586651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown private void loadBookmarks(SQLiteDatabase db) { 115954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project ContentValues values = new ContentValues(); 116054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 116154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project PackageManager packageManager = mContext.getPackageManager(); 1162f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy try { 1163f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks); 116454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project XmlUtils.beginDocument(parser, "bookmarks"); 116554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1166f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy final int depth = parser.getDepth(); 1167f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy int type; 1168f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy 1169f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy while (((type = parser.next()) != XmlPullParser.END_TAG || 1170f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) { 1171f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy 1172f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy if (type != XmlPullParser.START_TAG) { 1173f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy continue; 1174f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy } 117554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 117654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String name = parser.getName(); 117754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (!"bookmark".equals(name)) { 117854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project break; 117954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 118054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 118154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String pkg = parser.getAttributeValue(null, "package"); 118254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String cls = parser.getAttributeValue(null, "class"); 118354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project String shortcutStr = parser.getAttributeValue(null, "shortcut"); 11846651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown String category = parser.getAttributeValue(null, "category"); 1185f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy 1186585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov int shortcutValue = shortcutStr.charAt(0); 118754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (TextUtils.isEmpty(shortcutStr)) { 118854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls); 11896651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown continue; 119054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 1191f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy 11926651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown final Intent intent; 11936651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown final String title; 11946651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown if (pkg != null && cls != null) { 11956651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown ActivityInfo info = null; 11966651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown ComponentName cn = new ComponentName(pkg, cls); 1197f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy try { 1198f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy info = packageManager.getActivityInfo(cn, 0); 11996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } catch (PackageManager.NameNotFoundException e) { 12006651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown String[] packages = packageManager.canonicalToCurrentPackageNames( 12016651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown new String[] { pkg }); 12026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown cn = new ComponentName(packages[0], cls); 12036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown try { 12046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown info = packageManager.getActivityInfo(cn, 0); 12056651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } catch (PackageManager.NameNotFoundException e1) { 12066651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e); 12076651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown continue; 12086651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } 1209f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy } 12106651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown 12116651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown intent = new Intent(Intent.ACTION_MAIN, null); 12126651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown intent.addCategory(Intent.CATEGORY_LAUNCHER); 121354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project intent.setComponent(cn); 12146651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown title = info.loadLabel(packageManager).toString(); 12156651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } else if (category != null) { 1216f5b8671c340f189c50b41c53622f979b6d5e0a57Dianne Hackborn intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category); 12176651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown title = ""; 12186651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown } else { 12196651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutStr 12206651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown + ": missing package/class or category attributes"); 12216651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown continue; 122254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 12236651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown 12246651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 12256651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown values.put(Settings.Bookmarks.INTENT, intent.toUri(0)); 12266651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown values.put(Settings.Bookmarks.TITLE, title); 12276651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown values.put(Settings.Bookmarks.SHORTCUT, shortcutValue); 12286651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown db.delete("bookmarks", "shortcut = ?", 12296651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown new String[] { Integer.toString(shortcutValue) }); 12306651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown db.insert("bookmarks", null, values); 123154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 123254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (XmlPullParserException e) { 123354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 123454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } catch (IOException e) { 123554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project Log.w(TAG, "Got execption parsing bookmarks.", e); 123654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 123754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 123854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 123954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project /** 124054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Loads the default volume levels. It is actually inserting the index of 124154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * the volume array for each of the volume controls. 124254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * 124354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * @param db the database to insert the volume levels into 124454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */ 124554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadVolumeLevels(SQLiteDatabase db) { 124689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 124789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori try { 124889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 124989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori + " VALUES(?,?);"); 125089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 125189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.VOLUME_MUSIC, 125289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]); 125389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.VOLUME_RING, 125489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]); 125589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.VOLUME_SYSTEM, 125689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]); 125789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting( 125889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt, 125989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori Settings.System.VOLUME_VOICE, 126089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]); 126189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.VOLUME_ALARM, 126289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]); 126389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting( 126489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt, 126589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori Settings.System.VOLUME_NOTIFICATION, 126689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]); 126789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting( 126889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt, 126989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori Settings.System.VOLUME_BLUETOOTH_SCO, 127089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]); 127189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 127289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.MODE_RINGER, 127389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori AudioManager.RINGER_MODE_NORMAL); 127489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 127589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadVibrateSetting(db, false); 127689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 1277c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent // By default: 1278c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent // - ringtones, notification, system and music streams are affected by ringer mode 1279c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent // on non voice capable devices (tablets) 1280c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent // - ringtones, notification and system streams are affected by ringer mode 1281c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent // on voice capable devices (phones) 1282c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) | 1283c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent (1 << AudioManager.STREAM_NOTIFICATION) | 1284c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent (1 << AudioManager.STREAM_SYSTEM) | 1285c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent (1 << AudioManager.STREAM_SYSTEM_ENFORCED); 1286c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent if (!mContext.getResources().getBoolean( 1287c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent com.android.internal.R.bool.config_voice_capable)) { 1288c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC); 1289c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent } 129089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED, 1291c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent ringerModeAffectedStreams); 1292c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent 129389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED, 129489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori ((1 << AudioManager.STREAM_MUSIC) | 129589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori (1 << AudioManager.STREAM_RING) | 129689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori (1 << AudioManager.STREAM_NOTIFICATION) | 129789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori (1 << AudioManager.STREAM_SYSTEM))); 129889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } finally { 129989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 130089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } 130154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 130254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 130354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) { 130454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project if (deleteOld) { 130554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'"); 130654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 13079bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 130889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 130989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori try { 131089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 131189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori + " VALUES(?,?);"); 131289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 13135cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani // Vibrate on by default for ringer, on for notification 131489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori int vibrate = 0; 131589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori vibrate = AudioService.getValueForVibrateSetting(vibrate, 13165cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani AudioManager.VIBRATE_TYPE_NOTIFICATION, 13175cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani AudioManager.VIBRATE_SETTING_ONLY_SILENT); 13188932020f542ae6dd4750fa823bbf2d2bcf504267Joe Onorato vibrate |= AudioService.getValueForVibrateSetting(vibrate, 13195cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); 132089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate); 132189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } finally { 132289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 132389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } 132454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 132554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 132654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadSettings(SQLiteDatabase db) { 1327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project loadSystemSettings(db); 13289bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh loadSecureSettings(db); 1329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 13309bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 1331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void loadSystemSettings(SQLiteDatabase db) { 133289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 133389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori try { 133489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" 133589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori + " VALUES(?,?);"); 133689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 133789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.DIM_SCREEN, 133889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_dim_screen); 133989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN, 134089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0); 134189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT, 134289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.integer.def_screen_off_timeout); 134389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 134489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set default cdma emergency tone 134589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0); 134689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 134789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set default cdma call auto retry 134889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0); 134989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 135089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set default cdma DTMF type 135189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0); 135289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 135389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set default hearing aid 135489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.HEARING_AID, 0); 135589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 135689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set default tty mode 135789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.System.TTY_MODE, 0); 135889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 135989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON, 136089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_airplane_mode_on); 136189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 136289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS, 136389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.string.def_airplane_mode_radios); 136489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 136589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS, 136689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.string.airplane_mode_toggleable_radios); 136789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 136889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.AUTO_TIME, 136989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_auto_time); // Sync time to NITZ 1370ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani 1371ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani loadBooleanSetting(stmt, Settings.System.AUTO_TIME_ZONE, 1372ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani R.bool.def_auto_time_zone); // Sync timezone to NITZ 1373ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani 137489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS, 137589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.integer.def_screen_brightness); 137689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 137789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE, 137889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_screen_brightness_automatic_mode); 137989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 138089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadDefaultAnimationSettings(stmt); 138189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 138289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION, 138389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_accelerometer_rotation); 138489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 138589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadDefaultHapticSettings(stmt); 138689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 138789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE, 138889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_notification_pulse); 138940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 0); 139040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu loadSetting(stmt, Settings.Secure.DEFAULT_INSTALL_LOCATION, 139140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu PackageHelper.APP_INSTALL_AUTO); 139242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani 139389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadUISoundEffectsSettings(stmt); 139442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani 139589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT, 139689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_vibrate_in_silent); 1397eabe8bfaf8c45289a4cfd880f4107d1a9b17e38bMike Lockwood 13981a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown loadIntegerSetting(stmt, Settings.System.POINTER_SPEED, 13991a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown R.integer.def_pointer_speed); 14001a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown 140189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } finally { 140289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 140389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } 1404f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project } 14059bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 14060e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler private void loadUISoundEffectsSettings(SQLiteStatement stmt) { 14070e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadIntegerSetting(stmt, Settings.System.POWER_SOUNDS_ENABLED, 14080e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.integer.def_power_sounds_enabled); 14090e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.LOW_BATTERY_SOUND, 14100e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_low_battery_sound); 141142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING, 141242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani R.bool.def_dtmf_tones_enabled); 141342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED, 141442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani R.bool.def_sound_effects_enabled); 141542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED, 141642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani R.bool.def_haptic_feedback); 14170e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 14180e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadIntegerSetting(stmt, Settings.System.DOCK_SOUNDS_ENABLED, 14190e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.integer.def_dock_sounds_enabled); 14200e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.DESK_DOCK_SOUND, 14210e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_desk_dock_sound); 14220e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.DESK_UNDOCK_SOUND, 14230e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_desk_undock_sound); 14240e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.CAR_DOCK_SOUND, 14250e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_car_dock_sound); 14260e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.CAR_UNDOCK_SOUND, 14270e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_car_undock_sound); 14280e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 14290e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadIntegerSetting(stmt, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 14300e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.integer.def_lockscreen_sounds_enabled); 14310e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.LOCK_SOUND, 14320e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_lock_sound); 14330e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler loadStringSetting(stmt, Settings.System.UNLOCK_SOUND, 14340e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler R.string.def_unlock_sound); 14350e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler } 14360e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadDefaultAnimationSettings(SQLiteStatement stmt) { 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE, 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_animation_scale, 1); 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE, 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project R.fraction.def_window_transition_scale, 1); 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14439bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 1444075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn private void loadDefaultHapticSettings(SQLiteStatement stmt) { 1445075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1446075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn R.bool.def_haptic_feedback); 1447075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn } 1448075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn 1449f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project private void loadSecureSettings(SQLiteDatabase db) { 145089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SQLiteStatement stmt = null; 145189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori try { 145289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" 145389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori + " VALUES(?,?);"); 145489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 145589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON, 145689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_bluetooth_on); 145789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 145889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Data roaming default, based on build 145989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.DATA_ROAMING, 146089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori "true".equalsIgnoreCase( 146189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori SystemProperties.get("ro.com.android.dataroaming", 146289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori "false")) ? 1 : 0); 146389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 146489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, 146589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_install_non_market_apps); 146689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 146789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 146889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.string.def_location_providers_allowed); 146989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 147089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED, 147189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.assisted_gps_enabled); 147289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 147389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE, 147489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.integer.def_network_preference); 147589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 147689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED, 147789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_usb_mass_storage_enabled); 147889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 147989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.WIFI_ON, 148089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_wifi_on); 148189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 148289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_networks_available_notification_on); 148389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 148489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist"); 148589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (!TextUtils.isEmpty(wifiWatchList)) { 148689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList); 148789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } 148889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 148989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set the preferred network mode to 0 = Global, CDMA default 1490d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville int type; 1491d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville if (BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE) { 1492d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville type = Phone.NT_MODE_GLOBAL; 1493d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville } else { 1494d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville type = SystemProperties.getInt("ro.telephony.default_network", 1495d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville RILConstants.PREFERRED_NETWORK_MODE); 1496d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville } 149789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type); 149889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 149989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Enable or disable Cell Broadcast SMS 150089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS, 150189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED); 150289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 150389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Set the preferred cdma subscription to 0 = Subscription from RUIM, when available 150489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.PREFERRED_CDMA_SUBSCRIPTION, 150589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori RILConstants.PREFERRED_CDMA_SUBSCRIPTION); 150689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 150789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Don't do this. The SystemServer will initialize ADB_ENABLED from a 150889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // persistent system property instead. 150989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0); 151089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 151189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori // Allow mock locations default, based on build 151289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION, 151389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0); 151489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 151589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadSecure35Settings(stmt); 151689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 151789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND, 151889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_mount_play_notification_snd); 151989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 152089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART, 152189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_mount_ums_autostart); 152289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 152389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT, 152489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_mount_ums_prompt); 152589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori 152689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED, 152789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori R.bool.def_mount_ums_notify_enabled); 1528585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov 1529585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 1530585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov R.bool.def_accessibility_script_injection); 1531585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov 1532585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS, 1533585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov R.string.def_accessibility_web_content_key_bindings); 1534d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook 1535d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook final int maxBytes = mContext.getResources().getInteger( 1536d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook R.integer.def_download_manager_max_bytes_over_mobile); 1537d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook if (maxBytes > 0) { 1538d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook loadSetting(stmt, Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE, 1539d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook Integer.toString(maxBytes)); 1540d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook } 1541d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook 1542d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook final int recommendedMaxBytes = mContext.getResources().getInteger( 1543d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook R.integer.def_download_manager_recommended_max_bytes_over_mobile); 1544d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook if (recommendedMaxBytes > 0) { 1545d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook loadSetting(stmt, Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE, 1546d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook Integer.toString(recommendedMaxBytes)); 1547d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook } 154854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov 154954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT, 155054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov R.integer.def_long_press_timeout_millis); 1551a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov 1552a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1553a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov R.bool.def_touch_exploration_enabled); 155455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov 155555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 155655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov R.bool.def_accessibility_speak_password); 155789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori } finally { 155889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori if (stmt != null) stmt.close(); 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 156054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 156154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project 1562cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn private void loadSecure35Settings(SQLiteStatement stmt) { 1563cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED, 1564cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn R.bool.def_backup_enabled); 156531f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller 1566cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT, 1567cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn R.string.def_backup_transport); 1568cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn } 15696176677e01964cb5751ff217c091571ce6a8b5fbJim Miller 157054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project private void loadSetting(SQLiteStatement stmt, String key, Object value) { 157154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.bindString(1, key); 157254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.bindString(2, value.toString()); 157354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project stmt.execute(); 157454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project } 15759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadStringSetting(SQLiteStatement stmt, String key, int resid) { 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, mContext.getResources().getString(resid)); 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15799bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) { 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.getResources().getBoolean(resid) ? "1" : "0"); 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) { 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer.toString(mContext.getResources().getInteger(resid))); 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15899bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) { 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project loadSetting(stmt, key, 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Float.toString(mContext.getResources().getFraction(resid, base, base))); 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15945cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani 15955cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani private int getIntValueFromSystem(SQLiteDatabase db, String name, int defaultValue) { 15965cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani int value = defaultValue; 15975cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani Cursor c = null; 15985cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani try { 15995cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani c = db.query("system", new String[] { Settings.System.VALUE }, "name='" + name + "'", 16005cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani null, null, null, null); 16015cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani if (c != null && c.moveToFirst()) { 16025cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani String val = c.getString(0); 16035cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani value = val == null ? defaultValue : Integer.parseInt(val); 16045cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani } 16055cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani } finally { 16065cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani if (c != null) c.close(); 16075cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani } 16085cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani return value; 16095cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani } 161054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project} 1611