diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java index 59beaeaa..e459f0a2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java @@ -10,15 +10,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.glide.PhonographColoredTarget; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; import java.util.ArrayList; @@ -129,13 +125,9 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter { } private void loadAlbumCover() { - Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(getActivity()), BitmapPaletteWrapper.class) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .error(R.drawable.default_album_art) - .signature(new MediaStoreSignature("", song.dateModified, 0)) + SongGlideRequest.Builder.from(Glide.with(this), song) + .checkIgnoreMediaStore(getActivity()) + .generatePalette(getActivity()).build() .into(new PhonographColoredTarget(albumCover) { @Override public void onColorReady(int color) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java index 9081b0e3..053480b3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java @@ -11,10 +11,10 @@ import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; -import com.kabouzeid.gramophone.glide.artistimage.ArtistImageRequest; +import com.kabouzeid.gramophone.glide.SongGlideRequest; +import com.kabouzeid.gramophone.glide.artistimage.ArtistImage; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.loader.AlbumLoader; @@ -97,12 +97,8 @@ public class SearchAdapter extends RecyclerView.Adapter implements MaterialCab songTitle.setText(song.title); songInfo.setText(song.albumName); - Glide.with(activity) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .error(R.drawable.default_album_art) - .animate(android.R.anim.fade_in) - .signature(new MediaStoreSignature("", song.dateModified, 0)) + SongGlideRequest.Builder.from(Glide.with(activity), song) + .checkIgnoreMediaStore(activity).build() .into(albumArt); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java index edfa1c9d..95113149 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/SongAdapter.java @@ -13,22 +13,18 @@ import android.view.ViewGroup; import com.afollestad.materialcab.MaterialCab; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.glide.PhonographColoredTarget; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.ColorUtil; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import java.util.ArrayList; @@ -122,14 +118,10 @@ public class SongAdapter extends AbsMultiSelectAdapter build() { + //noinspection unchecked + return createBaseRequest(requestManager, song, ignoreMediaStore) + .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_IMAGE) + .animate(DEFAULT_ANIMATION) + .signature(createSignature(song)); + } + } + + public static class BitmapBuilder { + private final Builder builder; + + public BitmapBuilder(Builder builder) { + this.builder = builder; + } + + public BitmapRequestBuilder build() { + //noinspection unchecked + return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) + .asBitmap() + .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_IMAGE) + .animate(DEFAULT_ANIMATION) + .signature(createSignature(builder.song)); + } + } + + public static class PaletteBuilder { + final Context context; + private final Builder builder; + + public PaletteBuilder(Builder builder, Context context) { + this.builder = builder; + this.context = context; + } + + public BitmapRequestBuilder build() { + //noinspection unchecked + return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) + .asBitmap() + .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) + .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_IMAGE) + .animate(DEFAULT_ANIMATION) + .signature(createSignature(builder.song)); + } + } + + public static DrawableTypeRequest createBaseRequest(RequestManager requestManager, Song song, boolean ignoreMediaStore) { + if (ignoreMediaStore) { + return requestManager.load(new AudioFileCover(song.data)); + } else { + return requestManager.loadFromMediaStore(MusicUtil.getMediaStoreAlbumCoverUri(song.albumId)); + } + } + + public static Key createSignature(Song song) { + return new MediaStoreSignature("", song.dateModified, 0); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImage.java similarity index 71% rename from app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java rename to app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImage.java index e5154a0e..4c3803bb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageRequest.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImage.java @@ -3,11 +3,11 @@ package com.kabouzeid.gramophone.glide.artistimage; /** * @author Karim Abou Zeid (kabouzeid) */ -public class ArtistImageRequest { +public class ArtistImage { public final String artistName; public final boolean skipOkHttpCache; - public ArtistImageRequest(String artistName, boolean skipOkHttpCache) { + public ArtistImage(String artistName, boolean skipOkHttpCache) { this.artistName = artistName; this.skipOkHttpCache = skipOkHttpCache; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java index 372c35c4..5987114c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java @@ -20,11 +20,11 @@ import java.io.InputStream; public class ArtistImageFetcher implements DataFetcher { private Context context; private final LastFMRestClient lastFMRestClient; - private final ArtistImageRequest model; + private final ArtistImage model; private HttpUrlFetcher urlFetcher; private volatile boolean isCancelled; - public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImageRequest model) { + public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model) { this.context = context; this.lastFMRestClient = lastFMRestClient; this.model = model; diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java index 3d57108e..504552a1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java @@ -15,7 +15,7 @@ import java.io.InputStream; * @author Karim Abou Zeid (kabouzeid) */ -public class ArtistImageLoader implements StreamModelLoader { +public class ArtistImageLoader implements StreamModelLoader { private Context context; private LastFMRestClient lastFMRestClient; @@ -25,11 +25,11 @@ public class ArtistImageLoader implements StreamModelLoader } @Override - public DataFetcher getResourceFetcher(ArtistImageRequest model, int width, int height) { + public DataFetcher getResourceFetcher(ArtistImage model, int width, int height) { return new ArtistImageFetcher(context, lastFMRestClient, model); } - public static class Factory implements ModelLoaderFactory { + public static class Factory implements ModelLoaderFactory { private static volatile LastFMRestClient internalClient; private LastFMRestClient client; @@ -52,7 +52,7 @@ public class ArtistImageLoader implements StreamModelLoader } @Override - public ModelLoader build(Context context, GenericLoaderFactory factories) { + public ModelLoader build(Context context, GenericLoaderFactory factories) { return new ArtistImageLoader(context, client); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCover.java b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCover.java new file mode 100644 index 00000000..a13cfc3c --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCover.java @@ -0,0 +1,12 @@ +package com.kabouzeid.gramophone.glide.audiocover; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public class AudioFileCover { + public final String filePath; + + public AudioFileCover(String filePath) { + this.filePath = filePath; + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverFetcher.java b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverFetcher.java index 10e9e1c0..49c4b4c6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverFetcher.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverFetcher.java @@ -1,11 +1,9 @@ package com.kabouzeid.gramophone.glide.audiocover; -import android.content.Context; import android.media.MediaMetadataRetriever; import com.bumptech.glide.Priority; import com.bumptech.glide.load.data.DataFetcher; -import com.kabouzeid.gramophone.model.Song; import java.io.ByteArrayInputStream; import java.io.File; @@ -14,34 +12,36 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import hugo.weaving.DebugLog; + /** * @author Karim Abou Zeid (kabouzeid) */ public class AudioFileCoverFetcher implements DataFetcher { - private final Song model; + private final AudioFileCover model; private FileInputStream stream; - private Context context; - public AudioFileCoverFetcher(Context context, Song model) { - this.context = context; + public AudioFileCoverFetcher(AudioFileCover model) { this.model = model; } + @DebugLog @Override public String getId() { - return model.data; + return model.filePath; } + @DebugLog @Override public InputStream loadData(Priority priority) throws Exception { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { - retriever.setDataSource(model.data); + retriever.setDataSource(model.filePath); byte[] picture = retriever.getEmbeddedPicture(); if (picture != null) { return new ByteArrayInputStream(picture); } else { - return fallback(model.data); + return fallback(model.filePath); } } finally { retriever.release(); @@ -50,6 +50,7 @@ public class AudioFileCoverFetcher implements DataFetcher { private static final String[] FALLBACKS = {"cover.jpg", "album.jpg", "folder.jpg"}; + @DebugLog private InputStream fallback(String path) throws FileNotFoundException { File parent = new File(path).getParentFile(); for (String fallback : FALLBACKS) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverLoader.java b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverLoader.java new file mode 100644 index 00000000..883fb117 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/AudioFileCoverLoader.java @@ -0,0 +1,35 @@ +package com.kabouzeid.gramophone.glide.audiocover; + +import android.content.Context; + +import com.bumptech.glide.load.data.DataFetcher; +import com.bumptech.glide.load.model.GenericLoaderFactory; +import com.bumptech.glide.load.model.ModelLoader; +import com.bumptech.glide.load.model.ModelLoaderFactory; +import com.bumptech.glide.load.model.stream.StreamModelLoader; + +import java.io.InputStream; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ + +public class AudioFileCoverLoader implements StreamModelLoader { + + @Override + public DataFetcher getResourceFetcher(AudioFileCover model, int width, int height) { + return new AudioFileCoverFetcher(model); + } + + public static class Factory implements ModelLoaderFactory { + @Override + public ModelLoader build(Context context, GenericLoaderFactory factories) { + return new AudioFileCoverLoader(); + } + + @Override + public void teardown() { + } + } +} + diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/SongCoverLoader.java b/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/SongCoverLoader.java deleted file mode 100644 index 496d2799..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/audiocover/SongCoverLoader.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.kabouzeid.gramophone.glide.audiocover; - -import android.content.Context; - -import com.bumptech.glide.load.data.DataFetcher; -import com.bumptech.glide.load.model.GenericLoaderFactory; -import com.bumptech.glide.load.model.ModelLoader; -import com.bumptech.glide.load.model.ModelLoaderFactory; -import com.bumptech.glide.load.model.stream.StreamModelLoader; -import com.kabouzeid.gramophone.model.Song; - -import java.io.InputStream; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ - -public class SongCoverLoader implements StreamModelLoader { - private Context context; - - public SongCoverLoader(Context context) { - this.context = context; - } - - @Override - public DataFetcher getResourceFetcher(Song model, int width, int height) { - return new AudioFileCoverFetcher(context, model); - } - - public static class Factory implements ModelLoaderFactory { - @Override - public ModelLoader build(Context context, GenericLoaderFactory factories) { - return new SongCoverLoader(context); - } - - @Override - public void teardown() { - } - } -} - diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java index cda769d2..cda5b824 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java @@ -21,19 +21,16 @@ import android.support.v4.content.ContextCompat; import android.widget.RemoteViews; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.ColorUtil; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; public class PlayingNotificationHelper { @@ -195,12 +192,9 @@ public class PlayingNotificationHelper { service.runOnUiThread(new Runnable() { @Override public void run() { - Glide.with(service) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(currentSong.albumId)) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(service), BitmapPaletteWrapper.class) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new MediaStoreSignature("", currentSong.dateModified, 0)) + SongGlideRequest.Builder.from(Glide.with(service), currentSong) + .checkIgnoreMediaStore(service) + .generatePalette(service).build() .into(target); } }); 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 06125387..88f6020a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -33,13 +33,12 @@ import android.widget.Toast; import com.bumptech.glide.BitmapRequestBuilder; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.appwidget.WidgetMedium; import com.kabouzeid.gramophone.glide.BlurTransformation; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.helper.PlayingNotificationHelper; import com.kabouzeid.gramophone.helper.ShuffleHelper; import com.kabouzeid.gramophone.helper.StopWatch; @@ -143,7 +142,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP private Handler uiThreadHandler; private static String getTrackUri(@NonNull Song song) { - return MusicUtil.getSongUri(song.id).toString(); + return MusicUtil.getSongFileUri(song.id).toString(); } @Override @@ -446,11 +445,9 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP .apply(); if (showAlbumArt) { final Point screenSize = Util.getScreenSize(MusicService.this); - final BitmapRequestBuilder request = Glide.with(MusicService.this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .asBitmap() - .diskCacheStrategy(DiskCacheStrategy.NONE) - .signature(new MediaStoreSignature("", song.dateModified, 0)); + final BitmapRequestBuilder request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) + .checkIgnoreMediaStore(MusicService.this) + .asBitmap().build(); if (blurAlbumArt) { request.transform(new BlurTransformation.Builder(MusicService.this).build()); } 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 0c1e3a02..f83f5fa4 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 @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.ui.activities; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; @@ -17,15 +16,14 @@ import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.util.DialogUtils; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.animation.GlideAnimation; -import com.bumptech.glide.signature.MediaStoreSignature; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.glide.PhonographColoredTarget; -import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; @@ -37,7 +35,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity; import com.kabouzeid.gramophone.util.ColorUtil; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.Util; @@ -82,9 +79,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements setStatusBarTransparent(); ButterKnife.bind(this); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - postponeEnterTransition(); - } + supportPostponeEnterTransition(); if (shouldColorNavigationBar()) setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); @@ -154,28 +149,24 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements } private void loadAlbumCover() { - Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(album.getId())) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .error(R.drawable.default_album_art) - .signature(new MediaStoreSignature("", album.getDateModified(), 0)) + SongGlideRequest.Builder.from(Glide.with(this), album.safeGetFirstSong()) + .checkIgnoreMediaStore(this) + .generatePalette(this).build() + .dontAnimate() + .listener(new RequestListener() { + @Override + public boolean onException(Exception e, Object model, Target target, boolean isFirstResource) { + supportStartPostponedEnterTransition(); + return false; + } + + @Override + public boolean onResourceReady(BitmapPaletteWrapper resource, Object model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { + supportStartPostponedEnterTransition(); + return false; + } + }) .into(new PhonographColoredTarget(albumArtImageView) { - @Override - public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation glideAnimation) { - super.onResourceReady(resource, glideAnimation); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - startPostponedEnterTransition(); - } - - @Override - public void onLoadFailed(Exception e, Drawable errorDrawable) { - super.onLoadFailed(e, errorDrawable); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - startPostponedEnterTransition(); - } - @Override public void onColorReady(int color) { setColors(color); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index ff03efce..2c0f480d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.ui.activities; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; @@ -24,14 +23,15 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.util.DialogUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.Target; import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter; import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.glide.PhonographColoredTarget; -import com.kabouzeid.gramophone.glide.artistimage.ArtistImageRequest; +import com.kabouzeid.gramophone.glide.artistimage.ArtistImage; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; @@ -255,29 +255,24 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement ArtistSignatureUtil.getInstance(this).updateArtistSignature(artist.name); } Glide.with(this) - .load(new ArtistImageRequest(artist.name, forceDownload)) + .load(new ArtistImage(artist.name, forceDownload)) .asBitmap() .transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .error(R.drawable.default_album_art) .signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name)) - .into(new PhonographColoredTarget(artistImage) { - + .dontAnimate() + .listener(new RequestListener() { @Override - public void onLoadFailed(Exception e, Drawable errorDrawable) { - super.onLoadFailed(e, errorDrawable); + public boolean onException(Exception e, ArtistImage model, Target target, boolean isFirstResource) { toastUpdatedArtistImageIfDownloadWasForced(); + return false; } @Override - public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation glideAnimation) { - super.onResourceReady(resource, glideAnimation); + public boolean onResourceReady(BitmapPaletteWrapper resource, ArtistImage model, Target target, boolean isFromMemoryCache, boolean isFirstResource) { toastUpdatedArtistImageIfDownloadWasForced(); - } - - @Override - public void onColorReady(int color) { - setColors(color); + return false; } private void toastUpdatedArtistImageIfDownloadWasForced() { @@ -285,6 +280,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show(); } } + }) + .into(new PhonographColoredTarget(artistImage) { + @Override + public void onColorReady(int color) { + setColors(color); + } }); } 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 873e77e5..30e47d5f 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 @@ -36,14 +36,13 @@ import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.ChangelogDialog; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.dialogs.DonationDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; +import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.SearchQueryHelper; import com.kabouzeid.gramophone.interfaces.CabHolder; @@ -58,7 +57,6 @@ import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment; import com.kabouzeid.gramophone.util.ColorUtil; -import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.Util; @@ -275,12 +273,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity } ((TextView) navigationDrawerHeader.findViewById(R.id.title)).setText(song.title); ((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName); - Glide.with(this) - .loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .error(R.drawable.default_album_art) - .animate(android.R.anim.fade_in) - .signature(new MediaStoreSignature("", song.dateModified, 0)) + SongGlideRequest.Builder.from(Glide.with(this), song) + .checkIgnoreMediaStore(this).build() .into(((ImageView) navigationDrawerHeader.findViewById(R.id.image))); } else { if (navigationDrawerHeader != null) { 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 0c8eac8d..434050e0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -34,14 +34,14 @@ import java.util.List; public class MusicUtil { public static final String TAG = MusicUtil.class.getSimpleName(); - public static Uri getAlbumArtUri(int albumId) { + public static Uri getMediaStoreAlbumCoverUri(int albumId) { final Uri sArtworkUri = Uri .parse("content://media/external/audio/albumart"); return ContentUris.withAppendedId(sArtworkUri, albumId); } - public static Uri getSongUri(int songId) { + public static Uri getSongFileUri(int songId) { return ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, songId); } @@ -55,7 +55,7 @@ public class MusicUtil { public static void setRingtone(@NonNull final Context context, final int id) { final ContentResolver resolver = context.getContentResolver(); - final Uri uri = getSongUri(id); + final Uri uri = getSongFileUri(id); try { final ContentValues values = new ContentValues(2); values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1");