diff options
4 files changed, 122 insertions, 49 deletions
diff --git a/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java b/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java index 6d42c04..c1c0b16 100644 --- a/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java +++ b/src/org/cyanogenmod/themes/provider/PreviewGenerationService.java @@ -39,6 +39,7 @@ import org.cyanogenmod.themes.provider.util.StylePreviewGenerator.StyleItems; import org.cyanogenmod.themes.provider.util.SystemUiPreviewGenerator; import org.cyanogenmod.themes.provider.util.SystemUiPreviewGenerator.SystemUiItems; import org.cyanogenmod.themes.provider.util.WallpaperPreviewGenerator; +import org.cyanogenmod.themes.provider.util.WallpaperPreviewGenerator.WallpaperItem; import org.cyanogenmod.themes.provider.util.WallpaperPreviewGenerator.WallpaperItems; import java.io.ByteArrayOutputStream; @@ -267,33 +268,51 @@ public class PreviewGenerationService extends IntentService { themeValues.add(values); } if (wallpaperItems != null) { - if (wallpaperItems.wpPreview != null) { - path = compressAndSaveJpg(wallpaperItems.wpPreview, filesDir, pkgName, - PreviewColumns.WALLPAPER_PREVIEW); - values = createPreviewEntryString(id, - PreviewColumns.WALLPAPER_PREVIEW, path); - themeValues.add(values); - } - if (wallpaperItems.wpThumbnail != null) { - path = compressAndSavePng(wallpaperItems.wpThumbnail, filesDir, pkgName, - PreviewColumns.WALLPAPER_THUMBNAIL); - values = createPreviewEntryString(id, - PreviewColumns.WALLPAPER_THUMBNAIL, path); - themeValues.add(values); - } - if (wallpaperItems.lsPreview != null) { - path = compressAndSaveJpg(wallpaperItems.lsPreview, filesDir, pkgName, - PreviewColumns.LOCK_WALLPAPER_PREVIEW); - values = createPreviewEntryString(id, - PreviewColumns.LOCK_WALLPAPER_PREVIEW, path); - themeValues.add(values); + for (int i = 0; i < wallpaperItems.wallpapers.size(); i++) { + String componentID = String.format("%03d", i); + WallpaperItem wallpaperItem = wallpaperItems.wallpapers.get(i); + if (wallpaperItem == null) continue; + + if (wallpaperItem.assetPath != null) { + path = wallpaperItem.assetPath; + values = createPreviewEntryString(id, i, + PreviewColumns.WALLPAPER_FULL, path); + themeValues.add(values); + } + + if (wallpaperItem.preview != null) { + path = compressAndSaveJpg(wallpaperItem.preview, filesDir, pkgName, + PreviewColumns.WALLPAPER_PREVIEW + componentID); + values = createPreviewEntryString(id, i, + PreviewColumns.WALLPAPER_PREVIEW, path); + themeValues.add(values); + } + + if (wallpaperItem.thumbnail != null) { + path = compressAndSavePng(wallpaperItem.thumbnail, filesDir, pkgName, + PreviewColumns.WALLPAPER_THUMBNAIL + componentID); + values = createPreviewEntryString(id, i, + PreviewColumns.WALLPAPER_THUMBNAIL, path); + themeValues.add(values); + } } - if (wallpaperItems.lsThumbnail != null) { - path = compressAndSavePng(wallpaperItems.lsThumbnail, filesDir, pkgName, - PreviewColumns.LOCK_WALLPAPER_THUMBNAIL); - values = createPreviewEntryString(id, - PreviewColumns.LOCK_WALLPAPER_THUMBNAIL, path); - themeValues.add(values); + + if (wallpaperItems.lockscreen != null) { + if (wallpaperItems.lockscreen.preview != null) { + path = compressAndSaveJpg(wallpaperItems.lockscreen.preview, filesDir, + pkgName, PreviewColumns.LOCK_WALLPAPER_PREVIEW); + values = createPreviewEntryString(id, + PreviewColumns.LOCK_WALLPAPER_PREVIEW, path); + themeValues.add(values); + } + + if (wallpaperItems.lockscreen.thumbnail != null) { + path = compressAndSavePng(wallpaperItems.lockscreen.thumbnail, filesDir, + pkgName, PreviewColumns.LOCK_WALLPAPER_THUMBNAIL); + values = createPreviewEntryString(id, + PreviewColumns.LOCK_WALLPAPER_THUMBNAIL, path); + themeValues.add(values); + } } } if (styleItems != null) { @@ -316,9 +335,11 @@ public class PreviewGenerationService extends IntentService { } if (!themeValues.isEmpty()) { - selection = PreviewColumns.THEME_ID + "=? AND " + PreviewColumns.COL_KEY + "=?"; + selection = PreviewColumns.THEME_ID + "=? AND " + PreviewColumns.COMPONENT_ID + + "=? AND " + PreviewColumns.COL_KEY + "=?"; for (ContentValues contentValues : themeValues) { selectionArgs = new String[]{String.valueOf(id), + contentValues.getAsString(PreviewColumns.COMPONENT_ID), contentValues.getAsString(PreviewColumns.COL_KEY)}; // Try an update first, if that returns 0 then we need to insert these values if (resolver.update(PreviewColumns.CONTENT_URI, contentValues, selection, @@ -331,8 +352,14 @@ public class PreviewGenerationService extends IntentService { } private static ContentValues createPreviewEntryInt(int id, String key, int value) { + return createPreviewEntryInt(id, 0, key, value); + } + + private static ContentValues createPreviewEntryInt(int id, int componentId, String key, + int value) { ContentValues values = new ContentValues(); values.put(PreviewColumns.THEME_ID, id); + values.put(PreviewColumns.COMPONENT_ID, componentId); values.put(PreviewColumns.COL_KEY, key); values.put(PreviewColumns.COL_VALUE, value); @@ -340,8 +367,14 @@ public class PreviewGenerationService extends IntentService { } private static ContentValues createPreviewEntryString(int id, String key, String value) { + return createPreviewEntryString(id, 0, key, value); + } + + private static ContentValues createPreviewEntryString(int id, int componentId, String key, + String value) { ContentValues values = new ContentValues(); values.put(PreviewColumns.THEME_ID, id); + values.put(PreviewColumns.COMPONENT_ID, componentId); values.put(PreviewColumns.COL_KEY, key); values.put(PreviewColumns.COL_VALUE, value); diff --git a/src/org/cyanogenmod/themes/provider/ThemesProvider.java b/src/org/cyanogenmod/themes/provider/ThemesProvider.java index 8645bbc..1fdc69b 100644 --- a/src/org/cyanogenmod/themes/provider/ThemesProvider.java +++ b/src/org/cyanogenmod/themes/provider/ThemesProvider.java @@ -241,7 +241,7 @@ public class ThemesProvider extends ContentProvider { break; case PREVIEWS: projection = ProviderUtils.modifyPreviewsProjection(projection); - selection = ProviderUtils.modifyPreviewsSelection(selection, projection); + selection = ProviderUtils.modifyDefaultPreviewsSelection(selection, projection); selectionArgs = ProviderUtils.modifyPreviewsSelectionArgs(selectionArgs, projection); groupBy = PreviewColumns.THEME_ID + "," + PreviewColumns.COMPONENT_ID; queryBuilder.setTables(THEMES_PREVIEWS_INNER_JOIN); diff --git a/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java index 065a1b0..ab98530 100644 --- a/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java +++ b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java @@ -127,6 +127,12 @@ public class ProviderUtils { return newProjection.toArray(new String[newProjection.size()]); } + public static String modifyDefaultPreviewsSelection(String selection, String[] projection) { + String newSelection = modifyPreviewsSelection(selection, projection); + newSelection += " AND " + PreviewColumns.COMPONENT_ID + "=0"; + return newSelection; + } + public static String modifyPreviewsSelection(String selection, String[] projection) { String newSelection = selection; List<String> projectionItems = getPreviewProjectionItems(projection); diff --git a/src/org/cyanogenmod/themes/provider/util/WallpaperPreviewGenerator.java b/src/org/cyanogenmod/themes/provider/util/WallpaperPreviewGenerator.java index 01b888a..f10a2f7 100644 --- a/src/org/cyanogenmod/themes/provider/util/WallpaperPreviewGenerator.java +++ b/src/org/cyanogenmod/themes/provider/util/WallpaperPreviewGenerator.java @@ -24,10 +24,13 @@ import android.content.res.Resources; import android.content.res.ThemeConfig; import android.graphics.Bitmap; +import android.text.TextUtils; import org.cyanogenmod.themes.provider.R; import java.io.File; import java.io.IOException; +import java.util.LinkedList; +import java.util.List; public class WallpaperPreviewGenerator { private static final String WALLPAPER_ASSET_PATH = "wallpapers"; @@ -46,43 +49,74 @@ public class WallpaperPreviewGenerator { public WallpaperItems generateWallpaperPreviews(PackageInfo themeInfo) throws NameNotFoundException, IOException { WallpaperItems items = new WallpaperItems(); + WallpaperItem item = null; + Bitmap preview = null; if (themeInfo == null) { Resources res = mContext.getPackageManager().getThemedResourcesForApplication("android", ThemeConfig.SYSTEM_DEFAULT); - items.wpPreview = items.lsPreview = BitmapUtils.decodeResource(res, + item = new WallpaperItem(); + item.preview = BitmapUtils.decodeResource(res, com.android.internal.R.drawable.default_wallpaper, mPreviewSize, mPreviewSize); + item.thumbnail = Bitmap.createScaledBitmap(item.preview, mThumbnailSize, mThumbnailSize, + true); + if (item != null) { + items.wallpapers.add(item); + items.lockscreen = item; + } } else { final Context themeContext = mContext.createPackageContext(themeInfo.packageName, 0); final AssetManager assets = themeContext.getAssets(); - String path = ThemeUtils.getWallpaperPath(assets); - if (path != null) { - items.wpPreview = BitmapUtils.getBitmapFromAsset(themeContext, path, - mPreviewSize, mPreviewSize); + // Get all wallpapers + List<String> paths = ThemeUtils.getWallpaperPathList(assets); + for (String path : paths) { + if (!TextUtils.isEmpty(path)) { + preview = BitmapUtils.getBitmapFromAsset(themeContext, path, + mPreviewSize, mPreviewSize); + item = createWallpaperItems(path, preview); + if (item != null) { + items.wallpapers.add(item); + } + } } - path = ThemeUtils.getLockscreenWallpaperPath(assets); - if (path != null) { - items.lsPreview = BitmapUtils.getBitmapFromAsset(themeContext, path, + // Get the lockscreen + String path = ThemeUtils.getLockscreenWallpaperPath(assets); + if (!TextUtils.isEmpty(path)) { + preview = BitmapUtils.getBitmapFromAsset(themeContext, path, mPreviewSize, mPreviewSize); + items.lockscreen = createWallpaperItems(path, preview); } } - if (items.wpPreview != null) { - items.wpThumbnail = Bitmap.createScaledBitmap(items.wpPreview, mThumbnailSize, - mThumbnailSize, true); - } - if (items.lsPreview != null) { - items.lsThumbnail = Bitmap.createScaledBitmap(items.lsPreview, mThumbnailSize, - mThumbnailSize, true); - } return items; } + private WallpaperItem createWallpaperItems(String path, Bitmap preview) { + if (TextUtils.isEmpty(path) || preview == null) { + return null; + } + WallpaperItem item = new WallpaperItem(); + item.assetPath = path; + item.preview = preview; + item.thumbnail = Bitmap.createScaledBitmap(item.preview, mThumbnailSize, mThumbnailSize, + true); + return item; + } + + public class WallpaperItem { + public String assetPath; + public Bitmap preview; + public Bitmap thumbnail; + } + public class WallpaperItems { // Wallpaper items - public Bitmap wpThumbnail; - public Bitmap wpPreview; + public List<WallpaperItem> wallpapers; - // Lockscreen wallpaper items - public Bitmap lsThumbnail; - public Bitmap lsPreview; + // Lockscreen wallpaper item + public WallpaperItem lockscreen; + + public WallpaperItems() { + wallpapers = new LinkedList<WallpaperItem>(); + lockscreen = null; + } } } |