From 93634c9468b4c466c3ed4604ffd7285bd40f5e12 Mon Sep 17 00:00:00 2001 From: Richard MacGregor Date: Thu, 21 May 2015 16:00:39 -0700 Subject: Delete preview table rows on theme update Handle the case where a theme is updated with less wallpapers than it had when originally installed. Delete the rows for previews associated with the updated theme Change-Id: I79abf4d69f7656cbff2c0847cd3f82a737f9e6c2 --- .../themes/provider/PreviewGenerationService.java | 8 ++++++ .../themes/provider/ThemesProvider.java | 31 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java b/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java index c1c0b16..bf838d9 100644 --- a/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java +++ b/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java @@ -30,6 +30,7 @@ import android.os.Bundle; import android.os.FileUtils; import android.provider.ThemesContract.ThemesColumns; import android.provider.ThemesContract.PreviewColumns; +import android.text.TextUtils; import android.util.Log; import org.cyanogenmod.themes.provider.util.BootAnimationPreviewGenerator; import org.cyanogenmod.themes.provider.util.IconPreviewGenerator; @@ -179,6 +180,7 @@ public class PreviewGenerationService extends IntentService { filesDir + File.separator + PREVIEWS_DIR + File.separator + pkgName; String path = null; clearThemePreviewsDir(themePreviewsDir); + clearThemeFromPreviewDB(resolver, pkgName); if (items != null) { path = compressAndSavePng(items.statusbarBackground, filesDir, pkgName, @@ -443,6 +445,12 @@ public class PreviewGenerationService extends IntentService { directory.delete(); } + private static void clearThemeFromPreviewDB(ContentResolver resolver, String pkgName) { + String selection = ThemesColumns.PKG_NAME + "=?"; + String[] selectionArgs = new String[]{ String.valueOf(pkgName) }; + resolver.delete(PreviewColumns.CONTENT_URI, selection, selectionArgs); + } + private static Cursor queryTheme(Context context, String pkgName) { String selection = ThemesColumns.PKG_NAME + "=?"; String[] selectionArgs = { pkgName }; diff --git a/src/org/cyanogenmod/themes/provider/ThemesProvider.java b/src/org/cyanogenmod/themes/provider/ThemesProvider.java index 384d814..418faf0 100644 --- a/src/org/cyanogenmod/themes/provider/ThemesProvider.java +++ b/src/org/cyanogenmod/themes/provider/ThemesProvider.java @@ -102,15 +102,20 @@ public class ThemesProvider extends ContentProvider { @Override public int delete(Uri uri, String selection, String[] selectionArgs) { + SQLiteDatabase sqlDB = null; + int idx = -1; + String[] columns = null; + Cursor c = null; + int rowsDeleted = 0; int match = sUriMatcher.match(uri); switch (match) { case THEMES: - SQLiteDatabase sqlDB = mDatabase.getWritableDatabase(); + sqlDB = mDatabase.getWritableDatabase(); // Get the theme's _id and delete preview images - int idx = -1; - String[] columns = new String[] { ThemesColumns._ID, ThemesColumns.PKG_NAME }; - Cursor c = sqlDB.query(ThemesTable.TABLE_NAME, columns, selection, + idx = -1; + columns = new String[] { ThemesColumns._ID, ThemesColumns.PKG_NAME }; + c = sqlDB.query(ThemesTable.TABLE_NAME, columns, selection, selectionArgs, null, null, null); if (c == null) return 0; if (c.moveToFirst()) { @@ -128,9 +133,25 @@ public class ThemesProvider extends ContentProvider { } c.close(); - int rowsDeleted = sqlDB.delete(ThemesTable.TABLE_NAME, selection, selectionArgs); + rowsDeleted = sqlDB.delete(ThemesTable.TABLE_NAME, selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null); return rowsDeleted; + case PREVIEWS: + sqlDB = mDatabase.getWritableDatabase(); + + // Get the theme's _id and delete preview images + idx = -1; + columns = new String[] { ThemesColumns._ID }; + c = sqlDB.query(ThemesTable.TABLE_NAME, columns, selection, + selectionArgs, null, null, null); + if (c == null) return 0; + if (c.moveToFirst()) { + idx = c.getColumnIndex(ThemesColumns._ID); + rowsDeleted = sqlDB.delete(PreviewsTable.TABLE_NAME, + PreviewColumns.THEME_ID + "=" + c.getInt(idx), null); + } + c.close(); + return rowsDeleted; case MIXNMATCH: throw new UnsupportedOperationException("Cannot delete rows in MixNMatch table"); } -- cgit v1.2.3