implement cover shadow loader

This commit is contained in:
Adrian Ulrich 2014-06-20 16:20:07 +02:00
parent 6bc4326f31
commit 636e0053c5
5 changed files with 43 additions and 9 deletions

View File

@ -212,6 +212,9 @@ THE SOFTWARE.
<string name="coverloader_vanilla_title">Load artwork from folder</string> <string name="coverloader_vanilla_title">Load artwork from folder</string>
<string name="coverloader_vanilla_summary">Search for image files named cover.jpg, album.jpg or artwork.jpg and display them as album cover</string> <string name="coverloader_vanilla_summary">Search for image files named cover.jpg, album.jpg or artwork.jpg and display them as album cover</string>
<string name="coverloader_shadow_title">Load artwork from hidden folder</string>
<string name="coverloader_shadow_summary">Try to load artwork from \'/sdcard/Music/.vanilla/ARTIST/ALBUM.jpg\'</string>
<string name="double_tap_title">Double Tap Widget</string> <string name="double_tap_title">Double Tap Widget</string>
<string name="double_tap_summary">Double-tapping the 1x1 widget will open the player. Incurs a 400ms delay before the widget responds to actions.</string> <string name="double_tap_summary">Double-tapping the 1x1 widget will open the player. Incurs a 400ms delay before the widget responds to actions.</string>
<string name="scrobble_title">Use ScrobbleDroid API</string> <string name="scrobble_title">Use ScrobbleDroid API</string>

View File

@ -23,14 +23,21 @@ THE SOFTWARE.
<PreferenceScreen <PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:persistent="true"> android:persistent="true">
<CheckBoxPreference
android:key="coverloader_android"
android:title="@string/coverloader_android_title"
android:summary="@string/coverloader_android_summary"
android:defaultValue="true" />
<CheckBoxPreference <CheckBoxPreference
android:key="coverloader_vanilla" android:key="coverloader_vanilla"
android:title="@string/coverloader_vanilla_title" android:title="@string/coverloader_vanilla_title"
android:summary="@string/coverloader_vanilla_summary" android:summary="@string/coverloader_vanilla_summary"
android:defaultValue="true" /> android:defaultValue="true" />
<CheckBoxPreference
android:key="coverloader_shadow"
android:title="@string/coverloader_shadow_title"
android:summary="@string/coverloader_shadow_summary"
android:defaultValue="true" />
<CheckBoxPreference
android:key="coverloader_android"
android:title="@string/coverloader_android_title"
android:summary="@string/coverloader_android_summary"
android:defaultValue="true" />
</PreferenceScreen> </PreferenceScreen>

View File

@ -416,6 +416,7 @@ public final class PlaybackService extends Service
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_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_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);
mHeadsetOnly = settings.getBoolean(PrefKeys.HEADSET_ONLY, false); mHeadsetOnly = settings.getBoolean(PrefKeys.HEADSET_ONLY, false);
mStockBroadcast = settings.getBoolean(PrefKeys.STOCK_BROADCAST, false); mStockBroadcast = settings.getBoolean(PrefKeys.STOCK_BROADCAST, false);
@ -778,6 +779,9 @@ public final class PlaybackService extends Service
} else if (PrefKeys.COVERLOADER_VANILLA.equals(key)) { } 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.mCoverLoadMode = settings.getBoolean(PrefKeys.COVERLOADER_VANILLA, true) ? Song.mCoverLoadMode | Song.COVER_MODE_VANILLA : Song.mCoverLoadMode & ~(Song.COVER_MODE_VANILLA);
Song.mFlushCoverCache = true; Song.mFlushCoverCache = true;
} 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;
} else if (PrefKeys.NOTIFICATION_INVERTED_COLOR.equals(key)) { } else if (PrefKeys.NOTIFICATION_INVERTED_COLOR.equals(key)) {
updateNotification(); updateNotification();
} else if (PrefKeys.HEADSET_ONLY.equals(key)) { } else if (PrefKeys.HEADSET_ONLY.equals(key)) {

View File

@ -34,6 +34,7 @@ public class PrefKeys {
public static final String DEFAULT_PLAYLIST_ACTION = "default_playlist_action"; public static final String DEFAULT_PLAYLIST_ACTION = "default_playlist_action";
public static final String COVERLOADER_ANDROID = "coverloader_android"; public static final String COVERLOADER_ANDROID = "coverloader_android";
public static final String COVERLOADER_VANILLA = "coverloader_vanilla"; public static final String COVERLOADER_VANILLA = "coverloader_vanilla";
public static final String COVERLOADER_SHADOW = "coverloader_shadow";
public static final String DISABLE_LOCKSCREEN = "disable_lockscreen"; public static final String DISABLE_LOCKSCREEN = "disable_lockscreen";
public static final String DISPLAY_MODE = "display_mode"; public static final String DISPLAY_MODE = "display_mode";
public static final String DOUBLE_TAP = "double_tap"; public static final String DOUBLE_TAP = "double_tap";

View File

@ -66,6 +66,10 @@ public class Song implements Comparable<Song> {
* Use vanilla musics cover load mechanism * Use vanilla musics cover load mechanism
*/ */
public static final int COVER_MODE_VANILLA = 0x2; 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 = { public static final String[] EMPTY_PROJECTION = {
@ -167,10 +171,25 @@ public class Song implements Comparable<Song> {
} }
} }
/** if (inputStream == null && (mCoverLoadMode & COVER_MODE_SHADOW) != 0) {
* fixme: add shadow folder (/sdcard/.covers/artist/album.jpg) String[] projection = new String [] { MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM };
* and checkout why some files load partial (fd vs fis) QueryTask query = MediaUtils.buildQuery(MediaUtils.TYPE_SONG, key.id, projection, null);
*/ Cursor cursor = query.runQuery(mContext.getContentResolver());
if (cursor.getCount() > 0) {
cursor.moveToNext();
String thisArtist = cursor.getString(0);
String thisAlbum = cursor.getString(1);
String shadowPath = "/sdcard/Music/.vanilla/"+(thisArtist.replaceAll("/", "_"))+"/"+(thisAlbum.replaceAll("/", "_"))+".jpg";
File guessedFile = new File(shadowPath);
if (guessedFile.exists() && !guessedFile.isDirectory()) {
inputStream = new FileInputStream(guessedFile);
sampleInputStream = new FileInputStream(guessedFile);
}
}
cursor.close();
}
if (inputStream == null && (mCoverLoadMode & COVER_MODE_ANDROID) != 0) { if (inputStream == null && (mCoverLoadMode & COVER_MODE_ANDROID) != 0) {
Uri uri = Uri.parse("content://media/external/audio/media/" + key.id + "/albumart"); Uri uri = Uri.parse("content://media/external/audio/media/" + key.id + "/albumart");
ContentResolver res = mContext.getContentResolver(); ContentResolver res = mContext.getContentResolver();