implement cover shadow loader
This commit is contained in:
parent
6bc4326f31
commit
636e0053c5
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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)) {
|
||||||
|
@ -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";
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user