DatabaseHelper.java revision bfe319e06aa56c081d0d94d64a8181291d7f7388
154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/*
254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * you may not use this file except in compliance with the License.
654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * You may obtain a copy of the License at
754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * See the License for the specific language governing permissions and
1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * limitations under the License.
1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpackage com.android.providers.settings;
1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ComponentName;
2054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.ContentValues;
2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Context;
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Intent;
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.ActivityInfo;
2454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.pm.PackageManager;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources;
2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.Cursor;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase;
28f186055a53758fd4112ab3c470cda6337a18fa33Jim Millerimport android.database.sqlite.SQLiteDoneException;
29f186055a53758fd4112ab3c470cda6337a18fa33Jim Millerimport android.database.sqlite.SQLiteException;
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteOpenHelper;
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.database.sqlite.SQLiteStatement;
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioManager;
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.media.AudioService;
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.net.ConnectivityManager;
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Environment;
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.SystemProperties;
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.provider.Settings;
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.text.TextUtils;
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Config;
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Log;
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.util.Xml;
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.util.XmlUtils;
4304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport com.android.internal.telephony.RILConstants;
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternUtils;
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport com.android.internal.widget.LockPatternView;
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser;
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException;
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.File;
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileNotFoundException;
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.FileReader;
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.io.IOException;
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.List;
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Database helper class for {@link SettingsProvider}.
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Mostly just has a bit {@link #onCreate} to initialize the database.
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
61074da8f9aa424b25d84f4e4eb762ca534ea96716James Wylderpublic class DatabaseHelper extends SQLiteOpenHelper {
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Path to file containing default bookmarks, relative to ANDROID_ROOT.
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DEFAULT_BOOKMARKS_PATH = "etc/bookmarks.xml";
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String TAG = "SettingsProvider";
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DATABASE_NAME = "settings.db";
69f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller
70f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // Please, please please. If you update the database version, check to make sure the
71f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
72f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // is properly propagated through your change.  Not doing so will result in a loss of user
73f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller    // settings.
74bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn    private static final int DATABASE_VERSION = 41;
759bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private Context mContext;
7754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public DatabaseHelper(Context context) {
7954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        super(context, DATABASE_NAME, null, DATABASE_VERSION);
8054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mContext = context;
8154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
8254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void createSecureTable(SQLiteDatabase db) {
84f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE TABLE secure (" +
85f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
86f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "name TEXT UNIQUE ON CONFLICT REPLACE," +
87f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "value TEXT" +
88f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                ");");
89f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        db.execSQL("CREATE INDEX secureIndex1 ON secure (name);");
90f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
919bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onCreate(SQLiteDatabase db) {
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE system (" +
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT UNIQUE ON CONFLICT REPLACE," +
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "value TEXT" +
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX systemIndex1 ON system (name);");
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
101f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        createSecureTable(db);
102f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE gservices (" +
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                   "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                   "name TEXT UNIQUE ON CONFLICT REPLACE," +
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                   "value TEXT" +
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                   ");");
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX gservicesIndex1 ON gservices (name);");
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bluetooth_devices (" +
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "name TEXT," +
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "addr TEXT," +
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "channel INTEGER," +
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "type INTEGER" +
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE TABLE bookmarks (" +
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "_id INTEGER PRIMARY KEY," +
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "title TEXT," +
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "folder TEXT," +
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "intent TEXT," +
12354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "shortcut INTEGER," +
12454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    "ordering INTEGER" +
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ");");
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Populate bookmarks table with initial bookmarks
13154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadBookmarks(db);
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load initial volume levels into DB
13454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVolumeLevels(db);
13554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
13654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Load inital settings values
13754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSettings(db);
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
13954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    @Override
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Log.w(TAG, "Upgrading settings database from version " + oldVersion + " to "
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + currentVersion);
1449bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int upgradeVersion = oldVersion;
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
14754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Pattern for upgrade blocks:
14854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //
14954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    if (upgradeVersion == [the DATABASE_VERSION you set] - 1) {
15054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        .. your upgrade logic..
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //        upgradeVersion = [the DATABASE_VERSION you set]
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        //    }
1539bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 20) {
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            /*
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * Version 21 is part of the volume control refresh. There is no
15754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * longer a UI-visible for setting notification vibrate on/off (in
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * our design), but the functionality still exists. Force the
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             * notification vibrate to on.
16054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project             */
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            loadVibrateSetting(db, true);
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (Config.LOGD) Log.d(TAG, "Reset system vibrate setting");
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 21;
16554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1669bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 22) {
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 22;
16954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // Upgrade the lock gesture storage location and format
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeLockPatternLocation(db);
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion < 23) {
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("UPDATE favorites SET iconResource=0 WHERE iconType=0");
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 23;
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
17854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 23) {
17954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
18054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
18154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanX INTEGER");
18254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD spanY INTEGER");
18354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Shortcuts, applications, folders
18454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=1, spanY=1 WHERE itemType<=0");
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Photo frames, clocks
18604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                db.execSQL(
18704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                    "UPDATE favorites SET spanX=2, spanY=2 WHERE itemType=1000 or itemType=1002");
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Search boxes
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("UPDATE favorites SET spanX=4, spanY=1 WHERE itemType=1001");
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 24;
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
1969bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion == 24) {
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.beginTransaction();
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            try {
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // The value of the constants for preferring wifi or preferring mobile have been
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // swapped, so reload the default.
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='network_preference'");
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('network_preference', '" +
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        ConnectivityManager.DEFAULT_NETWORK_PREFERENCE + "')");
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.setTransactionSuccessful();
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } finally {
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                db.endTransaction();
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            upgradeVersion = 25;
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
211f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
212f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 25) {
213f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
214f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
215f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD uri TEXT");
216f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("ALTER TABLE favorites ADD displayMode INTEGER");
217f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
218f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
219f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
220f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
221f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 26;
222f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2239bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
224f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 26) {
225f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This introduces the new secure settings table.
226f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
227f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
228f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                createSecureTable(db);
229f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
230f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
231f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
232f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
233f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 27;
234f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
2359bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
236f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 27) {
237f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Copy settings values from 'system' to 'secure' and delete them from 'system'
238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            SQLiteStatement insertStmt = null;
239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            SQLiteStatement deleteStmt = null;
2409bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                insertStmt =
244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    db.compileStatement("INSERT INTO secure (name,value) SELECT name,value FROM "
245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + "system WHERE name=?");
246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                deleteStmt = db.compileStatement("DELETE FROM system WHERE name=?");
247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                String[] settingsToMove = {
249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ADB_ENABLED,
250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.ANDROID_ID,
251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.BLUETOOTH_ON,
252f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DATA_ROAMING,
253f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.DEVICE_PROVISIONED,
254f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.HTTP_PROXY,
255f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.INSTALL_NON_MARKET_APPS,
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
257f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.LOGGING_ID,
258f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.NETWORK_PREFERENCE,
259f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_ENABLED,
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.SETTINGS_CLASSNAME,
263f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USB_MASS_STORAGE_ENABLED,
264f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.USE_GOOGLE_MAIL,
265f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
266f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
267f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT,
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_ON,
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE,
270f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_AP_COUNT,
271f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS,
272f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED,
273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS,
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT,
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS,
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_ON,
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_COUNT,
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS,
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS,
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                };
2819bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
282f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                for (String setting : settingsToMove) {
283f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.bindString(1, setting);
284f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.execute();
2859bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.bindString(1, setting);
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.execute();
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (insertStmt != null) {
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    insertStmt.close();
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (deleteStmt != null) {
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    deleteStmt.close();
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 28;
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3019bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (upgradeVersion == 28 || upgradeVersion == 29) {
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // Note: The upgrade to 28 was flawed since it didn't delete the old
304f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // setting first before inserting. Combining 28 and 29 with the
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // fixed version.
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // This upgrade adds the STREAM_NOTIFICATION type to the list of
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // types affected by ringer modes (silent, vibrate, etc.)
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.beginTransaction();
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            try {
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
312f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                int newValue = (1 << AudioManager.STREAM_RING)
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_NOTIFICATION)
315f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        | (1 << AudioManager.STREAM_SYSTEM);
316f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.execSQL("INSERT INTO system ('name', 'value') values ('"
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        + String.valueOf(newValue) + "')");
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.setTransactionSuccessful();
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } finally {
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                db.endTransaction();
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
3239bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            upgradeVersion = 30;
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
3269bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3279266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        if (upgradeVersion == 30) {
3289266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            /*
3299266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * Upgrade 31 clears the title for all quick launch shortcuts so the
3309266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * activities' titles will be resolved at display time. Also, the
3319266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             * folder is changed to '@quicklaunch'.
3329266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project             */
3339266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            db.beginTransaction();
3349266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            try {
3359266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET folder = '@quicklaunch'");
3369266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.execSQL("UPDATE bookmarks SET title = ''");
3379266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.setTransactionSuccessful();
3389266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            } finally {
3399266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project                db.endTransaction();
3409266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            }
3419266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project            upgradeVersion = 31;
3429266c558bf1d21ff647525ff99f7dadbca417309The Android Open Source Project        }
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 31) {
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            /*
346ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * Animations are now managed in preferences, and may be
347ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project             * enabled or disabled based on product resources.
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project             */
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            db.beginTransaction();
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.execSQL("DELETE FROM system WHERE name='"
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        + " VALUES(?,?);");
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                loadDefaultAnimationSettings(stmt);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                stmt.close();
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.setTransactionSuccessful();
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } finally {
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.endTransaction();
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 32;
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (upgradeVersion == 32) {
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // The Wi-Fi watchdog SSID list is now seeded with the value of
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // the property ro.com.android.wifi-watchlist
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!TextUtils.isEmpty(wifiWatchList)) {
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                db.beginTransaction();
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                try {
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            wifiWatchList + "');");
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.setTransactionSuccessful();
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } finally {
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    db.endTransaction();
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            upgradeVersion = 33;
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3839bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
3844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        if (upgradeVersion == 33) {
3854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            // Set the default zoom controls to: tap-twice to bring up +/-
3864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            db.beginTransaction();
3874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            try {
3884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.execSQL("INSERT INTO system(name,value) values('zoom','2');");
3894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.setTransactionSuccessful();
3904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            } finally {
3914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                db.endTransaction();
3924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            }
3934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project            upgradeVersion = 34;
3944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project        }
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
396bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        if (upgradeVersion == 34) {
397bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            db.beginTransaction();
398bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood            try {
399cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
400cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                        + " VALUES(?,?);");
401cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                loadSecure35Settings(stmt);
402cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                stmt.close();
403cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.setTransactionSuccessful();
404cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            } finally {
405cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                db.endTransaction();
406cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn            }
407f186055a53758fd4112ab3c470cda6337a18fa33Jim Miller            upgradeVersion = 35;
40802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
40902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // due to a botched merge from donut to eclair, the initialization of ASSISTED_GPS_ENABLED
41002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // was accidentally done out of order here.
41102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // to fix this, ASSISTED_GPS_ENABLED is now initialized while upgrading from 38 to 39,
41202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            // and we intentionally do nothing from 35 to 36 now.
41302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 35) {
414575d1af980f4b4866325bfc487455f54606cf49eThe Android Open Source Project            upgradeVersion = 36;
415cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        }
41602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
417a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        if (upgradeVersion == 36) {
418a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent           // This upgrade adds the STREAM_SYSTEM_ENFORCED type to the list of
419a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            // types affected by ringer modes (silent, vibrate, etc.)
420a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            db.beginTransaction();
421a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            try {
422a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("DELETE FROM system WHERE name='"
423a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
424a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                int newValue = (1 << AudioManager.STREAM_RING)
425a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_NOTIFICATION)
426a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM)
427a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        | (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
428a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.execSQL("INSERT INTO system ('name', 'value') values ('"
429a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
430a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                        + String.valueOf(newValue) + "')");
431a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.setTransactionSuccessful();
432a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            } finally {
433a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                db.endTransaction();
434a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent            }
4354880575bacd9f49d864e8b61efca8cdeb231895cJim Miller            upgradeVersion = 37;
436a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent        }
437a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent
438bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        if (upgradeVersion == 37) {
439bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            db.beginTransaction();
440bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            try {
441bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
442bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        + " VALUES(?,?);");
443bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
444bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                        R.string.airplane_mode_toggleable_radios);
445bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                stmt.close();
446bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.setTransactionSuccessful();
447bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            } finally {
448bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                db.endTransaction();
449bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            }
450bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood            upgradeVersion = 38;
451bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        }
452bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
45302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        if (upgradeVersion == 38) {
45402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            db.beginTransaction();
45502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            try {
45602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                String value =
45702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        mContext.getResources().getBoolean(R.bool.assisted_gps_enabled) ? "1" : "0";
45802901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
45902901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                        Settings.Secure.ASSISTED_GPS_ENABLED + "','" + value + "');");
46002901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.setTransactionSuccessful();
46102901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            } finally {
46202901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood                db.endTransaction();
46302901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            }
46402901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
46502901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood            upgradeVersion = 39;
46602901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood        }
46702901eb7f21751b8a9486ffa9f50531bd59133a2Mike Lockwood
468951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        if (upgradeVersion == 39) {
469951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            db.beginTransaction();
470951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            try {
471951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                String value =
472951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        mContext.getResources().getBoolean(
473951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        R.bool.def_screen_brightness_automatic_mode) ? "1" : "0";
474951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.execSQL("INSERT OR IGNORE INTO system(name,value) values('" +
475951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                        Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');");
476951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.setTransactionSuccessful();
477951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            } finally {
478951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                db.endTransaction();
479951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            }
480951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
481951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy            upgradeVersion = 40;
482951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        }
483951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
484bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        if (upgradeVersion == 40) {
485bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            /*
486bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             * All animations are now turned on by default!
487bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn             */
488bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            db.beginTransaction();
489bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            try {
490bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
491bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.WINDOW_ANIMATION_SCALE + "'");
492bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.execSQL("DELETE FROM system WHERE name='"
493bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + Settings.System.TRANSITION_ANIMATION_SCALE + "'");
494bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                SQLiteStatement stmt = db.compileStatement("INSERT INTO system(name,value)"
495bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                        + " VALUES(?,?);");
496bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                loadDefaultAnimationSettings(stmt);
497bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                stmt.close();
498bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.setTransactionSuccessful();
499bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            } finally {
500bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn                db.endTransaction();
501bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            }
502bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn            upgradeVersion = 41;
503bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn        }
504bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn
50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (upgradeVersion != currentVersion) {
50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    + ", must wipe the settings provider");
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS system");
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS systemIndex1");
510f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS secure");
511f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS secureIndex1");
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS gservices");
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS gservicesIndex1");
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bluetooth_devices");
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS bookmarks");
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1");
51754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2");
51854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DROP TABLE IF EXISTS favorites");
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            onCreate(db);
52054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
52254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void upgradeLockPatternLocation(SQLiteDatabase db) {
5249bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        Cursor c = db.query("system", new String[] {"_id", "value"}, "name='lock_pattern'",
52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                null, null, null, null);
52654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (c.getCount() > 0) {
52754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.moveToFirst();
52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            String lockPattern = c.getString(1);
52954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!TextUtils.isEmpty(lockPattern)) {
53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                // Convert lock pattern
53154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    LockPatternUtils lpu = new LockPatternUtils(mContext.getContentResolver());
5339bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                    List<LockPatternView.Cell> cellPattern =
53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            LockPatternUtils.stringToPattern(lockPattern);
53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    lpu.saveLockPattern(cellPattern);
53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (IllegalArgumentException e) {
53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    // Don't want corrupted lock pattern to hang the reboot process
53854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
53954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
54154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.delete("system", "name='lock_pattern'", null);
54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else {
54354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            c.close();
54454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
54554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
54654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
54754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
54854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmarked shortcuts from an xml file.
54954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
55054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
55154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param startingIndex The zero-based position at which bookmarks in this file should begin
55254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param subPath The relative path from ANDROID_ROOT to the file to read
55354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param quiet If true, do no complain if the file is missing
55454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
55554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int loadBookmarks(SQLiteDatabase db, int startingIndex, String subPath,
55654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean quiet) {
55754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        FileReader bookmarksReader;
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
55954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        final File favFile = new File(Environment.getRootDirectory(), subPath);
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        try {
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            bookmarksReader = new FileReader(favFile);
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (FileNotFoundException e) {
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (!quiet) {
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                Log.e(TAG, "Couldn't find or open bookmarks file " + favFile);
56654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
56754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 0;
56854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        Intent intent = new Intent(Intent.ACTION_MAIN, null);
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        intent.addCategory(Intent.CATEGORY_LAUNCHER);
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ContentValues values = new ContentValues();
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        PackageManager packageManager = mContext.getPackageManager();
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        ActivityInfo info;
57654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int i = startingIndex;
57754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        try {
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlPullParser parser = Xml.newPullParser();
57954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            parser.setInput(bookmarksReader);
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            XmlUtils.beginDocument(parser, "bookmarks");
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            while (true) {
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                XmlUtils.nextElement(parser);
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String name = parser.getName();
58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (!"bookmark".equals(name)) {
58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    break;
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String pkg = parser.getAttributeValue(null, "package");
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String cls = parser.getAttributeValue(null, "class");
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                String shortcutStr = parser.getAttributeValue(null, "shortcut");
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                int shortcutValue = (int) shortcutStr.charAt(0);
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (TextUtils.isEmpty(shortcutStr)) {
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to get shortcut for: " + pkg + "/" + cls);
59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                try {
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    ComponentName cn = new ComponentName(pkg, cls);
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    info = packageManager.getActivityInfo(cn, 0);
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setComponent(cn);
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.INTENT, intent.toURI());
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.TITLE,
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            info.loadLabel(packageManager).toString());
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    values.put(Settings.Bookmarks.SHORTCUT, shortcutValue);
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    db.insert("bookmarks", null, values);
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    i++;
60954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } catch (PackageManager.NameNotFoundException e) {
61054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Log.w(TAG, "Unable to add bookmark: " + pkg + "/" + cls, e);
61154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (XmlPullParserException e) {
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } catch (IOException e) {
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            Log.w(TAG, "Got execption parsing bookmarks.", e);
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
61954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return i;
62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default set of bookmark packages.
62454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db The database to write the values into
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadBookmarks(SQLiteDatabase db) {
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadBookmarks(db, 0, DEFAULT_BOOKMARKS_PATH, false);
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Loads the default volume levels. It is actually inserting the index of
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * the volume array for each of the volume controls.
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param db the database to insert the volume levels into
63654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVolumeLevels(SQLiteDatabase db) {
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
641f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_MUSIC,
642f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_MUSIC]);
643f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_RING,
644f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_RING]);
645f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_SYSTEM,
646f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_SYSTEM]);
647f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(
648f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                stmt,
649f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Settings.System.VOLUME_VOICE,
650f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_VOICE_CALL]);
651f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.VOLUME_ALARM,
652f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_ALARM]);
653f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(
654f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                stmt,
655f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Settings.System.VOLUME_NOTIFICATION,
656f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.DEFAULT_STREAM_VOLUME[AudioManager.STREAM_NOTIFICATION]);
657f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSetting(stmt, Settings.System.MODE_RINGER,
658f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                AudioManager.RINGER_MODE_NORMAL);
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadVibrateSetting(db, false);
6619bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // By default, only the ring/notification and system streams are affected
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.MODE_RINGER_STREAMS_AFFECTED,
664f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                (1 << AudioManager.STREAM_RING) | (1 << AudioManager.STREAM_NOTIFICATION) |
665a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent                (1 << AudioManager.STREAM_SYSTEM) | (1 << AudioManager.STREAM_SYSTEM_ENFORCED));
6669bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                ((1 << AudioManager.STREAM_MUSIC) |
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                 (1 << AudioManager.STREAM_RING) |
670f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                 (1 << AudioManager.STREAM_NOTIFICATION) |
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                 (1 << AudioManager.STREAM_SYSTEM)));
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.close();
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadVibrateSetting(SQLiteDatabase db, boolean deleteOld) {
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (deleteOld) {
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            db.execSQL("DELETE FROM system WHERE name='" + Settings.System.VIBRATE_ON + "'");
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
6809bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Vibrate off by default for ringer, on for notification
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int vibrate = 0;
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        vibrate = AudioService.getValueForVibrateSetting(vibrate,
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        vibrate = AudioService.getValueForVibrateSetting(vibrate,
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate);
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSettings(SQLiteDatabase db) {
694f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        loadSystemSettings(db);
6959bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSecureSettings(db);
696f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
6979bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
698f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSystemSettings(SQLiteDatabase db) {
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                + " VALUES(?,?);");
7019bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Resources r = mContext.getResources();
7039bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_dim_screen);
7069bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_screen_off_timeout);
7109bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
711d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma emergency tone
712d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
713d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
714d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma call auto retry
715d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
716d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
717d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default cdma DTMF type
718d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
719d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
720d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default hearing aid
721d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.HEARING_AID, 0);
722d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
723d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        // Set default tty mode
724d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause        loadSetting(stmt, Settings.System.TTY_MODE, 0);
725d0f6715dcb68fbcee12e0c73326c8d872cb9c5a4David Krause
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_airplane_mode_on);
7289bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.string.def_airplane_mode_radios);
7319bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
732bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood        loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
733bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood                R.string.airplane_mode_toggleable_radios);
734bd5ddf01e4d629982fa8bb667d4be7c5ec3aa79fMike Lockwood
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_auto_time); // Sync time to NITZ
7379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_screen_brightness);
7409bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
741951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy        loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
742951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy                R.bool.def_screen_brightness_automatic_mode);
743951764b97010dfa073126f52b43ea1bdf1b35998Dan Murphy
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadDefaultAnimationSettings(stmt);
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_accelerometer_rotation);
7489bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
749f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        stmt.close();
750f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
7519bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadDefaultAnimationSettings(SQLiteStatement stmt) {
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.WINDOW_ANIMATION_SCALE,
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_animation_scale, 1);
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadFractionSetting(stmt, Settings.System.TRANSITION_ANIMATION_SCALE,
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.fraction.def_window_transition_scale, 1);
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7589bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
759f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void loadSecureSettings(SQLiteDatabase db) {
760f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
761f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                + " VALUES(?,?);");
7629bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.BLUETOOTH_ON,
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_bluetooth_on);
7659bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
766f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Data roaming default, based on build
7679bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.DATA_ROAMING,
768f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                "true".equalsIgnoreCase(
7699bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                        SystemProperties.get("ro.com.android.dataroaming",
7709bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                                "false")) ? 1 : 0);
7719bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_install_non_market_apps);
7749bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.string.def_location_providers_allowed);
7779bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
778bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood        loadBooleanSetting(stmt, Settings.Secure.ASSISTED_GPS_ENABLED,
779bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood                R.bool.assisted_gps_enabled);
780bcab8df83e6e769a7cbcc742e72b47d665998793Mike Lockwood
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadIntegerSetting(stmt, Settings.Secure.NETWORK_PREFERENCE,
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.integer.def_network_preference);
7839bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.USB_MASS_STORAGE_ENABLED,
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_usb_mass_storage_enabled);
7869bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.WIFI_ON,
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_wifi_on);
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                R.bool.def_networks_available_notification_on);
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!TextUtils.isEmpty(wifiWatchList)) {
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
79704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Set the preferred network mode to 0 = Global, CDMA default
798ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh        int type = SystemProperties.getInt("ro.telephony.default_network",
79904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.PREFERRED_NETWORK_MODE);
800ee748d37b01b3affb72b701d95ba20c189887b5fJaikumar Ganesh        loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type);
80104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
80204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Enable or disable Cell Broadcast SMS
80304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        loadSetting(stmt, Settings.Secure.CDMA_CELL_BROADCAST_SMS,
80404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
80504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
80604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        // Set the preferred cdma subscription to 0 = Subscription from RUIM, when available
8079bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.PREFERRED_CDMA_SUBSCRIPTION,
80804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                RILConstants.PREFERRED_CDMA_SUBSCRIPTION);
80904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Don't do this.  The SystemServer will initialize ADB_ENABLED from a
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // persistent system property instead.
812f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        //loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
8139bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Allow mock locations default, based on build
8159bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
8179bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
818cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadSecure35Settings(stmt);
819cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.close();
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
823cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    private void loadSecure35Settings(SQLiteStatement stmt) {
824cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadBooleanSetting(stmt, Settings.Secure.BACKUP_ENABLED,
825cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.bool.def_backup_enabled);
826cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn
827cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn        loadStringSetting(stmt, Settings.Secure.BACKUP_TRANSPORT,
828cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn                R.string.def_backup_transport);
829cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn    }
830cf098294da7a820d5c30d8ed2006ed5446ee1da9Dianne Hackborn
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private void loadSetting(SQLiteStatement stmt, String key, Object value) {
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(1, key);
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.bindString(2, value.toString());
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        stmt.execute();
83554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
8369bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadStringSetting(SQLiteStatement stmt, String key, int resid) {
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key, mContext.getResources().getString(resid));
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8409bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mContext.getResources().getBoolean(resid) ? "1" : "0");
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8459bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer.toString(mContext.getResources().getInteger(resid)));
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void loadFractionSetting(SQLiteStatement stmt, String key, int resid, int base) {
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        loadSetting(stmt, key,
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Float.toString(mContext.getResources().getFraction(resid, base, base)));
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
856