DatabaseHelper.java revision 0499bb5de45cf5542db7ac42406cd856d3386f1f
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;
2413579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackbornimport android.content.pm.IPackageManager;
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.PackageManager;
26f02811f7853202c0934622702ebb9c82e6ab0592Romain Guyimport android.content.res.XmlResourceParser;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.Cursor;
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteOpenHelper;
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteStatement;
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioManager;
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioService;
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.net.ConnectivityManager;
34147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichetimport android.os.Build;
3506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tateimport android.os.Environment;
3613579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackbornimport android.os.RemoteException;
3713579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackbornimport android.os.ServiceManager;
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.SystemProperties;
3906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tateimport android.os.UserHandle;
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.provider.Settings;
41625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkeyimport android.provider.Settings.Global;
42156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasaniimport android.provider.Settings.Secure;
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils;
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log;
4540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu
460499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.comimport com.android.ims.ImsConfig;
47fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.content.PackageHelper;
48fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.telephony.RILConstants;
49b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kallaimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
50fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.util.XmlUtils;
51fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.widget.LockPatternUtils;
52fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport com.android.internal.widget.LockPatternView;
53fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne
54fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport org.xmlpull.v1.XmlPullParser;
55fa53d3002fadf8640600c1840962021a821b8baeGilles Debunneimport org.xmlpull.v1.XmlPullParserException;
56fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne
5706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tateimport java.io.File;
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.IOException;
5924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackbornimport java.util.HashSet;
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.List;
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Database helper class for {@link SettingsProvider}.
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database.
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
66074da8f9aa424b25d84f4e4eb762ca534ea96716James Wylderpublic class DatabaseHelper extends SQLiteOpenHelper {
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String TAG = "SettingsProvider";
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DATABASE_NAME = "settings.db";
69f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller
70f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // Please, please please. If you update the database version, check to make sure the
71f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
72f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // is properly propagated through your change.  Not doing so will result in a loss of user
73f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // settings.
740499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com    private static final int DATABASE_VERSION = 114;
759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private Context mContext;
7706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private int mUserHandle;
7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    private static final HashSet<String> mValidTables = new HashSet<String>();
8024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
8106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_SYSTEM = "system";
8206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_SECURE = "secure";
8306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_GLOBAL = "global";
8406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
8524117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    static {
8606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_SYSTEM);
8706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_SECURE);
8806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_GLOBAL);
8924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("bluetooth_devices");
9024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("bookmarks");
9124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
9224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        // These are old.
9324117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("favorites");
9424117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("gservices");
9524117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("old_favorites");
9624117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    }
9724117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
9806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    static String dbNameForUser(final int userHandle) {
9906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // The owner gets the unadorned db name;
10006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        if (userHandle == UserHandle.USER_OWNER) {
10106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            return DATABASE_NAME;
10206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        } else {
10306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Place the database in the user-specific data tree so that it's
10406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // cleaned up automatically when the user is deleted.
10506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            File databaseFile = new File(
10606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    Environment.getUserSystemDirectory(userHandle), DATABASE_NAME);
10706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            return databaseFile.getPath();
10806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
10906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
11006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
11106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    public DatabaseHelper(Context context, int userHandle) {
11206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        super(context, dbNameForUser(userHandle), null, DATABASE_VERSION);
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mContext = context;
11406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mUserHandle = userHandle;
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11724117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    public static boolean isValidTable(String name) {
11824117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        return mValidTables.contains(name);
11924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    }
12024117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
121f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void createSecureTable(SQLiteDatabase db) {
122f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE TABLE secure (" +
123f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
124f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "name TEXT UNIQUE ON CONFLICT REPLACE," +
125f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "value TEXT" +
126f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                ");");
127f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
128f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1299bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
13006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void createGlobalTable(SQLiteDatabase db) {
13106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        db.execSQL("CREATE TABLE global (" +
13206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
13306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "name TEXT UNIQUE ON CONFLICT REPLACE," +
13406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "value TEXT" +
13506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                ");");
13606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        db.execSQL("CREATE INDEX globalIndex1 ON global (name);");
13706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
13806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onCreate(SQLiteDatabase db) {
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE system (" +
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT UNIQUE ON CONFLICT REPLACE," +
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "value TEXT" +
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
148f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        createSecureTable(db);
149f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
15006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // Only create the global table for the singleton 'owner' user
15106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        if (mUserHandle == UserHandle.USER_OWNER) {
15206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            createGlobalTable(db);
15306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
15406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bluetooth_devices (" +
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT," +
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "addr TEXT," +
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "channel INTEGER," +
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "type INTEGER" +
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bookmarks (" +
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "title TEXT," +
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "folder TEXT," +
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "intent TEXT," +
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "shortcut INTEGER," +
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "ordering INTEGER" +
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Populate bookmarks table with initial bookmarks
17613579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        boolean onlyCore = false;
17713579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        try {
17813579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn            onlyCore = IPackageManager.Stub.asInterface(ServiceManager.getService(
17913579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn                    "package")).isOnlyCoreApps();
18013579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        } catch (RemoteException e) {
18113579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        }
18213579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        if (!onlyCore) {
18313579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn            loadBookmarks(db);
18413579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        }
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load initial volume levels into DB
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVolumeLevels(db);
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load inital settings values
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSettings(db);
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + currentVersion);
1979bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int upgradeVersion = oldVersion;
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Pattern for upgrade blocks:
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        .. your upgrade logic..
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        upgradeVersion = [the DATABASE_VERSION you set]
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    }
2069bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 20) {
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /*
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Version 21 is part of the volume control refresh. There is no
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * longer a UI-visible for setting notification vibrate on/off (in
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * our design), but the functionality still exists. Force the
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * notification vibrate to on.
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            loadVibrateSetting(db, true);
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 21;
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
2189bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 22) {
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 22;
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Upgrade the lock gesture storage location and format
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeLockPatternLocation(db);
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 23) {
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 23;
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 23) {
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
23354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
23454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
23554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Shortcuts, applications, folders
23654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Photo frames, clocks
23804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                db.execSQL(
23904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Search boxes
24154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 24;
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
2489bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 24) {
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // The value of the constants for preferring wifi or preferring mobile have been
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // swapped, so reload the default.
25454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='network_preference'");
25554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
25654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
25754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
25854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
25954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
26054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
26154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 25;
26254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 25) {
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD uri TEXT");
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 26;
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 26) {
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This introduces the new secure settings table.
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                createSecureTable(db);
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 27;
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2879bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 27) {
289156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            String[] settingsToMove = {
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ADB_ENABLED,
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ANDROID_ID,
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.BLUETOOTH_ON,
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DATA_ROAMING,
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DEVICE_PROVISIONED,
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.HTTP_PROXY,
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.INSTALL_NON_MARKET_APPS,
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOGGING_ID,
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.NETWORK_PREFERENCE,
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_ENABLED,
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.SETTINGS_CLASSNAME,
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USB_MASS_STORAGE_ENABLED,
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USE_GOOGLE_MAIL,
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_ON,
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ON,
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                };
3229219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 28;
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3259bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 28 || upgradeVersion == 29) {
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Note: The upgrade to 28 was flawed since it didn't delete the old
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // setting first before inserting. Combining 28 and 29 with the
329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // fixed version.
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This upgrade adds the STREAM_NOTIFICATION type to the list of
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // types affected by ringer modes (silent, vibrate, etc.)
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
337f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int newValue = (1 << AudioManager.STREAM_RING)
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_NOTIFICATION)
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_SYSTEM);
340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('"
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + String.valueOf(newValue) + "')");
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
346f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
3479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
348f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 30;
349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3519266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        if (upgradeVersion == 30) {
3529266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            /*
3539266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * Upgrade 31 clears the title for all quick launch shortcuts so the
3549266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * activities' titles will be resolved at display time. Also, the
3559266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * folder is changed to '@quicklaunch'.
3569266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             */
3579266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            db.beginTransaction();
3589266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            try {
3599266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
3609266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET title = ''");
3619266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.setTransactionSuccessful();
3629266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            } finally {
3639266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.endTransaction();
3649266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            }
3659266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            upgradeVersion = 31;
3669266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        }
367f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 31) {
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            /*
370ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * Animations are now managed in preferences, and may be
371ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * enabled or disabled based on product resources.
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             */
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            db.beginTransaction();
37489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
38089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " VALUES(?,?);");
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadDefaultAnimationSettings(stmt);
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.setTransactionSuccessful();
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } finally {
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.endTransaction();
38689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 32;
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 32) {
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // The Wi-Fi watchdog SSID list is now seeded with the value of
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // the property ro.com.android.wifi-watchlist
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!TextUtils.isEmpty(wifiWatchList)) {
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.beginTransaction();
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            wifiWatchList + "');");
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.setTransactionSuccessful();
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } finally {
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.endTransaction();
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 33;
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4089bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
4094df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        if (upgradeVersion == 33) {
4104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // Set the default zoom controls to: tap-twice to bring up +/-
4114df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            db.beginTransaction();
4124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            try {
4134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
4144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.setTransactionSuccessful();
4154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            } finally {
4164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.endTransaction();
4174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            }
4184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            upgradeVersion = 34;
4194df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        }
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
421bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        if (upgradeVersion == 34) {
422bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            db.beginTransaction();
42389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
424bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            try {
42589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
426cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                        + " VALUES(?,?);");
427cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                loadSecure35Settings(stmt);
428cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.setTransactionSuccessful();
429cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            } finally {
430cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.endTransaction();
43189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
432cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            }
433f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller            upgradeVersion = 35;
43402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
43502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
43602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // was accidentally done out of order here.
43702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
43802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // and we intentionally do nothing from 35 to 36 now.
43902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 35) {
440575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project            upgradeVersion = 36;
441cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        }
44202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
443a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        if (upgradeVersion == 36) {
444a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent           // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
445a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            // types affected by ringer modes (silent, vibrate, etc.)
446a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            db.beginTransaction();
447a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            try {
448a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("DELETE FROM system WHERE name='"
449a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
450a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                int newValue = (1 << AudioManager.STREAM_RING)
451a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_NOTIFICATION)
452a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM)
453a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
454a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("INSERT INTO system ('name', 'value') values ('"
455a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
456a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + String.valueOf(newValue) + "')");
457a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.setTransactionSuccessful();
458a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            } finally {
459a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.endTransaction();
460a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            }
4614880575bacd9f49d864e8b61efca8cdeb231895cJim Miller            upgradeVersion = 37;
462a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        }
463a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent
464bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        if (upgradeVersion == 37) {
465bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            db.beginTransaction();
46689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
467bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            try {
46889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
469bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        + " VALUES(?,?);");
470bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
471bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        R.string.airplane_mode_toggleable_radios);
472bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.setTransactionSuccessful();
473bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            } finally {
474bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.endTransaction();
47589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
476bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            }
477bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            upgradeVersion = 38;
478bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        }
479bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
48002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 38) {
48102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            db.beginTransaction();
48202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            try {
48302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                String value =
48402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
48502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
486bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                        Settings.Global.ASSISTED_GPS_ENABLED + "','" + value + "');");
48702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.setTransactionSuccessful();
48802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            } finally {
48902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.endTransaction();
49002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            }
49102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
49202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            upgradeVersion = 39;
49302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
49402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
495951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        if (upgradeVersion == 39) {
496f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeAutoBrightness(db);
497951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            upgradeVersion = 40;
498951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        }
499951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
500bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (upgradeVersion == 40) {
501bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            /*
502bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             * All animations are now turned on by default!
503bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             */
504bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            db.beginTransaction();
50589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
506bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            try {
507bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
508bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
509bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
510bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
51189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
512bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + " VALUES(?,?);");
513bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                loadDefaultAnimationSettings(stmt);
514bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.setTransactionSuccessful();
515bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } finally {
516bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.endTransaction();
51789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
518bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
519bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            upgradeVersion = 41;
520bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        }
521bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn
522075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        if (upgradeVersion == 41) {
523075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            /*
524075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             * Initialize newly public haptic feedback setting
525075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             */
526075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            db.beginTransaction();
52789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
528075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            try {
529075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
530075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'");
53189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
532075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + " VALUES(?,?);");
533075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                loadDefaultHapticSettings(stmt);
534075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.setTransactionSuccessful();
535075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            } finally {
536075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.endTransaction();
53789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
538075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            }
539075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            upgradeVersion = 42;
540075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        }
541075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
542ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        if (upgradeVersion == 42) {
543ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            /*
544ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             * Initialize new notification pulse setting
545ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             */
546ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            db.beginTransaction();
54789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
548ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            try {
54989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
550ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        + " VALUES(?,?);");
551ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
552ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        R.bool.def_notification_pulse);
553ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.setTransactionSuccessful();
554ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            } finally {
555ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.endTransaction();
55689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
557ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            }
558ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            upgradeVersion = 43;
559ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        }
560ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani
561484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        if (upgradeVersion == 43) {
562484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            /*
563484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             * This upgrade stores bluetooth volume separately from voice volume
564484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             */
565484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            db.beginTransaction();
56689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
567484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            try {
56889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
569484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        + " VALUES(?,?);");
570484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO,
571484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
572484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.setTransactionSuccessful();
573484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            } finally {
574484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.endTransaction();
57589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
576484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            }
577484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            upgradeVersion = 44;
578484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        }
579484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent
580aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        if (upgradeVersion == 44) {
581aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            /*
582aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             * Gservices was moved into vendor/google.
583aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             */
584aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP TABLE IF EXISTS gservices");
585aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
586aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            upgradeVersion = 45;
587aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        }
58887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
58987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        if (upgradeVersion == 45) {
59087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat             /*
59187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              * New settings for MountService
59287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              */
59387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            db.beginTransaction();
59487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            try {
59587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
59687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');");
59787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
59887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');");
59987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
60087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_PROMPT + "','1');");
60187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
60287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');");
60387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.setTransactionSuccessful();
60487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            } finally {
60587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.endTransaction();
60687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            }
60787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            upgradeVersion = 46;
60887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        }
60987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
610df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn        if (upgradeVersion == 46) {
611df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            /*
612df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * The password mode constants have changed; reset back to no
613df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * password.
614df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             */
615df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            db.beginTransaction();
616df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            try {
617df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
618df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.setTransactionSuccessful();
619df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            } finally {
620df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.endTransaction();
621df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            }
622df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn           upgradeVersion = 47;
623df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn       }
624df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn
6256176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6269327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        if (upgradeVersion == 47) {
6279327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            /*
6289327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * The password mode constants have changed again; reset back to no
6299327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * password.
6309327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             */
6319327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            db.beginTransaction();
6329327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            try {
6339327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
6349327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.setTransactionSuccessful();
6359327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            } finally {
6369327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.endTransaction();
6379327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            }
6389327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn           upgradeVersion = 48;
6399327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn       }
6406176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6415d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       if (upgradeVersion == 48) {
6425d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           /*
64321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * Default recognition service no longer initialized here,
64421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * moved to RecognitionManagerService.
6455d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            */
6465d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           upgradeVersion = 49;
6475d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       }
64831f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
6490e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       if (upgradeVersion == 49) {
6500e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           /*
6510e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            * New settings for new user interface noises.
6520e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            */
6530e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           db.beginTransaction();
65489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori           SQLiteStatement stmt = null;
6550e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           try {
65689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
6570e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                        + " VALUES(?,?);");
6580e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                loadUISoundEffectsSettings(stmt);
6590e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.setTransactionSuccessful();
6600e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            } finally {
6610e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.endTransaction();
66289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
6630e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            }
6640e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
6650e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           upgradeVersion = 50;
6660e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       }
6670e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
668f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       if (upgradeVersion == 50) {
669f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           /*
67040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            * Install location no longer initiated here.
671f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor            */
672f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           upgradeVersion = 51;
673f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       }
674f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor
675156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       if (upgradeVersion == 51) {
676156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           /* Move the lockscreen related settings to Secure, including some private ones. */
677156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           String[] settingsToMove = {
678156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_ENABLED,
679156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_VISIBLE,
680156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED,
681156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_type",
682156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockoutattemptdeadline",
683156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.patterneverchosen",
684156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lock_pattern_autolock",
685156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockedoutpermanently",
686156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_salt"
687156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           };
6889219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate           moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
689156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           upgradeVersion = 52;
690156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       }
691156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
6921c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion == 52) {
6931c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            // new vibration/silent mode settings
6941c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            db.beginTransaction();
69589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
6961c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            try {
69789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
6981c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        + " VALUES(?,?);");
6991c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
7001c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        R.bool.def_vibrate_in_silent);
7011c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.setTransactionSuccessful();
7021c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            } finally {
7031c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.endTransaction();
70489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
7051c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            }
7061c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
7071c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            upgradeVersion = 53;
7081c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        }
7093c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
710089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        if (upgradeVersion == 53) {
711089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            /*
71240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             * New settings for set install location UI no longer initiated here.
713089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu             */
714089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            upgradeVersion = 54;
715089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        }
7161c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
717b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (upgradeVersion == 54) {
718b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            /*
719b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             * Update the screen timeout value if set to never
720b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             */
721b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            db.beginTransaction();
722b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
723b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                upgradeScreenTimeoutFromNever(db);
724b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.setTransactionSuccessful();
725b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
726b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.endTransaction();
727b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
728b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
729b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            upgradeVersion = 55;
730b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
731b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
73240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        if (upgradeVersion == 55) {
73340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            /* Move the install location settings. */
73440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            String[] settingsToMove = {
735625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    Global.SET_INSTALL_LOCATION,
736625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    Global.DEFAULT_INSTALL_LOCATION
73740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            };
7389219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
73940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            db.beginTransaction();
74040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            SQLiteStatement stmt = null;
74140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            try {
74240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                stmt = db.compileStatement("INSERT INTO system(name,value)"
74340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        + " VALUES(?,?);");
744625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                loadSetting(stmt, Global.SET_INSTALL_LOCATION, 0);
745625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                loadSetting(stmt, Global.DEFAULT_INSTALL_LOCATION,
74640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        PackageHelper.APP_INSTALL_AUTO);
74740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                db.setTransactionSuccessful();
74840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             } finally {
74940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 db.endTransaction();
75040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 if (stmt != null) stmt.close();
75140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             }
75240e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            upgradeVersion = 56;
75340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        }
7546659284d68bb04539891456700c8da2d0bae7d09Jake Hamby
7556659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        if (upgradeVersion == 56) {
7566659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            /*
7576659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             * Add Bluetooth to list of toggleable radios in airplane mode
7586659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             */
7596659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            db.beginTransaction();
7606659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            SQLiteStatement stmt = null;
7616659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            try {
7626659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.execSQL("DELETE FROM system WHERE name='"
7636659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
7646659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
7656659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + " VALUES(?,?);");
7666659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
7676659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        R.string.airplane_mode_toggleable_radios);
7686659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.setTransactionSuccessful();
7696659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            } finally {
7706659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.endTransaction();
7716659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                if (stmt != null) stmt.close();
7726659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            }
7736659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            upgradeVersion = 57;
7746659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        }
775585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
7765cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Honeycomb changes ************/
7775cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
778585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        if (upgradeVersion == 57) {
779585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            /*
780585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             * New settings to:
781585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  1. Enable injection of accessibility scripts in WebViews.
782585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  2. Define the key bindings for traversing web content in WebViews.
783585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             */
784585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            db.beginTransaction();
785585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            SQLiteStatement stmt = null;
786585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            try {
787585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
788585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
789585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
790585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.bool.def_accessibility_script_injection);
791585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt.close();
792585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
793585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
794585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
795585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.string.def_accessibility_web_content_key_bindings);
796585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.setTransactionSuccessful();
797585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            } finally {
798585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.endTransaction();
799585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                if (stmt != null) stmt.close();
800585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            }
801585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            upgradeVersion = 58;
802585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        }
803585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
804ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        if (upgradeVersion == 58) {
805ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            /* Add default for new Auto Time Zone */
8065cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            int autoTimeValue = getIntValueFromSystem(db, Settings.System.AUTO_TIME, 0);
807ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            db.beginTransaction();
808ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            SQLiteStatement stmt = null;
809ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            try {
8105cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                stmt = db.compileStatement("INSERT INTO system(name,value)" + " VALUES(?,?);");
8115cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                loadSetting(stmt, Settings.System.AUTO_TIME_ZONE,
8125cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                        autoTimeValue); // Sync timezone to NITZ if auto_time was enabled
813ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.setTransactionSuccessful();
814ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            } finally {
815ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.endTransaction();
816ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                if (stmt != null) stmt.close();
817ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            }
818ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            upgradeVersion = 59;
819ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        }
820ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani
821b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        if (upgradeVersion == 59) {
822b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            // Persistence for the rotation lock feature.
823b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            db.beginTransaction();
824b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            SQLiteStatement stmt = null;
825b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            try {
826b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                stmt = db.compileStatement("INSERT INTO system(name,value)"
827b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        + " VALUES(?,?);");
828b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                loadBooleanSetting(stmt, Settings.System.USER_ROTATION,
829b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        R.integer.def_user_rotation); // should be zero degrees
830b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.setTransactionSuccessful();
831b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            } finally {
832b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.endTransaction();
833b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                if (stmt != null) stmt.close();
834b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            }
835b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            upgradeVersion = 60;
836b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        }
837b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler
8380038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        if (upgradeVersion == 60) {
8395cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
8405cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
8415cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
8420038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani            upgradeVersion = 61;
8430038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        }
8440038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani
84579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        if (upgradeVersion == 61) {
8465cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
8475cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
8485cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
84979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            upgradeVersion = 62;
85079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
85179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
852f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        // Change the default for screen auto-brightness mode
853f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        if (upgradeVersion == 62) {
8545cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
8555cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
8565cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeAutoBrightness(db);
857f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeVersion = 63;
858f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
859f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
86025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent        if (upgradeVersion == 63) {
86125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent            // This upgrade adds the STREAM_MUSIC type to the list of
86225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             // types affected by ringer modes (silent, vibrate, etc.)
86325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             db.beginTransaction();
86425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             try {
86525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("DELETE FROM system WHERE name='"
86625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
86725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 int newValue = (1 << AudioManager.STREAM_RING)
86825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_NOTIFICATION)
86925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM)
87025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM_ENFORCED)
87125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_MUSIC);
87225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("INSERT INTO system ('name', 'value') values ('"
87325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
87425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + String.valueOf(newValue) + "')");
87525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.setTransactionSuccessful();
87625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             } finally {
87725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.endTransaction();
87825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             }
87925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             upgradeVersion = 64;
88025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent         }
88125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent
88254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        if (upgradeVersion == 64) {
88354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            // New setting to configure the long press timeout.
88454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            db.beginTransaction();
88554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            SQLiteStatement stmt = null;
88654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            try {
88754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
88854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        + " VALUES(?,?);");
88954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
89054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        R.integer.def_long_press_timeout_millis);
89154d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt.close();
89254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.setTransactionSuccessful();
89354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            } finally {
89454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.endTransaction();
89554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                if (stmt != null) stmt.close();
89654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            }
89754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            upgradeVersion = 65;
89854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        }
89954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov
9005cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Ice Cream Sandwich changes ************/
9015cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
902fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        if (upgradeVersion == 65) {
903fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            /*
904fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             * Animations are removed from Settings. Turned on by default
905fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             */
906fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            db.beginTransaction();
907fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            SQLiteStatement stmt = null;
908fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            try {
909fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
910fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
911fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
912fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
913fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                stmt = db.compileStatement("INSERT INTO system(name,value)"
914fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + " VALUES(?,?);");
915fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                loadDefaultAnimationSettings(stmt);
916fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.setTransactionSuccessful();
917fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            } finally {
918fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.endTransaction();
919fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                if (stmt != null) stmt.close();
920fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            }
921fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            upgradeVersion = 66;
922fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        }
923fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne
924c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent        if (upgradeVersion == 66) {
92542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set
92642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // according to device voice capability
92742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
92842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
92942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
93042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_NOTIFICATION) |
93142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM) |
93242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
93342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                if (!mContext.getResources().getBoolean(
93442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        com.android.internal.R.bool.config_voice_capable)) {
93542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                    ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
93642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                }
93742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
93842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
93942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("INSERT INTO system ('name', 'value') values ('"
94042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
94142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + String.valueOf(ringerModeAffectedStreams) + "')");
94242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
94342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
94442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
94542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
94642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 67;
94742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
948c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
949a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        if (upgradeVersion == 67) {
950a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            // New setting to enable touch exploration.
951a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            db.beginTransaction();
952a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            SQLiteStatement stmt = null;
953a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            try {
954a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
955a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        + " VALUES(?,?);");
956a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
957a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        R.bool.def_touch_exploration_enabled);
958a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt.close();
959a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.setTransactionSuccessful();
960a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            } finally {
961a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.endTransaction();
962a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                if (stmt != null) stmt.close();
963a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            }
964a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            upgradeVersion = 68;
965a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        }
966a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
96742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        if (upgradeVersion == 68) {
96842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // Enable all system sounds by default
96942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
97042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
97142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
97242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
97342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
97442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
97542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
97642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
97742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 69;
97842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
979a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
9808d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        if (upgradeVersion == 69) {
9818d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS
9828d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String airplaneRadios = mContext.getResources().getString(
9838d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.def_airplane_mode_radios);
9848d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String toggleableRadios = mContext.getResources().getString(
9858d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.airplane_mode_toggleable_radios);
9868d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            db.beginTransaction();
9878d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            try {
9888d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " +
9898d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'");
9908d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " +
9918d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
9928d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.setTransactionSuccessful();
9938d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            } finally {
9948d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.endTransaction();
9958d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            }
9968d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            upgradeVersion = 70;
9978d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        }
9988d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly
9996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        if (upgradeVersion == 70) {
10006651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            // Update all built-in bookmarks.  Some of the package names have changed.
10016651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            loadBookmarks(db);
10026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            upgradeVersion = 71;
10036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        }
10046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
100555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        if (upgradeVersion == 71) {
100655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov             // New setting to specify whether to speak passwords in accessibility mode.
100755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            db.beginTransaction();
100855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            SQLiteStatement stmt = null;
100955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            try {
101055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
101155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        + " VALUES(?,?);");
101255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
101355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        R.bool.def_accessibility_speak_password);
10146243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
101555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            } finally {
101655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                db.endTransaction();
101755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                if (stmt != null) stmt.close();
101855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            }
101955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            upgradeVersion = 72;
102055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        }
102155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
10226243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        if (upgradeVersion == 72) {
10236243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            // update vibration settings
10246243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            db.beginTransaction();
10256243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            SQLiteStatement stmt = null;
10266243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            try {
10276243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
10286243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        + " VALUES(?,?);");
10296243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
10306243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        R.bool.def_vibrate_in_silent);
10316243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
10326243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            } finally {
10336243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.endTransaction();
10346243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                if (stmt != null) stmt.close();
10356243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            }
10366243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            upgradeVersion = 73;
10376243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        }
10386243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani
10393ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        if (upgradeVersion == 73) {
1040398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVibrateSettingFromNone(db);
1041398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 74;
1042398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
1043398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
1044398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if (upgradeVersion == 74) {
10453ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            // URL from which WebView loads a JavaScript based screen-reader.
10463ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            db.beginTransaction();
10473ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            SQLiteStatement stmt = null;
10483ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            try {
10493ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
10503ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
10513ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                        R.string.def_accessibility_screen_reader_url);
10523ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.setTransactionSuccessful();
10533ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            } finally {
10543ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.endTransaction();
10553ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                if (stmt != null) stmt.close();
10563ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            }
1057398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 75;
10583ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        }
10597bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        if (upgradeVersion == 75) {
10607bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            db.beginTransaction();
10617bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            SQLiteStatement stmt = null;
10627bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            Cursor c = null;
10637bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            try {
106406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                c = db.query(TABLE_SECURE, new String[] {"_id", "value"},
10657bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        "name='lockscreen.disabled'",
10667bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        null, null, null, null);
10677bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                // only set default if it has not yet been set
10687bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c == null || c.getCount() == 0) {
10697bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    stmt = db.compileStatement("INSERT INTO system(name,value)"
10707bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            + " VALUES(?,?);");
10717bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
10727bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            R.bool.def_lockscreen_disabled);
10737bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                }
10747bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.setTransactionSuccessful();
10757bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            } finally {
10767bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.endTransaction();
10777bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c != null) c.close();
10787bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (stmt != null) stmt.close();
10797bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            }
10807bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            upgradeVersion = 76;
10817bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        }
10823ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
1083bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        /************* The following are Jelly Bean changes ************/
1084bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1085bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        if (upgradeVersion == 76) {
1086bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            // Removed VIBRATE_IN_SILENT setting
1087bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            db.beginTransaction();
1088bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            try {
1089bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.execSQL("DELETE FROM system WHERE name='"
1090bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                                + Settings.System.VIBRATE_IN_SILENT + "'");
1091bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.setTransactionSuccessful();
1092bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            } finally {
1093bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.endTransaction();
1094bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            }
1095bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1096bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            upgradeVersion = 77;
1097bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        }
1098bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
10993c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        if (upgradeVersion == 77) {
11003c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            // Introduce "vibrate when ringing" setting
11013c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadVibrateWhenRingingSetting(db);
11023c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
11033c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            upgradeVersion = 78;
11043c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
1105bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
11063a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        if (upgradeVersion == 78) {
11073a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            // The JavaScript based screen-reader URL changes in JellyBean.
11083a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            db.beginTransaction();
11093a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            SQLiteStatement stmt = null;
11103a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            try {
11113a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
11123a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        + " VALUES(?,?);");
11133a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
11143a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        R.string.def_accessibility_screen_reader_url);
11153a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.setTransactionSuccessful();
11163a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            } finally {
11173a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.endTransaction();
11183a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                if (stmt != null) stmt.close();
11193a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            }
11203a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            upgradeVersion = 79;
11213a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        }
11223a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv
11238631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        if (upgradeVersion == 79) {
11248631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // Before touch exploration was a global setting controlled by the user
11258631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // via the UI. However, if the enabled accessibility services do not
11268631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // handle touch exploration mode, enabling it makes no sense. Therefore,
11278631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // now the services request touch exploration mode and the user is
11288631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // presented with a dialog to allow that and if she does we store that
11298631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // in the database. As a result of this change a user that has enabled
11308631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility, touch exploration, and some accessibility services
11318631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // may lose touch exploration state, thus rendering the device useless
11328631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // unless sighted help is provided, since the enabled service(s) are
11338631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // not in the list of services to which the user granted a permission
11348631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // to put the device in touch explore mode. Here we are allowing all
11358631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled accessibility services to toggle touch exploration provided
11368631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility and touch exploration are enabled and no services can
11378631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // toggle touch exploration. Note that the user has already manually
11388631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled the services and touch exploration which means the she has
11398631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // given consent to have these services work in touch exploration mode.
114006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final boolean accessibilityEnabled = getIntValueFromTable(db, TABLE_SECURE,
11418631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
114206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final boolean touchExplorationEnabled = getIntValueFromTable(db, TABLE_SECURE,
11438631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1;
11448631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            if (accessibilityEnabled && touchExplorationEnabled) {
114506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                String enabledServices = getStringValueFromTable(db, TABLE_SECURE,
11468631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "");
114706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                String touchExplorationGrantedServices = getStringValueFromTable(db, TABLE_SECURE,
11488631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, "");
11498631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                if (TextUtils.isEmpty(touchExplorationGrantedServices)
11508631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        && !TextUtils.isEmpty(enabledServices)) {
11518631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    SQLiteStatement stmt = null;
11528631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    try {
11538631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.beginTransaction();
11548631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
11558631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                + " VALUES(?,?);");
11568631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        loadSetting(stmt,
11578631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
11588631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                enabledServices);
11598631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.setTransactionSuccessful();
11608631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    } finally {
11618631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.endTransaction();
11628631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        if (stmt != null) stmt.close();
11638631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    }
11648631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                }
11658631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            }
11668631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            upgradeVersion = 80;
11678631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        }
11688631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
1169fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler        // vvv Jelly Bean MR1 changes begin here vvv
1170fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler
1171ca34bcf6746454c561b0c07ca5c6e42bd4a73e9eSvetoslav Ganov        if (upgradeVersion == 80) {
1172fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            // update screensaver settings
1173fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            db.beginTransaction();
1174fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            SQLiteStatement stmt = null;
1175fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            try {
1176fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1177fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                        + " VALUES(?,?);");
1178fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
1179ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsEnabledByDefault);
1180fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
1181ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
11821a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
1183ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
11841a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock                loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
1185ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.string.config_dreamsDefaultComponent);
1186ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
1187ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.string.config_dreamsDefaultComponent);
118806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
1189fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                db.setTransactionSuccessful();
1190fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            } finally {
1191fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                db.endTransaction();
1192fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                if (stmt != null) stmt.close();
1193fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            }
1194ca34bcf6746454c561b0c07ca5c6e42bd4a73e9eSvetoslav Ganov            upgradeVersion = 81;
1195fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler        }
1196fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler
119716e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings        if (upgradeVersion == 81) {
119816e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            // Add package verification setting
119916e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            db.beginTransaction();
120016e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            SQLiteStatement stmt = null;
120116e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            try {
120216e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
120316e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                        + " VALUES(?,?);");
1204bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
120516e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                        R.bool.def_package_verifier_enable);
120616e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                db.setTransactionSuccessful();
120716e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            } finally {
120816e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                db.endTransaction();
120916e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                if (stmt != null) stmt.close();
121016e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            }
121116e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            upgradeVersion = 82;
121216e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings        }
121316e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings
121406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        if (upgradeVersion == 82) {
121506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Move to per-user settings dbs
121659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
121706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
121859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
121959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                SQLiteStatement stmt = null;
122059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
122159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Migrate now-global settings. Note that this happens before
122259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // new users can be created.
122359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    createGlobalTable(db);
122459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
122559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false);
122659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
122759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false);
122859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate
122959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
123059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
123159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
123259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    if (stmt != null) stmt.close();
123359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
123406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
123506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            upgradeVersion = 83;
123606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
123706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
12381cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov        if (upgradeVersion == 83) {
12391cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 1. Setting whether screen magnification is enabled.
12401cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 2. Setting for screen magnification scale.
12411cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 3. Setting for screen magnification auto update.
12421cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            db.beginTransaction();
12431cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            SQLiteStatement stmt = null;
12441cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            try {
12451cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
12461cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadBooleanSetting(stmt,
12471cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
12481cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.bool.def_accessibility_display_magnification_enabled);
12491cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt.close();
12501cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
12511cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
12521cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.fraction.def_accessibility_display_magnification_scale, 1);
12531cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt.close();
12541cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
12551cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadBooleanSetting(stmt,
12561cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
12571cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.bool.def_accessibility_display_magnification_auto_update);
12581a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate
12591a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate                db.setTransactionSuccessful();
12601cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            } finally {
12611cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                db.endTransaction();
12621cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                if (stmt != null) stmt.close();
12631cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            }
12641cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            upgradeVersion = 84;
12651cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov        }
12661cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
12671a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate        if (upgradeVersion == 84) {
126859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
126959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
127059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                SQLiteStatement stmt = null;
127159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
127259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Patch up the slightly-wrong key migration from 82 -> 83 for those
127359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // devices that missed it, ignoring if the move is redundant
127459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
127559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.ADB_ENABLED,
127659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.BLUETOOTH_ON,
127759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.DATA_ROAMING,
127859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.DEVICE_PROVISIONED,
127959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.INSTALL_NON_MARKET_APPS,
128059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.USB_MASS_STORAGE_ENABLED
128159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
128259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
128359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
128459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
128559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
128659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    if (stmt != null) stmt.close();
128759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
12881a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate            }
12891a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate            upgradeVersion = 85;
12901a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate        }
12911a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate
12929219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate        if (upgradeVersion == 85) {
129359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
129459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
129559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
129659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Fix up the migration, ignoring already-migrated elements, to snap up to
129759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // date with new changes to the set of global versus system/secure settings
129859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = { Settings.System.STAY_ON_WHILE_PLUGGED_IN };
129959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
13009219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate
130159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
130259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
130359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
130459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
13059219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            }
13069219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            upgradeVersion = 86;
13079219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate        }
13089219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate
13094d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings        if (upgradeVersion == 86) {
131059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
131159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
131259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
131359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
1314bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_ENABLE,
1315bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_TIMEOUT,
1316bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE
131759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
131859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
13194d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings
132059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
132159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
132259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
132359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
13244d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings            }
13254d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings            upgradeVersion = 87;
13264d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings        }
13274d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings
1328c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate        if (upgradeVersion == 87) {
132959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
133059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
133159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
133259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
1333bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
1334bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
1335bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS
133659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
133759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1338c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate
133959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
134059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
134159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
134259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
1343c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate            }
1344c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate            upgradeVersion = 88;
1345c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate        }
1346c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate
1347625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey        if (upgradeVersion == 88) {
1348625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey            if (mUserHandle == UserHandle.USER_OWNER) {
1349625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                db.beginTransaction();
1350625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                try {
1351625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    String[] settingsToMove = {
1352625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
1353625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
1354625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SEND_ACTION_APP_ERROR,
1355625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_AGE_SECONDS,
1356625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_MAX_FILES,
1357625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_QUOTA_KB,
1358625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_QUOTA_PERCENT,
1359625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_RESERVE_PERCENT,
1360625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_TAG_PREFIX,
1361625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.ERROR_LOGCAT_PREFIX,
1362625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
1363625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
1364625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
1365625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
1366625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
1367625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
1368625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CONNECTIVITY_CHANGE_DELAY,
1369625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
1370625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CAPTIVE_PORTAL_SERVER,
1371625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.NSD_ON,
1372625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SET_INSTALL_LOCATION,
1373625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DEFAULT_INSTALL_LOCATION,
1374625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
1375625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
1376625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
1377625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.HTTP_PROXY,
1378625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_HOST,
1379625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_PORT,
1380625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
1381625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SET_GLOBAL_HTTP_PROXY,
1382625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DEFAULT_DNS_SERVER,
1383625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    };
1384625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1385625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    db.setTransactionSuccessful();
1386625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                } finally {
1387625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    db.endTransaction();
1388625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                }
1389625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey            }
1390625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey            upgradeVersion = 89;
1391625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey        }
1392625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey
13930ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        if (upgradeVersion == 89) {
13940ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            if (mUserHandle == UserHandle.USER_OWNER) {
13950ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                db.beginTransaction();
13960ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                try {
13970ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    String[] prefixesToMove = {
13980ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
13990ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
14000ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
14010ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    };
14020ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14030ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    movePrefixedSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, prefixesToMove);
14040ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14050ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    db.setTransactionSuccessful();
14060ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                } finally {
14070ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    db.endTransaction();
14080ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                }
14090ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
14100ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            upgradeVersion = 90;
14110ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        }
14120ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14136e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey        if (upgradeVersion == 90) {
14146e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            if (mUserHandle == UserHandle.USER_OWNER) {
14156e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                db.beginTransaction();
14166e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                try {
14176e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    String[] systemToGlobal = {
14186e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.WINDOW_ANIMATION_SCALE,
14196e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.TRANSITION_ANIMATION_SCALE,
14206e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.ANIMATOR_DURATION_SCALE,
14216e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.FANCY_IME_ANIMATIONS,
14226e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.COMPATIBILITY_MODE,
14236e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.EMERGENCY_TONE,
14246e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.CALL_AUTO_RETRY,
14256e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.DEBUG_APP,
14266e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.WAIT_FOR_DEBUGGER,
14276e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.SHOW_PROCESSES,
14286e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.ALWAYS_FINISH_ACTIVITIES,
14296e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    };
14306e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    String[] secureToGlobal = {
14316e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.PREFERRED_NETWORK_MODE,
1432b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla                            Settings.Global.CDMA_SUBSCRIPTION_MODE,
14336e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    };
14346e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
14356e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, systemToGlobal, true);
14366e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, secureToGlobal, true);
14376e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
14386e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    db.setTransactionSuccessful();
14396e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                } finally {
14406e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    db.endTransaction();
14416e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                }
14426e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            }
14436e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            upgradeVersion = 91;
14446e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey        }
14456e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
144655b02226c07f276e143f9da6f752963882fb60d5Eric Laurent        if (upgradeVersion == 91) {
144755b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            if (mUserHandle == UserHandle.USER_OWNER) {
144855b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                db.beginTransaction();
144955b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                try {
145055b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    // Move ringer mode from system to global settings
1451531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    String[] settingsToMove = { Settings.Global.MODE_RINGER };
145255b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
145355b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
145455b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    db.setTransactionSuccessful();
145555b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                } finally {
145655b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    db.endTransaction();
145755b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                }
145855b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            }
145955b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            upgradeVersion = 92;
146055b02226c07f276e143f9da6f752963882fb60d5Eric Laurent        }
146155b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
14627f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock        if (upgradeVersion == 92) {
14637f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            SQLiteStatement stmt = null;
14647f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            try {
14657f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
14667f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                        + " VALUES(?,?);");
14677f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                if (mUserHandle == UserHandle.USER_OWNER) {
14687f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // consider existing primary users to have made it through user setup
14697f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // if the globally-scoped device-provisioned bit is set
14707f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // (indicating they already made it through setup as primary)
14717f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    int deviceProvisioned = getIntValueFromTable(db, TABLE_GLOBAL,
14727f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            Settings.Global.DEVICE_PROVISIONED, 0);
14737f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    loadSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
14747f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            deviceProvisioned);
14757f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                } else {
14767f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // otherwise use the default
14777f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
14787f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            R.bool.def_user_setup_complete);
14797f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                }
14807f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            } finally {
14817f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                if (stmt != null) stmt.close();
14827f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            }
14837f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            upgradeVersion = 93;
14847f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock        }
14857f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock
1486531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani        if (upgradeVersion == 93) {
1487531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            // Redo this step, since somehow it didn't work the first time for some users
1488531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            if (mUserHandle == UserHandle.USER_OWNER) {
1489531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                db.beginTransaction();
1490531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                try {
1491531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    // Migrate now-global settings
1492531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
1493531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
1494531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
1495531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1496531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani
1497531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    db.setTransactionSuccessful();
1498531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                } finally {
1499531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    db.endTransaction();
1500531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                }
1501531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            }
1502531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            upgradeVersion = 94;
1503531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani        }
1504531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani
150584e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown        if (upgradeVersion == 94) {
150684e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            // Add wireless charging started sound setting
15072d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani            if (mUserHandle == UserHandle.USER_OWNER) {
15082d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                db.beginTransaction();
15092d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                SQLiteStatement stmt = null;
15102d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                try {
15112d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
15122d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                            + " VALUES(?,?);");
15132d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
15142d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                            R.string.def_wireless_charging_started_sound);
15152d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    db.setTransactionSuccessful();
15162d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                } finally {
15172d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    db.endTransaction();
15182d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    if (stmt != null) stmt.close();
15192d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                }
152084e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            }
152184e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            upgradeVersion = 95;
152284e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown        }
152384e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown
152458f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate        if (upgradeVersion == 95) {
152558f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate            if (mUserHandle == UserHandle.USER_OWNER) {
152658f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                db.beginTransaction();
152758f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                try {
152858f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    String[] settingsToMove = { Settings.Global.BUGREPORT_IN_POWER_MENU };
152958f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
153058f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    db.setTransactionSuccessful();
153158f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                } finally {
153258f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    db.endTransaction();
153358f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                }
153458f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate            }
153558f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate            upgradeVersion = 96;
153658f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate        }
153758f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate
1538d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron        if (upgradeVersion == 96) {
1539447d94684ee73046d769649d8247aacd581bd6e3Svetoslav Ganov            // NOP bump due to a reverted change that some people got on upgrade.
1540d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron            upgradeVersion = 97;
1541d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron        }
1542d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron
1543dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler        if (upgradeVersion == 97) {
1544dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            if (mUserHandle == UserHandle.USER_OWNER) {
1545dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                db.beginTransaction();
1546dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                SQLiteStatement stmt = null;
1547dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                try {
1548dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1549dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                            + " VALUES(?,?);");
1550dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
1551dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                            R.integer.def_low_battery_sound_timeout);
1552dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    db.setTransactionSuccessful();
1553dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                } finally {
1554dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    db.endTransaction();
1555dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    if (stmt != null) stmt.close();
1556dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                }
1557dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            }
1558dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            upgradeVersion = 98;
1559dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler        }
1560dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler
156182a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler        if (upgradeVersion == 98) {
156252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // no-op; LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
156382a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler            upgradeVersion = 99;
156482a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler        }
156582a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler
15661cdd7dda61b30358c843e534394c32f24bc5271fChris Wren        if (upgradeVersion == 99) {
156752e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // no-op; HEADS_UP_NOTIFICATIONS_ENABLED now handled in version 100
15681cdd7dda61b30358c843e534394c32f24bc5271fChris Wren            upgradeVersion = 100;
15691cdd7dda61b30358c843e534394c32f24bc5271fChris Wren        }
157052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler
15715242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren        if (upgradeVersion == 100) {
157252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // note: LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
15735242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            if (mUserHandle == UserHandle.USER_OWNER) {
15745242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                db.beginTransaction();
15755242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                SQLiteStatement stmt = null;
15765242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                try {
157752e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
15785242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                            + " VALUES(?,?);");
15795242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
15805242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                            R.integer.def_heads_up_enabled);
15815242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    db.setTransactionSuccessful();
15825242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                } finally {
15835242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    db.endTransaction();
15845242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    if (stmt != null) stmt.close();
15855242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                }
15865242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            }
15875242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            upgradeVersion = 101;
15885242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren        }
15891cdd7dda61b30358c843e534394c32f24bc5271fChris Wren
1590147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet        if (upgradeVersion == 101) {
1591147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            if (mUserHandle == UserHandle.USER_OWNER) {
1592147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                db.beginTransaction();
1593147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                SQLiteStatement stmt = null;
1594147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                try {
1595147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
1596147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                            + " VALUES(?,?);");
1597147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
1598147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    db.setTransactionSuccessful();
1599147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                } finally {
1600147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    db.endTransaction();
1601147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    if (stmt != null) stmt.close();
1602147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                }
1603147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            }
1604147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            upgradeVersion = 102;
1605147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet        }
1606147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
1607aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate        if (upgradeVersion == 102) {
1608aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            db.beginTransaction();
1609aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            SQLiteStatement stmt = null;
1610aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            try {
1611aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                // The INSTALL_NON_MARKET_APPS setting is becoming per-user rather
1612aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                // than device-global.
1613aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                if (mUserHandle == UserHandle.USER_OWNER) {
1614aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // In the owner user, the global table exists so we can migrate the
1615aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // entry from there to the secure table, preserving its value.
1616aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    String[] globalToSecure = {
1617aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            Settings.Secure.INSTALL_NON_MARKET_APPS
1618aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    };
1619aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    moveSettingsToNewTable(db, TABLE_GLOBAL, TABLE_SECURE, globalToSecure, true);
1620aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                } else {
1621aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // Secondary users' dbs don't have the global table, so institute the
1622aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // default.
1623aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1624aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            + " VALUES(?,?);");
1625aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
1626aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            R.bool.def_install_non_market_apps);
1627aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                }
1628aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                db.setTransactionSuccessful();
1629aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            } finally {
1630aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                db.endTransaction();
1631aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                if (stmt != null) stmt.close();
1632aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            }
1633aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            upgradeVersion = 103;
1634aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate        }
1635a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
1636a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown        if (upgradeVersion == 103) {
1637a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            db.beginTransaction();
1638a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            SQLiteStatement stmt = null;
1639a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            try {
1640a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1641a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                        + " VALUES(?,?);");
1642a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
1643a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                        R.bool.def_wake_gesture_enabled);
1644a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                db.setTransactionSuccessful();
1645a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            } finally {
1646a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                db.endTransaction();
1647a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                if (stmt != null) stmt.close();
1648a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            }
1649a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            upgradeVersion = 104;
1650a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown        }
1651a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
16521e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani        if (upgradeVersion < 105) {
16531e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani            if (mUserHandle == UserHandle.USER_OWNER) {
16541e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                db.beginTransaction();
16551e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                SQLiteStatement stmt = null;
16561e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                try {
16571e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
16581e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                            + " VALUES(?,?);");
16591e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    loadBooleanSetting(stmt, Settings.Global.GUEST_USER_ENABLED,
16601e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                            R.bool.def_guest_user_enabled);
16611e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    db.setTransactionSuccessful();
16621e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                } finally {
16631e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    db.endTransaction();
16641e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    if (stmt != null) stmt.close();
16651e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                }
16661e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani            }
16671e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani            upgradeVersion = 105;
16681e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani        }
16691e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani
167052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler        if (upgradeVersion < 106) {
167152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // LOCK_SCREEN_SHOW_NOTIFICATIONS is now per-user.
167252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            db.beginTransaction();
167352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            SQLiteStatement stmt = null;
167452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            try {
167552e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
167652e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        + " VALUES(?,?);");
1677cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                loadIntegerSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
1678cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        R.integer.def_lock_screen_show_notifications);
167952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                if (mUserHandle == UserHandle.USER_OWNER) {
168052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    final int oldShow = getIntValueFromTable(db,
168152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                            TABLE_GLOBAL, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, -1);
168252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    if (oldShow >= 0) {
168352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        // overwrite the default with whatever you had
168452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        loadSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, oldShow);
168552e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        final SQLiteStatement deleteStmt
168652e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                                = db.compileStatement("DELETE FROM global WHERE name=?");
168752e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        deleteStmt.bindString(1, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS);
168852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        deleteStmt.execute();
168952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    }
169052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                }
169152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                db.setTransactionSuccessful();
169252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            } finally {
169352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                db.endTransaction();
169452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                if (stmt != null) stmt.close();
169552e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            }
169652e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            upgradeVersion = 106;
169752e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler        }
169849e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos
169949e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos        if (upgradeVersion < 107) {
170049e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            // Add trusted sound setting
170149e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            if (mUserHandle == UserHandle.USER_OWNER) {
170249e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                db.beginTransaction();
170349e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                SQLiteStatement stmt = null;
170449e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                try {
170549e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
170649e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                            + " VALUES(?,?);");
170749e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
170849e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                            R.string.def_trusted_sound);
170949e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    db.setTransactionSuccessful();
171049e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                } finally {
171149e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    db.endTransaction();
171249e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    if (stmt != null) stmt.close();
171349e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                }
171449e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            }
171549e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            upgradeVersion = 107;
171649e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos        }
171749e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos
171849cb613c993a5fecf11d7ee6198068315762814eJeff Brown        if (upgradeVersion < 108) {
171949cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // Reset the auto-brightness setting to default since the behavior
172049cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // of the feature is now quite different and is being presented to
172149cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // the user in a new way as "adaptive brightness".
172249cb613c993a5fecf11d7ee6198068315762814eJeff Brown            db.beginTransaction();
172349cb613c993a5fecf11d7ee6198068315762814eJeff Brown            SQLiteStatement stmt = null;
172449cb613c993a5fecf11d7ee6198068315762814eJeff Brown            try {
172549cb613c993a5fecf11d7ee6198068315762814eJeff Brown                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
172649cb613c993a5fecf11d7ee6198068315762814eJeff Brown                        + " VALUES(?,?);");
172749cb613c993a5fecf11d7ee6198068315762814eJeff Brown                loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
172849cb613c993a5fecf11d7ee6198068315762814eJeff Brown                        R.bool.def_screen_brightness_automatic_mode);
172949cb613c993a5fecf11d7ee6198068315762814eJeff Brown                db.setTransactionSuccessful();
173049cb613c993a5fecf11d7ee6198068315762814eJeff Brown            } finally {
173149cb613c993a5fecf11d7ee6198068315762814eJeff Brown                db.endTransaction();
173249cb613c993a5fecf11d7ee6198068315762814eJeff Brown                if (stmt != null) stmt.close();
173349cb613c993a5fecf11d7ee6198068315762814eJeff Brown            }
173449cb613c993a5fecf11d7ee6198068315762814eJeff Brown            upgradeVersion = 108;
173549cb613c993a5fecf11d7ee6198068315762814eJeff Brown        }
173649cb613c993a5fecf11d7ee6198068315762814eJeff Brown
1737cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren        if (upgradeVersion < 109) {
1738cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            db.beginTransaction();
1739cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            SQLiteStatement stmt = null;
1740cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            try {
1741cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1742cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        + " VALUES(?,?);");
1743cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
1744cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        R.bool.def_lock_screen_allow_private_notifications);
1745cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                db.setTransactionSuccessful();
1746cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            } finally {
1747cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                db.endTransaction();
1748cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                if (stmt != null) stmt.close();
1749cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            }
1750cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            upgradeVersion = 109;
1751cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren        }
1752cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren
17532c830a2905b07639984499529f9a19aeb779a539Tyler Gunn        if (upgradeVersion < 110) {
17542c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // The SIP_CALL_OPTIONS value SIP_ASK_EACH_TIME is being deprecated.
17552c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // If the SIP_CALL_OPTIONS setting is set to SIP_ASK_EACH_TIME, default to
17562c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // SIP_ADDRESS_ONLY.
17572c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            db.beginTransaction();
17582c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            SQLiteStatement stmt = null;
17592c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            try {
17602c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt = db.compileStatement("UPDATE system SET value = ? " +
17612c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                        "WHERE name = ? AND value = ?;");
17622c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(1, Settings.System.SIP_ADDRESS_ONLY);
17632c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(2, Settings.System.SIP_CALL_OPTIONS);
17642c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(3, Settings.System.SIP_ASK_ME_EACH_TIME);
17652c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.execute();
17662c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                db.setTransactionSuccessful();
17672c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            } finally {
17682c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                db.endTransaction();
17692c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                if (stmt != null) stmt.close();
17702c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            }
17712c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            upgradeVersion = 110;
17722c830a2905b07639984499529f9a19aeb779a539Tyler Gunn        }
17732c830a2905b07639984499529f9a19aeb779a539Tyler Gunn
17747d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock        if (upgradeVersion < 111) {
17757d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            // reset ringer mode, so it doesn't force zen mode to follow
17767d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            if (mUserHandle == UserHandle.USER_OWNER) {
17777d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                db.beginTransaction();
17787d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                SQLiteStatement stmt = null;
17797d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                try {
17807d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
17817d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                            + " VALUES(?,?);");
17827d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    loadSetting(stmt, Settings.Global.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
17837d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    db.setTransactionSuccessful();
17847d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                } finally {
17857d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    db.endTransaction();
17867d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    if (stmt != null) stmt.close();
17877d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                }
17887d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            }
17897d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            upgradeVersion = 111;
17907d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock        }
17917d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock
1792550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet        if (upgradeVersion < 112) {
1793550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet            if (mUserHandle == UserHandle.USER_OWNER) {
1794550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // When device name was added, we went with Manufacturer + Model, device name should
1795550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // actually be Model only.
1796550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // Update device name to Model if it wasn't modified by user.
1797550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                db.beginTransaction();
1798550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                SQLiteStatement stmt = null;
1799550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                try {
1800550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt = db.compileStatement("UPDATE global SET value = ? "
1801550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                        + " WHERE name = ? AND value = ?");
1802550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(1, getDefaultDeviceName()); // new default device name
1803550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(2, Settings.Global.DEVICE_NAME);
1804550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(3, getOldDefaultDeviceName()); // old default device name
1805550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.execute();
1806550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    db.setTransactionSuccessful();
1807550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                } finally {
1808550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    db.endTransaction();
1809550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    if (stmt != null) stmt.close();
1810550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                }
1811550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet            }
1812550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet            upgradeVersion = 112;
1813550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet        }
1814550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet
181505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown        if (upgradeVersion < 113) {
181605af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            db.beginTransaction();
181705af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            SQLiteStatement stmt = null;
181805af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            try {
181905af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
182005af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                        + " VALUES(?,?);");
182105af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
182205af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                        R.integer.def_sleep_timeout);
182305af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                db.setTransactionSuccessful();
182405af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            } finally {
182505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                db.endTransaction();
182605af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                if (stmt != null) stmt.close();
182705af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            }
182805af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            upgradeVersion = 113;
182905af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown        }
183005af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown
18310499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com        if (upgradeVersion < 114) {
18320499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            db.beginTransaction();
18330499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            SQLiteStatement stmt = null;
18340499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            try {
18350499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
18360499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                        + " VALUES(?,?);");
18370499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                loadSetting(stmt, Settings.Global.VOLTE_VT_ENABLED, ImsConfig.FeatureValueConstants.ON);
18380499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                db.setTransactionSuccessful();
18390499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            } finally {
18400499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                db.endTransaction();
18410499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com                if (stmt != null) stmt.close();
18420499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            }
18430499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            upgradeVersion = 114;
18440499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com        }
18451c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        // *** Remember to update DATABASE_VERSION above!
18461c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
18471c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion != currentVersion) {
184854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
184954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    + ", must wipe the settings provider");
185006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            db.execSQL("DROP TABLE IF EXISTS global");
185106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            db.execSQL("DROP TABLE IF EXISTS globalIndex1");
185254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS system");
185354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS systemIndex1");
1854f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS secure");
1855f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS secureIndex1");
185654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS gservices");
185754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
185854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
185954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bookmarks");
186054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
186154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
186254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS favorites");
186354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            onCreate(db);
18646176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
18656176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            // Added for diagnosing settings.db wipes after the fact
18666176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion;
18676176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            db.execSQL("INSERT INTO secure(name,value) values('" +
18686176677e01964cb5751ff217c091571ce6a8b5fbJim Miller                    "wiped_db_reason" + "','" + wipeReason + "');");
186954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
187054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
187154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1872a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate    private String[] hashsetToStringArray(HashSet<String> set) {
1873a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate        String[] array = new String[set.size()];
1874a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate        return set.toArray(array);
1875a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate    }
1876a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate
187706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void moveSettingsToNewTable(SQLiteDatabase db,
187806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            String sourceTable, String destTable,
18799219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            String[] settingsToMove, boolean doIgnore) {
188006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // Copy settings values from the source table to the dest, and remove from the source
1881156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement insertStmt = null;
1882156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement deleteStmt = null;
1883156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1884156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        db.beginTransaction();
1885156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        try {
18869219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            insertStmt = db.compileStatement("INSERT "
18879219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate                    + (doIgnore ? " OR IGNORE " : "")
18889219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate                    + " INTO " + destTable + " (name,value) SELECT name,value FROM "
188906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    + sourceTable + " WHERE name=?");
189006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            deleteStmt = db.compileStatement("DELETE FROM " + sourceTable + " WHERE name=?");
1891156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1892156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            for (String setting : settingsToMove) {
1893156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.bindString(1, setting);
1894156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.execute();
1895156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1896156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.bindString(1, setting);
1897156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.execute();
1898156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1899156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.setTransactionSuccessful();
1900156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        } finally {
1901156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.endTransaction();
1902156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (insertStmt != null) {
1903156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.close();
1904156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1905156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (deleteStmt != null) {
1906156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.close();
1907156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
1908156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        }
1909156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani    }
1910156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
19110ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    /**
19120ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     * Move any settings with the given prefixes from the source table to the
19130ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     * destination table.
19140ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     */
19150ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    private void movePrefixedSettingsToNewTable(
19160ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            SQLiteDatabase db, String sourceTable, String destTable, String[] prefixesToMove) {
19170ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        SQLiteStatement insertStmt = null;
19180ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        SQLiteStatement deleteStmt = null;
19190ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
19200ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        db.beginTransaction();
19210ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        try {
19220ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            insertStmt = db.compileStatement("INSERT INTO " + destTable
19230ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    + " (name,value) SELECT name,value FROM " + sourceTable
19240ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    + " WHERE substr(name,0,?)=?");
19250ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            deleteStmt = db.compileStatement(
19260ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    "DELETE FROM " + sourceTable + " WHERE substr(name,0,?)=?");
19270ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
19280ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            for (String prefix : prefixesToMove) {
19290ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.bindLong(1, prefix.length() + 1);
19300ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.bindString(2, prefix);
19310ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.execute();
19320ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
19330ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.bindLong(1, prefix.length() + 1);
19340ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.bindString(2, prefix);
19350ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.execute();
19360ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
19370ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            db.setTransactionSuccessful();
19380ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        } finally {
19390ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            db.endTransaction();
19400ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            if (insertStmt != null) {
19410ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.close();
19420ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
19430ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            if (deleteStmt != null) {
19440ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.close();
19450ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
19460ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        }
19470ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    }
19480ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
194954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void upgradeLockPatternLocation(SQLiteDatabase db) {
195006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        Cursor c = db.query(TABLE_SYSTEM, new String[] {"_id", "value"}, "name='lock_pattern'",
195154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                null, null, null, null);
195254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c.getCount() > 0) {
195354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.moveToFirst();
195454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String lockPattern = c.getString(1);
195554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!TextUtils.isEmpty(lockPattern)) {
195654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Convert lock pattern
195754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
195831f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller                    LockPatternUtils lpu = new LockPatternUtils(mContext);
19599bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                    List<LockPatternView.Cell> cellPattern =
196054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            LockPatternUtils.stringToPattern(lockPattern);
196154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    lpu.saveLockPattern(cellPattern);
196254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (IllegalArgumentException e) {
196354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    // Don't want corrupted lock pattern to hang the reboot process
196454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
196554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
196654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
196706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            db.delete(TABLE_SYSTEM, "name='lock_pattern'", null);
196854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
196954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
197054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
197154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
197254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1973b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) {
1974b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        // See if the timeout is -1 (for "Never").
197506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        Cursor c = db.query(TABLE_SYSTEM, new String[] { "_id", "value" }, "name=? AND value=?",
1976b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                new String[] { Settings.System.SCREEN_OFF_TIMEOUT, "-1" },
1977b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                null, null, null);
1978b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
1979b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        SQLiteStatement stmt = null;
1980b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (c.getCount() > 0) {
1981b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
1982b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
1983b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
1984b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                        + " VALUES(?,?);");
19853c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
1986b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                // Set the timeout to 30 minutes in milliseconds
1987cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
1988cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                        Integer.toString(30 * 60 * 1000));
1989b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
1990b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                if (stmt != null) stmt.close();
1991b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
1992b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        } else {
1993b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
1994b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
1995b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    }
1996b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
1997398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    private void upgradeVibrateSettingFromNone(SQLiteDatabase db) {
1998398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0);
1999398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // If the ringer vibrate value is invalid, set it to the default
2000398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) {
2001398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            vibrateSetting = AudioService.getValueForVibrateSetting(0,
2002398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
2003398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
2004398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // Apply the same setting to the notification vibrate value
2005398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        vibrateSetting = AudioService.getValueForVibrateSetting(vibrateSetting,
2006398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting);
2007398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
2008398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        SQLiteStatement stmt = null;
2009398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        try {
2010398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
2011398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    + " VALUES(?,?);");
2012398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrateSetting);
2013398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        } finally {
2014398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            if (stmt != null)
2015398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                stmt.close();
2016398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
2017398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    }
2018398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
201979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    private void upgradeScreenTimeout(SQLiteDatabase db) {
202079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        // Change screen timeout to current default
202179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        db.beginTransaction();
202279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        SQLiteStatement stmt = null;
202379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        try {
202479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
202579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    + " VALUES(?,?);");
202679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
202779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    R.integer.def_screen_off_timeout);
202879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.setTransactionSuccessful();
202979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        } finally {
203079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.endTransaction();
203179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            if (stmt != null)
203279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                stmt.close();
203379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
203479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    }
203579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
2036f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    private void upgradeAutoBrightness(SQLiteDatabase db) {
2037f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        db.beginTransaction();
2038f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        try {
2039f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            String value =
2040f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    mContext.getResources().getBoolean(
2041f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
2042f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.execSQL("INSERT OR REPLACE INTO system(name,value) values('" +
2043f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
2044f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.setTransactionSuccessful();
2045f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        } finally {
2046f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.endTransaction();
2047f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
2048f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    }
2049f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
205054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
205154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmarked shortcuts from an xml file.
205254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
205354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
205454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
20556651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown    private void loadBookmarks(SQLiteDatabase db) {
205654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ContentValues values = new ContentValues();
205754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
205854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        PackageManager packageManager = mContext.getPackageManager();
2059f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy        try {
2060f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks);
206154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlUtils.beginDocument(parser, "bookmarks");
206254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2063f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            final int depth = parser.getDepth();
2064f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            int type;
2065f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2066f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            while (((type = parser.next()) != XmlPullParser.END_TAG ||
2067f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
2068f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2069f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                if (type != XmlPullParser.START_TAG) {
2070f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    continue;
2071f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                }
207254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
207354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String name = parser.getName();
207454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!"bookmark".equals(name)) {
207554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
207654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
207754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
207854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String pkg = parser.getAttributeValue(null, "package");
207954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String cls = parser.getAttributeValue(null, "class");
208054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String shortcutStr = parser.getAttributeValue(null, "shortcut");
20816651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                String category = parser.getAttributeValue(null, "category");
2082f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2083585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                int shortcutValue = shortcutStr.charAt(0);
208454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (TextUtils.isEmpty(shortcutStr)) {
208554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
20866651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
208754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
2088f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
20896651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final Intent intent;
20906651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final String title;
20916651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                if (pkg != null && cls != null) {
20926651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ActivityInfo info = null;
20936651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ComponentName cn = new ComponentName(pkg, cls);
2094f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    try {
2095f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                        info = packageManager.getActivityInfo(cn, 0);
20966651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    } catch (PackageManager.NameNotFoundException e) {
20976651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        String[] packages = packageManager.canonicalToCurrentPackageNames(
20986651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                                new String[] { pkg });
20996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        cn = new ComponentName(packages[0], cls);
21006651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        try {
21016651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            info = packageManager.getActivityInfo(cn, 0);
21026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        } catch (PackageManager.NameNotFoundException e1) {
21036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
21046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            continue;
21056651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        }
2106f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    }
21076651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
21086651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent = new Intent(Intent.ACTION_MAIN, null);
21096651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
211054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setComponent(cn);
21116651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = info.loadLabel(packageManager).toString();
21126651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else if (category != null) {
2113f5b8671c340f189c50b41c53622f979b6d5e0a57Dianne Hackborn                    intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category);
21146651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = "";
21156651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else {
21166651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutStr
21176651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            + ": missing package/class or category attributes");
21186651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
211954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
21206651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
21216651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
21226651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.INTENT, intent.toUri(0));
21236651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.TITLE, title);
21246651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
21256651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.delete("bookmarks", "shortcut = ?",
21266651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        new String[] { Integer.toString(shortcutValue) });
21276651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.insert("bookmarks", null, values);
212854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
212954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (XmlPullParserException e) {
213054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
213154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (IOException e) {
213254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
213354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
213454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
213554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
213654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
213754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default volume levels. It is actually inserting the index of
213854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * the volume array for each of the volume controls.
213954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
214054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db the database to insert the volume levels into
214154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
214254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVolumeLevels(SQLiteDatabase db) {
214389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
214489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
214589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
214689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
21473c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
214889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_MUSIC,
214989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
215089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_RING,
215189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]);
215289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
215389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
215489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
215589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
215689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_VOICE,
215789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
215889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_ALARM,
215989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]);
216089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
216189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
216289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_NOTIFICATION,
216389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]);
216489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
216589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
216689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_BLUETOOTH_SCO,
216789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
21683c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
2169c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // By default:
2170c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification, system and music streams are affected by ringer mode
2171c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on non voice capable devices (tablets)
2172c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification and system streams are affected by ringer mode
2173c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on voice capable devices (phones)
2174c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
2175c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_NOTIFICATION) |
2176c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM) |
2177c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
2178c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            if (!mContext.getResources().getBoolean(
2179c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    com.android.internal.R.bool.config_voice_capable)) {
2180c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
2181c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            }
218289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
2183c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    ringerModeAffectedStreams);
2184c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
218589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
218689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    ((1 << AudioManager.STREAM_MUSIC) |
218789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_RING) |
218889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_NOTIFICATION) |
218989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                     (1 << AudioManager.STREAM_SYSTEM)));
219089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
219189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
219289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
21933c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
21943c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        loadVibrateWhenRingingSetting(db);
219554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
219654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
219754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
219854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (deleteOld) {
219954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
220054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
22019bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
220289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
220389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
220489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
220589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
22063c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
22075cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Vibrate on by default for ringer, on for notification
220889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            int vibrate = 0;
220989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            vibrate = AudioService.getValueForVibrateSetting(vibrate,
22105cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_NOTIFICATION,
22115cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_SETTING_ONLY_SILENT);
22128932020f542ae6dd4750fa823bbf2d2bcf504267Joe Onorato            vibrate |= AudioService.getValueForVibrateSetting(vibrate,
22135cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
221489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
221589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
221689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
221789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
221854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
221954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22203c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    private void loadVibrateWhenRingingSetting(SQLiteDatabase db) {
22213c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // The default should be off. VIBRATE_SETTING_ONLY_SILENT should also be ignored here.
22223c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // Phone app should separately check whether AudioManager#getRingerMode() returns
22233c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // RINGER_MODE_VIBRATE, with which the device should vibrate anyway.
22243c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON,
22253c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                AudioManager.VIBRATE_SETTING_OFF);
22263c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        boolean vibrateWhenRinging = ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_ON);
22273c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
22283c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        SQLiteStatement stmt = null;
22293c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        try {
22303c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
22313c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                    + " VALUES(?,?);");
22323c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadSetting(stmt, Settings.System.VIBRATE_WHEN_RINGING, vibrateWhenRinging ? 1 : 0);
22333c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        } finally {
22343c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            if (stmt != null) stmt.close();
22353c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
22363c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    }
22373c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
223854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSettings(SQLiteDatabase db) {
2239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSystemSettings(db);
22409bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSecureSettings(db);
224106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // The global table only exists for the 'owner' user
224206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        if (mUserHandle == UserHandle.USER_OWNER) {
224306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadGlobalSettings(db);
224406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
2245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
22469bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
2247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSystemSettings(SQLiteDatabase db) {
224889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
224989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
225089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
225189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
22523c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
225389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
225489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_dim_screen);
225589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
225689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_off_timeout);
22573c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
225889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default cdma DTMF type
225989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
22603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
226189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default hearing aid
226289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.HEARING_AID, 0);
22633c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
226489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default tty mode
226589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.TTY_MODE, 0);
22663c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
226789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
226889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_brightness);
22693c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
227089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
227189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_screen_brightness_automatic_mode);
22723c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
227389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultAnimationSettings(stmt);
22743c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
227589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
227689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_accelerometer_rotation);
22773c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
227889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultHapticSettings(stmt);
22793c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
228089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
228189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_notification_pulse);
228242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
228389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadUISoundEffectsSettings(stmt);
228442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
22851a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown            loadIntegerSetting(stmt, Settings.System.POINTER_SPEED,
22861a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown                    R.integer.def_pointer_speed);
228789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
228889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
228989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
2290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
22919bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
22920e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    private void loadUISoundEffectsSettings(SQLiteStatement stmt) {
229342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING,
229442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_dtmf_tones_enabled);
229542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED,
229642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_sound_effects_enabled);
229742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
229842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_haptic_feedback);
22990e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
23000e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadIntegerSetting(stmt, Settings.System.LOCKSCREEN_SOUNDS_ENABLED,
23010e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.integer.def_lockscreen_sounds_enabled);
23020e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    }
23030e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_animation_scale, 1);
23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_transition_scale, 1);
23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
23109bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
2311075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    private void loadDefaultHapticSettings(SQLiteStatement stmt) {
2312075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
2313075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                R.bool.def_haptic_feedback);
2314075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    }
2315075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
2316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSecureSettings(SQLiteDatabase db) {
231789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
231889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
231989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
232089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
23213c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
232289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
232389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.string.def_location_providers_allowed);
23243c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
232589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
232689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (!TextUtils.isEmpty(wifiWatchList)) {
232789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
232889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            }
23293c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
233089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
233189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // persistent system property instead.
233289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
23333c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
233489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Allow mock locations default, based on build
233589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
233689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
23373c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
233889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSecure35Settings(stmt);
23393c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
234089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
234189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_play_notification_snd);
23423c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
234389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
234489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_autostart);
23453c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
234689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
234789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_prompt);
23483c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
234989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
235089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_notify_enabled);
2351585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
2352585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
2353585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.bool.def_accessibility_script_injection);
2354585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
2355585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
2356585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.string.def_accessibility_web_content_key_bindings);
2357d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook
235854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
235954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                    R.integer.def_long_press_timeout_millis);
2360a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
2361a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
2362a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                    R.bool.def_touch_exploration_enabled);
236355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
236455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
236555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                    R.bool.def_accessibility_speak_password);
23663ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
23673ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
23683ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                    R.string.def_accessibility_screen_reader_url);
236986aeb06635ef8c7f3fb1b4a935d5e8da819e2a88Mike Lockwood
2370d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {
2371d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");
2372d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            } else {
2373d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
2374d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                        R.bool.def_lockscreen_disabled);
2375d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            }
23762395527c9bb1cdc3bcd3dfcbc8b72b90ed3e7080Mike Lockwood
2377634471edc409f00f38633e334cd6853954a2b093John Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
2378ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsEnabledByDefault);
2379634471edc409f00f38633e334cd6853954a2b093John Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
2380ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
23811a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
2382ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
23831a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
2384ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.string.config_dreamsDefaultComponent);
23851a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
2386ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.string.config_dreamsDefaultComponent);
23871cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
23881cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
23891cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.bool.def_accessibility_display_magnification_enabled);
23901cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
23911cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
23921cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.fraction.def_accessibility_display_magnification_scale, 1);
23931cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
23941cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadBooleanSetting(stmt,
23951cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
23961cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.bool.def_accessibility_display_magnification_auto_update);
23977f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock
23987f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
23997f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    R.bool.def_user_setup_complete);
2400c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood
2401c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood            loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
2402c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood                        R.string.def_immersive_mode_confirmations);
2403c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood
2404aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
2405aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    R.bool.def_install_non_market_apps);
2406aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate
2407a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
2408a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                    R.bool.def_wake_gesture_enabled);
2409a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
241052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            loadIntegerSetting(stmt, Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
241152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    R.integer.def_lock_screen_show_notifications);
241252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler
2413cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
2414cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                    R.bool.def_lock_screen_allow_private_notifications);
2415cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren
241605af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
241705af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                    R.integer.def_sleep_timeout);
241889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
241989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
242154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
242254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2423cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    private void loadSecure35Settings(SQLiteStatement stmt) {
2424cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
2425cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.bool.def_backup_enabled);
242631f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
2427cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
2428cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.string.def_backup_transport);
2429cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    }
24306176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
243106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void loadGlobalSettings(SQLiteDatabase db) {
243206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        SQLiteStatement stmt = null;
243306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        try {
243406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
243506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    + " VALUES(?,?);");
243606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
243706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // --- Previously in 'system'
243806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,
243906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_airplane_mode_on);
244006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
244106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
244206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.string.def_airplane_mode_radios);
244306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
244406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
244506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.string.airplane_mode_toggleable_radios);
244606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
244706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED,
244806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.assisted_gps_enabled);
244906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
245006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AUTO_TIME,
245106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_auto_time); // Sync time to NITZ
245206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
245306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AUTO_TIME_ZONE,
245406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_auto_time_zone); // Sync timezone to NITZ
245506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
245606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
245706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    ("1".equals(SystemProperties.get("ro.kernel.qemu")) ||
245806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        mContext.getResources().getBoolean(R.bool.def_stay_on_while_plugged_in))
245906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                     ? 1 : 0);
246006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
246106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadIntegerSetting(stmt, Settings.Global.WIFI_SLEEP_POLICY,
246206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_wifi_sleep_policy);
246306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
246455b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            loadSetting(stmt, Settings.Global.MODE_RINGER,
246555b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    AudioManager.RINGER_MODE_NORMAL);
246655b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
246706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // --- Previously in 'secure'
24686f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
24696f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_package_verifier_enable);
24706f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
24716f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.WIFI_ON,
24726f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_wifi_on);
24736f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
24746f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
24756f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_networks_available_notification_on);
24766f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
247706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.BLUETOOTH_ON,
247806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_bluetooth_on);
247906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
248006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Enable or disable Cell Broadcast SMS
248106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.CDMA_CELL_BROADCAST_SMS,
248206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
248306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
248406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Data roaming default, based on build
248506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.DATA_ROAMING,
248606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    "true".equalsIgnoreCase(
248706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                            SystemProperties.get("ro.com.android.dataroaming",
248806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                                    "false")) ? 1 : 0);
248906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
249006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED,
249106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_device_provisioned);
249206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
249306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final int maxBytes = mContext.getResources().getInteger(
249406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_download_manager_max_bytes_over_mobile);
249506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (maxBytes > 0) {
249606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                loadSetting(stmt, Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
249706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        Integer.toString(maxBytes));
249806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
249906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
250006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final int recommendedMaxBytes = mContext.getResources().getInteger(
250106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_download_manager_recommended_max_bytes_over_mobile);
250206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (recommendedMaxBytes > 0) {
250306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                loadSetting(stmt, Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
250406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        Integer.toString(recommendedMaxBytes));
250506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
250606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
250706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Mobile Data default, based on build
250806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.MOBILE_DATA,
250906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    "true".equalsIgnoreCase(
251006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                            SystemProperties.get("ro.com.android.mobiledata",
251106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                                    "true")) ? 1 : 0);
251206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
251306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.NETSTATS_ENABLED,
251406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_netstats_enabled);
251506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
251606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED,
251706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_usb_mass_storage_enabled);
251806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
251906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadIntegerSetting(stmt, Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
252006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_max_dhcp_retries);
252106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
252289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            loadBooleanSetting(stmt, Settings.Global.WIFI_DISPLAY_ON,
252389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown                    R.bool.def_wifi_display_on);
252489d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
2525b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller            loadStringSetting(stmt, Settings.Global.LOCK_SOUND,
2526b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller                    R.string.def_lock_sound);
2527b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller            loadStringSetting(stmt, Settings.Global.UNLOCK_SOUND,
2528b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller                    R.string.def_unlock_sound);
252949e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
253049e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    R.string.def_trusted_sound);
2531531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadIntegerSetting(stmt, Settings.Global.POWER_SOUNDS_ENABLED,
2532531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.integer.def_power_sounds_enabled);
2533531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.LOW_BATTERY_SOUND,
2534531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_low_battery_sound);
2535531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadIntegerSetting(stmt, Settings.Global.DOCK_SOUNDS_ENABLED,
2536531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.integer.def_dock_sounds_enabled);
2537531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.DESK_DOCK_SOUND,
2538531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_desk_dock_sound);
2539531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.DESK_UNDOCK_SOUND,
2540531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_desk_undock_sound);
2541531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.CAR_DOCK_SOUND,
2542531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_car_dock_sound);
2543531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.CAR_UNDOCK_SOUND,
2544531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_car_undock_sound);
254584e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
254684e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown                    R.string.def_wireless_charging_started_sound);
2547b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller
2548729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk            loadIntegerSetting(stmt, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
2549729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk                    R.integer.def_dock_audio_media_enabled);
2550729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk
25516e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
25526e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
25536e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    PackageHelper.APP_INSTALL_AUTO);
25546e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
25556e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            // Set default cdma emergency tone
25566e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.EMERGENCY_TONE, 0);
25576e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
25586e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            // Set default cdma call auto retry
25596e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.CALL_AUTO_RETRY, 0);
25606e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
256197ecc9ec24056259495d2de4d10a4b312d83a57aNaveen Kalla            // Set the preferred network mode to target desired value or Default
256297ecc9ec24056259495d2de4d10a4b312d83a57aNaveen Kalla            // value defined in RILConstants
25636e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            int type;
256497ecc9ec24056259495d2de4d10a4b312d83a57aNaveen Kalla            type = SystemProperties.getInt("ro.telephony.default_network",
25656e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                        RILConstants.PREFERRED_NETWORK_MODE);
25666e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, type);
25676e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
2568b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            // Set the preferred cdma subscription source to target desired value or default
2569b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            // value defined in CdmaSubscriptionSourceManager
2570b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            type = SystemProperties.getInt("ro.telephony.default_cdma_sub",
2571b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla                        CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION);
2572b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            loadSetting(stmt, Settings.Global.CDMA_SUBSCRIPTION_MODE, type);
2573b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla
2574dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
2575dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    R.integer.def_low_battery_sound_timeout);
2576dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler
25772c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist            loadIntegerSetting(stmt, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
25782c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist                    R.integer.def_wifi_scan_always_available);
25792c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist
25805242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
25815242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    R.integer.def_heads_up_enabled);
25825242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren
2583147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
2584147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
25851e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani            loadBooleanSetting(stmt, Settings.Global.GUEST_USER_ENABLED,
25861e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani                    R.bool.def_guest_user_enabled);
25870499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            loadSetting(stmt, Settings.Global.VOLTE_VT_ENABLED, ImsConfig.FeatureValueConstants.ON);
258806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // --- New global settings start here
258906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        } finally {
259006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (stmt != null) stmt.close();
259106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
259206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
259306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
259454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
259554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(1, key);
259654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(2, value.toString());
259754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.execute();
259854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
25999bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key, mContext.getResources().getString(resid));
26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26039bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mContext.getResources().getBoolean(resid) ? "1" : "0");
26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26089bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer.toString(mContext.getResources().getInteger(resid)));
26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26139bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Float.toString(mContext.getResources().getFraction(resid, base, base)));
26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
26185cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
26195cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    private int getIntValueFromSystem(SQLiteDatabase db, String name, int defaultValue) {
262006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        return getIntValueFromTable(db, TABLE_SYSTEM, name, defaultValue);
26218631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
26228631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
26238631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private int getIntValueFromTable(SQLiteDatabase db, String table, String name,
26248631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            int defaultValue) {
26258631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        String value = getStringValueFromTable(db, table, name, null);
26268631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return (value != null) ? Integer.parseInt(value) : defaultValue;
26278631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
26288631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
26298631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private String getStringValueFromTable(SQLiteDatabase db, String table, String name,
26308631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            String defaultValue) {
26315cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        Cursor c = null;
26325cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        try {
26338631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            c = db.query(table, new String[] { Settings.System.VALUE }, "name='" + name + "'",
26345cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    null, null, null, null);
26355cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null && c.moveToFirst()) {
26365cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                String val = c.getString(0);
26378631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                return val == null ? defaultValue : val;
26385cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            }
26395cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        } finally {
26405cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null) c.close();
26415cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        }
26428631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return defaultValue;
26435cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    }
2644147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
2645550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet    private String getOldDefaultDeviceName() {
2646ad59c43072a3e053eecb2cca831488dc49a3af33Jeff Sharkey        return mContext.getResources().getString(R.string.def_device_name,
2647550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                Build.MANUFACTURER, Build.MODEL);
2648550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet    }
2649550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet
2650147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet    private String getDefaultDeviceName() {
2651ad59c43072a3e053eecb2cca831488dc49a3af33Jeff Sharkey        return mContext.getResources().getString(R.string.def_device_name_simple, Build.MODEL);
2652147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet    }
265354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
2654