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;
316156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlockimport android.media.AudioSystem;
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioManager;
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;
61683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport java.util.Set;
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
64503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * Legacy settings database helper class for {@link SettingsProvider}.
65503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown *
66503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * IMPORTANT: Do not add any more upgrade steps here as the global,
67503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * secure, and system settings are no longer stored in a database
68503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * but are kept in memory and persisted to XML.
69503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown *
70503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * See: SettingsProvider.UpgradeController#onUpgradeLocked
71503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown *
72503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown * @deprecated The implementation is frozen.  Do not add any new code to this class!
7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
74503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown@Deprecated
75503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brownclass DatabaseHelper extends SQLiteOpenHelper {
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String TAG = "SettingsProvider";
7754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DATABASE_NAME = "settings.db";
78f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller
79f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // Please, please please. If you update the database version, check to make sure the
80f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
81f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // is properly propagated through your change.  Not doing so will result in a loss of user
82f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // settings.
838c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock    private static final int DATABASE_VERSION = 118;
849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private Context mContext;
8606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private int mUserHandle;
8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8824117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    private static final HashSet<String> mValidTables = new HashSet<String>();
8924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
90683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    private static final String DATABASE_JOURNAL_SUFFIX = "-journal";
91683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    private static final String DATABASE_BACKUP_SUFFIX = "-backup";
92683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
9306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_SYSTEM = "system";
9406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_SECURE = "secure";
9506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private static final String TABLE_GLOBAL = "global";
9606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
9724117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    static {
9806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_SYSTEM);
9906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_SECURE);
10006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mValidTables.add(TABLE_GLOBAL);
10124117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
10224117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        // These are old.
103683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        mValidTables.add("bluetooth_devices");
104683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        mValidTables.add("bookmarks");
10524117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("favorites");
10624117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        mValidTables.add("old_favorites");
107683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        mValidTables.add("android_metadata");
10824117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    }
10924117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
11006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    static String dbNameForUser(final int userHandle) {
11106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // The owner gets the unadorned db name;
11243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen        if (userHandle == UserHandle.USER_SYSTEM) {
11306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            return DATABASE_NAME;
11406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        } else {
11506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Place the database in the user-specific data tree so that it's
11606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // cleaned up automatically when the user is deleted.
11706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            File databaseFile = new File(
11806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    Environment.getUserSystemDirectory(userHandle), DATABASE_NAME);
119497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            // If databaseFile doesn't exist, database can be kept in memory. It's safe because the
120497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            // database will be migrated and disposed of immediately after onCreate finishes
121497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            if (!databaseFile.exists()) {
122497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov                Log.i(TAG, "No previous database file exists - running in in-memory mode");
123497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov                return null;
124497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            }
12506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            return databaseFile.getPath();
12606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
12706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
12806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
12906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    public DatabaseHelper(Context context, int userHandle) {
13006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        super(context, dbNameForUser(userHandle), null, DATABASE_VERSION);
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mContext = context;
13206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        mUserHandle = userHandle;
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13524117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    public static boolean isValidTable(String name) {
13624117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn        return mValidTables.contains(name);
13724117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn    }
13824117ce3ae32c40798d2d9bda80675814f76730dDianne Hackborn
139497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov    private boolean isInMemory() {
140497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        return getDatabaseName() == null;
141497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov    }
142497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov
143683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    public void dropDatabase() {
144683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        close();
145497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        // No need to remove files if db is in memory
146497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        if (isInMemory()) {
147497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            return;
148497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        }
149683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        File databaseFile = mContext.getDatabasePath(getDatabaseName());
150683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        if (databaseFile.exists()) {
151683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            databaseFile.delete();
152683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        }
153683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        File databaseJournalFile = mContext.getDatabasePath(getDatabaseName()
154683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                + DATABASE_JOURNAL_SUFFIX);
155683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        if (databaseJournalFile.exists()) {
156683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            databaseJournalFile.delete();
157683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        }
158683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    }
159683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
160683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    public void backupDatabase() {
161683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        close();
162497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        // No need to backup files if db is in memory
163497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        if (isInMemory()) {
164497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov            return;
165497b5faba98950ca4bc8cccf6489b61fb95c799fFyodor Kupolov        }
166683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        File databaseFile = mContext.getDatabasePath(getDatabaseName());
167683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        if (!databaseFile.exists()) {
168683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            return;
169683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        }
170683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        File backupFile = mContext.getDatabasePath(getDatabaseName()
171683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                + DATABASE_BACKUP_SUFFIX);
172683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        if (backupFile.exists()) {
173683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            return;
174683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        }
175683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        databaseFile.renameTo(backupFile);
176683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    }
177683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
178f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void createSecureTable(SQLiteDatabase db) {
179f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE TABLE secure (" +
180f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
181f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "name TEXT UNIQUE ON CONFLICT REPLACE," +
182f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "value TEXT" +
183f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                ");");
184f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
185f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1869bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
18706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void createGlobalTable(SQLiteDatabase db) {
18806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        db.execSQL("CREATE TABLE global (" +
18906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
19006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "name TEXT UNIQUE ON CONFLICT REPLACE," +
19106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                "value TEXT" +
19206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                ");");
19306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        db.execSQL("CREATE INDEX globalIndex1 ON global (name);");
19406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
19506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onCreate(SQLiteDatabase db) {
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE system (" +
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT UNIQUE ON CONFLICT REPLACE," +
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "value TEXT" +
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
205f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        createSecureTable(db);
206f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
20743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen        // Only create the global table for the singleton 'owner/system' user
20843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen        if (mUserHandle == UserHandle.USER_SYSTEM) {
20906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            createGlobalTable(db);
21006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
21106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bluetooth_devices (" +
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT," +
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "addr TEXT," +
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "channel INTEGER," +
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "type INTEGER" +
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bookmarks (" +
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "title TEXT," +
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "folder TEXT," +
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "intent TEXT," +
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "shortcut INTEGER," +
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "ordering INTEGER" +
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Populate bookmarks table with initial bookmarks
23313579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        boolean onlyCore = false;
23413579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        try {
23513579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn            onlyCore = IPackageManager.Stub.asInterface(ServiceManager.getService(
23613579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn                    "package")).isOnlyCoreApps();
23713579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        } catch (RemoteException e) {
23813579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        }
23913579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        if (!onlyCore) {
24013579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn            loadBookmarks(db);
24113579ed3305bf89b41a9fa88e1347f0e0769d279Dianne Hackborn        }
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load initial volume levels into DB
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVolumeLevels(db);
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load inital settings values
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSettings(db);
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
25354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + currentVersion);
2549bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
25554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int upgradeVersion = oldVersion;
25654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Pattern for upgrade blocks:
25854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //
25954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
26054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        .. your upgrade logic..
26154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        upgradeVersion = [the DATABASE_VERSION you set]
26254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    }
2639bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 20) {
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /*
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Version 21 is part of the volume control refresh. There is no
26754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * longer a UI-visible for setting notification vibrate on/off (in
26854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * our design), but the functionality still exists. Force the
26954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * notification vibrate to on.
27054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
27154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            loadVibrateSetting(db, true);
27254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
27354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 21;
27454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
2759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
27654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 22) {
27754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 22;
27854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Upgrade the lock gesture storage location and format
27954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeLockPatternLocation(db);
28054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
28154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 23) {
28354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
28454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 23;
28554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
28654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
28754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 23) {
28854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
28954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
29054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
29154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
29254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Shortcuts, applications, folders
29354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
29454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Photo frames, clocks
29504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                db.execSQL(
29604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
29754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Search boxes
29854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
29954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
30054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
30154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
30254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
30354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 24;
30454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
3059bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
30654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 24) {
30754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
30854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
30954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // The value of the constants for preferring wifi or preferring mobile have been
31054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // swapped, so reload the default.
31154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='network_preference'");
31254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
31354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
31454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
31554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
31654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
31754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
31854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 25;
31954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 25) {
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD uri TEXT");
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 26;
331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3329bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 26) {
334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This introduces the new secure settings table.
335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
337f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                createSecureTable(db);
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 27;
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3449bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 27) {
346156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            String[] settingsToMove = {
347f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ADB_ENABLED,
348f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ANDROID_ID,
349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.BLUETOOTH_ON,
350f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DATA_ROAMING,
351f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DEVICE_PROVISIONED,
352f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.HTTP_PROXY,
353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.INSTALL_NON_MARKET_APPS,
354f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOGGING_ID,
356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.NETWORK_PREFERENCE,
357f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_ENABLED,
358f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
359f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
360f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.SETTINGS_CLASSNAME,
361f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USB_MASS_STORAGE_ENABLED,
362f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USE_GOOGLE_MAIL,
363f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
364f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
365f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
366f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_ON,
367f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
368f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
369f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
370f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
371f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
372f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
373f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
374f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ON,
375f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
376f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
377f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
378f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                };
3799219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
380f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 28;
381f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3829bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
383f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 28 || upgradeVersion == 29) {
384f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Note: The upgrade to 28 was flawed since it didn't delete the old
385f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // setting first before inserting. Combining 28 and 29 with the
386f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // fixed version.
387f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
388f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This upgrade adds the STREAM_NOTIFICATION type to the list of
389f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // types affected by ringer modes (silent, vibrate, etc.)
390f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
391f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
392f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
393f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
394f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int newValue = (1 << AudioManager.STREAM_RING)
395f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_NOTIFICATION)
396f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_SYSTEM);
397f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('"
398f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
399f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + String.valueOf(newValue) + "')");
400f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
401f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
402f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
403f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
4049bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
405f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 30;
406f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
4079bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
4089266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        if (upgradeVersion == 30) {
4099266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            /*
4109266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * Upgrade 31 clears the title for all quick launch shortcuts so the
4119266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * activities' titles will be resolved at display time. Also, the
4129266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * folder is changed to '@quicklaunch'.
4139266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             */
4149266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            db.beginTransaction();
4159266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            try {
4169266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
4179266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET title = ''");
4189266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.setTransactionSuccessful();
4199266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            } finally {
4209266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.endTransaction();
4219266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            }
4229266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            upgradeVersion = 31;
4239266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        }
424f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 31) {
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            /*
427ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * Animations are now managed in preferences, and may be
428ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * enabled or disabled based on product resources.
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             */
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            db.beginTransaction();
43189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
43789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " VALUES(?,?);");
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadDefaultAnimationSettings(stmt);
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.setTransactionSuccessful();
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } finally {
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.endTransaction();
44389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 32;
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 32) {
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // The Wi-Fi watchdog SSID list is now seeded with the value of
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // the property ro.com.android.wifi-watchlist
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!TextUtils.isEmpty(wifiWatchList)) {
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.beginTransaction();
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            wifiWatchList + "');");
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.setTransactionSuccessful();
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } finally {
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.endTransaction();
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 33;
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4659bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
4664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        if (upgradeVersion == 33) {
4674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // Set the default zoom controls to: tap-twice to bring up +/-
4684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            db.beginTransaction();
4694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            try {
4704df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
4714df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.setTransactionSuccessful();
4724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            } finally {
4734df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.endTransaction();
4744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            }
4754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            upgradeVersion = 34;
4764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        }
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
478bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        if (upgradeVersion == 34) {
479bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            db.beginTransaction();
48089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
481bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            try {
48289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
483cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                        + " VALUES(?,?);");
484cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                loadSecure35Settings(stmt);
485cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.setTransactionSuccessful();
486cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            } finally {
487cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.endTransaction();
48889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
489cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            }
490f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller            upgradeVersion = 35;
49102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
49202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
49302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // was accidentally done out of order here.
49402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
49502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // and we intentionally do nothing from 35 to 36 now.
49602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 35) {
497575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project            upgradeVersion = 36;
498cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        }
49902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
500a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        if (upgradeVersion == 36) {
501a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent           // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
502a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            // types affected by ringer modes (silent, vibrate, etc.)
503a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            db.beginTransaction();
504a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            try {
505a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("DELETE FROM system WHERE name='"
506a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
507a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                int newValue = (1 << AudioManager.STREAM_RING)
508a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_NOTIFICATION)
509a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM)
510a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
511a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("INSERT INTO system ('name', 'value') values ('"
512a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
513a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + String.valueOf(newValue) + "')");
514a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.setTransactionSuccessful();
515a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            } finally {
516a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.endTransaction();
517a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            }
5184880575bacd9f49d864e8b61efca8cdeb231895cJim Miller            upgradeVersion = 37;
519a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        }
520a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent
521bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        if (upgradeVersion == 37) {
522bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            db.beginTransaction();
52389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
524bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            try {
52589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
526bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        + " VALUES(?,?);");
527bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
528bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        R.string.airplane_mode_toggleable_radios);
529bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.setTransactionSuccessful();
530bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            } finally {
531bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.endTransaction();
53289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
533bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            }
534bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            upgradeVersion = 38;
535bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        }
536bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
53702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 38) {
53802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            db.beginTransaction();
53902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            try {
54002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                String value =
54102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
54202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
543bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                        Settings.Global.ASSISTED_GPS_ENABLED + "','" + value + "');");
54402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.setTransactionSuccessful();
54502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            } finally {
54602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.endTransaction();
54702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            }
54802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
54902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            upgradeVersion = 39;
55002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
55102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
552951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        if (upgradeVersion == 39) {
553f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeAutoBrightness(db);
554951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            upgradeVersion = 40;
555951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        }
556951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
557bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (upgradeVersion == 40) {
558bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            /*
559bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             * All animations are now turned on by default!
560bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             */
561bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            db.beginTransaction();
56289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
563bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            try {
564bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
565bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
566bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
567bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
56889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
569bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + " VALUES(?,?);");
570bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                loadDefaultAnimationSettings(stmt);
571bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.setTransactionSuccessful();
572bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } finally {
573bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.endTransaction();
57489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
575bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
576bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            upgradeVersion = 41;
577bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        }
578bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn
579075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        if (upgradeVersion == 41) {
580075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            /*
581075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             * Initialize newly public haptic feedback setting
582075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             */
583075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            db.beginTransaction();
58489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
585075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            try {
586075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
587075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'");
58889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
589075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + " VALUES(?,?);");
590075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                loadDefaultHapticSettings(stmt);
591075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.setTransactionSuccessful();
592075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            } finally {
593075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.endTransaction();
59489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
595075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            }
596075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            upgradeVersion = 42;
597075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        }
598075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
599ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        if (upgradeVersion == 42) {
600ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            /*
601ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             * Initialize new notification pulse setting
602ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             */
603ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            db.beginTransaction();
60489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
605ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            try {
60689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
607ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        + " VALUES(?,?);");
608ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
609ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        R.bool.def_notification_pulse);
610ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.setTransactionSuccessful();
611ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            } finally {
612ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.endTransaction();
61389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
614ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            }
615ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            upgradeVersion = 43;
616ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        }
617ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani
618484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        if (upgradeVersion == 43) {
619484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            /*
620484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             * This upgrade stores bluetooth volume separately from voice volume
621484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             */
622484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            db.beginTransaction();
62389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
624484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            try {
62589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
626484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        + " VALUES(?,?);");
627484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO,
6286156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                        AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO));
629484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.setTransactionSuccessful();
630484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            } finally {
631484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.endTransaction();
63289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
633484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            }
634484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            upgradeVersion = 44;
635484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        }
636484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent
637aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        if (upgradeVersion == 44) {
638aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            /*
639aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             * Gservices was moved into vendor/google.
640aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             */
641aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP TABLE IF EXISTS gservices");
642aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
643aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            upgradeVersion = 45;
644aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        }
64587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
64687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        if (upgradeVersion == 45) {
64787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat             /*
64887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              * New settings for MountService
64987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              */
65087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            db.beginTransaction();
65187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            try {
65287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
65387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');");
65487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
65587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');");
65687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
65787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_PROMPT + "','1');");
65887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
65987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');");
66087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.setTransactionSuccessful();
66187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            } finally {
66287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.endTransaction();
66387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            }
66487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            upgradeVersion = 46;
66587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        }
66687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
667df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn        if (upgradeVersion == 46) {
668df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            /*
669df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * The password mode constants have changed; reset back to no
670df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * password.
671df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             */
672df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            db.beginTransaction();
673df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            try {
674df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
675df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.setTransactionSuccessful();
676df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            } finally {
677df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.endTransaction();
678df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            }
679df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn           upgradeVersion = 47;
680df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn       }
681df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn
6826176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6839327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        if (upgradeVersion == 47) {
6849327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            /*
6859327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * The password mode constants have changed again; reset back to no
6869327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * password.
6879327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             */
6889327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            db.beginTransaction();
6899327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            try {
6909327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
6919327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.setTransactionSuccessful();
6929327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            } finally {
6939327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.endTransaction();
6949327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            }
6959327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn           upgradeVersion = 48;
6969327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn       }
6976176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6985d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       if (upgradeVersion == 48) {
6995d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           /*
70021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * Default recognition service no longer initialized here,
70121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn            * moved to RecognitionManagerService.
7025d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            */
7035d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           upgradeVersion = 49;
7045d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       }
70531f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
7060e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       if (upgradeVersion == 49) {
7070e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           /*
7080e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            * New settings for new user interface noises.
7090e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            */
7100e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           db.beginTransaction();
71189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori           SQLiteStatement stmt = null;
7120e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           try {
71389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
7140e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                        + " VALUES(?,?);");
7150e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                loadUISoundEffectsSettings(stmt);
7160e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.setTransactionSuccessful();
7170e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            } finally {
7180e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler                db.endTransaction();
71989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
7200e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            }
7210e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
7220e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler           upgradeVersion = 50;
7230e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler       }
7240e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
725f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       if (upgradeVersion == 50) {
726f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           /*
72740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            * Install location no longer initiated here.
728f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor            */
729f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor           upgradeVersion = 51;
730f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor       }
731f1cbfff03ac53be9475f419d16a2e79b6c28a494Oscar Montemayor
732156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       if (upgradeVersion == 51) {
733156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           /* Move the lockscreen related settings to Secure, including some private ones. */
734156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           String[] settingsToMove = {
735156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_ENABLED,
736156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_VISIBLE,
737156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED,
738156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_type",
739156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockoutattemptdeadline",
740156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.patterneverchosen",
741156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lock_pattern_autolock",
742156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.lockedoutpermanently",
743156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                   "lockscreen.password_salt"
744156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           };
7459219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate           moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
746156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani           upgradeVersion = 52;
747156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani       }
748156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
7491c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion == 52) {
7501c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            // new vibration/silent mode settings
7511c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            db.beginTransaction();
75289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            SQLiteStatement stmt = null;
7531c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            try {
75489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                stmt = db.compileStatement("INSERT INTO system(name,value)"
7551c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        + " VALUES(?,?);");
7561c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
7571c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                        R.bool.def_vibrate_in_silent);
7581c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.setTransactionSuccessful();
7591c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            } finally {
7601c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler                db.endTransaction();
76189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                if (stmt != null) stmt.close();
7621c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            }
7631c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
7641c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler            upgradeVersion = 53;
7651c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        }
7663c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
767089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        if (upgradeVersion == 53) {
768089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            /*
76940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             * New settings for set install location UI no longer initiated here.
770089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu             */
771089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu            upgradeVersion = 54;
772089262dc022d87e31eefc536025be6c015c7ebdeSuchi Amalapurapu        }
7731c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler
774b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (upgradeVersion == 54) {
775b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            /*
776b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             * Update the screen timeout value if set to never
777b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani             */
778b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            db.beginTransaction();
779b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
780b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                upgradeScreenTimeoutFromNever(db);
781b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.setTransactionSuccessful();
782b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
783b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                db.endTransaction();
784b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
785b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
786b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            upgradeVersion = 55;
787b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
788b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
78940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        if (upgradeVersion == 55) {
79040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            /* Move the install location settings. */
79140e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            String[] settingsToMove = {
792625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    Global.SET_INSTALL_LOCATION,
793625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    Global.DEFAULT_INSTALL_LOCATION
79440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            };
7959219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false);
79640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            db.beginTransaction();
79740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            SQLiteStatement stmt = null;
79840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            try {
79940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                stmt = db.compileStatement("INSERT INTO system(name,value)"
80040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        + " VALUES(?,?);");
801625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                loadSetting(stmt, Global.SET_INSTALL_LOCATION, 0);
802625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                loadSetting(stmt, Global.DEFAULT_INSTALL_LOCATION,
80340e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                        PackageHelper.APP_INSTALL_AUTO);
80440e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                db.setTransactionSuccessful();
80540e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             } finally {
80640e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 db.endTransaction();
80740e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu                 if (stmt != null) stmt.close();
80840e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu             }
80940e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu            upgradeVersion = 56;
81040e472521a544f26cb6956995788f7c36fff1404Suchi Amalapurapu        }
8116659284d68bb04539891456700c8da2d0bae7d09Jake Hamby
8126659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        if (upgradeVersion == 56) {
8136659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            /*
8146659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             * Add Bluetooth to list of toggleable radios in airplane mode
8156659284d68bb04539891456700c8da2d0bae7d09Jake Hamby             */
8166659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            db.beginTransaction();
8176659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            SQLiteStatement stmt = null;
8186659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            try {
8196659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.execSQL("DELETE FROM system WHERE name='"
8206659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
8216659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
8226659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        + " VALUES(?,?);");
8236659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
8246659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                        R.string.airplane_mode_toggleable_radios);
8256659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.setTransactionSuccessful();
8266659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            } finally {
8276659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                db.endTransaction();
8286659284d68bb04539891456700c8da2d0bae7d09Jake Hamby                if (stmt != null) stmt.close();
8296659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            }
8306659284d68bb04539891456700c8da2d0bae7d09Jake Hamby            upgradeVersion = 57;
8316659284d68bb04539891456700c8da2d0bae7d09Jake Hamby        }
832585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
8335cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Honeycomb changes ************/
8345cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
835585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        if (upgradeVersion == 57) {
836585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            /*
837585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             * New settings to:
838585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  1. Enable injection of accessibility scripts in WebViews.
839585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             *  2. Define the key bindings for traversing web content in WebViews.
840585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov             */
841585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            db.beginTransaction();
842585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            SQLiteStatement stmt = null;
843585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            try {
844585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
845585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
846585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
847585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.bool.def_accessibility_script_injection);
848585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt.close();
849585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
850585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        + " VALUES(?,?);");
851585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
852585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                        R.string.def_accessibility_web_content_key_bindings);
853585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.setTransactionSuccessful();
854585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            } finally {
855585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                db.endTransaction();
856585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                if (stmt != null) stmt.close();
857585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            }
858585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            upgradeVersion = 58;
859585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov        }
860585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
861ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        if (upgradeVersion == 58) {
862ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            /* Add default for new Auto Time Zone */
8635cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            int autoTimeValue = getIntValueFromSystem(db, Settings.System.AUTO_TIME, 0);
864ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            db.beginTransaction();
865ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            SQLiteStatement stmt = null;
866ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            try {
8675cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                stmt = db.compileStatement("INSERT INTO system(name,value)" + " VALUES(?,?);");
8685cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                loadSetting(stmt, Settings.System.AUTO_TIME_ZONE,
8695cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                        autoTimeValue); // Sync timezone to NITZ if auto_time was enabled
870ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.setTransactionSuccessful();
871ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            } finally {
872ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                db.endTransaction();
873ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani                if (stmt != null) stmt.close();
874ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            }
875ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani            upgradeVersion = 59;
876ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani        }
877ad450be78bb99a965b6aeb7cec04f865da59f052Amith Yamasani
878b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        if (upgradeVersion == 59) {
879b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            // Persistence for the rotation lock feature.
880b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            db.beginTransaction();
881b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            SQLiteStatement stmt = null;
882b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            try {
883b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                stmt = db.compileStatement("INSERT INTO system(name,value)"
884b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        + " VALUES(?,?);");
885b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                loadBooleanSetting(stmt, Settings.System.USER_ROTATION,
886b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                        R.integer.def_user_rotation); // should be zero degrees
887b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.setTransactionSuccessful();
888b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            } finally {
889b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                db.endTransaction();
890b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler                if (stmt != null) stmt.close();
891b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            }
892b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler            upgradeVersion = 60;
893b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler        }
894b73617de462579f7c12c25a4c2747c576f00f6a2Daniel Sandler
8950038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        if (upgradeVersion == 60) {
8965cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
8975cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
8985cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
8990038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani            upgradeVersion = 61;
9000038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani        }
9010038931043f8edf9c32645e5caf96f217cef01deAmith Yamasani
90279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        if (upgradeVersion == 61) {
9035cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
9045cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
9055cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeScreenTimeout(db);
90679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            upgradeVersion = 62;
90779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
90879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
909f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        // Change the default for screen auto-brightness mode
910f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        if (upgradeVersion == 62) {
9115cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Don't do this for upgrades from Gingerbread
9125cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Were only required for intra-Honeycomb upgrades for testing
9135cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // upgradeAutoBrightness(db);
914f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            upgradeVersion = 63;
915f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
916f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
91725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent        if (upgradeVersion == 63) {
91825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent            // This upgrade adds the STREAM_MUSIC type to the list of
91925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             // types affected by ringer modes (silent, vibrate, etc.)
92025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             db.beginTransaction();
92125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             try {
92225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("DELETE FROM system WHERE name='"
92325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
92425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 int newValue = (1 << AudioManager.STREAM_RING)
92525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_NOTIFICATION)
92625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM)
92725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_SYSTEM_ENFORCED)
92825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         | (1 << AudioManager.STREAM_MUSIC);
92925101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.execSQL("INSERT INTO system ('name', 'value') values ('"
93025101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
93125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                         + String.valueOf(newValue) + "')");
93225101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.setTransactionSuccessful();
93325101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             } finally {
93425101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent                 db.endTransaction();
93525101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             }
93625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent             upgradeVersion = 64;
93725101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent         }
93825101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent
93954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        if (upgradeVersion == 64) {
94054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            // New setting to configure the long press timeout.
94154d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            db.beginTransaction();
94254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            SQLiteStatement stmt = null;
94354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            try {
94454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
94554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        + " VALUES(?,?);");
94654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
94754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                        R.integer.def_long_press_timeout_millis);
94854d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                stmt.close();
94954d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.setTransactionSuccessful();
95054d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            } finally {
95154d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                db.endTransaction();
95254d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                if (stmt != null) stmt.close();
95354d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            }
95454d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            upgradeVersion = 65;
95554d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov        }
95654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov
9575cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        /************* The following are Ice Cream Sandwich changes ************/
9585cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
959fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        if (upgradeVersion == 65) {
960fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            /*
961fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             * Animations are removed from Settings. Turned on by default
962fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne             */
963fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            db.beginTransaction();
964fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            SQLiteStatement stmt = null;
965fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            try {
966fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
967fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
968fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.execSQL("DELETE FROM system WHERE name='"
969fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
970fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                stmt = db.compileStatement("INSERT INTO system(name,value)"
971fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                        + " VALUES(?,?);");
972fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                loadDefaultAnimationSettings(stmt);
973fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.setTransactionSuccessful();
974fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            } finally {
975fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                db.endTransaction();
976fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne                if (stmt != null) stmt.close();
977fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            }
978fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne            upgradeVersion = 66;
979fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne        }
980fa53d3002fadf8640600c1840962021a821b8baeGilles Debunne
981c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent        if (upgradeVersion == 66) {
98242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set
98342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // according to device voice capability
98442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
98542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
98642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
98742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_NOTIFICATION) |
98842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM) |
98942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                                                (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
99042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                if (!mContext.getResources().getBoolean(
99142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        com.android.internal.R.bool.config_voice_capable)) {
99242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                    ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
99342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                }
99442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
99542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
99642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("INSERT INTO system ('name', 'value') values ('"
99742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
99842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + String.valueOf(ringerModeAffectedStreams) + "')");
99942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
100042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
100142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
100242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
100342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 67;
100442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
1005c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
1006a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        if (upgradeVersion == 67) {
1007a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            // New setting to enable touch exploration.
1008a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            db.beginTransaction();
1009a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            SQLiteStatement stmt = null;
1010a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            try {
1011a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
1012a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        + " VALUES(?,?);");
1013a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
1014a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                        R.bool.def_touch_exploration_enabled);
1015a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                stmt.close();
1016a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.setTransactionSuccessful();
1017a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            } finally {
1018a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                db.endTransaction();
1019a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                if (stmt != null) stmt.close();
1020a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            }
1021a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            upgradeVersion = 68;
1022a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov        }
1023a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
102442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        if (upgradeVersion == 68) {
102542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            // Enable all system sounds by default
102642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            db.beginTransaction();
102742722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            try {
102842722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.execSQL("DELETE FROM system WHERE name='"
102942722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                        + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
103042722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.setTransactionSuccessful();
103142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            } finally {
103242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                db.endTransaction();
103342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            }
103442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani            upgradeVersion = 69;
103542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        }
1036a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
10378d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        if (upgradeVersion == 69) {
10388d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            // Add RADIO_NFC to AIRPLANE_MODE_RADIO and AIRPLANE_MODE_TOGGLEABLE_RADIOS
10398d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String airplaneRadios = mContext.getResources().getString(
10408d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.def_airplane_mode_radios);
10418d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            String toggleableRadios = mContext.getResources().getString(
10428d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                    R.string.airplane_mode_toggleable_radios);
10438d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            db.beginTransaction();
10448d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            try {
10458d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + airplaneRadios + "' " +
10468d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_RADIOS + "'");
10478d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.execSQL("UPDATE system SET value='" + toggleableRadios + "' " +
10488d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                        "WHERE name='" + Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'");
10498d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.setTransactionSuccessful();
10508d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            } finally {
10518d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly                db.endTransaction();
10528d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            }
10538d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly            upgradeVersion = 70;
10548d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly        }
10558d32a01bd24b8a0d1a98f0581b3394a78fab8242Nick Pelly
10566651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        if (upgradeVersion == 70) {
10576651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            // Update all built-in bookmarks.  Some of the package names have changed.
10586651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            loadBookmarks(db);
10596651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown            upgradeVersion = 71;
10606651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown        }
10616651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
106255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        if (upgradeVersion == 71) {
106355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov             // New setting to specify whether to speak passwords in accessibility mode.
106455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            db.beginTransaction();
106555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            SQLiteStatement stmt = null;
106655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            try {
106755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value)"
106855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        + " VALUES(?,?);");
106955f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
107055f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                        R.bool.def_accessibility_speak_password);
10716243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
107255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            } finally {
107355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                db.endTransaction();
107455f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                if (stmt != null) stmt.close();
107555f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            }
107655f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            upgradeVersion = 72;
107755f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov        }
107855f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
10796243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        if (upgradeVersion == 72) {
10806243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            // update vibration settings
10816243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            db.beginTransaction();
10826243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            SQLiteStatement stmt = null;
10836243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            try {
10846243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
10856243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        + " VALUES(?,?);");
10866243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
10876243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                        R.bool.def_vibrate_in_silent);
10886243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.setTransactionSuccessful();
10896243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            } finally {
10906243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                db.endTransaction();
10916243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani                if (stmt != null) stmt.close();
10926243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            }
10936243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani            upgradeVersion = 73;
10946243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani        }
10956243edd818b84adfbe712d5d233d6414b33653acAmith Yamasani
10963ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        if (upgradeVersion == 73) {
1097398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVibrateSettingFromNone(db);
1098398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 74;
1099398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
1100398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
1101398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if (upgradeVersion == 74) {
11023ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            // URL from which WebView loads a JavaScript based screen-reader.
11033ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            db.beginTransaction();
11043ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            SQLiteStatement stmt = null;
11053ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            try {
11063ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
11073ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
11083ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                        R.string.def_accessibility_screen_reader_url);
11093ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.setTransactionSuccessful();
11103ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            } finally {
11113ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                db.endTransaction();
11123ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                if (stmt != null) stmt.close();
11133ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            }
1114398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            upgradeVersion = 75;
11153ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov        }
11167bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        if (upgradeVersion == 75) {
11177bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            db.beginTransaction();
11187bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            SQLiteStatement stmt = null;
11197bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            Cursor c = null;
11207bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            try {
112106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                c = db.query(TABLE_SECURE, new String[] {"_id", "value"},
11227bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        "name='lockscreen.disabled'",
11237bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                        null, null, null, null);
11247bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                // only set default if it has not yet been set
11257bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c == null || c.getCount() == 0) {
11267bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    stmt = db.compileStatement("INSERT INTO system(name,value)"
11277bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            + " VALUES(?,?);");
11287bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                    loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
11297bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                            R.bool.def_lockscreen_disabled);
11307bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                }
11317bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.setTransactionSuccessful();
11327bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            } finally {
11337bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                db.endTransaction();
11347bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (c != null) c.close();
11357bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood                if (stmt != null) stmt.close();
11367bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            }
11377bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood            upgradeVersion = 76;
11387bef73900b075fc0a9078d418964ca8e7210d565Mike Lockwood        }
11393ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
1140bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        /************* The following are Jelly Bean changes ************/
1141bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1142bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        if (upgradeVersion == 76) {
1143bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            // Removed VIBRATE_IN_SILENT setting
1144bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            db.beginTransaction();
1145bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            try {
1146bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.execSQL("DELETE FROM system WHERE name='"
1147bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                                + Settings.System.VIBRATE_IN_SILENT + "'");
1148bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.setTransactionSuccessful();
1149bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            } finally {
1150bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent                db.endTransaction();
1151bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            }
1152bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
1153bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent            upgradeVersion = 77;
1154bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent        }
1155bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
11563c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        if (upgradeVersion == 77) {
11573c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            // Introduce "vibrate when ringing" setting
11583c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadVibrateWhenRingingSetting(db);
11593c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
11603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            upgradeVersion = 78;
11613c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
1162bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent
11633a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        if (upgradeVersion == 78) {
11643a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            // The JavaScript based screen-reader URL changes in JellyBean.
11653a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            db.beginTransaction();
11663a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            SQLiteStatement stmt = null;
11673a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            try {
11683a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
11693a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        + " VALUES(?,?);");
11703a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
11713a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                        R.string.def_accessibility_screen_reader_url);
11723a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.setTransactionSuccessful();
11733a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            } finally {
11743a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                db.endTransaction();
11753a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv                if (stmt != null) stmt.close();
11763a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            }
11773a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv            upgradeVersion = 79;
11783a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv        }
11793a67eb3be43bfd1f7735cf018c4cb552c6cbba08alanv
11808631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        if (upgradeVersion == 79) {
11818631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // Before touch exploration was a global setting controlled by the user
11828631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // via the UI. However, if the enabled accessibility services do not
11838631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // handle touch exploration mode, enabling it makes no sense. Therefore,
11848631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // now the services request touch exploration mode and the user is
11858631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // presented with a dialog to allow that and if she does we store that
11868631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // in the database. As a result of this change a user that has enabled
11878631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility, touch exploration, and some accessibility services
11888631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // may lose touch exploration state, thus rendering the device useless
11898631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // unless sighted help is provided, since the enabled service(s) are
11908631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // not in the list of services to which the user granted a permission
11918631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // to put the device in touch explore mode. Here we are allowing all
11928631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled accessibility services to toggle touch exploration provided
11938631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // accessibility and touch exploration are enabled and no services can
11948631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // toggle touch exploration. Note that the user has already manually
11958631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // enabled the services and touch exploration which means the she has
11968631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            // given consent to have these services work in touch exploration mode.
119706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final boolean accessibilityEnabled = getIntValueFromTable(db, TABLE_SECURE,
11988631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
119906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final boolean touchExplorationEnabled = getIntValueFromTable(db, TABLE_SECURE,
12008631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) == 1;
12018631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            if (accessibilityEnabled && touchExplorationEnabled) {
120206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                String enabledServices = getStringValueFromTable(db, TABLE_SECURE,
12038631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "");
120406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                String touchExplorationGrantedServices = getStringValueFromTable(db, TABLE_SECURE,
12058631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, "");
12068631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                if (TextUtils.isEmpty(touchExplorationGrantedServices)
12078631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        && !TextUtils.isEmpty(enabledServices)) {
12088631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    SQLiteStatement stmt = null;
12098631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    try {
12108631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.beginTransaction();
12118631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
12128631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                + " VALUES(?,?);");
12138631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        loadSetting(stmt,
12148631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
12158631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                                enabledServices);
12168631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.setTransactionSuccessful();
12178631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    } finally {
12188631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        db.endTransaction();
12198631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                        if (stmt != null) stmt.close();
12208631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                    }
12218631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                }
12228631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            }
12238631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            upgradeVersion = 80;
12248631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        }
12258631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
1226fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler        // vvv Jelly Bean MR1 changes begin here vvv
1227fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler
1228ca34bcf6746454c561b0c07ca5c6e42bd4a73e9eSvetoslav Ganov        if (upgradeVersion == 80) {
1229fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            // update screensaver settings
1230fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            db.beginTransaction();
1231fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            SQLiteStatement stmt = null;
1232fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            try {
1233fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1234fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                        + " VALUES(?,?);");
1235fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
1236ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsEnabledByDefault);
1237fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
1238ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
12391a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock                loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
1240ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
12411a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock                loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
1242ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.string.config_dreamsDefaultComponent);
1243ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
1244ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                        com.android.internal.R.string.config_dreamsDefaultComponent);
124506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
1246fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                db.setTransactionSuccessful();
1247fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            } finally {
1248fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                db.endTransaction();
1249fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler                if (stmt != null) stmt.close();
1250fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler            }
1251ca34bcf6746454c561b0c07ca5c6e42bd4a73e9eSvetoslav Ganov            upgradeVersion = 81;
1252fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler        }
1253fdb7c36a108e6a7887de6611b3f1541e3009f2d5Daniel Sandler
125416e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings        if (upgradeVersion == 81) {
125516e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            // Add package verification setting
125616e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            db.beginTransaction();
125716e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            SQLiteStatement stmt = null;
125816e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            try {
125916e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
126016e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                        + " VALUES(?,?);");
1261bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
126216e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                        R.bool.def_package_verifier_enable);
126316e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                db.setTransactionSuccessful();
126416e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            } finally {
126516e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                db.endTransaction();
126616e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings                if (stmt != null) stmt.close();
126716e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            }
126816e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings            upgradeVersion = 82;
126916e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings        }
127016e119e798cd1e6dd94114bc910b2c1fd92b88e5rich cannings
127106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        if (upgradeVersion == 82) {
127206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Move to per-user settings dbs
127343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
127406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
127559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
127659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                SQLiteStatement stmt = null;
127759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
127859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Migrate now-global settings. Note that this happens before
127959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // new users can be created.
128059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    createGlobalTable(db);
1281683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    String[] settingsToMove = setToStringArray(
1282683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                            SettingsProvider.sSystemMovedToGlobalSettings);
128359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false);
1284683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    settingsToMove = setToStringArray(
1285683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                            SettingsProvider.sSecureMovedToGlobalSettings);
128659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false);
128759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate
128859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
128959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
129059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
129159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    if (stmt != null) stmt.close();
129259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
129306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
129406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            upgradeVersion = 83;
129506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
129606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
12971cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov        if (upgradeVersion == 83) {
12981cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 1. Setting whether screen magnification is enabled.
12991cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 2. Setting for screen magnification scale.
13001cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            // 3. Setting for screen magnification auto update.
13011cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            db.beginTransaction();
13021cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            SQLiteStatement stmt = null;
13031cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            try {
13041cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
13051cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadBooleanSetting(stmt,
13061cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
13071cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.bool.def_accessibility_display_magnification_enabled);
13081cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt.close();
13091cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
13101cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
13111cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.fraction.def_accessibility_display_magnification_scale, 1);
13121cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt.close();
13131cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
13141cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                loadBooleanSetting(stmt,
13151cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
13161cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                        R.bool.def_accessibility_display_magnification_auto_update);
13171a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate
13181a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate                db.setTransactionSuccessful();
13191cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            } finally {
13201cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                db.endTransaction();
13211cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                if (stmt != null) stmt.close();
13221cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            }
13231cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            upgradeVersion = 84;
13241cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov        }
13251cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
13261a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate        if (upgradeVersion == 84) {
132743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
132859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
132959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                SQLiteStatement stmt = null;
133059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
133159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Patch up the slightly-wrong key migration from 82 -> 83 for those
133259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // devices that missed it, ignoring if the move is redundant
133359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
133459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.ADB_ENABLED,
133559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.BLUETOOTH_ON,
133659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.DATA_ROAMING,
133759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.DEVICE_PROVISIONED,
133859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.INSTALL_NON_MARKET_APPS,
133959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                            Settings.Secure.USB_MASS_STORAGE_ENABLED
134059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
134159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
134259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
134359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
134459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
134559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    if (stmt != null) stmt.close();
134659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
13471a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate            }
13481a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate            upgradeVersion = 85;
13491a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate        }
13501a9c0dfdbbeba1bc498170be283394ba3e0e9752Christopher Tate
13519219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate        if (upgradeVersion == 85) {
135243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
135359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
135459c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
135559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // Fix up the migration, ignoring already-migrated elements, to snap up to
135659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    // date with new changes to the set of global versus system/secure settings
135759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = { Settings.System.STAY_ON_WHILE_PLUGGED_IN };
135859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
13599219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate
136059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
136159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
136259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
136359c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
13649219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            }
13659219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            upgradeVersion = 86;
13669219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate        }
13679219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate
13684d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings        if (upgradeVersion == 86) {
136943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
137059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
137159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
137259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
1373bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_ENABLE,
1374bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_TIMEOUT,
1375bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE
137659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
137759c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
13784d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings
137959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
138059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
138159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
138259c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
13834d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings            }
13844d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings            upgradeVersion = 87;
13854d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings        }
13864d8fc793f044cf2c857ac72ebe51641b8e6c413drich cannings
1387c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate        if (upgradeVersion == 87) {
138843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
138959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                db.beginTransaction();
139059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                try {
139159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    String[] settingsToMove = {
1392bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
1393bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
1394bdfce2ec05a3e9ca6acd6711de6133e06f2446e6Jeff Sharkey                            Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS
139559c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    };
139659c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1397c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate
139859c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.setTransactionSuccessful();
139959c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                } finally {
140059c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                    db.endTransaction();
140159c5beec64af8ea20509998230b7b1de496702f6Christopher Tate                }
1402c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate            }
1403c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate            upgradeVersion = 88;
1404c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate        }
1405c868b645b46685574955eaff9f8d46d9262a3357Christopher Tate
1406625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey        if (upgradeVersion == 88) {
140743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1408625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                db.beginTransaction();
1409625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                try {
1410625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    String[] settingsToMove = {
1411625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
1412625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
1413625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SEND_ACTION_APP_ERROR,
1414625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_AGE_SECONDS,
1415625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_MAX_FILES,
1416625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_QUOTA_KB,
1417625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_QUOTA_PERCENT,
1418625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_RESERVE_PERCENT,
1419625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DROPBOX_TAG_PREFIX,
1420625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.ERROR_LOGCAT_PREFIX,
1421625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
1422625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
1423625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
1424625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
1425625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
1426625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
1427625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CONNECTIVITY_CHANGE_DELAY,
1428625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
1429625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.CAPTIVE_PORTAL_SERVER,
1430625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.NSD_ON,
1431625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SET_INSTALL_LOCATION,
1432625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DEFAULT_INSTALL_LOCATION,
1433625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
1434625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
1435625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
1436625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.HTTP_PROXY,
1437625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_HOST,
1438625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_PORT,
1439625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
1440625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.SET_GLOBAL_HTTP_PROXY,
1441625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                            Settings.Global.DEFAULT_DNS_SERVER,
1442625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    };
1443625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1444625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    db.setTransactionSuccessful();
1445625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                } finally {
1446625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                    db.endTransaction();
1447625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey                }
1448625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey            }
1449625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey            upgradeVersion = 89;
1450625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey        }
1451625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey
14520ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        if (upgradeVersion == 89) {
145343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
14540ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                db.beginTransaction();
14550ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                try {
14560ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    String[] prefixesToMove = {
14570ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
14580ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
14590ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                            Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
14600ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    };
14610ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14620ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    movePrefixedSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, prefixesToMove);
14630ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14640ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    db.setTransactionSuccessful();
14650ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                } finally {
14660ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    db.endTransaction();
14670ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                }
14680ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
14690ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            upgradeVersion = 90;
14700ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        }
14710ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
14726e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey        if (upgradeVersion == 90) {
147343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
14746e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                db.beginTransaction();
14756e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                try {
14766e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    String[] systemToGlobal = {
14776e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.WINDOW_ANIMATION_SCALE,
14786e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.TRANSITION_ANIMATION_SCALE,
14796e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.ANIMATOR_DURATION_SCALE,
14806e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.FANCY_IME_ANIMATIONS,
14816e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.COMPATIBILITY_MODE,
14826e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.EMERGENCY_TONE,
14836e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.CALL_AUTO_RETRY,
14846e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.DEBUG_APP,
14856e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.WAIT_FOR_DEBUGGER,
14866e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.SHOW_PROCESSES,
14876e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.ALWAYS_FINISH_ACTIVITIES,
14886e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    };
14896e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    String[] secureToGlobal = {
14906e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                            Settings.Global.PREFERRED_NETWORK_MODE,
1491b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla                            Settings.Global.CDMA_SUBSCRIPTION_MODE,
14926e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    };
14936e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
14946e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, systemToGlobal, true);
14956e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, secureToGlobal, true);
14966e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
14976e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    db.setTransactionSuccessful();
14986e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                } finally {
14996e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    db.endTransaction();
15006e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                }
15016e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            }
15026e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            upgradeVersion = 91;
15036e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey        }
15046e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
150555b02226c07f276e143f9da6f752963882fb60d5Eric Laurent        if (upgradeVersion == 91) {
150643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
150755b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                db.beginTransaction();
150855b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                try {
150955b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    // Move ringer mode from system to global settings
1510531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    String[] settingsToMove = { Settings.Global.MODE_RINGER };
151155b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
151255b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
151355b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    db.setTransactionSuccessful();
151455b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                } finally {
151555b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    db.endTransaction();
151655b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                }
151755b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            }
151855b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            upgradeVersion = 92;
151955b02226c07f276e143f9da6f752963882fb60d5Eric Laurent        }
152055b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
15217f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock        if (upgradeVersion == 92) {
15227f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            SQLiteStatement stmt = null;
15237f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            try {
15247f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
15257f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                        + " VALUES(?,?);");
152643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen                if (mUserHandle == UserHandle.USER_SYSTEM) {
15277f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // consider existing primary users to have made it through user setup
15287f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // if the globally-scoped device-provisioned bit is set
15297f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // (indicating they already made it through setup as primary)
15307f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    int deviceProvisioned = getIntValueFromTable(db, TABLE_GLOBAL,
15317f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            Settings.Global.DEVICE_PROVISIONED, 0);
15327f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    loadSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
15337f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            deviceProvisioned);
15347f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                } else {
15357f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    // otherwise use the default
15367f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
15377f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                            R.bool.def_user_setup_complete);
15387f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                }
15397f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            } finally {
15407f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                if (stmt != null) stmt.close();
15417f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            }
15427f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            upgradeVersion = 93;
15437f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock        }
15447f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock
1545531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani        if (upgradeVersion == 93) {
1546531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            // Redo this step, since somehow it didn't work the first time for some users
154743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1548531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                db.beginTransaction();
1549531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                try {
1550531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    // Migrate now-global settings
1551683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    String[] settingsToMove = setToStringArray(
1552683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                            SettingsProvider.sSystemMovedToGlobalSettings);
1553531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
1554683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    settingsToMove = setToStringArray(
1555683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                            SettingsProvider.sSecureMovedToGlobalSettings);
1556531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
1557531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani
1558531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    db.setTransactionSuccessful();
1559531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                } finally {
1560531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    db.endTransaction();
1561531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                }
1562531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            }
1563531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            upgradeVersion = 94;
1564531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani        }
1565531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani
156684e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown        if (upgradeVersion == 94) {
156784e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            // Add wireless charging started sound setting
156843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
15692d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                db.beginTransaction();
15702d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                SQLiteStatement stmt = null;
15712d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                try {
15722d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
15732d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                            + " VALUES(?,?);");
15742d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
15752d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                            R.string.def_wireless_charging_started_sound);
15762d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    db.setTransactionSuccessful();
15772d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                } finally {
15782d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    db.endTransaction();
15792d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                    if (stmt != null) stmt.close();
15802d43fabaf7c15ded1dcb463725754edfe41b42a1Amith Yamasani                }
158184e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            }
158284e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            upgradeVersion = 95;
158384e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown        }
158484e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown
158558f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate        if (upgradeVersion == 95) {
158643765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
158758f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                db.beginTransaction();
158858f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                try {
158958f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    String[] settingsToMove = { Settings.Global.BUGREPORT_IN_POWER_MENU };
159058f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
159158f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    db.setTransactionSuccessful();
159258f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                } finally {
159358f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                    db.endTransaction();
159458f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate                }
159558f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate            }
159658f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate            upgradeVersion = 96;
159758f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate        }
159858f41ecfa57bb1299cf0f8b13f6f5f5b4b7dde91Christopher Tate
1599d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron        if (upgradeVersion == 96) {
1600447d94684ee73046d769649d8247aacd581bd6e3Svetoslav Ganov            // NOP bump due to a reverted change that some people got on upgrade.
1601d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron            upgradeVersion = 97;
1602d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron        }
1603d1ed3cea37e4156eab14b7dc8207a520c9eab700Mike Cleron
1604dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler        if (upgradeVersion == 97) {
160543765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1606dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                db.beginTransaction();
1607dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                SQLiteStatement stmt = null;
1608dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                try {
1609dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
1610dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                            + " VALUES(?,?);");
1611dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
1612dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                            R.integer.def_low_battery_sound_timeout);
1613dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    db.setTransactionSuccessful();
1614dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                } finally {
1615dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    db.endTransaction();
1616dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    if (stmt != null) stmt.close();
1617dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                }
1618dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            }
1619dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            upgradeVersion = 98;
1620dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler        }
1621dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler
162282a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler        if (upgradeVersion == 98) {
162352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // no-op; LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
162482a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler            upgradeVersion = 99;
162582a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler        }
162682a6c5c5ff04ab26fde4b3094a8f25da95a0f5f4Dan Sandler
16271cdd7dda61b30358c843e534394c32f24bc5271fChris Wren        if (upgradeVersion == 99) {
162852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // no-op; HEADS_UP_NOTIFICATIONS_ENABLED now handled in version 100
16291cdd7dda61b30358c843e534394c32f24bc5271fChris Wren            upgradeVersion = 100;
16301cdd7dda61b30358c843e534394c32f24bc5271fChris Wren        }
163152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler
16325242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren        if (upgradeVersion == 100) {
163352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // note: LOCK_SCREEN_SHOW_NOTIFICATIONS now handled in version 106
163443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
16355242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                db.beginTransaction();
16365242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                SQLiteStatement stmt = null;
16375242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                try {
163852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
16395242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                            + " VALUES(?,?);");
16405242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
16415242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                            R.integer.def_heads_up_enabled);
16425242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    db.setTransactionSuccessful();
16435242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                } finally {
16445242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    db.endTransaction();
16455242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    if (stmt != null) stmt.close();
16465242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                }
16475242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            }
16485242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            upgradeVersion = 101;
16495242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren        }
16501cdd7dda61b30358c843e534394c32f24bc5271fChris Wren
1651147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet        if (upgradeVersion == 101) {
165243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1653147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                db.beginTransaction();
1654147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                SQLiteStatement stmt = null;
1655147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                try {
1656147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
1657147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                            + " VALUES(?,?);");
1658147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
1659147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    db.setTransactionSuccessful();
1660147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                } finally {
1661147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    db.endTransaction();
1662147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                    if (stmt != null) stmt.close();
1663147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet                }
1664147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            }
1665147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            upgradeVersion = 102;
1666147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet        }
1667147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
1668aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate        if (upgradeVersion == 102) {
1669aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            db.beginTransaction();
1670aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            SQLiteStatement stmt = null;
1671aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            try {
1672aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                // The INSTALL_NON_MARKET_APPS setting is becoming per-user rather
1673aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                // than device-global.
167443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen                if (mUserHandle == UserHandle.USER_SYSTEM) {
1675aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // In the owner user, the global table exists so we can migrate the
1676aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // entry from there to the secure table, preserving its value.
1677aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    String[] globalToSecure = {
1678aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            Settings.Secure.INSTALL_NON_MARKET_APPS
1679aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    };
1680aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    moveSettingsToNewTable(db, TABLE_GLOBAL, TABLE_SECURE, globalToSecure, true);
1681aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                } else {
1682aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // Secondary users' dbs don't have the global table, so institute the
1683aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    // default.
1684aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1685aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            + " VALUES(?,?);");
1686aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
1687aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                            R.bool.def_install_non_market_apps);
1688aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                }
1689aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                db.setTransactionSuccessful();
1690aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            } finally {
1691aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                db.endTransaction();
1692aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                if (stmt != null) stmt.close();
1693aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            }
1694aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            upgradeVersion = 103;
1695aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate        }
1696a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
1697a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown        if (upgradeVersion == 103) {
1698a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            db.beginTransaction();
1699a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            SQLiteStatement stmt = null;
1700a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            try {
1701a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                stmt = db.compileStatement("INSERT OR REPLACE INTO secure(name,value)"
1702a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                        + " VALUES(?,?);");
1703a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
1704a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                        R.bool.def_wake_gesture_enabled);
1705a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                db.setTransactionSuccessful();
1706a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            } finally {
1707a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                db.endTransaction();
1708a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                if (stmt != null) stmt.close();
1709a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            }
1710a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            upgradeVersion = 104;
1711a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown        }
1712a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
17131e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani        if (upgradeVersion < 105) {
1714cd86ebf1c965c191f46b6480145c9d217a7d841eFyodor Kupolov            // No-op: GUEST_USER_ENABLED setting was removed
17151e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani            upgradeVersion = 105;
17161e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani        }
17171e9c21871e81642669079cd290ef47818a3165bdAmith Yamasani
171852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler        if (upgradeVersion < 106) {
171952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            // LOCK_SCREEN_SHOW_NOTIFICATIONS is now per-user.
172052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            db.beginTransaction();
172152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            SQLiteStatement stmt = null;
172252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            try {
172352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
172452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        + " VALUES(?,?);");
1725cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                loadIntegerSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
1726cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        R.integer.def_lock_screen_show_notifications);
172743765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen                if (mUserHandle == UserHandle.USER_SYSTEM) {
172852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    final int oldShow = getIntValueFromTable(db,
172952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                            TABLE_GLOBAL, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, -1);
173052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    if (oldShow >= 0) {
173152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        // overwrite the default with whatever you had
173252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        loadSetting(stmt, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, oldShow);
173352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        final SQLiteStatement deleteStmt
173452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                                = db.compileStatement("DELETE FROM global WHERE name=?");
173552e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        deleteStmt.bindString(1, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS);
173652e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                        deleteStmt.execute();
173752e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    }
173852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                }
173952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                db.setTransactionSuccessful();
174052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            } finally {
174152e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                db.endTransaction();
174252e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                if (stmt != null) stmt.close();
174352e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            }
174452e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            upgradeVersion = 106;
174552e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler        }
174649e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos
174749e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos        if (upgradeVersion < 107) {
174849e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            // Add trusted sound setting
174943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
175049e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                db.beginTransaction();
175149e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                SQLiteStatement stmt = null;
175249e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                try {
175349e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
175449e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                            + " VALUES(?,?);");
175549e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
175649e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                            R.string.def_trusted_sound);
175749e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    db.setTransactionSuccessful();
175849e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                } finally {
175949e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    db.endTransaction();
176049e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    if (stmt != null) stmt.close();
176149e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                }
176249e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            }
176349e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            upgradeVersion = 107;
176449e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos        }
176549e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos
176649cb613c993a5fecf11d7ee6198068315762814eJeff Brown        if (upgradeVersion < 108) {
176749cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // Reset the auto-brightness setting to default since the behavior
176849cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // of the feature is now quite different and is being presented to
176949cb613c993a5fecf11d7ee6198068315762814eJeff Brown            // the user in a new way as "adaptive brightness".
177049cb613c993a5fecf11d7ee6198068315762814eJeff Brown            db.beginTransaction();
177149cb613c993a5fecf11d7ee6198068315762814eJeff Brown            SQLiteStatement stmt = null;
177249cb613c993a5fecf11d7ee6198068315762814eJeff Brown            try {
177349cb613c993a5fecf11d7ee6198068315762814eJeff Brown                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
177449cb613c993a5fecf11d7ee6198068315762814eJeff Brown                        + " VALUES(?,?);");
177549cb613c993a5fecf11d7ee6198068315762814eJeff Brown                loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
177649cb613c993a5fecf11d7ee6198068315762814eJeff Brown                        R.bool.def_screen_brightness_automatic_mode);
177749cb613c993a5fecf11d7ee6198068315762814eJeff Brown                db.setTransactionSuccessful();
177849cb613c993a5fecf11d7ee6198068315762814eJeff Brown            } finally {
177949cb613c993a5fecf11d7ee6198068315762814eJeff Brown                db.endTransaction();
178049cb613c993a5fecf11d7ee6198068315762814eJeff Brown                if (stmt != null) stmt.close();
178149cb613c993a5fecf11d7ee6198068315762814eJeff Brown            }
178249cb613c993a5fecf11d7ee6198068315762814eJeff Brown            upgradeVersion = 108;
178349cb613c993a5fecf11d7ee6198068315762814eJeff Brown        }
178449cb613c993a5fecf11d7ee6198068315762814eJeff Brown
1785cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren        if (upgradeVersion < 109) {
1786cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            db.beginTransaction();
1787cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            SQLiteStatement stmt = null;
1788cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            try {
1789cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
1790cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        + " VALUES(?,?);");
1791cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
1792cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                        R.bool.def_lock_screen_allow_private_notifications);
1793cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                db.setTransactionSuccessful();
1794cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            } finally {
1795cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                db.endTransaction();
1796cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                if (stmt != null) stmt.close();
1797cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            }
1798cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            upgradeVersion = 109;
1799cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren        }
1800cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren
18012c830a2905b07639984499529f9a19aeb779a539Tyler Gunn        if (upgradeVersion < 110) {
18022c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // The SIP_CALL_OPTIONS value SIP_ASK_EACH_TIME is being deprecated.
18032c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // If the SIP_CALL_OPTIONS setting is set to SIP_ASK_EACH_TIME, default to
18042c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            // SIP_ADDRESS_ONLY.
18052c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            db.beginTransaction();
18062c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            SQLiteStatement stmt = null;
18072c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            try {
18082c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt = db.compileStatement("UPDATE system SET value = ? " +
18092c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                        "WHERE name = ? AND value = ?;");
18102c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(1, Settings.System.SIP_ADDRESS_ONLY);
18112c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(2, Settings.System.SIP_CALL_OPTIONS);
18122c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.bindString(3, Settings.System.SIP_ASK_ME_EACH_TIME);
18132c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                stmt.execute();
18142c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                db.setTransactionSuccessful();
18152c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            } finally {
18162c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                db.endTransaction();
18172c830a2905b07639984499529f9a19aeb779a539Tyler Gunn                if (stmt != null) stmt.close();
18182c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            }
18192c830a2905b07639984499529f9a19aeb779a539Tyler Gunn            upgradeVersion = 110;
18202c830a2905b07639984499529f9a19aeb779a539Tyler Gunn        }
18212c830a2905b07639984499529f9a19aeb779a539Tyler Gunn
18227d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock        if (upgradeVersion < 111) {
18237d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            // reset ringer mode, so it doesn't force zen mode to follow
182443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
18257d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                db.beginTransaction();
18267d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                SQLiteStatement stmt = null;
18277d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                try {
18287d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
18297d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                            + " VALUES(?,?);");
18307d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    loadSetting(stmt, Settings.Global.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
18317d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    db.setTransactionSuccessful();
18327d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                } finally {
18337d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    db.endTransaction();
18347d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                    if (stmt != null) stmt.close();
18357d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock                }
18367d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            }
18377d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock            upgradeVersion = 111;
18387d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock        }
18397d424b6c5080133c25e0c19dd0d6ce212e352a1dJohn Spurlock
1840550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet        if (upgradeVersion < 112) {
184143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1842550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // When device name was added, we went with Manufacturer + Model, device name should
1843550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // actually be Model only.
1844550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                // Update device name to Model if it wasn't modified by user.
1845550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                db.beginTransaction();
1846550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                SQLiteStatement stmt = null;
1847550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                try {
1848550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt = db.compileStatement("UPDATE global SET value = ? "
1849550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                        + " WHERE name = ? AND value = ?");
1850550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(1, getDefaultDeviceName()); // new default device name
1851550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(2, Settings.Global.DEVICE_NAME);
1852550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.bindString(3, getOldDefaultDeviceName()); // old default device name
1853550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    stmt.execute();
1854550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    db.setTransactionSuccessful();
1855550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                } finally {
1856550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    db.endTransaction();
1857550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                    if (stmt != null) stmt.close();
1858550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                }
1859550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet            }
1860550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet            upgradeVersion = 112;
1861550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet        }
1862550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet
186305af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown        if (upgradeVersion < 113) {
186405af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            db.beginTransaction();
186505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            SQLiteStatement stmt = null;
186605af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            try {
186705af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
186805af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                        + " VALUES(?,?);");
186905af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
187005af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                        R.integer.def_sleep_timeout);
187105af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                db.setTransactionSuccessful();
187205af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            } finally {
187305af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                db.endTransaction();
187405af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                if (stmt != null) stmt.close();
187505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            }
187605af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            upgradeVersion = 113;
187705af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown        }
187805af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown
1879fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee        // We skipped 114 to handle a merge conflict with the introduction of theater mode.
1880fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee
1881fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee        if (upgradeVersion < 115) {
188243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
1883fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                db.beginTransaction();
1884fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                SQLiteStatement stmt = null;
1885fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                try {
1886fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
1887fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                            + " VALUES(?,?);");
1888fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                    loadBooleanSetting(stmt, Global.THEATER_MODE_ON,
1889fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                            R.bool.def_theater_mode_on);
1890fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                    db.setTransactionSuccessful();
1891fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                } finally {
1892fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                    db.endTransaction();
1893fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                    if (stmt != null) stmt.close();
1894fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee                }
1895fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee            }
1896fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee            upgradeVersion = 115;
1897fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee        }
1898fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee
1899fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee        if (upgradeVersion < 116) {
190043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen            if (mUserHandle == UserHandle.USER_SYSTEM) {
190104e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                db.beginTransaction();
190204e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                SQLiteStatement stmt = null;
190304e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                try {
190404e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
190504e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                            + " VALUES(?,?);");
1906683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED,
1907683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                            ImsConfig.FeatureValueConstants.ON);
190804e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                    db.setTransactionSuccessful();
190904e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                } finally {
191004e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                    db.endTransaction();
191104e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                    if (stmt != null) stmt.close();
191204e6827ace936e0cbb666d8ef94635b73672aa41Christopher Tate                }
19130499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com            }
1914fb1cf36aa739da5dbebc64e61900e9ff96134e26Bryce Lee            upgradeVersion = 116;
19150499bb5de45cf5542db7ac42406cd856d3386f1fLibin.Tang@motorola.com        }
1916584a44517950204a04ef01345be70b33d8ba43f9Bryce Lee
191794cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk        if (upgradeVersion < 117) {
191894cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk            db.beginTransaction();
191994cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk            try {
192094cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                String[] systemToSecure = {
192194cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                        Settings.Secure.LOCK_TO_APP_EXIT_LOCKED
192294cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                };
192394cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, systemToSecure, true);
192494cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                db.setTransactionSuccessful();
192594cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk            } finally {
192694cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk                db.endTransaction();
192794cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk            }
192894cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk            upgradeVersion = 117;
192994cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk        }
193094cfd9d7c42287c18bde29aa1ae34944eb448f45Jason Monk
19318c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock        if (upgradeVersion < 118) {
19328c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            // Reset rotation-lock-for-accessibility on upgrade, since it now hides the display
19338c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            // setting.
19348c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            db.beginTransaction();
19358c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            SQLiteStatement stmt = null;
19368c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            try {
19378c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
19388c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                        + " VALUES(?,?);");
19398c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                loadSetting(stmt, Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0);
19408c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                db.setTransactionSuccessful();
19418c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            } finally {
19428c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                db.endTransaction();
19438c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock                if (stmt != null) stmt.close();
19448c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            }
19458c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock            upgradeVersion = 118;
19468c51d0b7114c4ad9e270ba1f9d6c15d59a8b5b42John Spurlock        }
1947683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
1948503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown        /*
1949683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav         * IMPORTANT: Do not add any more upgrade steps here as the global,
1950683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav         * secure, and system settings are no longer stored in a database
1951503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown         * but are kept in memory and persisted to XML.
1952683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav         *
1953503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown         * See: SettingsProvider.UpgradeController#onUpgradeLocked
1954683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav         */
1955683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
19561c7fa4836bfa7ff61f176461ca0557e90f714121Daniel Sandler        if (upgradeVersion != currentVersion) {
1957683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            recreateDatabase(db, oldVersion, upgradeVersion, currentVersion);
195854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
195954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
196054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1961683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    public void recreateDatabase(SQLiteDatabase db, int oldVersion,
1962683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            int upgradeVersion, int currentVersion) {
1963683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS global");
1964683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS globalIndex1");
1965683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS system");
1966683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP INDEX IF EXISTS systemIndex1");
1967683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS secure");
1968683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP INDEX IF EXISTS secureIndex1");
1969683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS gservices");
1970683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
1971683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
1972683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS bookmarks");
1973683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
1974683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
1975683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("DROP TABLE IF EXISTS favorites");
1976683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
1977683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        onCreate(db);
1978683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
1979683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        // Added for diagnosing settings.db wipes after the fact
1980683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion;
1981683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav        db.execSQL("INSERT INTO secure(name,value) values('" +
1982683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                "wiped_db_reason" + "','" + wipeReason + "');");
1983683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    }
1984683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav
1985683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav    private String[] setToStringArray(Set<String> set) {
1986a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate        String[] array = new String[set.size()];
1987a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate        return set.toArray(array);
1988a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate    }
1989a96798e4a548f5ec0e387b2cdd8d419378498ebdChristopher Tate
199006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void moveSettingsToNewTable(SQLiteDatabase db,
199106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            String sourceTable, String destTable,
19929219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            String[] settingsToMove, boolean doIgnore) {
199306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        // Copy settings values from the source table to the dest, and remove from the source
1994156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement insertStmt = null;
1995156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        SQLiteStatement deleteStmt = null;
1996156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
1997156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        db.beginTransaction();
1998156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        try {
19999219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate            insertStmt = db.compileStatement("INSERT "
20009219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate                    + (doIgnore ? " OR IGNORE " : "")
20019219874be99cc07660807cc5dc94b0d157ef8808Christopher Tate                    + " INTO " + destTable + " (name,value) SELECT name,value FROM "
200206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    + sourceTable + " WHERE name=?");
200306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            deleteStmt = db.compileStatement("DELETE FROM " + sourceTable + " WHERE name=?");
2004156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
2005156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            for (String setting : settingsToMove) {
2006156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.bindString(1, setting);
2007156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.execute();
2008156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
2009156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.bindString(1, setting);
2010156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.execute();
2011156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
2012156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.setTransactionSuccessful();
2013156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        } finally {
2014156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            db.endTransaction();
2015156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (insertStmt != null) {
2016156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                insertStmt.close();
2017156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
2018156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            if (deleteStmt != null) {
2019156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani                deleteStmt.close();
2020156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani            }
2021156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani        }
2022156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani    }
2023156c43545529fb3d731ffdd9c4514d38758e3f06Amith Yamasani
20240ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    /**
20250ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     * Move any settings with the given prefixes from the source table to the
20260ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     * destination table.
20270ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey     */
20280ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    private void movePrefixedSettingsToNewTable(
20290ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            SQLiteDatabase db, String sourceTable, String destTable, String[] prefixesToMove) {
20300ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        SQLiteStatement insertStmt = null;
20310ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        SQLiteStatement deleteStmt = null;
20320ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
20330ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        db.beginTransaction();
20340ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        try {
20350ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            insertStmt = db.compileStatement("INSERT INTO " + destTable
20360ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    + " (name,value) SELECT name,value FROM " + sourceTable
20370ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    + " WHERE substr(name,0,?)=?");
20380ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            deleteStmt = db.compileStatement(
20390ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                    "DELETE FROM " + sourceTable + " WHERE substr(name,0,?)=?");
20400ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
20410ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            for (String prefix : prefixesToMove) {
20420ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.bindLong(1, prefix.length() + 1);
20430ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.bindString(2, prefix);
20440ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.execute();
20450ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
20460ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.bindLong(1, prefix.length() + 1);
20470ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.bindString(2, prefix);
20480ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.execute();
20490ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
20500ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            db.setTransactionSuccessful();
20510ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        } finally {
20520ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            db.endTransaction();
20530ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            if (insertStmt != null) {
20540ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                insertStmt.close();
20550ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
20560ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            if (deleteStmt != null) {
20570ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey                deleteStmt.close();
20580ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey            }
20590ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey        }
20600ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey    }
20610ac1028b0dc8713296e2face40abe5451ecd479cJeff Sharkey
206254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void upgradeLockPatternLocation(SQLiteDatabase db) {
206306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        Cursor c = db.query(TABLE_SYSTEM, new String[] {"_id", "value"}, "name='lock_pattern'",
206454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                null, null, null, null);
206554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c.getCount() > 0) {
206654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.moveToFirst();
206754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String lockPattern = c.getString(1);
206854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!TextUtils.isEmpty(lockPattern)) {
206954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Convert lock pattern
207054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
207131f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller                    LockPatternUtils lpu = new LockPatternUtils(mContext);
20729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                    List<LockPatternView.Cell> cellPattern =
207354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            LockPatternUtils.stringToPattern(lockPattern);
207443765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen                    lpu.saveLockPattern(cellPattern, null, UserHandle.USER_SYSTEM);
207554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (IllegalArgumentException e) {
207654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    // Don't want corrupted lock pattern to hang the reboot process
207754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
207854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
207954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
208006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            db.delete(TABLE_SYSTEM, "name='lock_pattern'", null);
208154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
208254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
208354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
208454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
208554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2086b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    private void upgradeScreenTimeoutFromNever(SQLiteDatabase db) {
2087b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        // See if the timeout is -1 (for "Never").
208806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        Cursor c = db.query(TABLE_SYSTEM, new String[] { "_id", "value" }, "name=? AND value=?",
2089b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                new String[] { Settings.System.SCREEN_OFF_TIMEOUT, "-1" },
2090b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                null, null, null);
2091b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
2092b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        SQLiteStatement stmt = null;
2093b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        if (c.getCount() > 0) {
2094b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
2095b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            try {
2096b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
2097b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                        + " VALUES(?,?);");
20983c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
2099b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                // Set the timeout to 30 minutes in milliseconds
2100cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
2101cd66caf015d18baa03a86796649550cb65cd99eaAmith Yamasani                        Integer.toString(30 * 60 * 1000));
2102b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            } finally {
2103b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani                if (stmt != null) stmt.close();
2104b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            }
2105b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        } else {
2106b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani            c.close();
2107b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani        }
2108b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani    }
2109b6e6ffae3564f0c8935cd2d307ffa4d17c57f992Amith Yamasani
2110398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    private void upgradeVibrateSettingFromNone(SQLiteDatabase db) {
2111398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0);
2112398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // If the ringer vibrate value is invalid, set it to the default
2113398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) {
21146156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock            vibrateSetting = AudioSystem.getValueForVibrateSetting(0,
2115398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
2116398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
2117398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        // Apply the same setting to the notification vibrate value
21186156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock        vibrateSetting = AudioSystem.getValueForVibrateSetting(vibrateSetting,
2119398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting);
2120398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
2121398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        SQLiteStatement stmt = null;
2122398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        try {
2123398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
2124398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                    + " VALUES(?,?);");
2125398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrateSetting);
2126398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        } finally {
2127398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani            if (stmt != null)
2128398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani                stmt.close();
2129398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani        }
2130398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani    }
2131398c83cc07354ca28c7108b712017146dadd41a0Amith Yamasani
213279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    private void upgradeScreenTimeout(SQLiteDatabase db) {
213379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        // Change screen timeout to current default
213479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        db.beginTransaction();
213579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        SQLiteStatement stmt = null;
213679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        try {
213779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
213879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    + " VALUES(?,?);");
213979373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
214079373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                    R.integer.def_screen_off_timeout);
214179373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.setTransactionSuccessful();
214279373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        } finally {
214379373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            db.endTransaction();
214479373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani            if (stmt != null)
214579373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani                stmt.close();
214679373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani        }
214779373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani    }
214879373f660bd41d3824ce8c121077b29dfa4c29d9Amith Yamasani
2149f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    private void upgradeAutoBrightness(SQLiteDatabase db) {
2150f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        db.beginTransaction();
2151f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        try {
2152f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            String value =
2153f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    mContext.getResources().getBoolean(
2154f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
2155f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.execSQL("INSERT OR REPLACE INTO system(name,value) values('" +
2156f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani                    Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
2157f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.setTransactionSuccessful();
2158f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        } finally {
2159f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani            db.endTransaction();
2160f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani        }
2161f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani    }
2162f50c5113d0a426ba0a689b5a827f80bf9d2467e1Amith Yamasani
216354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
216454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmarked shortcuts from an xml file.
216554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
216654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
216754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
21686651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown    private void loadBookmarks(SQLiteDatabase db) {
216954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ContentValues values = new ContentValues();
217054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
217154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        PackageManager packageManager = mContext.getPackageManager();
2172f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy        try {
2173f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            XmlResourceParser parser = mContext.getResources().getXml(R.xml.bookmarks);
217454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlUtils.beginDocument(parser, "bookmarks");
217554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2176f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            final int depth = parser.getDepth();
2177f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            int type;
2178f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2179f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy            while (((type = parser.next()) != XmlPullParser.END_TAG ||
2180f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
2181f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2182f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                if (type != XmlPullParser.START_TAG) {
2183f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    continue;
2184f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                }
218554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
218654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String name = parser.getName();
218754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!"bookmark".equals(name)) {
218854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
218954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
219054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
219154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String pkg = parser.getAttributeValue(null, "package");
219254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String cls = parser.getAttributeValue(null, "class");
219354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String shortcutStr = parser.getAttributeValue(null, "shortcut");
21946651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                String category = parser.getAttributeValue(null, "category");
2195f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
2196585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                int shortcutValue = shortcutStr.charAt(0);
219754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (TextUtils.isEmpty(shortcutStr)) {
219854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
21996651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
220054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
2201f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy
22026651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final Intent intent;
22036651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                final String title;
22046651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                if (pkg != null && cls != null) {
22056651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ActivityInfo info = null;
22066651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    ComponentName cn = new ComponentName(pkg, cls);
2207f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    try {
2208f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                        info = packageManager.getActivityInfo(cn, 0);
22096651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    } catch (PackageManager.NameNotFoundException e) {
22106651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        String[] packages = packageManager.canonicalToCurrentPackageNames(
22116651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                                new String[] { pkg });
22126651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        cn = new ComponentName(packages[0], cls);
22136651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        try {
22146651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            info = packageManager.getActivityInfo(cn, 0);
22156651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        } catch (PackageManager.NameNotFoundException e1) {
22166651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
22176651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            continue;
22186651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        }
2219f02811f7853202c0934622702ebb9c82e6ab0592Romain Guy                    }
22206651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
22216651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent = new Intent(Intent.ACTION_MAIN, null);
22226651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
222354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setComponent(cn);
22246651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = info.loadLabel(packageManager).toString();
22256651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else if (category != null) {
2226f5b8671c340f189c50b41c53622f979b6d5e0a57Dianne Hackborn                    intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, category);
22276651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    title = "";
22286651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                } else {
22296651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutStr
22306651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                            + ": missing package/class or category attributes");
22316651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                    continue;
223254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
22336651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown
22346651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
22356651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.INTENT, intent.toUri(0));
22366651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.TITLE, title);
22376651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
22386651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.delete("bookmarks", "shortcut = ?",
22396651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                        new String[] { Integer.toString(shortcutValue) });
22406651a638348c15e89e265b0a53c775cac9beafa2Jeff Brown                db.insert("bookmarks", null, values);
224154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
224254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (XmlPullParserException e) {
224354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
224454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (IOException e) {
224554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
224654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
224754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
224854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
224954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
225054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default volume levels. It is actually inserting the index of
225154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * the volume array for each of the volume controls.
225254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
225354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db the database to insert the volume levels into
225454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
225554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVolumeLevels(SQLiteDatabase db) {
225689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
225789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
225889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
225989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
22603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
226189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_MUSIC,
22626156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_MUSIC));
226389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_RING,
22646156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_RING));
226589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
22666156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM));
226789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
226889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
226989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_VOICE,
22706156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL));
227189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VOLUME_ALARM,
22726156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_ALARM));
227389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
227489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
227589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_NOTIFICATION,
22766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION));
227789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(
227889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    stmt,
227989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    Settings.System.VOLUME_BLUETOOTH_SCO,
22806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO));
22813c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
2282c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // By default:
2283c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification, system and music streams are affected by ringer mode
2284c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on non voice capable devices (tablets)
2285c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // - ringtones, notification and system streams are affected by ringer mode
2286c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            // on voice capable devices (phones)
2287c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
2288c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_NOTIFICATION) |
2289c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM) |
2290c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                                            (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
2291c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            if (!mContext.getResources().getBoolean(
2292c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    com.android.internal.R.bool.config_voice_capable)) {
2293c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
2294c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent            }
229589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
2296c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent                    ringerModeAffectedStreams);
2297c1d4166289ce016965d1147f7e8d37862ee347ecEric Laurent
229889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
22996156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock                    AudioSystem.DEFAULT_MUTE_STREAMS_AFFECTED);
230089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
230189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
230289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
23033c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
23043c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        loadVibrateWhenRingingSetting(db);
230554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
230654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
230754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
230854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (deleteOld) {
230954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
231054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
23119bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
231289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
231389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
231489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
231589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
23163c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
23175cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            // Vibrate on by default for ringer, on for notification
231889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            int vibrate = 0;
23196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock            vibrate = AudioSystem.getValueForVibrateSetting(vibrate,
23205cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_NOTIFICATION,
23215cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_SETTING_ONLY_SILENT);
23226156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock            vibrate |= AudioSystem.getValueForVibrateSetting(vibrate,
23235cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
232489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
232589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
232689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
232789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
232854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
232954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23303c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    private void loadVibrateWhenRingingSetting(SQLiteDatabase db) {
23313c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // The default should be off. VIBRATE_SETTING_ONLY_SILENT should also be ignored here.
23323c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // Phone app should separately check whether AudioManager#getRingerMode() returns
23333c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        // RINGER_MODE_VIBRATE, with which the device should vibrate anyway.
23343c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON,
23353c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                AudioManager.VIBRATE_SETTING_OFF);
23363c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        boolean vibrateWhenRinging = ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_ON);
23373c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
23383c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        SQLiteStatement stmt = null;
23393c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        try {
23403c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
23413c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa                    + " VALUES(?,?);");
23423c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            loadSetting(stmt, Settings.System.VIBRATE_WHEN_RINGING, vibrateWhenRinging ? 1 : 0);
23433c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        } finally {
23443c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa            if (stmt != null) stmt.close();
23453c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa        }
23463c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa    }
23473c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
234854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSettings(SQLiteDatabase db) {
2349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSystemSettings(db);
23509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSecureSettings(db);
235143765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen        // The global table only exists for the 'owner/system' user
235243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen        if (mUserHandle == UserHandle.USER_SYSTEM) {
235306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadGlobalSettings(db);
235406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
2355f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
23569bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
2357f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSystemSettings(SQLiteDatabase db) {
235889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
235989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
236089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
236189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
23623c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
236389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
236489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_dim_screen);
236589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
236689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_off_timeout);
23673c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
236889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default cdma DTMF type
236989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
23703c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
237189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default hearing aid
237289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.HEARING_AID, 0);
23733c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
237489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Set default tty mode
237589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.System.TTY_MODE, 0);
23763c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
237789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
237889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.integer.def_screen_brightness);
23793c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
238089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
238189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_screen_brightness_automatic_mode);
23823c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
238389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultAnimationSettings(stmt);
23843c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
238589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
238689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_accelerometer_rotation);
23873c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
238889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadDefaultHapticSettings(stmt);
23893c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
239089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
239189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_notification_pulse);
239242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
239389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadUISoundEffectsSettings(stmt);
239442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani
23951a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown            loadIntegerSetting(stmt, Settings.System.POINTER_SPEED,
23961a84fd1fb7a51f3fe4f8865e1cdd09f3490f696cJeff Brown                    R.integer.def_pointer_speed);
2397503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown
2398503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown            /*
2399503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * IMPORTANT: Do not add any more upgrade steps here as the global,
2400503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * secure, and system settings are no longer stored in a database
2401503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * but are kept in memory and persisted to XML.
2402503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             *
2403503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * See: SettingsProvider.UpgradeController#onUpgradeLocked
2404503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             */
240589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
240689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
240789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        }
2408f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
24099bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
24100e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    private void loadUISoundEffectsSettings(SQLiteStatement stmt) {
241142722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING,
241242722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_dtmf_tones_enabled);
241342722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED,
241442722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_sound_effects_enabled);
241542722bfa136f5616872a2c4e199813e804621c81Amith Yamasani        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
241642722bfa136f5616872a2c4e199813e804621c81Amith Yamasani                R.bool.def_haptic_feedback);
24170e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
24180e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler        loadIntegerSetting(stmt, Settings.System.LOCKSCREEN_SOUNDS_ENABLED,
24190e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler            R.integer.def_lockscreen_sounds_enabled);
24200e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler    }
24210e9d2af2d60b381ba52d0c25e583b3d2a9906051Daniel Sandler
24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_animation_scale, 1);
24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_transition_scale, 1);
24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
24289bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
2429075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    private void loadDefaultHapticSettings(SQLiteStatement stmt) {
2430075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
2431075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                R.bool.def_haptic_feedback);
2432075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    }
2433075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
2434f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSecureSettings(SQLiteDatabase db) {
243589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        SQLiteStatement stmt = null;
243689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        try {
243789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
243889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    + " VALUES(?,?);");
24393c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
244089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
244189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.string.def_location_providers_allowed);
24423c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
244389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
244489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (!TextUtils.isEmpty(wifiWatchList)) {
244589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
244689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            }
24473c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
244889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
244989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // persistent system property instead.
245089206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
24513c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
245289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            // Allow mock locations default, based on build
245389206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
245489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
24553c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
245689206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadSecure35Settings(stmt);
24573c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
245889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
245989206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_play_notification_snd);
24603c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
246189206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
246289206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_autostart);
24633c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
246489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
246589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_prompt);
24663c60eeb1332661833638c863b2978422c2846140Daisuke Miyakawa
246789206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
246889206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori                    R.bool.def_mount_ums_notify_enabled);
2469585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
2470585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION,
2471585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.bool.def_accessibility_script_injection);
2472585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov
2473585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS,
2474585f13f8dec4cbf55b3bc04d95425d647f0577b2Svetoslav Ganov                    R.string.def_accessibility_web_content_key_bindings);
2475d99d0dc43a3c26c77dd22e405efbdf0753d8309ePaul Westbrook
247654d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov            loadIntegerSetting(stmt, Settings.Secure.LONG_PRESS_TIMEOUT,
247754d068ec6af0ee6d261a135400efe6816c6f5ffeSvetoslav Ganov                    R.integer.def_long_press_timeout_millis);
2478a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov
2479a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
2480a28a16d1c2b58999d757a4cd3bc66a2f3499a2ebSvetoslav Ganov                    R.bool.def_touch_exploration_enabled);
248155f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov
248255f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
248355f937abe1a4fedb86c2679c66f0b5220ec3780eSvetoslav Ganov                    R.bool.def_accessibility_speak_password);
24843ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov
24853ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
24863ca5a74c17a27e44ce13b39bc2f63edaa88c3ef5Svetoslav Ganov                    R.string.def_accessibility_screen_reader_url);
248786aeb06635ef8c7f3fb1b4a935d5e8da819e2a88Mike Lockwood
2488d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {
2489d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");
2490d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            } else {
2491d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,
2492d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani                        R.bool.def_lockscreen_disabled);
2493d1645f8d0f30709340eb6b6d6da5022bbab77024Amith Yamasani            }
24942395527c9bb1cdc3bcd3dfcbc8b72b90ed3e7080Mike Lockwood
2495634471edc409f00f38633e334cd6853954a2b093John Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ENABLED,
2496ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsEnabledByDefault);
2497634471edc409f00f38633e334cd6853954a2b093John Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
2498ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
24991a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadBooleanSetting(stmt, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
2500ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault);
25011a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_COMPONENTS,
2502ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.string.config_dreamsDefaultComponent);
25031a868b7981ca5f52e893fdf9f8f538c9d5ce241dJohn Spurlock            loadStringSetting(stmt, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT,
2504ed108f3d125b0a4cc465057e3514caf781cdea19John Spurlock                    com.android.internal.R.string.config_dreamsDefaultComponent);
25051cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
25061cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
25071cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.bool.def_accessibility_display_magnification_enabled);
25081cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
25091cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadFractionSetting(stmt, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
25101cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.fraction.def_accessibility_display_magnification_scale, 1);
25111cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov
25121cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov            loadBooleanSetting(stmt,
25131cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
25141cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov                    R.bool.def_accessibility_display_magnification_auto_update);
25157f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock
25167f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock            loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
25177f1c248e80c747663396c6112bd637b0ee558dcbJohn Spurlock                    R.bool.def_user_setup_complete);
2518c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood
2519c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood            loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
2520c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood                        R.string.def_immersive_mode_confirmations);
2521c02c4a7c5b393c5527de17faca759ff00be61ce5Mike Lockwood
2522aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate            loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
2523aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate                    R.bool.def_install_non_market_apps);
2524aa036a2db08e19397285062c98aaab7acbf80717Christopher Tate
2525a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown            loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
2526a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown                    R.bool.def_wake_gesture_enabled);
2527a20dda4a6eedeee1dcaf105d76c8d7d126ce0f1bJeff Brown
252852e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler            loadIntegerSetting(stmt, Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
252952e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler                    R.integer.def_lock_screen_show_notifications);
253052e5701eea2da526191e997f9df5c41ef1e1c938Dan Sandler
2531cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren            loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
2532cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren                    R.bool.def_lock_screen_allow_private_notifications);
2533cd8f4f71fc75b4f57d21c4e9f80f1107101ca369Chris Wren
253405af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown            loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
253505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown                    R.integer.def_sleep_timeout);
2536503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown
2537503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown            /*
2538503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * IMPORTANT: Do not add any more upgrade steps here as the global,
2539503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * secure, and system settings are no longer stored in a database
2540503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * but are kept in memory and persisted to XML.
2541503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             *
2542503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * See: SettingsProvider.UpgradeController#onUpgradeLocked
2543503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             */
254489206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori        } finally {
254589206fdb3b75a8bc12ac75fc8a95a5c9c79c3220Vasu Nori            if (stmt != null) stmt.close();
25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
254754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
254854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2549cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    private void loadSecure35Settings(SQLiteStatement stmt) {
2550cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
2551cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.bool.def_backup_enabled);
255231f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
2553cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
2554cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.string.def_backup_transport);
2555cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    }
25566176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
255706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    private void loadGlobalSettings(SQLiteDatabase db) {
255806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        SQLiteStatement stmt = null;
255906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        try {
256006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
256106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    + " VALUES(?,?);");
256206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
256306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // --- Previously in 'system'
256406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,
256506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_airplane_mode_on);
256606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
2567584a44517950204a04ef01345be70b33d8ba43f9Bryce Lee            loadBooleanSetting(stmt, Settings.Global.THEATER_MODE_ON,
2568584a44517950204a04ef01345be70b33d8ba43f9Bryce Lee                    R.bool.def_theater_mode_on);
2569584a44517950204a04ef01345be70b33d8ba43f9Bryce Lee
257006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
257106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.string.def_airplane_mode_radios);
257206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
257306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
257406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.string.airplane_mode_toggleable_radios);
257506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
257606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED,
257706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.assisted_gps_enabled);
257806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
257906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AUTO_TIME,
258006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_auto_time); // Sync time to NITZ
258106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
258206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.AUTO_TIME_ZONE,
258306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_auto_time_zone); // Sync timezone to NITZ
258406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
258506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
258606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    ("1".equals(SystemProperties.get("ro.kernel.qemu")) ||
258706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        mContext.getResources().getBoolean(R.bool.def_stay_on_while_plugged_in))
258806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                     ? 1 : 0);
258906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
259006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadIntegerSetting(stmt, Settings.Global.WIFI_SLEEP_POLICY,
259106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_wifi_sleep_policy);
259206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
259355b02226c07f276e143f9da6f752963882fb60d5Eric Laurent            loadSetting(stmt, Settings.Global.MODE_RINGER,
259455b02226c07f276e143f9da6f752963882fb60d5Eric Laurent                    AudioManager.RINGER_MODE_NORMAL);
259555b02226c07f276e143f9da6f752963882fb60d5Eric Laurent
259606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // --- Previously in 'secure'
25976f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
25986f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_package_verifier_enable);
25996f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
26006f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.WIFI_ON,
26016f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_wifi_on);
26026f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
26036f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate            loadBooleanSetting(stmt, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
26046f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate                    R.bool.def_networks_available_notification_on);
26056f5a9a96523ecf97a9828a410dd1226df47ec4e6Christopher Tate
260606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.BLUETOOTH_ON,
260706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_bluetooth_on);
260806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
260906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Enable or disable Cell Broadcast SMS
261006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.CDMA_CELL_BROADCAST_SMS,
261106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
261206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
261306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Data roaming default, based on build
261406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.DATA_ROAMING,
261506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    "true".equalsIgnoreCase(
261606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                            SystemProperties.get("ro.com.android.dataroaming",
261706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                                    "false")) ? 1 : 0);
261806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
261906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED,
262006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_device_provisioned);
262106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
262206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final int maxBytes = mContext.getResources().getInteger(
262306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_download_manager_max_bytes_over_mobile);
262406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (maxBytes > 0) {
262506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                loadSetting(stmt, Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
262606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        Integer.toString(maxBytes));
262706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
262806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
262906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            final int recommendedMaxBytes = mContext.getResources().getInteger(
263006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_download_manager_recommended_max_bytes_over_mobile);
263106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (recommendedMaxBytes > 0) {
263206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                loadSetting(stmt, Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
263306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                        Integer.toString(recommendedMaxBytes));
263406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            }
263506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
263606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            // Mobile Data default, based on build
263706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadSetting(stmt, Settings.Global.MOBILE_DATA,
263806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    "true".equalsIgnoreCase(
263906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                            SystemProperties.get("ro.com.android.mobiledata",
264006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                                    "true")) ? 1 : 0);
264106efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
264206efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.NETSTATS_ENABLED,
264306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_netstats_enabled);
264406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
264506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED,
264606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.bool.def_usb_mass_storage_enabled);
264706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
264806efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            loadIntegerSetting(stmt, Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
264906efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate                    R.integer.def_max_dhcp_retries);
265006efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
265189d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown            loadBooleanSetting(stmt, Settings.Global.WIFI_DISPLAY_ON,
265289d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown                    R.bool.def_wifi_display_on);
265389d5546d7fd3a3bb19820c42e8b4527013dd6545Jeff Brown
2654b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller            loadStringSetting(stmt, Settings.Global.LOCK_SOUND,
2655b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller                    R.string.def_lock_sound);
2656b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller            loadStringSetting(stmt, Settings.Global.UNLOCK_SOUND,
2657b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller                    R.string.def_unlock_sound);
265849e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos            loadStringSetting(stmt, Settings.Global.TRUSTED_SOUND,
265949e057d7eedb44f5397781254acab4e0ef08a9cfAdrian Roos                    R.string.def_trusted_sound);
2660531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadIntegerSetting(stmt, Settings.Global.POWER_SOUNDS_ENABLED,
2661531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.integer.def_power_sounds_enabled);
2662531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.LOW_BATTERY_SOUND,
2663531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_low_battery_sound);
2664531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadIntegerSetting(stmt, Settings.Global.DOCK_SOUNDS_ENABLED,
2665531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.integer.def_dock_sounds_enabled);
2666531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.DESK_DOCK_SOUND,
2667531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_desk_dock_sound);
2668531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.DESK_UNDOCK_SOUND,
2669531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_desk_undock_sound);
2670531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.CAR_DOCK_SOUND,
2671531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_car_dock_sound);
2672531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani            loadStringSetting(stmt, Settings.Global.CAR_UNDOCK_SOUND,
2673531c237b82a948ac6599ba472bb95e26f71006cfAmith Yamasani                    R.string.def_car_undock_sound);
267484e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown            loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
267584e2756c0f3794c6efe5568a9d09101ba689fb39Jeff Brown                    R.string.def_wireless_charging_started_sound);
2676b14288d4b13d7629f578c4854f5a14d4d9a06783Jim Miller
2677729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk            loadIntegerSetting(stmt, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
2678729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk                    R.integer.def_dock_audio_media_enabled);
2679729f6685f9dfb7a1813a89dbf2298024d9da3813Dmytro Dubovyk
26806e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
26816e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
26826e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey                    PackageHelper.APP_INSTALL_AUTO);
26836e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
26846e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            // Set default cdma emergency tone
26856e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.EMERGENCY_TONE, 0);
26866e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
26876e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            // Set default cdma call auto retry
26886e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.CALL_AUTO_RETRY, 0);
26896e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
269097ecc9ec24056259495d2de4d10a4b312d83a57aNaveen Kalla            // Set the preferred network mode to target desired value or Default
269197ecc9ec24056259495d2de4d10a4b312d83a57aNaveen Kalla            // value defined in RILConstants
26926e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            int type;
26934fea0923be8d961312908aded2f72011a044903cAmit Mahajan            type = RILConstants.PREFERRED_NETWORK_MODE;
26946e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey            loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, type);
26956e2bee75cea415621165698fdd9ce857bbb8872eJeff Sharkey
2696b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            // Set the preferred cdma subscription source to target desired value or default
2697b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            // value defined in CdmaSubscriptionSourceManager
2698b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            type = SystemProperties.getInt("ro.telephony.default_cdma_sub",
2699b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla                        CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION);
2700b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla            loadSetting(stmt, Settings.Global.CDMA_SUBSCRIPTION_MODE, type);
2701b4d485c18448eadb92083c74fc84722250daeb5dNaveen Kalla
2702dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler            loadIntegerSetting(stmt, Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
2703dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler                    R.integer.def_low_battery_sound_timeout);
2704dea6462aab31049d1f1055314491bc33a6f16b0dDaniel Sandler
27052c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist            loadIntegerSetting(stmt, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
27062c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist                    R.integer.def_wifi_scan_always_available);
27072c4254e4765b4fa675c268550e66a3d4341282bcOskar Grönqvist
27085242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren            loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
27095242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren                    R.integer.def_heads_up_enabled);
27105242cf3b38b29e4676a70091d38b51af5e5467e1Chris Wren
2711147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet            loadSetting(stmt, Settings.Global.DEVICE_NAME, getDefaultDeviceName());
2712147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
2713683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav            loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED,
2714683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav                    ImsConfig.FeatureValueConstants.ON);
2715503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown
2716503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown            /*
2717503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * IMPORTANT: Do not add any more upgrade steps here as the global,
2718503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * secure, and system settings are no longer stored in a database
2719503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * but are kept in memory and persisted to XML.
2720503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             *
2721503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             * See: SettingsProvider.UpgradeController#onUpgradeLocked
2722503cffc18121cdbb7d969b3a4de3168f13c75459Jeff Brown             */
272306efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        } finally {
272406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate            if (stmt != null) stmt.close();
272506efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        }
272606efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate    }
272706efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate
272854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
272954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(1, key);
273054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(2, value.toString());
273154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.execute();
273254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
27339bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
27349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
27359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key, mContext.getResources().getString(resid));
27369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
27379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
27389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
27399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
27409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mContext.getResources().getBoolean(resid) ? "1" : "0");
27419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
27429bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
27439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
27449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
27459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer.toString(mContext.getResources().getInteger(resid)));
27469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
27479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
27489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
27499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
27509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Float.toString(mContext.getResources().getFraction(resid, base, base)));
27519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
27525cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani
27535cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    private int getIntValueFromSystem(SQLiteDatabase db, String name, int defaultValue) {
275406efb530a479ea12398c1b3ee4b80e2ac85a1680Christopher Tate        return getIntValueFromTable(db, TABLE_SYSTEM, name, defaultValue);
27558631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
27568631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
27578631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private int getIntValueFromTable(SQLiteDatabase db, String table, String name,
27588631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            int defaultValue) {
27598631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        String value = getStringValueFromTable(db, table, name, null);
27608631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return (value != null) ? Integer.parseInt(value) : defaultValue;
27618631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    }
27628631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov
27638631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov    private String getStringValueFromTable(SQLiteDatabase db, String table, String name,
27648631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            String defaultValue) {
27655cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        Cursor c = null;
27665cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        try {
27678631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov            c = db.query(table, new String[] { Settings.System.VALUE }, "name='" + name + "'",
27685cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                    null, null, null, null);
27695cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null && c.moveToFirst()) {
27705cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani                String val = c.getString(0);
27718631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov                return val == null ? defaultValue : val;
27725cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            }
27735cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        } finally {
27745cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani            if (c != null) c.close();
27755cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani        }
27768631701bb770f3a4e3b2a139dc282f2244fe86e6Svetoslav Ganov        return defaultValue;
27775cd1500cc4229fa6a8ddb5c70b055bb2c936c650Amith Yamasani    }
2778147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet
2779550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet    private String getOldDefaultDeviceName() {
2780ad59c43072a3e053eecb2cca831488dc49a3af33Jeff Sharkey        return mContext.getResources().getString(R.string.def_device_name,
2781550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet                Build.MANUFACTURER, Build.MODEL);
2782550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet    }
2783550021ec5a2c8d741506c3fe5d1ee85139bc794aJerome Poichet
2784147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet    private String getDefaultDeviceName() {
2785ad59c43072a3e053eecb2cca831488dc49a3af33Jeff Sharkey        return mContext.getResources().getString(R.string.def_device_name_simple, Build.MODEL);
2786147b4d75e1d4ca795d45ffe51d83efd19a754cf2Jerome Poichet    }
278754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
2788