move covermodes into cover cache

This commit is contained in:
Adrian Ulrich 2015-08-12 17:48:04 +02:00
parent 0bf219e3ba
commit a6df47be4d
4 changed files with 38 additions and 47 deletions

View File

@ -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);

View File

@ -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

View File

@ -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())

View File

@ -44,22 +44,6 @@ public class Song implements Comparable<Song> {
* 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<Song> {
*/
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<Song> {
*/
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);