diff --git a/src/ch/blinkenlights/android/vanilla/CoverCache.java b/src/ch/blinkenlights/android/vanilla/CoverCache.java index 1bc62ae8..9d35be89 100644 --- a/src/ch/blinkenlights/android/vanilla/CoverCache.java +++ b/src/ch/blinkenlights/android/vanilla/CoverCache.java @@ -38,10 +38,30 @@ public class CoverCache { * Returned size of large (cover view) album covers */ public final static int SIZE_LARGE = 600; + /** + * Use all cover providers to load cover art + */ + public static final int COVER_MODE_ALL = 0xF; + /** + * Use androids builtin cover mechanism to load covers + */ + public static final int COVER_MODE_ANDROID = 0x1; + /** + * Use vanilla musics cover load mechanism + */ + public static final int COVER_MODE_VANILLA = 0x2; + /** + * Use vanilla musics SHADOW cover load mechanism + */ + public static final int COVER_MODE_SHADOW = 0x4; /** * Shared LRU cache class */ private static BitmapLruCache sBitmapLruCache; + /** + * Bitmask on how we are going to load coverart + */ + public static int mCoverLoadMode = 0; /** * Constructs a new BitmapCache object @@ -94,8 +114,10 @@ public class CoverCache { /** * Deletes all items hold in the LRU cache */ - public void evictAll() { - sBitmapLruCache.evictAll(); + public static void evictAll() { + if (sBitmapLruCache != null) { + sBitmapLruCache.evictAll(); + } } @@ -180,7 +202,7 @@ public class CoverCache { InputStream inputStream = null; InputStream sampleInputStream = null; // same as inputStream but used for getSampleSize - if ((Song.mCoverLoadMode & Song.COVER_MODE_VANILLA) != 0) { + if ((CoverCache.mCoverLoadMode & CoverCache.COVER_MODE_VANILLA) != 0) { String basePath = (new File(song.path)).getParentFile().getAbsolutePath(); // parent dir of the currently playing file for (String coverFile: coverNames) { File guessedFile = new File( basePath + "/" + coverFile); @@ -192,7 +214,7 @@ public class CoverCache { } } - if (inputStream == null && (Song.mCoverLoadMode & Song.COVER_MODE_SHADOW) != 0) { + if (inputStream == null && (CoverCache.mCoverLoadMode & CoverCache.COVER_MODE_SHADOW) != 0) { String shadowPath = "/sdcard/Music/.vanilla/"+(song.artist.replaceAll("/", "_"))+"/"+(song.album.replaceAll("/", "_"))+".jpg"; File guessedFile = new File(shadowPath); @@ -202,7 +224,7 @@ public class CoverCache { } } - if (inputStream == null && (Song.mCoverLoadMode & Song.COVER_MODE_ANDROID) != 0 && song.id >= 0) { + if (inputStream == null && (CoverCache.mCoverLoadMode & CoverCache.COVER_MODE_ANDROID) != 0 && song.id >= 0) { Uri uri = Uri.parse("content://media/external/audio/media/" + song.id + "/albumart"); ContentResolver res = mContext.getContentResolver(); inputStream = res.openInputStream(uri); diff --git a/src/ch/blinkenlights/android/vanilla/LibraryActivity.java b/src/ch/blinkenlights/android/vanilla/LibraryActivity.java index 47b462f4..6f6639f0 100644 --- a/src/ch/blinkenlights/android/vanilla/LibraryActivity.java +++ b/src/ch/blinkenlights/android/vanilla/LibraryActivity.java @@ -926,7 +926,7 @@ public class LibraryActivity cover = song.getCover(this); } - mCover.setVisibility(Song.mCoverLoadMode == 0 ? View.GONE : View.VISIBLE); + mCover.setVisibility(CoverCache.mCoverLoadMode == 0 ? View.GONE : View.VISIBLE); if (cover == null) mCover.setImageResource(R.drawable.fallback_cover); else diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java index 823f2e0a..a733c094 100644 --- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -432,9 +432,9 @@ public final class PlaybackService extends Service mScrobble = settings.getBoolean(PrefKeys.SCROBBLE, false); mIdleTimeout = settings.getBoolean(PrefKeys.USE_IDLE_TIMEOUT, false) ? settings.getInt(PrefKeys.IDLE_TIMEOUT, 3600) : 0; - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_ANDROID, true) ? Song.mCoverLoadMode | Song.COVER_MODE_ANDROID : Song.mCoverLoadMode & ~(Song.COVER_MODE_ANDROID); - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_VANILLA, true) ? Song.mCoverLoadMode | Song.COVER_MODE_VANILLA : Song.mCoverLoadMode & ~(Song.COVER_MODE_VANILLA); - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_SHADOW , true) ? Song.mCoverLoadMode | Song.COVER_MODE_SHADOW : Song.mCoverLoadMode & ~(Song.COVER_MODE_SHADOW); + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_ANDROID, true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_ANDROID : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_ANDROID); + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_VANILLA, true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_VANILLA : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_VANILLA); + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_SHADOW , true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_SHADOW : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_SHADOW); mHeadsetOnly = settings.getBoolean(PrefKeys.HEADSET_ONLY, false); mCycleContinuousShuffling = settings.getBoolean(PrefKeys.CYCLE_CONTINUOUS_SHUFFLING, false); @@ -808,14 +808,14 @@ public final class PlaybackService extends Service mIdleTimeout = settings.getBoolean(PrefKeys.USE_IDLE_TIMEOUT, false) ? settings.getInt(PrefKeys.IDLE_TIMEOUT, 3600) : 0; userActionTriggered(); } else if (PrefKeys.COVERLOADER_ANDROID.equals(key)) { - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_ANDROID, true) ? Song.mCoverLoadMode | Song.COVER_MODE_ANDROID : Song.mCoverLoadMode & ~(Song.COVER_MODE_ANDROID); - Song.mFlushCoverCache = true; + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_ANDROID, true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_ANDROID : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_ANDROID); + CoverCache.evictAll(); } else if (PrefKeys.COVERLOADER_VANILLA.equals(key)) { - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_VANILLA, true) ? Song.mCoverLoadMode | Song.COVER_MODE_VANILLA : Song.mCoverLoadMode & ~(Song.COVER_MODE_VANILLA); - Song.mFlushCoverCache = true; + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_VANILLA, true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_VANILLA : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_VANILLA); + CoverCache.evictAll(); } else if (PrefKeys.COVERLOADER_SHADOW.equals(key)) { - Song.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_SHADOW, true) ? Song.mCoverLoadMode | Song.COVER_MODE_SHADOW : Song.mCoverLoadMode & ~(Song.COVER_MODE_SHADOW); - Song.mFlushCoverCache = true; + CoverCache.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_SHADOW, true) ? CoverCache.mCoverLoadMode | CoverCache.COVER_MODE_SHADOW : CoverCache.mCoverLoadMode & ~(CoverCache.COVER_MODE_SHADOW); + CoverCache.evictAll(); } else if (PrefKeys.HEADSET_ONLY.equals(key)) { mHeadsetOnly = settings.getBoolean(key, false); if (mHeadsetOnly && isSpeakerOn()) diff --git a/src/ch/blinkenlights/android/vanilla/Song.java b/src/ch/blinkenlights/android/vanilla/Song.java index a637638e..9a7c3b4d 100644 --- a/src/ch/blinkenlights/android/vanilla/Song.java +++ b/src/ch/blinkenlights/android/vanilla/Song.java @@ -44,22 +44,6 @@ public class Song implements Comparable { * The number of flags. */ public static final int FLAG_COUNT = 2; - /** - * Use all cover providers to load cover art - */ - public static final int COVER_MODE_ALL = 0xF; - /** - * Use androids builtin cover mechanism to load covers - */ - public static final int COVER_MODE_ANDROID = 0x1; - /** - * Use vanilla musics cover load mechanism - */ - public static final int COVER_MODE_VANILLA = 0x2; - /** - * Use vanilla musics SHADOW cover load mechanism - */ - public static final int COVER_MODE_SHADOW = 0x4; public static final String[] EMPTY_PROJECTION = { @@ -100,16 +84,6 @@ public class Song implements Comparable { */ private static CoverCache sCoverCache = null; - /** - * Bitmask on how we are going to load coverart - */ - public static int mCoverLoadMode = 0; - - /** - * We will evict our own cache if set to true - */ - public static boolean mFlushCoverCache = false; - /** * Id of this song in the MediaStore */ @@ -221,17 +195,12 @@ public class Song implements Comparable { */ public Bitmap getCover(Context context) { - if (mCoverLoadMode == 0 || id == -1 || (flags & FLAG_NO_COVER) != 0) + if (CoverCache.mCoverLoadMode == 0 || id == -1 || (flags & FLAG_NO_COVER) != 0) return null; if (sCoverCache == null) sCoverCache = new CoverCache(context.getApplicationContext()); - if (mFlushCoverCache) { - mFlushCoverCache = false; - sCoverCache.evictAll(); - } - CoverCache.CoverKey key = new CoverCache.CoverKey(MediaUtils.TYPE_ALBUM, this.albumId, CoverCache.SIZE_LARGE); Bitmap cover = sCoverCache.getCoverFromSong(key, this);