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.
668631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private static final int DATABASE_VERSION = 80;
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;
8747847f3f4dcf2a0dbea0bc0e4f02528e21d37a88Jeff Brown        setWriteAheadLoggingEnabled(true);
8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    public static boolean isValidTable(String name) {
9124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        return mValidTables.contains(name);
9224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    }
9324117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
94f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void createSecureTable(SQLiteDatabase db) {
95f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE TABLE secure (" +
96f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
97f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "name TEXT UNIQUE ON CONFLICT REPLACE," +
98f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "value TEXT" +
99f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                ");");
100f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
101f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1029bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onCreate(SQLiteDatabase db) {
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE system (" +
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT UNIQUE ON CONFLICT REPLACE," +
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "value TEXT" +
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
112f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        createSecureTable(db);
113f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bluetooth_devices (" +
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT," +
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "addr TEXT," +
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "channel INTEGER," +
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "type INTEGER" +
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bookmarks (" +
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "title TEXT," +
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "folder TEXT," +
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "intent TEXT," +
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "shortcut INTEGER," +
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "ordering INTEGER" +
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Populate bookmarks table with initial bookmarks
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadBookmarks(db);
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load initial volume levels into DB
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVolumeLevels(db);
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load inital settings values
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSettings(db);
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + currentVersion);
1489bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int upgradeVersion = oldVersion;
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Pattern for upgrade blocks:
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        .. your upgrade logic..
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        upgradeVersion = [the DATABASE_VERSION you set]
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    }
1579bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 20) {
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /*
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Version 21 is part of the volume control refresh. There is no
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * longer a UI-visible for setting notification vibrate on/off (in
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * our design), but the functionality still exists. Force the
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * notification vibrate to on.
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            loadVibrateSetting(db, true);
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 21;
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 22) {
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 22;
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Upgrade the lock gesture storage location and format
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeLockPatternLocation(db);
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 23) {
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 23;
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 23) {
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Shortcuts, applications, folders
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Photo frames, clocks
18904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                db.execSQL(
19004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Search boxes
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 24;
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1999bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 24) {
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // The value of the constants for preferring wifi or preferring mobile have been
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // swapped, so reload the default.
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='network_preference'");
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 25;
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 25) {
216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD uri TEXT");
219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 26;
225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2269bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 26) {
228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This introduces the new secure settings table.
229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                createSecureTable(db);
232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 27;
237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2389bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 27) {
240156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            String[] settingsToMove = {
241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ADB_ENABLED,
242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ANDROID_ID,
243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.BLUETOOTH_ON,
244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DATA_ROAMING,
245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DEVICE_PROVISIONED,
246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.HTTP_PROXY,
247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.INSTALL_NON_MARKET_APPS,
248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOGGING_ID,
250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.NETWORK_PREFERENCE,
251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_ENABLED,
252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.SETTINGS_CLASSNAME,
255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USB_MASS_STORAGE_ENABLED,
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USE_GOOGLE_MAIL,
257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_ON,
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ON,
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                };
273156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            moveFromSystemToSecure(db, settingsToMove);
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 28;
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2769bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 28 || upgradeVersion == 29) {
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Note: The upgrade to 28 was flawed since it didn't delete the old
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // setting first before inserting. Combining 28 and 29 with the
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // fixed version.
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This upgrade adds the STREAM_NOTIFICATION type to the list of
283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // types affected by ringer modes (silent, vibrate, etc.)
284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int newValue = (1 << AudioManager.STREAM_RING)
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_NOTIFICATION)
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_SYSTEM);
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('"
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + String.valueOf(newValue) + "')");
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
2989bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 30;
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3019bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3029266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        if (upgradeVersion == 30) {
3039266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            /*
3049266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * Upgrade 31 clears the title for all quick launch shortcuts so the
3059266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * activities' titles will be resolved at display time. Also, the
3069266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * folder is changed to '@quicklaunch'.
3079266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             */
3089266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            db.beginTransaction();
3099266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            try {
3109266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
3119266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET title = ''");
3129266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.setTransactionSuccessful();
3139266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            } finally {
3149266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.endTransaction();
3159266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            }
3169266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            upgradeVersion = 31;
3179266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        }
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 31) {
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            /*
321ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * Animations are now managed in preferences, and may be
322ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * enabled or disabled based on product resources.
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             */
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            db.beginTransaction();
32589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
33189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " VALUES(?,?);");
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadDefaultAnimationSettings(stmt);
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.setTransactionSuccessful();
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } finally {
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.endTransaction();
33789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 32;
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 32) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // The Wi-Fi watchdog SSID list is now seeded with the value of
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // the property ro.com.android.wifi-watchlist
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!TextUtils.isEmpty(wifiWatchList)) {
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.beginTransaction();
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            wifiWatchList + "');");
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.setTransactionSuccessful();
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } finally {
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.endTransaction();
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 33;
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3599bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        if (upgradeVersion == 33) {
3614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // Set the default zoom controls to: tap-twice to bring up +/-
3624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            db.beginTransaction();
3634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            try {
3644df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
3654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.setTransactionSuccessful();
3664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            } finally {
3674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.endTransaction();
3684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            }
3694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            upgradeVersion = 34;
3704df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        }
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
372bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        if (upgradeVersion == 34) {
373bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            db.beginTransaction();
37489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
375bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            try {
37689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
377cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                        + " VALUES(?,?);");
378cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                loadSecure35Settings(stmt);
379cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.setTransactionSuccessful();
380cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            } finally {
381cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.endTransaction();
38289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
383cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            }
384f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller            upgradeVersion = 35;
38502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
38602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
38702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // was accidentally done out of order here.
38802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
38902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // and we intentionally do nothing from 35 to 36 now.
39002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 35) {
391575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project            upgradeVersion = 36;
392cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        }
39302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
394a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        if (upgradeVersion == 36) {
395a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent           // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
396a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            // types affected by ringer modes (silent, vibrate, etc.)
397a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            db.beginTransaction();
398a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            try {
399a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("DELETE FROM system WHERE name='"
400a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
401a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                int newValue = (1 << AudioManager.STREAM_RING)
402a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_NOTIFICATION)
403a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM)
404a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
405a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("INSERT INTO system ('name', 'value') values ('"
406a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
407a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + String.valueOf(newValue) + "')");
408a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.setTransactionSuccessful();
409a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            } finally {
410a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.endTransaction();
411a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            }
4124880575bacd9f49d864e8b61efca8cdeb231895cJim Miller            upgradeVersion = 37;
413a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        }
414a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent
415bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        if (upgradeVersion == 37) {
416bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            db.beginTransaction();
41789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
418bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            try {
41989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
420bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        + " VALUES(?,?);");
421bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
422bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        R.string.airplane_mode_toggleable_radios);
423bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.setTransactionSuccessful();
424bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            } finally {
425bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.endTransaction();
42689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
427bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            }
428bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            upgradeVersion = 38;
429bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        }
430bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
43102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 38) {
43202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            db.beginTransaction();
43302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            try {
43402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                String value =
43502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
43602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
43702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        Settings.Secure.ASSISTED_GPS_ENABLED + "','" + value + "');");
43802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.setTransactionSuccessful();
43902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            } finally {
44002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.endTransaction();
44102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            }
44202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
44302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            upgradeVersion = 39;
44402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
44502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
446951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        if (upgradeVersion == 39) {
447f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeAutoBrightness(db);
448951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            upgradeVersion = 40;
449951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        }
450951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
451bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (upgradeVersion == 40) {
452bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            /*
453bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             * All animations are now turned on by default!
454bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             */
455bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            db.beginTransaction();
45689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
457bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            try {
458bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
459bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
460bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
461bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
46289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
463bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + " VALUES(?,?);");
464bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                loadDefaultAnimationSettings(stmt);
465bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.setTransactionSuccessful();
466bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } finally {
467bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.endTransaction();
46889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
469bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
470bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            upgradeVersion = 41;
471bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        }
472bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn
473075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        if (upgradeVersion == 41) {
474075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            /*
475075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             * Initialize newly public haptic feedback setting
476075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             */
477075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            db.beginTransaction();
47889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
479075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            try {
480075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
481075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'");
48289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
483075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + " VALUES(?,?);");
484075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                loadDefaultHapticSettings(stmt);
485075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.setTransactionSuccessful();
486075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            } finally {
487075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.endTransaction();
48889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
489075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            }
490075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            upgradeVersion = 42;
491075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        }
492075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
493ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        if (upgradeVersion == 42) {
494ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            /*
495ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             * Initialize new notification pulse setting
496ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             */
497ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            db.beginTransaction();
49889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
499ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            try {
50089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
501ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        + " VALUES(?,?);");
502ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
503ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        R.bool.def_notification_pulse);
504ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.setTransactionSuccessful();
505ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            } finally {
506ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.endTransaction();
50789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
508ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            }
509ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            upgradeVersion = 43;
510ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        }
511ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani
512484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        if (upgradeVersion == 43) {
513484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            /*
514484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             * This upgrade stores bluetooth volume separately from voice volume
515484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             */
516484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            db.beginTransaction();
51789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
518484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            try {
51989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
520484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        + " VALUES(?,?);");
521484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO,
522484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
523484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.setTransactionSuccessful();
524484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            } finally {
525484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.endTransaction();
52689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
527484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            }
528484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            upgradeVersion = 44;
529484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        }
530484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent
531aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        if (upgradeVersion == 44) {
532aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            /*
533aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             * Gservices was moved into vendor/google.
534aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             */
535aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP TABLE IF EXISTS gservices");
536aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
537aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            upgradeVersion = 45;
538aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        }
53987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
54087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        if (upgradeVersion == 45) {
54187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat             /*
54287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              * New settings for MountService
54387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              */
54487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            db.beginTransaction();
54587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            try {
54687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
54787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');");
54887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
54987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');");
55087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
55187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_PROMPT + "','1');");
55287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
55387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');");
55487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.setTransactionSuccessful();
55587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            } finally {
55687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.endTransaction();
55787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            }
55887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            upgradeVersion = 46;
55987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        }
56087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
561df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn        if (upgradeVersion == 46) {
562df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            /*
563df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * The password mode constants have changed; reset back to no
564df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * password.
565df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             */
566df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            db.beginTransaction();
567df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            try {
568df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
569df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.setTransactionSuccessful();
570df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            } finally {
571df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.endTransaction();
572df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            }
573df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn           upgradeVersion = 47;
574df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn       }
575df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn
5766176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
5779327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        if (upgradeVersion == 47) {
5789327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            /*
5799327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * The password mode constants have changed again; reset back to no
5809327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * password.
5819327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             */
5829327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            db.beginTransaction();
5839327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            try {
5849327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
5859327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.setTransactionSuccessful();
5869327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            } finally {
5879327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.endTransaction();
5889327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            }
5899327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn           upgradeVersion = 48;
5909327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn       }
5916176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
5925d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       if (upgradeVersion == 48) {
5935d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           /*
59421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * Default recognition service no longer initialized here,
59521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * moved to RecognitionManagerService.
5965d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            */
5975d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           upgradeVersion = 49;
5985d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       }
59931f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
6000e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       if (upgradeVersion == 49) {
6010e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           /*
6020e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            * New settings for new user interface noises.
6030e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            */
6040e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           db.beginTransaction();
60589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori           SQLiteStatement stmt = null;
6060e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           try {
60789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
6080e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                        + " VALUES(?,?);");
6090e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                loadUISoundEffectsSettings(stmt);
6100e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.setTransactionSuccessful();
6110e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            } finally {
6120e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.endTransaction();
61389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
6140e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            }
6150e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
6160e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           upgradeVersion = 50;
6170e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       }
6180e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
619f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       if (upgradeVersion == 50) {
620f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           /*
62140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            * Install location no longer initiated here.
622f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor            */
623f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           upgradeVersion = 51;
624f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       }
625f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor
626156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       if (upgradeVersion == 51) {
627156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           /* Move the lockscreen related settings to Secure, including some private ones. */
628156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           String[] settingsToMove = {
629156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_ENABLED,
630156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_VISIBLE,
631156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED,
632156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_type",
633156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockoutattemptdeadline",
634156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.patterneverchosen",
635156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lock_pattern_autolock",
636156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockedoutpermanently",
637156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_salt"
638156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           };
639156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           moveFromSystemToSecure(db, settingsToMove);
640156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           upgradeVersion = 52;
641156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       }
642156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
6431c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion == 52) {
6441c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            // new vibration/silent mode settings
6451c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            db.beginTransaction();
64689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
6471c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            try {
64889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
6491c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        + " VALUES(?,?);");
6501c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
6511c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        R.bool.def_vibrate_in_silent);
6521c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.setTransactionSuccessful();
6531c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            } finally {
6541c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.endTransaction();
65589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
6561c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            }
6571c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
6581c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            upgradeVersion = 53;
6591c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        }
6603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
661089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        if (upgradeVersion == 53) {
662089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            /*
66340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             * New settings for set install location UI no longer initiated here.
664089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu             */
665089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            upgradeVersion = 54;
666089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        }
6671c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
668b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (upgradeVersion == 54) {
669b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            /*
670b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             * Update the screen timeout value if set to never
671b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             */
672b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            db.beginTransaction();
673b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
674b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                upgradeScreenTimeoutFromNever(db);
675b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.setTransactionSuccessful();
676b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
677b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.endTransaction();
678b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
679b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
680b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            upgradeVersion = 55;
681b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
682b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
68340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        if (upgradeVersion == 55) {
68440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            /* Move the install location settings. */
68540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            String[] settingsToMove = {
68640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                    Secure.SET_INSTALL_LOCATION,
68740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                    Secure.DEFAULT_INSTALL_LOCATION
68840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            };
68940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            moveFromSystemToSecure(db, settingsToMove);
69040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            db.beginTransaction();
69140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            SQLiteStatement stmt = null;
69240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            try {
69340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                stmt = db.compileStatement("INSERT INTO system(name,value)"
69440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        + " VALUES(?,?);");
69540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                loadSetting(stmt, Secure.SET_INSTALL_LOCATION, 0);
69640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                loadSetting(stmt, Secure.DEFAULT_INSTALL_LOCATION,
69740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        PackageHelper.APP_INSTALL_AUTO);
69840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                db.setTransactionSuccessful();
69940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             } finally {
70040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 db.endTransaction();
70140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 if (stmt != null) stmt.close();
70240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             }
70340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            upgradeVersion = 56;
70440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        }
7056659284d68bb04539891456700c8da2d0bae7d09Jake Hamby
7066659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        if (upgradeVersion == 56) {
7076659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            /*
7086659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             * Add Bluetooth to list of toggleable radios in airplane mode
7096659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             */
7106659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            db.beginTransaction();
7116659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            SQLiteStatement stmt = null;
7126659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            try {
7136659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.execSQL("DELETE FROM system WHERE name='"
7146659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
7156659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
7166659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + " VALUES(?,?);");
7176659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
7186659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        R.string.airplane_mode_toggleable_radios);
7196659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.setTransactionSuccessful();
7206659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            } finally {
7216659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.endTransaction();
7226659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                if (stmt != null) stmt.close();
7236659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            }
7246659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            upgradeVersion = 57;
7256659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        }
726585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
7275cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Honeycomb changes ************/
7285cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
729585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        if (upgradeVersion == 57) {
730585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            /*
731585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             * New settings to:
732585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  1. Enable injection of accessibility scripts in WebViews.
733585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  2. Define the key bindings for traversing web content in WebViews.
734585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             */
735585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            db.beginTransaction();
736585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            SQLiteStatement stmt = null;
737585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            try {
738585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
739585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
740585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
741585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.bool.def_accessibility_script_injection);
742585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt.close();
743585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
744585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
745585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
746585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.string.def_accessibility_web_content_key_bindings);
747585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.setTransactionSuccessful();
748585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            } finally {
749585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.endTransaction();
750585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                if (stmt != null) stmt.close();
751585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            }
752585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            upgradeVersion = 58;
753585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        }
754585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
755ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        if (upgradeVersion == 58) {
756ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            /* Add default for new Auto Time Zone */
7575cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            int autoTimeValue = getIntValueFromSystem(db, Settings.System.AUTO_TIME, 0);
758ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            db.beginTransaction();
759ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            SQLiteStatement stmt = null;
760ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            try {
7615cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                stmt = db.compileStatement("INSERT INTO system(name,value)" + " VALUES(?,?);");
7625cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                loadSetting(stmt, Settings.System.AUTO_TIME_ZONE,
7635cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                        autoTimeValue); // Sync timezone to NITZ if auto_time was enabled
764ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.setTransactionSuccessful();
765ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            } finally {
766ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.endTransaction();
767ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                if (stmt != null) stmt.close();
768ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            }
769ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            upgradeVersion = 59;
770ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        }
771ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani
772b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        if (upgradeVersion == 59) {
773b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            // Persistence for the rotation lock feature.
774b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            db.beginTransaction();
775b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            SQLiteStatement stmt = null;
776b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            try {
777b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                stmt = db.compileStatement("INSERT INTO system(name,value)"
778b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        + " VALUES(?,?);");
779b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                loadBooleanSetting(stmt, Settings.System.USER_ROTATION,
780b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        R.integer.def_user_rotation); // should be zero degrees
781b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.setTransactionSuccessful();
782b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            } finally {
783b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.endTransaction();
784b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                if (stmt != null) stmt.close();
785b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            }
786b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            upgradeVersion = 60;
787b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        }
788b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler
7890038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        if (upgradeVersion == 60) {
7905cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
7915cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
7925cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
7930038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani            upgradeVersion = 61;
7940038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        }
7950038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani
79679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        if (upgradeVersion == 61) {
7975cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
7985cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
7995cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
80079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            upgradeVersion = 62;
80179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
80279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
803f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        // Change the default for screen auto-brightness mode
804f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        if (upgradeVersion == 62) {
8055cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
8065cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
8075cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeAutoBrightness(db);
808f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeVersion = 63;
809f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
810f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
81125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent        if (upgradeVersion == 63) {
81225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent            // This upgrade adds the STREAM_MUSIC type to the list of
81325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             // types affected by ringer modes (silent, vibrate, etc.)
81425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             db.beginTransaction();
81525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             try {
81625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("DELETE FROM system WHERE name='"
81725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
81825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 int newValue = (1 << AudioManager.STREAM_RING)
81925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_NOTIFICATION)
82025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM)
82125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM_ENFORCED)
82225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_MUSIC);
82325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("INSERT INTO system ('name', 'value') values ('"
82425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
82525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + String.valueOf(newValue) + "')");
82625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.setTransactionSuccessful();
82725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             } finally {
82825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.endTransaction();
82925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             }
83025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             upgradeVersion = 64;
83125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent         }
83225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent
83354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        if (upgradeVersion == 64) {
83454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            // New setting to configure the long press timeout.
83554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            db.beginTransaction();
83654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            SQLiteStatement stmt = null;
83754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            try {
83854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
83954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        + " VALUES(?,?);");
84054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
84154d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        R.integer.def_long_press_timeout_millis);
84254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt.close();
84354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.setTransactionSuccessful();
84454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            } finally {
84554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.endTransaction();
84654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                if (stmt != null) stmt.close();
84754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            }
84854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            upgradeVersion = 65;
84954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        }
85054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov
8515cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Ice Cream Sandwich changes ************/
8525cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
853fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        if (upgradeVersion == 65) {
854fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            /*
855fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             * Animations are removed from Settings. Turned on by default
856fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             */
857fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            db.beginTransaction();
858fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            SQLiteStatement stmt = null;
859fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            try {
860fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
861fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
862fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
863fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
864fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                stmt = db.compileStatement("INSERT INTO system(name,value)"
865fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + " VALUES(?,?);");
866fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                loadDefaultAnimationSettings(stmt);
867fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.setTransactionSuccessful();
868fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            } finally {
869fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.endTransaction();
870fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                if (stmt != null) stmt.close();
871fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            }
872fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            upgradeVersion = 66;
873fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        }
874fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne
875c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent        if (upgradeVersion == 66) {
87642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set
87742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // according to device voice capability
87842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
87942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
88042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
88142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_NOTIFICATION) |
88242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM) |
88342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
88442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                if (!mContext.getResources().getBoolean(
88542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        com.android.internal.R.bool.config_voice_capable)) {
88642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                    ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
88742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                }
88842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
88942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
89042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("INSERT INTO system ('name', 'value') values ('"
89142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
89242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + String.valueOf(ringerModeAffectedStreams) + "')");
89342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
89442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
89542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
89642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
89742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 67;
89842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
899c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
900a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        if (upgradeVersion == 67) {
901a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            // New setting to enable touch exploration.
902a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            db.beginTransaction();
903a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            SQLiteStatement stmt = null;
904a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            try {
905a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
906a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        + " VALUES(?,?);");
907a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
908a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        R.bool.def_touch_exploration_enabled);
909a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt.close();
910a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.setTransactionSuccessful();
911a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            } finally {
912a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.endTransaction();
913a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                if (stmt != null) stmt.close();
914a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            }
915a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            upgradeVersion = 68;
916a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        }
917a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
91842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        if (upgradeVersion == 68) {
91942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // Enable all system sounds by default
92042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
92142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
92242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
92342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
92442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
92542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
92642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
92742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
92842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 69;
92942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
930a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
9318d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        if (upgradeVersion == 69) {
9328d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS
9338d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String airplaneRadios = mContext.getResources().getString(
9348d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.def_airplane_mode_radios);
9358d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String toggleableRadios = mContext.getResources().getString(
9368d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.airplane_mode_toggleable_radios);
9378d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            db.beginTransaction();
9388d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            try {
9398d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " +
9408d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'");
9418d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " +
9428d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
9438d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.setTransactionSuccessful();
9448d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            } finally {
9458d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.endTransaction();
9468d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            }
9478d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            upgradeVersion = 70;
9488d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        }
9498d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly
9506651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        if (upgradeVersion == 70) {
9516651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            // Update all built-in bookmarks.  Some of the package names have changed.
9526651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            loadBookmarks(db);
9536651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            upgradeVersion = 71;
9546651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        }
9556651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
95655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        if (upgradeVersion == 71) {
95755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov             // New setting to specify whether to speak passwords in accessibility mode.
95855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            db.beginTransaction();
95955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            SQLiteStatement stmt = null;
96055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            try {
96155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
96255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        + " VALUES(?,?);");
96355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
96455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        R.bool.def_accessibility_speak_password);
9656243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
96655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            } finally {
96755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                db.endTransaction();
96855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                if (stmt != null) stmt.close();
96955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            }
97055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            upgradeVersion = 72;
97155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        }
97255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
9736243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        if (upgradeVersion == 72) {
9746243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            // update vibration settings
9756243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            db.beginTransaction();
9766243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            SQLiteStatement stmt = null;
9776243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            try {
9786243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
9796243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        + " VALUES(?,?);");
9806243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
9816243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        R.bool.def_vibrate_in_silent);
9826243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
9836243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            } finally {
9846243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.endTransaction();
9856243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                if (stmt != null) stmt.close();
9866243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            }
9876243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            upgradeVersion = 73;
9886243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        }
9896243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani
9903ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        if (upgradeVersion == 73) {
991398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVibrateSettingFromNone(db);
992398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 74;
993398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
994398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
995398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if (upgradeVersion == 74) {
9963ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            // URL from which WebView loads a JavaScript based screen-reader.
9973ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            db.beginTransaction();
9983ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            SQLiteStatement stmt = null;
9993ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            try {
10003ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
10013ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
10023ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                        R.string.def_accessibility_screen_reader_url);
10033ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.setTransactionSuccessful();
10043ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            } finally {
10053ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.endTransaction();
10063ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                if (stmt != null) stmt.close();
10073ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            }
1008398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 75;
10093ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        }
10107bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        if (upgradeVersion == 75) {
10117bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            db.beginTransaction();
10127bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            SQLiteStatement stmt = null;
10137bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            Cursor c = null;
10147bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            try {
10157bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                c = db.query("secure", new String[] {"_id", "value"},
10167bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        "name='lockscreen.disabled'",
10177bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        null, null, null, null);
10187bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                // only set default if it has not yet been set
10197bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c == null || c.getCount() == 0) {
10207bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    stmt = db.compileStatement("INSERT INTO system(name,value)"
10217bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            + " VALUES(?,?);");
10227bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
10237bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            R.bool.def_lockscreen_disabled);
10247bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                }
10257bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.setTransactionSuccessful();
10267bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            } finally {
10277bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.endTransaction();
10287bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c != null) c.close();
10297bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (stmt != null) stmt.close();
10307bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            }
10317bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            upgradeVersion = 76;
10327bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        }
10333ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
1034bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        /************* The following are Jelly Bean changes ************/
1035bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1036bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        if (upgradeVersion == 76) {
1037bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            // Removed VIBRATE_IN_SILENT setting
1038bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            db.beginTransaction();
1039bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            try {
1040bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.execSQL("DELETE FROM system WHERE name='"
1041bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                                + Settings.System.VIBRATE_IN_SILENT + "'");
1042bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.setTransactionSuccessful();
1043bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            } finally {
1044bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.endTransaction();
1045bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            }
1046bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1047bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            upgradeVersion = 77;
1048bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        }
1049bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
10503c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        if (upgradeVersion == 77) {
10513c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            // Introduce "vibrate when ringing" setting
10523c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadVibrateWhenRingingSetting(db);
10533c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
10543c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            upgradeVersion = 78;
10553c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
1056bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
10573a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        if (upgradeVersion == 78) {
10583a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            // The JavaScript based screen-reader URL changes in JellyBean.
10593a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            db.beginTransaction();
10603a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            SQLiteStatement stmt = null;
10613a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            try {
10623a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
10633a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        + " VALUES(?,?);");
10643a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
10653a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        R.string.def_accessibility_screen_reader_url);
10663a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.setTransactionSuccessful();
10673a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            } finally {
10683a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.endTransaction();
10693a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                if (stmt != null) stmt.close();
10703a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            }
10713a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            upgradeVersion = 79;
10723a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        }
10733a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv
10748631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        if (upgradeVersion == 79) {
10758631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // Before touch exploration was a global setting controlled by the user
10768631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // via the UI. However, if the enabled accessibility services do not
10778631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // handle touch exploration mode, enabling it makes no sense. Therefore,
10788631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // now the services request touch exploration mode and the user is
10798631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // presented with a dialog to allow that and if she does we store that
10808631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // in the database. As a result of this change a user that has enabled
10818631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility, touch exploration, and some accessibility services
10828631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // may lose touch exploration state, thus rendering the device useless
10838631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // unless sighted help is provided, since the enabled service(s) are
10848631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // not in the list of services to which the user granted a permission
10858631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // to put the device in touch explore mode. Here we are allowing all
10868631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled accessibility services to toggle touch exploration provided
10878631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility and touch exploration are enabled and no services can
10888631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // toggle touch exploration. Note that the user has already manually
10898631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled the services and touch exploration which means the she has
10908631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // given consent to have these services work in touch exploration mode.
10918631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            final boolean accessibilityEnabled = getIntValueFromTable(db, "secure",
10928631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
10938631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            final boolean touchExplorationEnabled = getIntValueFromTable(db, "secure",
10948631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1;
10958631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            if (accessibilityEnabled && touchExplorationEnabled) {
10968631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                String enabledServices = getStringValueFromTable(db, "secure",
10978631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "");
10988631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                String touchExplorationGrantedServices = getStringValueFromTable(db, "secure",
10998631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, "");
11008631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                if (TextUtils.isEmpty(touchExplorationGrantedServices)
11018631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        && !TextUtils.isEmpty(enabledServices)) {
11028631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    SQLiteStatement stmt = null;
11038631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    try {
11048631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.beginTransaction();
11058631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
11068631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                + " VALUES(?,?);");
11078631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        loadSetting(stmt,
11088631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
11098631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                enabledServices);
11108631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.setTransactionSuccessful();
11118631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    } finally {
11128631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.endTransaction();
11138631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        if (stmt != null) stmt.close();
11148631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    }
11158631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                }
11168631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            }
11178631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            upgradeVersion = 80;
11188631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        }
11198631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
11201c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        // *** Remember to update DATABASE_VERSION above!
11211c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
11221c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion != currentVersion) {
112354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
112454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    + ", must wipe the settings provider");
112554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS system");
112654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS systemIndex1");
1127f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS secure");
1128f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS secureIndex1");
112954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS gservices");
113054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
113154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
113254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bookmarks");
113354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
113454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
113554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS favorites");
113654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            onCreate(db);
11376176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
11386176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            // Added for diagnosing settings.db wipes after the fact
11396176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion;
11406176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            db.execSQL("INSERT INTO secure(name,value) values('" +
11416176677e01964cb5751ff217c091571ce6a8b5fbJim Miller                    "wiped_db_reason" + "','" + wipeReason + "');");
114254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
114354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
114454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1145156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani    private void moveFromSystemToSecure(SQLiteDatabase db, String [] settingsToMove) {
1146156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        // Copy settings values from 'system' to 'secure' and delete them from 'system'
1147156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement insertStmt = null;
1148156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement deleteStmt = null;
1149156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1150156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        db.beginTransaction();
1151156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        try {
1152156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            insertStmt =
1153156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM "
1154156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                    + "system WHERE name=?");
1155156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?");
1156156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1157156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1158156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            for (String setting : settingsToMove) {
1159156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.bindString(1, setting);
1160156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.execute();
1161156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1162156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.bindString(1, setting);
1163156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.execute();
1164156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1165156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.setTransactionSuccessful();
1166156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        } finally {
1167156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.endTransaction();
1168156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (insertStmt != null) {
1169156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.close();
1170156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1171156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (deleteStmt != null) {
1172156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.close();
1173156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1174156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        }
1175156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani    }
1176156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
117754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void upgradeLockPatternLocation(SQLiteDatabase db) {
11789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'",
117954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                null, null, null, null);
118054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c.getCount() > 0) {
118154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.moveToFirst();
118254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String lockPattern = c.getString(1);
118354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!TextUtils.isEmpty(lockPattern)) {
118454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Convert lock pattern
118554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
118631f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller                    LockPatternUtils lpu = new LockPatternUtils(mContext);
11879bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                    List<LockPatternView.Cell> cellPattern =
118854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            LockPatternUtils.stringToPattern(lockPattern);
118954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    lpu.saveLockPattern(cellPattern);
119054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (IllegalArgumentException e) {
119154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    // Don't want corrupted lock pattern to hang the reboot process
119254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
119354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
119454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
119554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.delete("system", "name='lock_pattern'", null);
119654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
119754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
119854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
119954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
120054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1201b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) {
1202b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        // See if the timeout is -1 (for "Never").
1203b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        Cursor c = db.query("system", new String[] { "_id", "value" }, "name=? AND value=?",
1204b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                new String[] { Settings.System.SCREEN_OFF_TIMEOUT, "-1" },
1205b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                null, null, null);
1206b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
1207b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        SQLiteStatement stmt = null;
1208b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (c.getCount() > 0) {
1209b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
1210b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
1211b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1212b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                        + " VALUES(?,?);");
12133c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
1214b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                // Set the timeout to 30 minutes in milliseconds
1215cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
1216cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                        Integer.toString(30 * 60 * 1000));
1217b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
1218b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                if (stmt != null) stmt.close();
1219b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
1220b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        } else {
1221b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
1222b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
1223b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    }
1224b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
1225398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    private void upgradeVibrateSettingFromNone(SQLiteDatabase db) {
1226398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0);
1227398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // If the ringer vibrate value is invalid, set it to the default
1228398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) {
1229398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            vibrateSetting = AudioService.getValueForVibrateSetting(0,
1230398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
1231398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
1232398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // Apply the same setting to the notification vibrate value
1233398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        vibrateSetting = AudioService.getValueForVibrateSetting(vibrateSetting,
1234398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting);
1235398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
1236398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        SQLiteStatement stmt = null;
1237398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        try {
1238398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1239398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    + " VALUES(?,?);");
1240398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrateSetting);
1241398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        } finally {
1242398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            if (stmt != null)
1243398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                stmt.close();
1244398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
1245398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    }
1246398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
124779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    private void upgradeScreenTimeout(SQLiteDatabase db) {
124879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        // Change screen timeout to current default
124979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        db.beginTransaction();
125079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        SQLiteStatement stmt = null;
125179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        try {
125279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
125379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    + " VALUES(?,?);");
125479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
125579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    R.integer.def_screen_off_timeout);
125679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.setTransactionSuccessful();
125779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        } finally {
125879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.endTransaction();
125979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            if (stmt != null)
126079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                stmt.close();
126179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
126279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    }
126379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
1264f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    private void upgradeAutoBrightness(SQLiteDatabase db) {
1265f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        db.beginTransaction();
1266f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        try {
1267f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            String value =
1268f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    mContext.getResources().getBoolean(
1269f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
1270f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.execSQL("INSERT OR REPLACE INTO system(name,value) values('" +
1271f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
1272f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.setTransactionSuccessful();
1273f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        } finally {
1274f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.endTransaction();
1275f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
1276f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    }
1277f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
127854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
127954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmarked shortcuts from an xml file.
128054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
128154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
128254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
12836651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown    private void loadBookmarks(SQLiteDatabase db) {
128454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ContentValues values = new ContentValues();
128554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        PackageManager packageManager = mContext.getPackageManager();
1287f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy        try {
1288f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks);
128954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlUtils.beginDocument(parser, "bookmarks");
129054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1291f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            final int depth = parser.getDepth();
1292f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            int type;
1293f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
1294f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            while (((type = parser.next()) != XmlPullParser.END_TAG ||
1295f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
1296f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
1297f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                if (type != XmlPullParser.START_TAG) {
1298f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    continue;
1299f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                }
130054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String name = parser.getName();
130254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!"bookmark".equals(name)) {
130354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
130454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
130554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
130654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String pkg = parser.getAttributeValue(null, "package");
130754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String cls = parser.getAttributeValue(null, "class");
130854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String shortcutStr = parser.getAttributeValue(null, "shortcut");
13096651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                String category = parser.getAttributeValue(null, "category");
1310f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
1311585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                int shortcutValue = shortcutStr.charAt(0);
131254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (TextUtils.isEmpty(shortcutStr)) {
131354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
13146651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
131554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
1316f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
13176651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final Intent intent;
13186651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final String title;
13196651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                if (pkg != null && cls != null) {
13206651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ActivityInfo info = null;
13216651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ComponentName cn = new ComponentName(pkg, cls);
1322f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    try {
1323f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                        info = packageManager.getActivityInfo(cn, 0);
13246651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    } catch (PackageManager.NameNotFoundException e) {
13256651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        String[] packages = packageManager.canonicalToCurrentPackageNames(
13266651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                                new String[] { pkg });
13276651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        cn = new ComponentName(packages[0], cls);
13286651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        try {
13296651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            info = packageManager.getActivityInfo(cn, 0);
13306651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        } catch (PackageManager.NameNotFoundException e1) {
13316651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
13326651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            continue;
13336651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        }
1334f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    }
13356651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
13366651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent = new Intent(Intent.ACTION_MAIN, null);
13376651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
133854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setComponent(cn);
13396651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = info.loadLabel(packageManager).toString();
13406651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else if (category != null) {
1341f5b8671c340f189c50b41c53622f979b6d5e0a57Dianne Hackborn                    intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category);
13426651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = "";
13436651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else {
13446651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutStr
13456651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            + ": missing package/class or category attributes");
13466651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
134754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
13486651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
13496651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
13506651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.INTENT, intent.toUri(0));
13516651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.TITLE, title);
13526651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
13536651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.delete("bookmarks", "shortcut = ?",
13546651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        new String[] { Integer.toString(shortcutValue) });
13556651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.insert("bookmarks", null, values);
135654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
135754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (XmlPullParserException e) {
135854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
135954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (IOException e) {
136054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
136154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
136254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
136354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
136454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
136554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default volume levels. It is actually inserting the index of
136654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * the volume array for each of the volume controls.
136754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
136854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db the database to insert the volume levels into
136954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
137054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVolumeLevels(SQLiteDatabase db) {
137189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
137289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
137389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
137489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
13753c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
137689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_MUSIC,
137789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
137889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_RING,
137989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]);
138089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
138189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
138289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
138389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
138489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_VOICE,
138589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
138689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_ALARM,
138789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]);
138889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
138989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
139089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_NOTIFICATION,
139189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]);
139289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
139389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
139489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_BLUETOOTH_SCO,
139589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
13963c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
139789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MODE_RINGER,
139889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.RINGER_MODE_NORMAL);
13993c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
1400c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // By default:
1401c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification, system and music streams are affected by ringer mode
1402c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on non voice capable devices (tablets)
1403c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification and system streams are affected by ringer mode
1404c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on voice capable devices (phones)
1405c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
1406c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_NOTIFICATION) |
1407c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM) |
1408c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
1409c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            if (!mContext.getResources().getBoolean(
1410c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    com.android.internal.R.bool.config_voice_capable)) {
1411c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
1412c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            }
141389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
1414c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    ringerModeAffectedStreams);
1415c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
141689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
141789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    ((1 << AudioManager.STREAM_MUSIC) |
141889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_RING) |
141989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_NOTIFICATION) |
142089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_SYSTEM)));
142189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
142289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
142389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
14243c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
14253c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        loadVibrateWhenRingingSetting(db);
142654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
142754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
142854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
142954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (deleteOld) {
143054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
143154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
14329bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
143389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
143489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
143589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
143689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
14373c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
14385cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Vibrate on by default for ringer, on for notification
143989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            int vibrate = 0;
144089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            vibrate = AudioService.getValueForVibrateSetting(vibrate,
14415cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_NOTIFICATION,
14425cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_SETTING_ONLY_SILENT);
14438932020f542ae6dd4750fa823bbf2d2bcf504267Joe Onorato            vibrate |= AudioService.getValueForVibrateSetting(vibrate,
14445cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
144589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
144689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
144789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
144889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
144954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
145054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14513c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    private void loadVibrateWhenRingingSetting(SQLiteDatabase db) {
14523c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // The default should be off. VIBRATE_SETTING_ONLY_SILENT should also be ignored here.
14533c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // Phone app should separately check whether AudioManager#getRingerMode() returns
14543c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // RINGER_MODE_VIBRATE, with which the device should vibrate anyway.
14553c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON,
14563c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                AudioManager.VIBRATE_SETTING_OFF);
14573c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        boolean vibrateWhenRinging = ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_ON);
14583c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
14593c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        SQLiteStatement stmt = null;
14603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        try {
14613c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
14623c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                    + " VALUES(?,?);");
14633c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadSetting(stmt, Settings.System.VIBRATE_WHEN_RINGING, vibrateWhenRinging ? 1 : 0);
14643c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        } finally {
14653c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            if (stmt != null) stmt.close();
14663c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
14673c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    }
14683c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
146954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSettings(SQLiteDatabase db) {
1470f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSystemSettings(db);
14719bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSecureSettings(db);
1472f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
14739bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
1474f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSystemSettings(SQLiteDatabase db) {
147589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
147689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
147789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
147889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
14793c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
148089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
148189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_dim_screen);
148289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
14834b797dd8c1d059510b12957acc3bd0b236308bb3Mike Lockwood                    ("1".equals(SystemProperties.get("ro.kernel.qemu")) ||
14844b797dd8c1d059510b12957acc3bd0b236308bb3Mike Lockwood                        mContext.getResources().getBoolean(R.bool.def_stay_on_while_plugged_in))
14854b797dd8c1d059510b12957acc3bd0b236308bb3Mike Lockwood                     ? 1 : 0);
148689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
148789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_off_timeout);
14883c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
148989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default cdma emergency tone
149089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
14913c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
149289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default cdma call auto retry
149389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
14943c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
149589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default cdma DTMF type
149689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
14973c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
149889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default hearing aid
149989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.HEARING_AID, 0);
15003c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
150189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default tty mode
150289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.TTY_MODE, 0);
15033c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
150489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
150589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_airplane_mode_on);
15063c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
150789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
150889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.string.def_airplane_mode_radios);
15093c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
151089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
151189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.string.airplane_mode_toggleable_radios);
15123c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
151389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
151489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_auto_time); // Sync time to NITZ
1515ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani
1516ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            loadBooleanSetting(stmt, Settings.System.AUTO_TIME_ZONE,
1517ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                    R.bool.def_auto_time_zone); // Sync timezone to NITZ
1518ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani
151989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
152089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_brightness);
15213c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
152289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
152389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_screen_brightness_automatic_mode);
15243c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
152589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultAnimationSettings(stmt);
15263c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
152789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
152889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_accelerometer_rotation);
15293c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
153089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultHapticSettings(stmt);
15313c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
153289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
153389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_notification_pulse);
153440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 0);
153540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            loadSetting(stmt, Settings.Secure.DEFAULT_INSTALL_LOCATION,
153640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                    PackageHelper.APP_INSTALL_AUTO);
153742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
153889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadUISoundEffectsSettings(stmt);
153942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
15401a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown            loadIntegerSetting(stmt, Settings.System.POINTER_SPEED,
15411a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown                    R.integer.def_pointer_speed);
15421a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown
154389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
154489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
154589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
1546f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
15479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
15480e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    private void loadUISoundEffectsSettings(SQLiteStatement stmt) {
15490e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadIntegerSetting(stmt, Settings.System.POWER_SOUNDS_ENABLED,
15500e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.integer.def_power_sounds_enabled);
15510e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.LOW_BATTERY_SOUND,
15520e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_low_battery_sound);
155342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING,
155442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_dtmf_tones_enabled);
155542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED,
155642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_sound_effects_enabled);
155742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
155842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_haptic_feedback);
15590e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
15600e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadIntegerSetting(stmt, Settings.System.DOCK_SOUNDS_ENABLED,
15610e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.integer.def_dock_sounds_enabled);
15620e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.DESK_DOCK_SOUND,
15630e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_desk_dock_sound);
15640e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.DESK_UNDOCK_SOUND,
15650e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_desk_undock_sound);
15660e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.CAR_DOCK_SOUND,
15670e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_car_dock_sound);
15680e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.CAR_UNDOCK_SOUND,
15690e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_car_undock_sound);
15700e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
15710e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadIntegerSetting(stmt, Settings.System.LOCKSCREEN_SOUNDS_ENABLED,
15720e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.integer.def_lockscreen_sounds_enabled);
15730e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.LOCK_SOUND,
15740e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_lock_sound);
15750e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadStringSetting(stmt, Settings.System.UNLOCK_SOUND,
15760e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.string.def_unlock_sound);
15770e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    }
15780e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_animation_scale, 1);
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_transition_scale, 1);
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15859bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
1586075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    private void loadDefaultHapticSettings(SQLiteStatement stmt) {
1587075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
1588075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                R.bool.def_haptic_feedback);
1589075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    }
1590075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
1591f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSecureSettings(SQLiteDatabase db) {
159289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
159389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
159489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
159589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
15963c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
159789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON,
159889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_bluetooth_on);
15993c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
160089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Data roaming default, based on build
160189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.DATA_ROAMING,
160289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    "true".equalsIgnoreCase(
160389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                            SystemProperties.get("ro.com.android.dataroaming",
160489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                                    "false")) ? 1 : 0);
16053c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
160689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
160789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_install_non_market_apps);
16083c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
160989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
161089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.string.def_location_providers_allowed);
16113c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
161289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED,
161389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.assisted_gps_enabled);
16143c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
161589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE,
161689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_network_preference);
16173c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
161889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED,
161989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_usb_mass_storage_enabled);
16203c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
162189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.WIFI_ON,
162289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_wifi_on);
162389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
162489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_networks_available_notification_on);
16253c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
162689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
162789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (!TextUtils.isEmpty(wifiWatchList)) {
162889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
162989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            }
16303c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
163189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set the preferred network mode to 0 = Global, CDMA default
1632d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville            int type;
1633d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville            if (BaseCommands.getLteOnCdmaModeStatic() == Phone.LTE_ON_CDMA_TRUE) {
1634d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville                type = Phone.NT_MODE_GLOBAL;
1635d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville            } else {
1636d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville                type = SystemProperties.getInt("ro.telephony.default_network",
1637d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville                        RILConstants.PREFERRED_NETWORK_MODE);
1638d6bcfd1cd081b9fe553976a0191a814b929c583eWink Saville            }
163989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type);
16403c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
164189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Enable or disable Cell Broadcast SMS
164289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS,
164389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
16443c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
164589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
164689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // persistent system property instead.
164789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
16483c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
164989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Allow mock locations default, based on build
165089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
165189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
16523c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
165389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSecure35Settings(stmt);
16543c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
165589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
165689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_play_notification_snd);
16573c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
165889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
165989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_autostart);
16603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
166189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
166289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_prompt);
16633c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
166489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
166589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_notify_enabled);
1666585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
1667585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
1668585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.bool.def_accessibility_script_injection);
1669585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
1670585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
1671585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.string.def_accessibility_web_content_key_bindings);
1672d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook
1673d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            final int maxBytes = mContext.getResources().getInteger(
1674d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                    R.integer.def_download_manager_max_bytes_over_mobile);
1675d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            if (maxBytes > 0) {
1676d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                loadSetting(stmt, Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
1677d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                        Integer.toString(maxBytes));
1678d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            }
1679d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook
1680d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            final int recommendedMaxBytes = mContext.getResources().getInteger(
1681d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                    R.integer.def_download_manager_recommended_max_bytes_over_mobile);
1682d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            if (recommendedMaxBytes > 0) {
1683d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                loadSetting(stmt, Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
1684d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook                        Integer.toString(recommendedMaxBytes));
1685d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook            }
168654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov
168754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
168854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                    R.integer.def_long_press_timeout_millis);
1689a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
1690a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
1691a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                    R.bool.def_touch_exploration_enabled);
169255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
169355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
169455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                    R.bool.def_accessibility_speak_password);
16953ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
16963ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
16973ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                    R.string.def_accessibility_screen_reader_url);
169886aeb06635ef8c7f3fb1b4a935d5e8da819e2a88Mike Lockwood
169986aeb06635ef8c7f3fb1b4a935d5e8da819e2a88Mike Lockwood            loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
170086aeb06635ef8c7f3fb1b4a935d5e8da819e2a88Mike Lockwood                    R.bool.def_lockscreen_disabled);
17012395527c9bb1cdc3bcd3dfcbc8b72b90ed3e7080Mike Lockwood
17022395527c9bb1cdc3bcd3dfcbc8b72b90ed3e7080Mike Lockwood            loadBooleanSetting(stmt, Settings.Secure.DEVICE_PROVISIONED,
17032395527c9bb1cdc3bcd3dfcbc8b72b90ed3e7080Mike Lockwood                    R.bool.def_device_provisioned);
1704d3c5e1eca12f4ca618e3f671dc6fae48307ec895Mike Lockwood
1705d3c5e1eca12f4ca618e3f671dc6fae48307ec895Mike Lockwood            loadBooleanSetting(stmt, Settings.Secure.NETSTATS_ENABLED,
1706d3c5e1eca12f4ca618e3f671dc6fae48307ec895Mike Lockwood                    R.bool.def_netstats_enabled);
170779f5a0416fe76d5063b4d9995edd84a49b77995eMike Lockwood
170879f5a0416fe76d5063b4d9995edd84a49b77995eMike Lockwood            loadIntegerSetting(stmt, Settings.Secure.WIFI_MAX_DHCP_RETRY_COUNT,
170979f5a0416fe76d5063b4d9995edd84a49b77995eMike Lockwood                    R.integer.def_max_dhcp_retries);
171089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
171189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
171354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
171454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1715cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    private void loadSecure35Settings(SQLiteStatement stmt) {
1716cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
1717cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.bool.def_backup_enabled);
171831f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
1719cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
1720cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.string.def_backup_transport);
1721cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    }
17226176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
172354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
172454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(1, key);
172554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(2, value.toString());
172654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.execute();
172754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
17289bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key, mContext.getResources().getString(resid));
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17329bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mContext.getResources().getBoolean(resid) ? "1" : "0");
17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer.toString(mContext.getResources().getInteger(resid)));
17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17429bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Float.toString(mContext.getResources().getFraction(resid, base, base)));
17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
17475cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
17485cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    private int getIntValueFromSystem(SQLiteDatabase db, String name, int defaultValue) {
17498631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return getIntValueFromTable(db, "system", name, defaultValue);
17508631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
17518631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
17528631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private int getIntValueFromTable(SQLiteDatabase db, String table, String name,
17538631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            int defaultValue) {
17548631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        String value = getStringValueFromTable(db, table, name, null);
17558631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return (value != null) ? Integer.parseInt(value) : defaultValue;
17568631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
17578631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
17588631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private String getStringValueFromTable(SQLiteDatabase db, String table, String name,
17598631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            String defaultValue) {
17605cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        Cursor c = null;
17615cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        try {
17628631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            c = db.query(table, new String[] { Settings.System.VALUE }, "name='" + name + "'",
17635cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    null, null, null, null);
17645cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null && c.moveToFirst()) {
17655cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                String val = c.getString(0);
17668631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                return val == null ? defaultValue : val;
17675cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            }
17685cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        } finally {
17695cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null) c.close();
17705cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        }
17718631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return defaultValue;
17725cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    }
177354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1774