diff options
Diffstat (limited to 'src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java')
-rw-r--r-- | src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java b/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java new file mode 100644 index 0000000..092536d --- /dev/null +++ b/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2014 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.cyanogenmod.themes.provider; + +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.database.sqlite.SQLiteOpenHelper; +import android.provider.ThemesContract.ThemesColumns; +import android.provider.ThemesContract.MixnMatchColumns; +import android.util.Log; + +public class ThemesOpenHelper extends SQLiteOpenHelper { + private static final String TAG = ThemesOpenHelper.class.getName(); + + private static final int DATABASE_VERSION = 2; + private static final String DATABASE_NAME = "themes.db"; + private static final String DEFAULT_PKG_NAME = "default"; + + public ThemesOpenHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(ThemesTable.THEMES_TABLE_CREATE); + db.execSQL(MixnMatchTable.MIXNMATCH_TABLE_CREATE); + + ThemesTable.insertDefaults(db); + MixnMatchTable.insertDefaults(db); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.i(TAG, "Upgrading DB from version " + oldVersion + " to " + newVersion); + try { + if (oldVersion == 1) { + upgradeToVersion2(db); + oldVersion = 2; + } + if (oldVersion != DATABASE_VERSION) { + Log.e(TAG, "Recreating db because unknown database version: " + oldVersion); + dropTables(db); + onCreate(db); + } + } catch(SQLiteException e) { + Log.e(TAG, "onUpgrade: SQLiteException, recreating db. ", e); + Log.e(TAG, "(oldVersion was " + oldVersion + ")"); + dropTables(db); + onCreate(db); + return; + } + } + + private void upgradeToVersion2(SQLiteDatabase db) { + String addStyleColumn = String.format("ALTER TABLE %s ADD COLUMN %s TEXT", + ThemesTable.TABLE_NAME, ThemesColumns.STYLE_URI); + db.execSQL(addStyleColumn); + } + + private void dropTables(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + ThemesTable.TABLE_NAME); + db.execSQL("DROP TABLE IF EXISTS " + MixnMatchTable.TABLE_NAME); + } + + public static class ThemesTable { + protected static final String TABLE_NAME = "themes"; + + private static final String THEMES_TABLE_CREATE = + "CREATE TABLE " + TABLE_NAME + " (" + + ThemesColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + + ThemesColumns.TITLE + " TEXT," + + ThemesColumns.AUTHOR + " TEXT," + + ThemesColumns.PKG_NAME + " TEXT UNIQUE NOT NULL," + + ThemesColumns.DATE_CREATED + " INTEGER," + + ThemesColumns.HOMESCREEN_URI + " TEXT," + + ThemesColumns.LOCKSCREEN_URI + " TEXT," + + ThemesColumns.STYLE_URI + " TEXT," + + ThemesColumns.WALLPAPER_URI + " TEXT," + + ThemesColumns.BOOT_ANIM_URI + " TEXT," + + ThemesColumns.FONT_URI + " TEXT," + + ThemesColumns.STATUSBAR_URI + " TEXT," + + ThemesColumns.ICON_URI + " TEXT," + + ThemesColumns.PRIMARY_COLOR + " TEXT," + + ThemesColumns.SECONDARY_COLOR + " TEXT," + + ThemesColumns.MODIFIES_LAUNCHER + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_LOCKSCREEN + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_ICONS + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_BOOT_ANIM + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_FONTS + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_RINGTONES + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_NOTIFICATIONS + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_ALARMS + " INTEGER DEFAULT 0, " + + ThemesColumns.MODIFIES_OVERLAYS + " INTEGER DEFAULT 0, " + + ThemesColumns.PRESENT_AS_THEME + " INTEGER DEFAULT 0, " + + ThemesColumns.IS_LEGACY_THEME + " INTEGER DEFAULT 0," + + ThemesColumns.LAST_UPDATE_TIME + " INTEGER DEFAULT 0" + + ")"; + + public static void insertDefaults(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + values.put(ThemesColumns.TITLE, "Holo (Default)"); + values.put(ThemesColumns.PKG_NAME, DEFAULT_PKG_NAME); + values.put(ThemesColumns.PRIMARY_COLOR, 0xff33b5e5); + values.put(ThemesColumns.SECONDARY_COLOR, 0xff000000); + values.put(ThemesColumns.AUTHOR, "Android"); + values.put(ThemesColumns.BOOT_ANIM_URI, "file:///android_asset/default_holo_theme/holo_boot_anim.jpg"); + values.put(ThemesColumns.HOMESCREEN_URI, "file:///android_asset/default_holo_theme/holo_homescreen.png"); + values.put(ThemesColumns.LOCKSCREEN_URI, "file:///android_asset/default_holo_theme/holo_lockscreen.png"); + values.put(ThemesColumns.STYLE_URI, "file:///android_asset/default_holo_theme/style.jpg"); + values.put(ThemesColumns.WALLPAPER_URI, "file:///android_asset/default_holo_theme/blueice_modcircle.jpg"); + values.put(ThemesColumns.MODIFIES_ALARMS, 1); + values.put(ThemesColumns.MODIFIES_BOOT_ANIM, 1); + values.put(ThemesColumns.MODIFIES_FONTS, 1); + values.put(ThemesColumns.MODIFIES_ICONS, 1); + values.put(ThemesColumns.MODIFIES_LAUNCHER, 1); + values.put(ThemesColumns.MODIFIES_LOCKSCREEN, 1); + values.put(ThemesColumns.MODIFIES_NOTIFICATIONS, 1); + values.put(ThemesColumns.MODIFIES_RINGTONES, 1); + values.put(ThemesColumns.PRESENT_AS_THEME, 1); + values.put(ThemesColumns.IS_LEGACY_THEME, 0); + values.put(ThemesColumns.MODIFIES_OVERLAYS, 1); + db.insert(TABLE_NAME, null, values); + } + } + + public static class MixnMatchTable { + protected static final String TABLE_NAME = "mixnmatch"; + private static final String MIXNMATCH_TABLE_CREATE = + "CREATE TABLE " + TABLE_NAME + " (" + + MixnMatchColumns.COL_KEY + " TEXT PRIMARY KEY," + + MixnMatchColumns.COL_VALUE + " TEXT" + + ")"; + + public static void insertDefaults(SQLiteDatabase db) { + ContentValues values = new ContentValues(); + for(String key : MixnMatchColumns.ROWS) { + values.put(MixnMatchColumns.COL_KEY, key); + values.put(MixnMatchColumns.COL_VALUE, DEFAULT_PKG_NAME); + db.insert(TABLE_NAME, null, values); + } + } + } +} + + |