From 1dcc447e521e2e3b78fa0cb88c818d03ef20058c Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Fri, 10 Jul 2015 02:24:57 +0200 Subject: [PATCH] Added option to ignore media store artwork and instead loading it directly from the song file --- app/build.gradle | 3 +- .../java/com/kabouzeid/gramophone/App.java | 1 + .../gramophone/adapter/AlbumAdapter.java | 2 +- .../gramophone/adapter/ArtistAdapter.java | 1 + .../adapter/ArtistAlbumAdapter.java | 2 +- .../gramophone/adapter/SearchAdapter.java | 2 +- .../songadapter/ArtistSongAdapter.java | 2 +- .../songadapter/PlaylistSongAdapter.java | 2 +- .../adapter/songadapter/SongAdapter.java | 2 +- .../SmartPlaylistSongAdapter.java | 2 +- .../gramophone/appwidget/WidgetMedium.java | 2 +- .../helper/PlayingNotificationHelper.java | 2 +- .../PhonographImageDownloader.java | 55 ++++++++++-- .../gramophone/service/MusicService.java | 4 +- .../ui/activities/AlbumDetailActivity.java | 2 +- .../ui/activities/MainActivity.java | 2 +- .../activities/MusicControllerActivity.java | 2 +- .../ui/activities/SettingsActivity.java | 1 + .../tageditor/AbsTagEditorActivity.java | 2 - .../kabouzeid/gramophone/util/ImageUtil.java | 85 +++++++++++++++++++ .../kabouzeid/gramophone/util/MusicUtil.java | 13 +++ .../gramophone/util/PreferenceUtils.java | 54 ++---------- .../com/kabouzeid/gramophone/util/Util.java | 38 --------- app/src/main/res/values/strings.xml | 3 + app/src/main/res/xml/pref_images.xml | 16 ++++ 25 files changed, 194 insertions(+), 106 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java create mode 100644 app/src/main/res/xml/pref_images.xml diff --git a/app/build.gradle b/app/build.gradle index 4c674314..e12e7de5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,11 +78,12 @@ dependencies { compile 'com.android.support:cardview-v7:22.2.0' compile 'com.android.support:palette-v7:22.2.0' compile 'com.android.support:design:22.2.0' + compile 'com.android.support:support-annotations:22.2.0' compile 'com.github.ksoichiro:android-observablescrollview:1.5.1' compile 'asia.ivity.android:drag-sort-listview:1.0' compile 'de.hdodenhof:circleimageview:1.3.0' - compile "com.github.semoncat.seekarc:library:0.1" + compile 'com.github.semoncat.seekarc:library:0.1' compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.okhttp:okhttp:2.4.0' diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java index 5710d064..baba226d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/App.java +++ b/app/src/main/java/com/kabouzeid/gramophone/App.java @@ -27,6 +27,7 @@ public class App extends Application { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) .imageDownloader(new PhonographImageDownloader(this)) + .memoryCacheSizePercentage(30) .build(); ImageLoader.getInstance().init(config); L.writeLogs(false); // turns off UILs annoying LogCat output diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index ed99cc59..48b42087 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -78,7 +78,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter() { @Override public void success(ArtistInfo artistInfo, Response response) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java index 40280941..a39268c3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAlbumAdapter.java @@ -77,7 +77,7 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter implements MaterialCab songInfo.setText(song.albumName); ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(song.albumId).toString(), + MusicUtil.getSongImageLoaderString(song), albumArt, new DisplayImageOptions.Builder() .cacheInMemory(true) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java index 5ebd0ef8..17ec8d56 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -81,7 +81,7 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter songs = AlbumSongLoader.getAlbumSongList(context, albumId); + for (Song song : songs) { + Bitmap bitmap = ImageUtil.getEmbeddedSongArt(new File(song.data), context); + if (bitmap != null) { + return getBitmapInputStream(bitmap); + } + } + return null; + } + return getStream(MusicUtil.getAlbumArtUri(albumId).toString(), extra); + } + + protected InputStream getStreamFromSong(String imageUri, Object extra) throws IOException { + String[] data = imageUri.split("#", 2); + + if (PreferenceUtils.getInstance(context).ignoreMediaStoreArtwork()) { + Bitmap bitmap = ImageUtil.getEmbeddedSongArt(new File(data[1]), context); + if (bitmap != null) { + return getBitmapInputStream(bitmap); + } + return null; + } + + int id = Integer.valueOf(data[0].substring(SCHEME_SONG.length())); + return getStream(MusicUtil.getAlbumArtUri(id).toString(), extra); + } + + private static ByteArrayInputStream getBitmapInputStream(Bitmap bitmap) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); + return new ByteArrayInputStream(bos.toByteArray()); + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index 4018c3e4..6dbe0fa3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -423,7 +423,7 @@ public class MusicService extends Service { } private void updateRemoteControlClient() { - updateRemoteControlClientImpl(PreferenceUtils.getInstance(this).albumArtOnLockscrenn()); + updateRemoteControlClientImpl(PreferenceUtils.getInstance(this).albumArtOnLockscreen()); } private void updateRemoteControlClientImpl(boolean showAlbumArt) { @@ -435,7 +435,7 @@ public class MusicService extends Service { .putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, song.duration) .apply(); if (showAlbumArt) { - final String currentAlbumArtUri = MusicUtil.getAlbumArtUri(song.albumId).toString(); + final String currentAlbumArtUri = MusicUtil.getSongImageLoaderString(song); ImageLoader.getInstance().displayImage(currentAlbumArtUri, new NonViewAware(new ImageSize(-1, -1), ViewScaleType.CROP), new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 048f8325..38d21367 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -206,7 +206,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH private void setUpAlbumArtAndApplyPalette() { ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(album.id).toString(), + MusicUtil.getAlbumImageLoaderString(album), albumArtImageView, new DisplayImageOptions.Builder() .cacheInMemory(true) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index f7dc86cd..5d11c4d4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -258,7 +258,7 @@ public class MainActivity extends AbsFabActivity ((TextView) navigationDrawerHeader.findViewById(R.id.song_title)).setText(song.title); ((TextView) navigationDrawerHeader.findViewById(R.id.song_artist)).setText(song.artistName); ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(song.albumId).toString(), + MusicUtil.getSongImageLoaderString(song), ((ImageView) navigationDrawerHeader.findViewById(R.id.album_art)), new DisplayImageOptions.Builder() .cacheInMemory(true) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index ac4b9ff5..ee72bb0a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -422,7 +422,7 @@ public class MusicControllerActivity extends AbsFabActivity { private void setUpAlbumArtAndApplyPalette() { ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(song.albumId).toString(), + MusicUtil.getSongImageLoaderString(song), albumArt, new DisplayImageOptions.Builder() .cacheInMemory(true) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 7eb55a22..f5b5f0d7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -69,6 +69,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia addPreferencesFromResource(R.xml.pref_general); addPreferencesFromResource(R.xml.pref_colors); addPreferencesFromResource(R.xml.pref_now_playing_screen); + addPreferencesFromResource(R.xml.pref_images); addPreferencesFromResource(R.xml.pref_lockscreen); addPreferencesFromResource(R.xml.pref_audio); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index 8892572d..fc5904a7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -373,10 +373,8 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { progressDialog.setContent(getString(R.string.rescanning_media)); if (deleteArtwork) { MusicUtil.deleteAlbumArt(AbsTagEditorActivity.this, getId()); - //ImageLoader.getInstance().getMemoryCache().remove(MusicUtil.getAlbumArtUri(getId()).toString()); ImageLoader.getInstance().clearMemoryCache(); } else if (artwork != null) { - //ImageLoader.getInstance().getMemoryCache().remove(MusicUtil.getAlbumArtUri(getId()).toString()); ImageLoader.getInstance().clearMemoryCache(); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java new file mode 100644 index 00000000..bfa2dbd1 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java @@ -0,0 +1,85 @@ +package com.kabouzeid.gramophone.util; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.support.annotation.Nullable; +import android.view.Display; +import android.view.WindowManager; + +import org.jaudiotagger.audio.AudioFile; +import org.jaudiotagger.audio.AudioFileIO; +import org.jaudiotagger.audio.exceptions.CannotReadException; +import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; +import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; +import org.jaudiotagger.tag.TagException; + +import java.io.File; +import java.io.IOException; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public class ImageUtil { + + @Nullable + public static Bitmap getEmbeddedSongArt(File songFile, Context context) { + try { + AudioFile audioFile = AudioFileIO.read(songFile); + byte[] data = audioFile.getTag().getFirstArtwork().getBinaryData(); + if (data != null) { + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inPreferredConfig = Bitmap.Config.RGB_565; + options.inJustDecodeBounds = true; + BitmapFactory.decodeByteArray(data, 0, data.length, options); + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, context); + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + return BitmapFactory.decodeByteArray(data, 0, data.length, options); + } + } catch (CannotReadException | TagException | IOException | ReadOnlyFileException | InvalidAudioFrameException e) { + e.printStackTrace(); + } + return null; + } + + public static int calculateInSampleSize(BitmapFactory.Options options, Context context) { + + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int reqLength = Math.round(getSmallerScreenSize(context) * 1.5f); // absolute maximum size the album art will ever have + + // setting reqWidth matching to desired 1:1 ratio and screen-size + if (width < height) { + reqLength = (height / width) * reqLength; + } else { + reqLength = (width / height) * reqLength; + } + + int inSampleSize = 1; + + if (height > reqLength || width > reqLength) { + final int halfHeight = height / 2; + final int halfWidth = width / 2; + + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) > reqLength + && (halfWidth / inSampleSize) > reqLength) { + inSampleSize *= 2; + } + } + + return inSampleSize; + } + + private static int getSmallerScreenSize(Context c) { + Display display = ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + return Math.min(size.x, size.y); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index 5004ce8a..0449c62e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -11,14 +11,17 @@ import android.os.Environment; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.Settings; +import android.support.annotation.NonNull; import android.util.Log; import android.widget.Toast; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.imageloader.PhonographImageDownloader; import com.kabouzeid.gramophone.loader.PlaylistLoader; import com.kabouzeid.gramophone.loader.SongLoader; +import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Artist; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Playlist; @@ -34,6 +37,14 @@ import java.util.List; public class MusicUtil { public static final String TAG = MusicUtil.class.getSimpleName(); + public static String getAlbumImageLoaderString(Album album) { + return PhonographImageDownloader.SCHEME_ALBUM + album.id; + } + + public static String getSongImageLoaderString(Song song) { + return PhonographImageDownloader.SCHEME_SONG + song.albumId + "#" + song.data; + } + public static Uri getAlbumArtUri(int albumId) { final Uri sArtworkUri = Uri .parse("content://media/external/audio/albumart"); @@ -45,6 +56,7 @@ public class MusicUtil { return ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, songId); } + @NonNull public static Intent createShareSongFileIntent(final Song song) { return new Intent() .setAction(Intent.ACTION_SEND) @@ -122,6 +134,7 @@ public class MusicUtil { return new File(createAlbumArtDir(), name + System.currentTimeMillis()); } + @SuppressWarnings("ResultOfMethodCallIgnored") public static File createAlbumArtDir() { File albumArtDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "/.albumart/"); if (!albumArtDir.exists()) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java index 8dc7bfd1..09775117 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java @@ -22,8 +22,7 @@ public final class PreferenceUtils { public static final String ALBUM_SORT_ORDER = "album_sort_order"; public static final String ALBUM_SONG_SORT_ORDER = "album_song_sort_order"; public static final String SONG_SORT_ORDER = "song_sort_order"; - // public static final String ONLY_ON_WIFI = "auto_download_artist_images"; - // public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images"; + public static final String AUTO_DOWNLOAD_ARTIST_IMAGES_ONLY_ON_WIFI = "auto_download_artist_images_only_on_wifi"; public static final String COLORED_ALBUM_FOOTERS = "colored_album_footers"; public static final String COLORED_NAVIGATION_BAR = "colored_navigation_bar"; public static final String COLORED_NAVIGATION_BAR_ALBUM = "colored_navigation_bar_album"; @@ -46,6 +45,7 @@ public final class PreferenceUtils { public static final String ALBUM_ART_ON_LOCKSCREEN = "album_art_on_lockscreen"; public static final String LAST_SLEEP_TIMER_VALUE = "last_sleep_timer_value"; public static final String NEXT_SLEEP_TIMER_ELAPSED_REALTIME = "next_sleep_timer_elapsed_real_time"; + public static final String IGNORE_MEDIA_STORE_ARTWORK = "ignore_media_store_artwork"; private static PreferenceUtils sInstance; @@ -111,9 +111,9 @@ public final class PreferenceUtils { return mPreferences.getInt(LAST_START_PAGE, DEFAULT_PAGE); } -// public final boolean autoDownloadOnlyOnWifi() { -// return mPreferences.getBoolean(ONLY_ON_WIFI, false); -// } + public final boolean autoDownloadArtistImagesOnlyOnWifi() { + return mPreferences.getBoolean(AUTO_DOWNLOAD_ARTIST_IMAGES_ONLY_ON_WIFI, false); + } public final boolean coloredAlbumFooters() { return mPreferences.getBoolean(COLORED_ALBUM_FOOTERS, true); @@ -168,11 +168,6 @@ public final class PreferenceUtils { } } -// @SuppressLint("CommitPrefEdits") -// private void setColoredNavigationBarOtherScreens(boolean coloredNavbar) { -// mPreferences.edit().putBoolean(COLORED_NAVIGATION_BAR_OTHER_SCREENS, coloredNavbar).commit(); -// } - public final boolean opaqueStatusbarNowPlaying() { return mPreferences.getBoolean(OPAQUE_STATUSBAR_NOW_PLAYING, false); } @@ -201,68 +196,37 @@ public final class PreferenceUtils { return mPreferences.getBoolean(GAPLESS_PLAYBACK, false); } - public final boolean albumArtOnLockscrenn() { + public final boolean albumArtOnLockscreen() { return mPreferences.getBoolean(ALBUM_ART_ON_LOCKSCREEN, true); } -// public final boolean downloadMissingArtistImages() { -// return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true); -// } -// + public final boolean ignoreMediaStoreArtwork() { + return mPreferences.getBoolean(IGNORE_MEDIA_STORE_ARTWORK, false); + } -// private void setSortOrder(final String key, final String value) { -// final SharedPreferences.Editor editor = mPreferences.edit(); -// editor.putString(key, value); -// editor.apply(); -// } - - // public void setArtistSortOrder(final String value) { -// setSortOrder(ARTIST_SORT_ORDER, value); -// } -// public final String getArtistSortOrder() { return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z); } -// public void setArtistSongSortOrder(final String value) { -// setSortOrder(ARTIST_SONG_SORT_ORDER, value); -// } - public final String getArtistSongSortOrder() { return mPreferences.getString(ARTIST_SONG_SORT_ORDER, SortOrder.ArtistSongSortOrder.SONG_A_Z); } -// public void setArtistAlbumSortOrder(final String value) { -// setSortOrder(ARTIST_ALBUM_SORT_ORDER, value); -// } - public final String getArtistAlbumSortOrder() { return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, SortOrder.ArtistAlbumSortOrder.ALBUM_YEAR_ASC); } -// public void setAlbumSortOrder(final String value) { -// setSortOrder(ALBUM_SORT_ORDER, value); -// } - public final String getAlbumSortOrder() { return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z); } -// public void setAlbumSongSortOrder(final String value) { -// setSortOrder(ALBUM_SONG_SORT_ORDER, value); -// } - public final String getAlbumSongSortOrder() { return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST); } -// public void setSongSortOrder(final String value) { -// setSortOrder(SONG_SORT_ORDER, value); -// } - public final String getSongSortOrder() { return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index abff7361..45c55980 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -118,44 +118,6 @@ public class Util { | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } -// public static boolean isOnline(final Context context) { -// if (context == null) -// return false; -// -// boolean state = false; -// final boolean onlyOnWifi = PreferenceUtils.getInstance(context).autoDownloadOnlyOnWifi(); -// -// /* Monitor network connections */ -// final ConnectivityManager connectivityManager = (ConnectivityManager) context -// .getSystemService(Context.CONNECTIVITY_SERVICE); -// -// /* Wi-Fi connection */ -// final NetworkInfo wifiNetwork = connectivityManager -// .getNetworkInfo(ConnectivityManager.TYPE_WIFI); -// if (wifiNetwork != null) { -// state = wifiNetwork.isConnectedOrConnecting(); -// } -// -// /* Mobile data connection */ -// final NetworkInfo mbobileNetwork = connectivityManager -// .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); -// if (mbobileNetwork != null) { -// if (!onlyOnWifi) { -// state = mbobileNetwork.isConnectedOrConnecting(); -// } -// } -// -// /* Other networks */ -// final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); -// if (activeNetwork != null) { -// if (!onlyOnWifi) { -// state = activeNetwork.isConnectedOrConnecting(); -// } -// } -// -// return state; -// } - public static String getFileSizeString(long sizeInBytes) { long fileSizeInKB = sizeInBytes / 1024; long fileSizeInMB = fileSizeInKB / 1024; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a0769766..0fd316d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -104,6 +104,7 @@ General Theme Audio General + Images Lockscreen In which views the navigation bar should be colored. Colored Navigation Bar @@ -117,6 +118,7 @@ Colored Album Footers Album Art on Lockscreen Colored Notification + Ignore Media Store artwork Gapless Playback Force Square Album Cover Opaque Toolbar @@ -160,6 +162,7 @@ The box below the album art where the song title and artist goes is larger in its height. Uses a progressbar which does not cover the album art instead of the default progress slider. Displays a card below the playback controller buttons (play/pause etc.). + The Android Media Store caches your embedded album artwork but on some devices it seems to store it at a low resolution. Enabling this will bypass the Media Store, which can increase the album art quality but causes slower image loading times. "Could not download a matching album cover." Search your library… Rescanning media… diff --git a/app/src/main/res/xml/pref_images.xml b/app/src/main/res/xml/pref_images.xml new file mode 100644 index 00000000..1b29a4e9 --- /dev/null +++ b/app/src/main/res/xml/pref_images.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file