diff options
Diffstat (limited to 'src')
3 files changed, 58 insertions, 4 deletions
diff --git a/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java b/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java index b065f79..b0835de 100644 --- a/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java +++ b/src/org/cyanogenmod/themes/provider/ThemesOpenHelper.java @@ -36,7 +36,7 @@ import android.util.Log; public class ThemesOpenHelper extends SQLiteOpenHelper { private static final String TAG = ThemesOpenHelper.class.getName(); - private static final int DATABASE_VERSION = 13; + private static final int DATABASE_VERSION = 14; private static final String DATABASE_NAME = "themes.db"; private static final String SYSTEM_THEME_PKG_NAME = ThemeConfig.SYSTEM_DEFAULT; @@ -110,6 +110,10 @@ public class ThemesOpenHelper extends SQLiteOpenHelper { upgradeToVersion13(db); oldVersion = 13; } + if (oldVersion == 13) { + upgradeToVersion14(db); + oldVersion = 14; + } if (oldVersion != DATABASE_VERSION) { Log.e(TAG, "Recreating db because unknown database version: " + oldVersion); dropTables(db); @@ -396,6 +400,18 @@ public class ThemesOpenHelper extends SQLiteOpenHelper { ThemesColumns.INSTALL_STATE, ThemesColumns.InstallState.INSTALLED)); } + private void upgradeToVersion14(SQLiteDatabase db) { + // add previous_value column to mixnmatch db + String sql = String.format("ALTER TABLE %s ADD COLUMN %s TEXT", + MixnMatchTable.TABLE_NAME, MixnMatchColumns.COL_PREV_VALUE); + db.execSQL(sql); + + // add update_time column to mixnmatch db + sql = String.format("ALTER TABLE %s ADD COLUMN %s INTEGER DEFAULT 0", + MixnMatchTable.TABLE_NAME, MixnMatchColumns.COL_UPDATE_TIME); + db.execSQL(sql); + } + private void dropTables(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + ThemesTable.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + MixnMatchTable.TABLE_NAME); @@ -474,18 +490,22 @@ public class ThemesOpenHelper extends SQLiteOpenHelper { } public static class MixnMatchTable { - protected static final String TABLE_NAME = "mixnmatch"; + public 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" + + MixnMatchColumns.COL_VALUE + " TEXT," + + MixnMatchColumns.COL_PREV_VALUE + " TEXT," + + MixnMatchColumns.COL_UPDATE_TIME + " INTEGER DEFAULT 0" + ")"; public static void insertDefaults(SQLiteDatabase db) { ContentValues values = new ContentValues(); + long updateTime = System.currentTimeMillis(); + values.put(MixnMatchColumns.COL_VALUE, SYSTEM_THEME_PKG_NAME); + values.put(MixnMatchColumns.COL_UPDATE_TIME, updateTime); for(String key : MixnMatchColumns.ROWS) { values.put(MixnMatchColumns.COL_KEY, key); - values.put(MixnMatchColumns.COL_VALUE, SYSTEM_THEME_PKG_NAME); db.insert(TABLE_NAME, null, values); } } diff --git a/src/org/cyanogenmod/themes/provider/ThemesProvider.java b/src/org/cyanogenmod/themes/provider/ThemesProvider.java index 966a18f..ed9025c 100644 --- a/src/org/cyanogenmod/themes/provider/ThemesProvider.java +++ b/src/org/cyanogenmod/themes/provider/ThemesProvider.java @@ -305,6 +305,17 @@ public class ThemesProvider extends ContentProvider { getContext().getContentResolver().notifyChange(uri, null); break; case MIXNMATCH: + // Make the current value the previous value + String prevValue = ProviderUtils.getCurrentThemeForComponent(getContext(), + selection, selectionArgs); + String newValue = values.getAsString(MixnMatchColumns.COL_VALUE); + if (prevValue != null && + prevValue.equals(newValue)) { + // Component re-applied? Most likely so remove the update time + values.remove(MixnMatchColumns.COL_UPDATE_TIME); + } else if (prevValue != null) { + values.put(MixnMatchColumns.COL_PREV_VALUE, prevValue); + } rowsUpdated = sqlDB.update(MixnMatchTable.TABLE_NAME, values, selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null); break; diff --git a/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java index a07d0ba..2feeb07 100644 --- a/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java +++ b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java @@ -20,9 +20,12 @@ import android.content.Context; import android.content.Intent; import android.content.res.ThemeManager; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.provider.ThemesContract; +import android.provider.ThemesContract.MixnMatchColumns; import android.provider.ThemesContract.ThemesColumns; +import org.cyanogenmod.themes.provider.ThemesOpenHelper; public class ProviderUtils { /** @@ -81,6 +84,26 @@ public class ProviderUtils { return state; } + public static String getCurrentThemeForComponent(Context context, String selection, + String[] selectionArgs) { + if (context == null || selection == null || selectionArgs == null) { + return null; + } + + String[] projection = new String[] {MixnMatchColumns.COL_VALUE}; + Cursor c = context.getContentResolver().query(MixnMatchColumns.CONTENT_URI, + projection, selection, selectionArgs, null); + + String themePkgName = null; + if (c != null) { + if (c.moveToFirst()) { + themePkgName = c.getString(c.getColumnIndex(MixnMatchColumns.COL_VALUE)); + } + c.close(); + } + return themePkgName; + } + /** * Sends the {@link android.provider.ThemesContract.Intent#ACTION_THEME_INSTALLED} action * @param context |