DatabaseHelper.java revision 6176677e01964cb5751ff217c091571ce6a8b5fb
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;
24a9c1625e71ddd7a9cdaf9d1720be8c58e4809fa6Suchi Amalapurapuimport android.content.pm.PackageInfo;
2554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.PackageManager;
265d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeauimport android.content.pm.ResolveInfo;
275d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeauimport android.content.pm.ServiceInfo;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.Cursor;
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
31f186055a53758fd4112ab3c470cda6337a18fa33Jim Millerimport android.database.sqlite.SQLiteDoneException;
32f186055a53758fd4112ab3c470cda6337a18fa33Jim Millerimport android.database.sqlite.SQLiteException;
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteOpenHelper;
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteStatement;
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioManager;
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioService;
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.net.ConnectivityManager;
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Environment;
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.SystemProperties;
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.provider.Settings;
41cb0be8a530d6fefdb05f009980c029c4da14bf98Mike LeBeauimport android.speech.RecognitionService;
425d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeauimport android.speech.RecognizerIntent;
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils;
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Config;
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log;
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Xml;
47d4a4729c0cac582a2dcec7c8cfb316b81885a0f0Tom Taylorimport com.android.common.XmlUtils;
4804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.RILConstants;
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternUtils;
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternView;
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser;
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException;
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.File;
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileNotFoundException;
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileReader;
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.IOException;
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.List;
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Database helper class for {@link SettingsProvider}.
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database.
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
66074da8f9aa424b25d84f4e4eb762ca534ea96716James Wylderpublic class DatabaseHelper extends SQLiteOpenHelper {
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Path to file containing default bookmarks, relative to ANDROID_ROOT.
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
7054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DEFAULT_BOOKMARKS_PATH = "etc/bookmarks.xml";
7154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String TAG = "SettingsProvider";
7354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DATABASE_NAME = "settings.db";
74f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller
75f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // Please, please please. If you update the database version, check to make sure the
76f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
77f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // is properly propagated through your change.  Not doing so will result in a loss of user
78f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // settings.
795d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau    private static final int DATABASE_VERSION = 49;
809bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private Context mContext;
8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public DatabaseHelper(Context context) {
8454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        super(context, DATABASE_NAME, null, DATABASE_VERSION);
8554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mContext = context;
8654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
8754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
88f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void createSecureTable(SQLiteDatabase db) {
89f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE TABLE secure (" +
90f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
91f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "name TEXT UNIQUE ON CONFLICT REPLACE," +
92f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "value TEXT" +
93f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                ");");
94f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
95f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
969bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onCreate(SQLiteDatabase db) {
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE system (" +
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT UNIQUE ON CONFLICT REPLACE," +
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "value TEXT" +
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        createSecureTable(db);
107f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bluetooth_devices (" +
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT," +
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "addr TEXT," +
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "channel INTEGER," +
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "type INTEGER" +
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bookmarks (" +
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "title TEXT," +
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "folder TEXT," +
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "intent TEXT," +
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "shortcut INTEGER," +
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "ordering INTEGER" +
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Populate bookmarks table with initial bookmarks
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadBookmarks(db);
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load initial volume levels into DB
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVolumeLevels(db);
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load inital settings values
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSettings(db);
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + currentVersion);
1429bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int upgradeVersion = oldVersion;
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Pattern for upgrade blocks:
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        .. your upgrade logic..
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        upgradeVersion = [the DATABASE_VERSION you set]
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    }
1519bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 20) {
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /*
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Version 21 is part of the volume control refresh. There is no
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * longer a UI-visible for setting notification vibrate on/off (in
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * our design), but the functionality still exists. Force the
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * notification vibrate to on.
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            loadVibrateSetting(db, true);
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (Config.LOGD) Log.d(TAG, "Reset system vibrate setting");
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 21;
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1649bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 22) {
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 22;
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Upgrade the lock gesture storage location and format
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeLockPatternLocation(db);
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 23) {
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 23;
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 23) {
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Shortcuts, applications, folders
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Photo frames, clocks
18404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                db.execSQL(
18504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Search boxes
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 24;
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1949bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 24) {
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // The value of the constants for preferring wifi or preferring mobile have been
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // swapped, so reload the default.
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='network_preference'");
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 25;
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
209f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
210f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 25) {
211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
212f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD uri TEXT");
214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 26;
220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2219bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 26) {
223f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This introduces the new secure settings table.
224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                createSecureTable(db);
227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 27;
232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2339bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 27) {
235f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Copy settings values from 'system' to 'secure' and delete them from 'system'
236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            SQLiteStatement insertStmt = null;
237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            SQLiteStatement deleteStmt = null;
2389bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                insertStmt =
242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM "
243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + "system WHERE name=?");
244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?");
245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String[] settingsToMove = {
247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ADB_ENABLED,
248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ANDROID_ID,
249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.BLUETOOTH_ON,
250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DATA_ROAMING,
251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DEVICE_PROVISIONED,
252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.HTTP_PROXY,
253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.INSTALL_NON_MARKET_APPS,
254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOGGING_ID,
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.NETWORK_PREFERENCE,
257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_ENABLED,
258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.SETTINGS_CLASSNAME,
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USB_MASS_STORAGE_ENABLED,
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USE_GOOGLE_MAIL,
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_ON,
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ON,
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                };
2799bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                for (String setting : settingsToMove) {
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.bindString(1, setting);
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.execute();
2839bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.bindString(1, setting);
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.execute();
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (insertStmt != null) {
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.close();
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (deleteStmt != null) {
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.close();
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 28;
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2999bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 28 || upgradeVersion == 29) {
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Note: The upgrade to 28 was flawed since it didn't delete the old
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // setting first before inserting. Combining 28 and 29 with the
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // fixed version.
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This upgrade adds the STREAM_NOTIFICATION type to the list of
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // types affected by ringer modes (silent, vibrate, etc.)
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int newValue = (1 << AudioManager.STREAM_RING)
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_NOTIFICATION)
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_SYSTEM);
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('"
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + String.valueOf(newValue) + "')");
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
3219bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 30;
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3249bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3259266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        if (upgradeVersion == 30) {
3269266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            /*
3279266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * Upgrade 31 clears the title for all quick launch shortcuts so the
3289266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * activities' titles will be resolved at display time. Also, the
3299266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * folder is changed to '@quicklaunch'.
3309266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             */
3319266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            db.beginTransaction();
3329266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            try {
3339266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
3349266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET title = ''");
3359266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.setTransactionSuccessful();
3369266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            } finally {
3379266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.endTransaction();
3389266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            }
3399266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            upgradeVersion = 31;
3409266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        }
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 31) {
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            /*
344ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * Animations are now managed in preferences, and may be
345ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * enabled or disabled based on product resources.
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             */
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            db.beginTransaction();
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " VALUES(?,?);");
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadDefaultAnimationSettings(stmt);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                stmt.close();
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.setTransactionSuccessful();
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } finally {
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.endTransaction();
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 32;
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 32) {
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // The Wi-Fi watchdog SSID list is now seeded with the value of
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // the property ro.com.android.wifi-watchlist
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!TextUtils.isEmpty(wifiWatchList)) {
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.beginTransaction();
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            wifiWatchList + "');");
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.setTransactionSuccessful();
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } finally {
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.endTransaction();
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 33;
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3824df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        if (upgradeVersion == 33) {
3834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // Set the default zoom controls to: tap-twice to bring up +/-
3844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            db.beginTransaction();
3854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            try {
3864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
3874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.setTransactionSuccessful();
3884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            } finally {
3894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.endTransaction();
3904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            }
3914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            upgradeVersion = 34;
3924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
394bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        if (upgradeVersion == 34) {
395bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            db.beginTransaction();
396bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            try {
397cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
398cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                        + " VALUES(?,?);");
399cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                loadSecure35Settings(stmt);
400cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                stmt.close();
401cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.setTransactionSuccessful();
402cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            } finally {
403cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.endTransaction();
404cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            }
405f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller            upgradeVersion = 35;
40602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
40702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
40802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // was accidentally done out of order here.
40902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
41002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // and we intentionally do nothing from 35 to 36 now.
41102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 35) {
412575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project            upgradeVersion = 36;
413cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        }
41402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
415a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        if (upgradeVersion == 36) {
416a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent           // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
417a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            // types affected by ringer modes (silent, vibrate, etc.)
418a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            db.beginTransaction();
419a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            try {
420a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("DELETE FROM system WHERE name='"
421a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
422a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                int newValue = (1 << AudioManager.STREAM_RING)
423a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_NOTIFICATION)
424a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM)
425a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
426a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("INSERT INTO system ('name', 'value') values ('"
427a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
428a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + String.valueOf(newValue) + "')");
429a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.setTransactionSuccessful();
430a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            } finally {
431a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.endTransaction();
432a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            }
4334880575bacd9f49d864e8b61efca8cdeb231895cJim Miller            upgradeVersion = 37;
434a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        }
435a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent
436bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        if (upgradeVersion == 37) {
437bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            db.beginTransaction();
438bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            try {
439bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
440bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        + " VALUES(?,?);");
441bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
442bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        R.string.airplane_mode_toggleable_radios);
443bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                stmt.close();
444bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.setTransactionSuccessful();
445bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            } finally {
446bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.endTransaction();
447bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            }
448bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            upgradeVersion = 38;
449bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        }
450bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
45102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 38) {
45202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            db.beginTransaction();
45302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            try {
45402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                String value =
45502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
45602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
45702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        Settings.Secure.ASSISTED_GPS_ENABLED + "','" + value + "');");
45802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.setTransactionSuccessful();
45902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            } finally {
46002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.endTransaction();
46102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            }
46202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
46302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            upgradeVersion = 39;
46402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
46502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
466951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        if (upgradeVersion == 39) {
467951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            db.beginTransaction();
468951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            try {
469951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                String value =
470951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        mContext.getResources().getBoolean(
471951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
472951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.execSQL("INSERT OR IGNORE INTO system(name,value) values('" +
473951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
474951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.setTransactionSuccessful();
475951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            } finally {
476951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.endTransaction();
477951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            }
478951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
479951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            upgradeVersion = 40;
480951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        }
481951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
482bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (upgradeVersion == 40) {
483bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            /*
484bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             * All animations are now turned on by default!
485bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             */
486bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            db.beginTransaction();
487bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            try {
488bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
489bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
490bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
491bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
492bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
493bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + " VALUES(?,?);");
494bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                loadDefaultAnimationSettings(stmt);
495bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                stmt.close();
496bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.setTransactionSuccessful();
497bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } finally {
498bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.endTransaction();
499bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
500bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            upgradeVersion = 41;
501bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        }
502bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn
503075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        if (upgradeVersion == 41) {
504075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            /*
505075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             * Initialize newly public haptic feedback setting
506075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn             */
507075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            db.beginTransaction();
508075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            try {
509075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
510075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + Settings.System.HAPTIC_FEEDBACK_ENABLED + "'");
511075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
512075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                        + " VALUES(?,?);");
513075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                loadDefaultHapticSettings(stmt);
514075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                stmt.close();
515075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.setTransactionSuccessful();
516075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            } finally {
517075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                db.endTransaction();
518075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            }
519075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn            upgradeVersion = 42;
520075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        }
521075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
522ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        if (upgradeVersion == 42) {
523ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            /*
524ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             * Initialize new notification pulse setting
525ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani             */
526ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            db.beginTransaction();
527ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            try {
528ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
529ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        + " VALUES(?,?);");
530ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
531ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                        R.bool.def_notification_pulse);
532ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                stmt.close();
533ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.setTransactionSuccessful();
534ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            } finally {
535ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                db.endTransaction();
536ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            }
537ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani            upgradeVersion = 43;
538ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        }
539ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani
540484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        if (upgradeVersion == 43) {
541484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            /*
542484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             * This upgrade stores bluetooth volume separately from voice volume
543484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent             */
544484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            db.beginTransaction();
545484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            try {
546484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
547484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        + " VALUES(?,?);");
548484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO,
549484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                        AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
550484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                stmt.close();
551484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.setTransactionSuccessful();
552484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            } finally {
553484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                db.endTransaction();
554484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            }
555484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent            upgradeVersion = 44;
556484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        }
557484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent
558aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        if (upgradeVersion == 44) {
559aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            /*
560aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             * Gservices was moved into vendor/google.
561aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker             */
562aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP TABLE IF EXISTS gservices");
563aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
564aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker            upgradeVersion = 45;
565aed8f8eb1491a21c8c71d39258b70edb74533a62Doug Zongker        }
56687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
56787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        if (upgradeVersion == 45) {
56887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat             /*
56987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              * New settings for MountService
57087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat              */
57187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            db.beginTransaction();
57287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            try {
57387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
57487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND + "','1');");
57587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
57687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_AUTOSTART + "','0');");
57787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
57887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_PROMPT + "','1');");
57987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.execSQL("INSERT INTO secure(name,value) values('" +
58087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                        Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED + "','1');");
58187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.setTransactionSuccessful();
58287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            } finally {
58387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                db.endTransaction();
58487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            }
58587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat            upgradeVersion = 46;
58687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        }
58787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
588df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn        if (upgradeVersion == 46) {
589df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            /*
590df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * The password mode constants have changed; reset back to no
591df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             * password.
592df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn             */
593df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            db.beginTransaction();
594df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            try {
595df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
596df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.setTransactionSuccessful();
597df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            } finally {
598df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn                db.endTransaction();
599df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn            }
600df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn           upgradeVersion = 47;
601df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn       }
602df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn
6036176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6049327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        if (upgradeVersion == 47) {
6059327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            /*
6069327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * The password mode constants have changed again; reset back to no
6079327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             * password.
6089327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn             */
6099327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            db.beginTransaction();
6109327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            try {
6119327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='lockscreen.password_type';");
6129327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.setTransactionSuccessful();
6139327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            } finally {
6149327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn                db.endTransaction();
6159327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            }
6169327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn           upgradeVersion = 48;
6179327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn       }
6186176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6195d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       if (upgradeVersion == 48) {
6205d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           /*
6215d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            * Adding a new setting for which voice recognition service to use.
6225d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            */
6235d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           db.beginTransaction();
6245d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           try {
6255d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau               SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
6265d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau                       + " VALUES(?,?);");
6275d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau               loadVoiceRecognitionServiceSetting(stmt);
6285d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau               stmt.close();
6295d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau               db.setTransactionSuccessful();
6305d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           } finally {
6315d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau               db.endTransaction();
6325d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           }
6335d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau           upgradeVersion = 49;
6345d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau       }
63531f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
6369327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn       if (upgradeVersion != currentVersion) {
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    + ", must wipe the settings provider");
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS system");
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS systemIndex1");
641f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS secure");
642f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS secureIndex1");
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS gservices");
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bookmarks");
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS favorites");
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            onCreate(db);
6516176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
6526176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            // Added for diagnosing settings.db wipes after the fact
6536176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion;
6546176677e01964cb5751ff217c091571ce6a8b5fbJim Miller            db.execSQL("INSERT INTO secure(name,value) values('" +
6556176677e01964cb5751ff217c091571ce6a8b5fbJim Miller                    "wiped_db_reason" + "','" + wipeReason + "');");
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
65754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void upgradeLockPatternLocation(SQLiteDatabase db) {
6609bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'",
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                null, null, null, null);
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c.getCount() > 0) {
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.moveToFirst();
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String lockPattern = c.getString(1);
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!TextUtils.isEmpty(lockPattern)) {
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Convert lock pattern
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
66831f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller                    LockPatternUtils lpu = new LockPatternUtils(mContext);
6699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                    List<LockPatternView.Cell> cellPattern =
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            LockPatternUtils.stringToPattern(lockPattern);
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    lpu.saveLockPattern(cellPattern);
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (IllegalArgumentException e) {
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    // Don't want corrupted lock pattern to hang the reboot process
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.delete("system", "name='lock_pattern'", null);
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmarked shortcuts from an xml file.
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param startingIndex The zero-based position at which bookmarks in this file should begin
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param subPath The relative path from ANDROID_ROOT to the file to read
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param quiet If true, do no complain if the file is missing
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int loadBookmarks(SQLiteDatabase db, int startingIndex, String subPath,
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean quiet) {
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        FileReader bookmarksReader;
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        final File favFile = new File(Environment.getRootDirectory(), subPath);
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        try {
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            bookmarksReader = new FileReader(favFile);
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (FileNotFoundException e) {
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!quiet) {
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                Log.e(TAG, "Couldn't find or open bookmarks file " + favFile);
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
70354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 0;
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Intent intent = new Intent(Intent.ACTION_MAIN, null);
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        intent.addCategory(Intent.CATEGORY_LAUNCHER);
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ContentValues values = new ContentValues();
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        PackageManager packageManager = mContext.getPackageManager();
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ActivityInfo info;
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int i = startingIndex;
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        try {
71454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlPullParser parser = Xml.newPullParser();
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            parser.setInput(bookmarksReader);
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlUtils.beginDocument(parser, "bookmarks");
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            while (true) {
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                XmlUtils.nextElement(parser);
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String name = parser.getName();
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!"bookmark".equals(name)) {
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String pkg = parser.getAttributeValue(null, "package");
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String cls = parser.getAttributeValue(null, "class");
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String shortcutStr = parser.getAttributeValue(null, "shortcut");
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                int shortcutValue = (int) shortcutStr.charAt(0);
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (TextUtils.isEmpty(shortcutStr)) {
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
73354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ComponentName cn = new ComponentName(pkg, cls);
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    info = packageManager.getActivityInfo(cn, 0);
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setComponent(cn);
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.INTENT, intent.toURI());
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.TITLE,
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            info.loadLabel(packageManager).toString());
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    db.insert("bookmarks", null, values);
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    i++;
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (PackageManager.NameNotFoundException e) {
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (XmlPullParserException e) {
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (IOException e) {
75254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return i;
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmark packages.
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadBookmarks(SQLiteDatabase db) {
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadBookmarks(db, 0, DEFAULT_BOOKMARKS_PATH, false);
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default volume levels. It is actually inserting the index of
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * the volume array for each of the volume controls.
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db the database to insert the volume levels into
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
77354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVolumeLevels(SQLiteDatabase db) {
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
777f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_MUSIC,
778f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
779f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_RING,
780f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]);
781f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
782f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
783f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(
784f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                stmt,
785f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Settings.System.VOLUME_VOICE,
786f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
787f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_ALARM,
788f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]);
789f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(
790f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                stmt,
791f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Settings.System.VOLUME_NOTIFICATION,
792f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]);
793484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent        loadSetting(
794484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                stmt,
795484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                Settings.System.VOLUME_BLUETOOTH_SCO,
796484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_BLUETOOTH_SCO]);
797484d2888680e18e6ad8c3fcc51e3b70a705a096eEric Laurent
798f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.MODE_RINGER,
799f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.RINGER_MODE_NORMAL);
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVibrateSetting(db, false);
8029bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // By default, only the ring/notification and system streams are affected
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
805f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                (1 << AudioManager.STREAM_RING) | (1 << AudioManager.STREAM_NOTIFICATION) |
806a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                (1 << AudioManager.STREAM_SYSTEM) | (1 << AudioManager.STREAM_SYSTEM_ENFORCED));
8079bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                ((1 << AudioManager.STREAM_MUSIC) |
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                 (1 << AudioManager.STREAM_RING) |
811f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                 (1 << AudioManager.STREAM_NOTIFICATION) |
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                 (1 << AudioManager.STREAM_SYSTEM)));
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.close();
81554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
81654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (deleteOld) {
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
8219bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Vibrate off by default for ringer, on for notification
82654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int vibrate = 0;
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        vibrate = AudioService.getValueForVibrateSetting(vibrate,
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        vibrate = AudioService.getValueForVibrateSetting(vibrate,
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSettings(SQLiteDatabase db) {
835f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSystemSettings(db);
8369bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSecureSettings(db);
837f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
8389bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
839f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSystemSettings(SQLiteDatabase db) {
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
8429bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Resources r = mContext.getResources();
8449bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_dim_screen);
8479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_screen_off_timeout);
8519bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
852d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma emergency tone
853d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
854d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
855d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma call auto retry
856d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
857d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
858d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma DTMF type
859d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
860d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
861d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default hearing aid
862d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.HEARING_AID, 0);
863d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
864d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default tty mode
865d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.TTY_MODE, 0);
866d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_airplane_mode_on);
8699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.string.def_airplane_mode_radios);
8729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
873bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
874bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                R.string.airplane_mode_toggleable_radios);
875bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_auto_time); // Sync time to NITZ
8789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_screen_brightness);
8819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
882951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
883951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                R.bool.def_screen_brightness_automatic_mode);
884951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadDefaultAnimationSettings(stmt);
88654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_accelerometer_rotation);
8899bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
890075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        loadDefaultHapticSettings(stmt);
891075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
892ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani        loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
893ae3ed706702a5ebe6ffcc08b941b1401c9a24b89Amith Yamasani                R.bool.def_notification_pulse);
894117818e4f171b1fd9daa05349c48f61388f04567Suchi Amalapurapu        loadBooleanSetting(stmt, Settings.System.SET_INSTALL_LOCATION, R.bool.set_install_location);
895a9c1625e71ddd7a9cdaf9d1720be8c58e4809fa6Suchi Amalapurapu        loadSetting(stmt, Settings.System.DEFAULT_INSTALL_LOCATION,
896a9c1625e71ddd7a9cdaf9d1720be8c58e4809fa6Suchi Amalapurapu                PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY);
897f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        stmt.close();
898f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
8999bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_animation_scale, 1);
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_transition_scale, 1);
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9069bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
907075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    private void loadDefaultHapticSettings(SQLiteStatement stmt) {
908075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn        loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
909075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn                R.bool.def_haptic_feedback);
910075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn    }
911075a18d607c3aa8386b4d06aea22f4bfacbe447bDianne Hackborn
912f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSecureSettings(SQLiteDatabase db) {
913f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
914f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                + " VALUES(?,?);");
9159bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON,
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_bluetooth_on);
9189bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
919f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Data roaming default, based on build
9209bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.DATA_ROAMING,
921f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "true".equalsIgnoreCase(
9229bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                        SystemProperties.get("ro.com.android.dataroaming",
9239bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                                "false")) ? 1 : 0);
9249bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_install_non_market_apps);
9279bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.string.def_location_providers_allowed);
9309bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
931bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED,
932bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood                R.bool.assisted_gps_enabled);
933bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE,
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_network_preference);
9369bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED,
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_usb_mass_storage_enabled);
9399bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.WIFI_ON,
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_wifi_on);
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_networks_available_notification_on);
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!TextUtils.isEmpty(wifiWatchList)) {
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
95004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Set the preferred network mode to 0 = Global, CDMA default
951ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh        int type = SystemProperties.getInt("ro.telephony.default_network",
95204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.PREFERRED_NETWORK_MODE);
953ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh        loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type);
95404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
95504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Enable or disable Cell Broadcast SMS
95604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS,
95704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
95804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
95904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Set the preferred cdma subscription to 0 = Subscription from RUIM, when available
9609bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.PREFERRED_CDMA_SUBSCRIPTION,
96104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.PREFERRED_CDMA_SUBSCRIPTION);
96204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
96354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
96454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // persistent system property instead.
965f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
9669bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Allow mock locations default, based on build
9689bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
9709bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
971cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadSecure35Settings(stmt);
97287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
97387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
97487734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                R.bool.def_mount_play_notification_snd);
97587734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
97687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_AUTOSTART,
97787734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                R.bool.def_mount_ums_autostart);
97887734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
97987734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_PROMPT,
98087734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                R.bool.def_mount_ums_prompt);
98187734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
98287734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat        loadBooleanSetting(stmt, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED,
98387734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat                R.bool.def_mount_ums_notify_enabled);
9846176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
9855d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        loadVoiceRecognitionServiceSetting(stmt);
98687734d3bc118cba8f42845ddd51f10edadb84abfSan Mehat
98754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.close();
98854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
98954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
990cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    private void loadSecure35Settings(SQLiteStatement stmt) {
991cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
992cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.bool.def_backup_enabled);
99331f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
994cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
995cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.string.def_backup_transport);
996cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    }
9976176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
9985d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau    /**
9995d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau     * Introduced in database version 49.
10005d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau     */
10015d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau    private void loadVoiceRecognitionServiceSetting(SQLiteStatement stmt) {
10025d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        String selectedService = null;
10035d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        List<ResolveInfo> availableRecognitionServices =
10045d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau                mContext.getPackageManager().queryIntentServices(
1005cb0be8a530d6fefdb05f009980c029c4da14bf98Mike LeBeau                        new Intent(RecognitionService.SERVICE_INTERFACE), 0);
10065d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        int numAvailable = availableRecognitionServices.size();
10076176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
10085d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        if (numAvailable == 0) {
10095d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            Log.w(TAG, "no available voice recognition services found");
10105d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        } else {
10115d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            if (numAvailable > 1) {
10125d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau                Log.w(TAG, "more than one voice recognition service found, picking first");
10135d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            }
10146176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
10155d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            ServiceInfo serviceInfo = availableRecognitionServices.get(0).serviceInfo;
10165d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau            selectedService =
10175d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau                    new ComponentName(serviceInfo.packageName, serviceInfo.name).flattenToString();
10185d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        }
10196176677e01964cb5751ff217c091571ce6a8b5fbJim Miller
10205d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau        loadSetting(stmt, Settings.Secure.VOICE_RECOGNITION_SERVICE,
10215d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau                selectedService == null ? "" : selectedService);
10225d34e9b63d5305934dcedac11e8dd658ae23c174Mike LeBeau    }
102331f90b62e8c83270094f5b0b4c75a0e06d72cd75Jim Miller
102454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
102554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(1, key);
102654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(2, value.toString());
102754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.execute();
102854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
10299bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key, mContext.getResources().getString(resid));
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10339bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mContext.getResources().getBoolean(resid) ? "1" : "0");
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10389bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer.toString(mContext.getResources().getInteger(resid)));
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10439bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Float.toString(mContext.getResources().getFraction(resid, base, base)));
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
104854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1049