Various optimizations and bug fixes to Glide calls. Made the ignore media store option working again.

This commit is contained in:
Karim Abou Zeid 2016-01-03 23:11:19 +01:00
commit df5a06e5b9
22 changed files with 270 additions and 200 deletions

View file

@ -10,15 +10,11 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import com.bumptech.glide.Glide; 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.R;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.misc.CustomFragmentStatePagerAdapter; import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -129,13 +125,9 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
} }
private void loadAlbumCover() { private void loadAlbumCover() {
Glide.with(this) SongGlideRequest.Builder.from(Glide.with(this), song)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .checkIgnoreMediaStore(getActivity())
.asBitmap() .generatePalette(getActivity()).build()
.transcode(new BitmapPaletteTranscoder(getActivity()), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.signature(new MediaStoreSignature("", song.dateModified, 0))
.into(new PhonographColoredTarget(albumCover) { .into(new PhonographColoredTarget(albumCover) {
@Override @Override
public void onColorReady(int color) { public void onColorReady(int color) {

View file

@ -11,10 +11,10 @@ import android.view.ViewGroup;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; 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.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.loader.AlbumLoader; import com.kabouzeid.gramophone.loader.AlbumLoader;
@ -97,12 +97,8 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
final Album album = (Album) results.get(position); final Album album = (Album) results.get(position);
holder.title.setText(album.getTitle()); holder.title.setText(album.getTitle());
holder.text.setText(album.getArtistName()); holder.text.setText(album.getArtistName());
Glide.with(activity) SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong())
.loadFromMediaStore(MusicUtil.getAlbumArtUri(album.getId())) .checkIgnoreMediaStore(activity).build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in)
.signature(new MediaStoreSignature("", album.getDateModified(), 0))
.into(holder.image); .into(holder.image);
break; break;
case ARTIST: case ARTIST:
@ -110,7 +106,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
holder.title.setText(artist.name); holder.title.setText(artist.name);
holder.text.setText(MusicUtil.getArtistInfoString(activity, artist)); holder.text.setText(MusicUtil.getArtistInfoString(activity, artist));
Glide.with(activity) Glide.with(activity)
.load(new ArtistImageRequest(artist.name, false)) .load(new ArtistImage(artist.name, false))
.diskCacheStrategy(DiskCacheStrategy.SOURCE) .diskCacheStrategy(DiskCacheStrategy.SOURCE)
.error(R.drawable.default_album_art) .error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in) .animate(android.R.anim.fade_in)

View file

@ -12,22 +12,18 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.bumptech.glide.Glide; 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.R;
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -120,14 +116,10 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
protected void loadAlbumCover(Album album, final ViewHolder holder) { protected void loadAlbumCover(Album album, final ViewHolder holder) {
if (holder.image == null) return; if (holder.image == null) return;
Glide.with(activity)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(album.getId())) SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong())
.asBitmap() .checkIgnoreMediaStore(activity)
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class) .generatePalette(activity).build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in)
.signature(new MediaStoreSignature("", album.getDateModified(), 0))
.into(new PhonographColoredTarget(holder.image) { .into(new PhonographColoredTarget(holder.image) {
@Override @Override
public void onLoadCleared(Drawable placeholder) { public void onLoadCleared(Drawable placeholder) {

View file

@ -20,7 +20,7 @@ import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@ -121,7 +121,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
protected void loadArtistImage(Artist artist, final ViewHolder holder) { protected void loadArtistImage(Artist artist, final ViewHolder holder) {
if (holder.image == null) return; if (holder.image == null) return;
Glide.with(activity) Glide.with(activity)
.load(new ArtistImageRequest(artist.name, false)) .load(new ArtistImage(artist.name, false))
.asBitmap() .asBitmap()
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class) .transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.SOURCE) .diskCacheStrategy(DiskCacheStrategy.SOURCE)
@ -129,6 +129,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
.animate(android.R.anim.fade_in) .animate(android.R.anim.fade_in)
.priority(Priority.LOW) .priority(Priority.LOW)
.signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name)) .signature(ArtistSignatureUtil.getInstance(activity).getArtistSignature(artist.name))
.thumbnail(0.001f)
.into(new PhonographColoredTarget(holder.image) { .into(new PhonographColoredTarget(holder.image) {
@Override @Override
public void onLoadCleared(Drawable placeholder) { public void onLoadCleared(Drawable placeholder) {

View file

@ -16,16 +16,14 @@ import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.bumptech.glide.Glide; 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.R;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -75,12 +73,8 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
songTitle.setText(song.title); songTitle.setText(song.title);
songInfo.setText(song.albumName); songInfo.setText(song.albumName);
Glide.with(activity) SongGlideRequest.Builder.from(Glide.with(activity), song)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .checkIgnoreMediaStore(activity).build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in)
.signature(new MediaStoreSignature("", song.dateModified, 0))
.into(albumArt); .into(albumArt);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

View file

@ -13,22 +13,18 @@ import android.view.ViewGroup;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.bumptech.glide.Glide; 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.R;
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -122,14 +118,10 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
protected void loadAlbumCover(Song song, final ViewHolder holder) { protected void loadAlbumCover(Song song, final ViewHolder holder) {
if (holder.image == null) return; if (holder.image == null) return;
Glide.with(activity)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) SongGlideRequest.Builder.from(Glide.with(activity), song)
.asBitmap() .checkIgnoreMediaStore(activity)
.transcode(new BitmapPaletteTranscoder(activity), BitmapPaletteWrapper.class) .generatePalette(activity).build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in)
.signature(new MediaStoreSignature("", song.dateModified, 0))
.into(new PhonographColoredTarget(holder.image) { .into(new PhonographColoredTarget(holder.image) {
@Override @Override
public void onLoadCleared(Drawable placeholder) { public void onLoadCleared(Drawable placeholder) {

View file

@ -15,17 +15,15 @@ import android.support.annotation.Nullable;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.ui.activities.MainActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
public class WidgetMedium extends AppWidgetProvider { public class WidgetMedium extends AppWidgetProvider {
private static RemoteViews widgetLayout; private static RemoteViews widgetLayout;
@ -86,11 +84,9 @@ public class WidgetMedium extends AppWidgetProvider {
uiThreadHandler.post(new Runnable() { uiThreadHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
Glide.with(context) SongGlideRequest.Builder.from(Glide.with(context), song)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .checkIgnoreMediaStore(context)
.asBitmap() .asBitmap().build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.signature(new MediaStoreSignature("", song.dateModified, 0))
.into(target); .into(target);
} }
}); });

View file

@ -5,10 +5,10 @@ import android.content.Context;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.module.GlideModule; import com.bumptech.glide.module.GlideModule;
import com.kabouzeid.gramophone.glide.artistimage.ArtistImage;
import com.kabouzeid.gramophone.glide.artistimage.ArtistImageLoader; import com.kabouzeid.gramophone.glide.artistimage.ArtistImageLoader;
import com.kabouzeid.gramophone.glide.artistimage.ArtistImageRequest; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover;
import com.kabouzeid.gramophone.glide.audiocover.SongCoverLoader; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCoverLoader;
import com.kabouzeid.gramophone.model.Song;
import java.io.InputStream; import java.io.InputStream;
@ -23,7 +23,7 @@ public class PhonographGlideModule implements GlideModule {
@Override @Override
public void registerComponents(Context context, Glide glide) { public void registerComponents(Context context, Glide glide) {
glide.register(Song.class, InputStream.class, new SongCoverLoader.Factory()); glide.register(AudioFileCover.class, InputStream.class, new AudioFileCoverLoader.Factory());
glide.register(ArtistImageRequest.class, InputStream.class, new ArtistImageLoader.Factory(context)); glide.register(ArtistImage.class, InputStream.class, new ArtistImageLoader.Factory(context));
} }
} }

View file

@ -0,0 +1,123 @@
package com.kabouzeid.gramophone.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SongGlideRequest {
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE;
public static final int DEFAULT_ERROR_IMAGE = R.drawable.default_album_art;
public static final int DEFAULT_ANIMATION = android.R.anim.fade_in;
public static class Builder {
final RequestManager requestManager;
final Song song;
boolean ignoreMediaStore;
public static Builder from(@NonNull RequestManager requestManager, Song song) {
return new Builder(requestManager, song);
}
private Builder(@NonNull RequestManager requestManager, Song song) {
this.requestManager = requestManager;
this.song = song;
}
public PaletteBuilder generatePalette(Context context) {
return new PaletteBuilder(this, context);
}
public BitmapBuilder asBitmap() {
return new BitmapBuilder(this);
}
public Builder checkIgnoreMediaStore(Context context) {
return ignoreMediaStore(PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork());
}
public Builder ignoreMediaStore(boolean ignoreMediaStore) {
this.ignoreMediaStore = ignoreMediaStore;
return this;
}
public DrawableRequestBuilder<GlideDrawable> 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<?, Bitmap> 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<?, BitmapPaletteWrapper> 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);
}
}

View file

@ -3,11 +3,11 @@ package com.kabouzeid.gramophone.glide.artistimage;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class ArtistImageRequest { public class ArtistImage {
public final String artistName; public final String artistName;
public final boolean skipOkHttpCache; public final boolean skipOkHttpCache;
public ArtistImageRequest(String artistName, boolean skipOkHttpCache) { public ArtistImage(String artistName, boolean skipOkHttpCache) {
this.artistName = artistName; this.artistName = artistName;
this.skipOkHttpCache = skipOkHttpCache; this.skipOkHttpCache = skipOkHttpCache;
} }

View file

@ -20,11 +20,11 @@ import java.io.InputStream;
public class ArtistImageFetcher implements DataFetcher<InputStream> { public class ArtistImageFetcher implements DataFetcher<InputStream> {
private Context context; private Context context;
private final LastFMRestClient lastFMRestClient; private final LastFMRestClient lastFMRestClient;
private final ArtistImageRequest model; private final ArtistImage model;
private HttpUrlFetcher urlFetcher; private HttpUrlFetcher urlFetcher;
private volatile boolean isCancelled; private volatile boolean isCancelled;
public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImageRequest model) { public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model) {
this.context = context; this.context = context;
this.lastFMRestClient = lastFMRestClient; this.lastFMRestClient = lastFMRestClient;
this.model = model; this.model = model;

View file

@ -15,7 +15,7 @@ import java.io.InputStream;
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class ArtistImageLoader implements StreamModelLoader<ArtistImageRequest> { public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
private Context context; private Context context;
private LastFMRestClient lastFMRestClient; private LastFMRestClient lastFMRestClient;
@ -25,11 +25,11 @@ public class ArtistImageLoader implements StreamModelLoader<ArtistImageRequest>
} }
@Override @Override
public DataFetcher<InputStream> getResourceFetcher(ArtistImageRequest model, int width, int height) { public DataFetcher<InputStream> getResourceFetcher(ArtistImage model, int width, int height) {
return new ArtistImageFetcher(context, lastFMRestClient, model); return new ArtistImageFetcher(context, lastFMRestClient, model);
} }
public static class Factory implements ModelLoaderFactory<ArtistImageRequest, InputStream> { public static class Factory implements ModelLoaderFactory<ArtistImage, InputStream> {
private static volatile LastFMRestClient internalClient; private static volatile LastFMRestClient internalClient;
private LastFMRestClient client; private LastFMRestClient client;
@ -52,7 +52,7 @@ public class ArtistImageLoader implements StreamModelLoader<ArtistImageRequest>
} }
@Override @Override
public ModelLoader<ArtistImageRequest, InputStream> build(Context context, GenericLoaderFactory factories) { public ModelLoader<ArtistImage, InputStream> build(Context context, GenericLoaderFactory factories) {
return new ArtistImageLoader(context, client); return new ArtistImageLoader(context, client);
} }

View file

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

View file

@ -1,11 +1,9 @@
package com.kabouzeid.gramophone.glide.audiocover; package com.kabouzeid.gramophone.glide.audiocover;
import android.content.Context;
import android.media.MediaMetadataRetriever; import android.media.MediaMetadataRetriever;
import com.bumptech.glide.Priority; import com.bumptech.glide.Priority;
import com.bumptech.glide.load.data.DataFetcher; import com.bumptech.glide.load.data.DataFetcher;
import com.kabouzeid.gramophone.model.Song;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
@ -14,34 +12,36 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import hugo.weaving.DebugLog;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class AudioFileCoverFetcher implements DataFetcher<InputStream> { public class AudioFileCoverFetcher implements DataFetcher<InputStream> {
private final Song model; private final AudioFileCover model;
private FileInputStream stream; private FileInputStream stream;
private Context context;
public AudioFileCoverFetcher(Context context, Song model) { public AudioFileCoverFetcher(AudioFileCover model) {
this.context = context;
this.model = model; this.model = model;
} }
@DebugLog
@Override @Override
public String getId() { public String getId() {
return model.data; return model.filePath;
} }
@DebugLog
@Override @Override
public InputStream loadData(Priority priority) throws Exception { public InputStream loadData(Priority priority) throws Exception {
MediaMetadataRetriever retriever = new MediaMetadataRetriever(); MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try { try {
retriever.setDataSource(model.data); retriever.setDataSource(model.filePath);
byte[] picture = retriever.getEmbeddedPicture(); byte[] picture = retriever.getEmbeddedPicture();
if (picture != null) { if (picture != null) {
return new ByteArrayInputStream(picture); return new ByteArrayInputStream(picture);
} else { } else {
return fallback(model.data); return fallback(model.filePath);
} }
} finally { } finally {
retriever.release(); retriever.release();
@ -50,6 +50,7 @@ public class AudioFileCoverFetcher implements DataFetcher<InputStream> {
private static final String[] FALLBACKS = {"cover.jpg", "album.jpg", "folder.jpg"}; private static final String[] FALLBACKS = {"cover.jpg", "album.jpg", "folder.jpg"};
@DebugLog
private InputStream fallback(String path) throws FileNotFoundException { private InputStream fallback(String path) throws FileNotFoundException {
File parent = new File(path).getParentFile(); File parent = new File(path).getParentFile();
for (String fallback : FALLBACKS) { for (String fallback : FALLBACKS) {

View file

@ -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<AudioFileCover> {
@Override
public DataFetcher<InputStream> getResourceFetcher(AudioFileCover model, int width, int height) {
return new AudioFileCoverFetcher(model);
}
public static class Factory implements ModelLoaderFactory<AudioFileCover, InputStream> {
@Override
public ModelLoader<AudioFileCover, InputStream> build(Context context, GenericLoaderFactory factories) {
return new AudioFileCoverLoader();
}
@Override
public void teardown() {
}
}
}

View file

@ -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<Song> {
private Context context;
public SongCoverLoader(Context context) {
this.context = context;
}
@Override
public DataFetcher<InputStream> getResourceFetcher(Song model, int width, int height) {
return new AudioFileCoverFetcher(context, model);
}
public static class Factory implements ModelLoaderFactory<Song, InputStream> {
@Override
public ModelLoader<Song, InputStream> build(Context context, GenericLoaderFactory factories) {
return new SongCoverLoader(context);
}
@Override
public void teardown() {
}
}
}

View file

@ -21,19 +21,16 @@ import android.support.v4.content.ContextCompat;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.kabouzeid.gramophone.R; 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.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.ui.activities.MainActivity;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
public class PlayingNotificationHelper { public class PlayingNotificationHelper {
@ -195,12 +192,9 @@ public class PlayingNotificationHelper {
service.runOnUiThread(new Runnable() { service.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
Glide.with(service) SongGlideRequest.Builder.from(Glide.with(service), currentSong)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(currentSong.albumId)) .checkIgnoreMediaStore(service)
.asBitmap() .generatePalette(service).build()
.transcode(new BitmapPaletteTranscoder(service), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.signature(new MediaStoreSignature("", currentSong.dateModified, 0))
.into(target); .into(target);
} }
}); });

View file

@ -33,13 +33,12 @@ import android.widget.Toast;
import com.bumptech.glide.BitmapRequestBuilder; import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.appwidget.WidgetMedium; import com.kabouzeid.gramophone.appwidget.WidgetMedium;
import com.kabouzeid.gramophone.glide.BlurTransformation; import com.kabouzeid.gramophone.glide.BlurTransformation;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.PlayingNotificationHelper; import com.kabouzeid.gramophone.helper.PlayingNotificationHelper;
import com.kabouzeid.gramophone.helper.ShuffleHelper; import com.kabouzeid.gramophone.helper.ShuffleHelper;
import com.kabouzeid.gramophone.helper.StopWatch; import com.kabouzeid.gramophone.helper.StopWatch;
@ -143,7 +142,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private Handler uiThreadHandler; private Handler uiThreadHandler;
private static String getTrackUri(@NonNull Song song) { private static String getTrackUri(@NonNull Song song) {
return MusicUtil.getSongUri(song.id).toString(); return MusicUtil.getSongFileUri(song.id).toString();
} }
@Override @Override
@ -446,11 +445,9 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
.apply(); .apply();
if (showAlbumArt) { if (showAlbumArt) {
final Point screenSize = Util.getScreenSize(MusicService.this); final Point screenSize = Util.getScreenSize(MusicService.this);
final BitmapRequestBuilder request = Glide.with(MusicService.this) final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .checkIgnoreMediaStore(MusicService.this)
.asBitmap() .asBitmap().build();
.diskCacheStrategy(DiskCacheStrategy.NONE)
.signature(new MediaStoreSignature("", song.dateModified, 0));
if (blurAlbumArt) { if (blurAlbumArt) {
request.transform(new BlurTransformation.Builder(MusicService.this).build()); request.transform(new BlurTransformation.Builder(MusicService.this).build());
} }

View file

@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.ui.activities; package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@ -17,15 +16,14 @@ import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.afollestad.materialdialogs.util.DialogUtils; import com.afollestad.materialdialogs.util.DialogUtils;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter; import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder; 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.AbsTagEditorActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.Util;
@ -82,9 +79,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
setStatusBarTransparent(); setStatusBarTransparent();
ButterKnife.bind(this); ButterKnife.bind(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { supportPostponeEnterTransition();
postponeEnterTransition();
}
if (shouldColorNavigationBar()) if (shouldColorNavigationBar())
setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
@ -154,28 +149,24 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
} }
private void loadAlbumCover() { private void loadAlbumCover() {
Glide.with(this) SongGlideRequest.Builder.from(Glide.with(this), album.safeGetFirstSong())
.loadFromMediaStore(MusicUtil.getAlbumArtUri(album.getId())) .checkIgnoreMediaStore(this)
.asBitmap() .generatePalette(this).build()
.transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class) .dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.NONE) .listener(new RequestListener<Object, BitmapPaletteWrapper>() {
.error(R.drawable.default_album_art) @Override
.signature(new MediaStoreSignature("", album.getDateModified(), 0)) public boolean onException(Exception e, Object model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
@Override
public boolean onResourceReady(BitmapPaletteWrapper resource, Object model, Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache, boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
})
.into(new PhonographColoredTarget(albumArtImageView) { .into(new PhonographColoredTarget(albumArtImageView) {
@Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> 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 @Override
public void onColorReady(int color) { public void onColorReady(int color) {
setColors(color); setColors(color);

View file

@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.ui.activities; package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@ -24,14 +23,15 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.util.DialogUtils; import com.afollestad.materialdialogs.util.DialogUtils;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; 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.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter; import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter;
import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter; import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.PhonographColoredTarget; 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.BitmapPaletteTranscoder;
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@ -255,29 +255,24 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
ArtistSignatureUtil.getInstance(this).updateArtistSignature(artist.name); ArtistSignatureUtil.getInstance(this).updateArtistSignature(artist.name);
} }
Glide.with(this) Glide.with(this)
.load(new ArtistImageRequest(artist.name, forceDownload)) .load(new ArtistImage(artist.name, forceDownload))
.asBitmap() .asBitmap()
.transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class) .transcode(new BitmapPaletteTranscoder(this), BitmapPaletteWrapper.class)
.diskCacheStrategy(DiskCacheStrategy.SOURCE) .diskCacheStrategy(DiskCacheStrategy.SOURCE)
.error(R.drawable.default_album_art) .error(R.drawable.default_album_art)
.signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name)) .signature(ArtistSignatureUtil.getInstance(this).getArtistSignature(artist.name))
.into(new PhonographColoredTarget(artistImage) { .dontAnimate()
.listener(new RequestListener<ArtistImage, BitmapPaletteWrapper>() {
@Override @Override
public void onLoadFailed(Exception e, Drawable errorDrawable) { public boolean onException(Exception e, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
super.onLoadFailed(e, errorDrawable);
toastUpdatedArtistImageIfDownloadWasForced(); toastUpdatedArtistImageIfDownloadWasForced();
return false;
} }
@Override @Override
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) { public boolean onResourceReady(BitmapPaletteWrapper resource, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache, boolean isFirstResource) {
super.onResourceReady(resource, glideAnimation);
toastUpdatedArtistImageIfDownloadWasForced(); toastUpdatedArtistImageIfDownloadWasForced();
} return false;
@Override
public void onColorReady(int color) {
setColors(color);
} }
private void toastUpdatedArtistImageIfDownloadWasForced() { 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(); 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);
}
}); });
} }

View file

@ -36,14 +36,13 @@ import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialcab.MaterialCab;
import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.bumptech.glide.Glide; 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.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.adapter.PagerAdapter;
import com.kabouzeid.gramophone.dialogs.ChangelogDialog; import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
import com.kabouzeid.gramophone.dialogs.DonationDialog; import com.kabouzeid.gramophone.dialogs.DonationDialog;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SearchQueryHelper; import com.kabouzeid.gramophone.helper.SearchQueryHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; 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.AbsMainActivityFragment;
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment;
import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.ColorUtil;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.Util; 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.title)).setText(song.title);
((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName); ((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(song.artistName);
Glide.with(this) SongGlideRequest.Builder.from(Glide.with(this), song)
.loadFromMediaStore(MusicUtil.getAlbumArtUri(song.albumId)) .checkIgnoreMediaStore(this).build()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
.animate(android.R.anim.fade_in)
.signature(new MediaStoreSignature("", song.dateModified, 0))
.into(((ImageView) navigationDrawerHeader.findViewById(R.id.image))); .into(((ImageView) navigationDrawerHeader.findViewById(R.id.image)));
} else { } else {
if (navigationDrawerHeader != null) { if (navigationDrawerHeader != null) {

View file

@ -34,14 +34,14 @@ import java.util.List;
public class MusicUtil { public class MusicUtil {
public static final String TAG = MusicUtil.class.getSimpleName(); public static final String TAG = MusicUtil.class.getSimpleName();
public static Uri getAlbumArtUri(int albumId) { public static Uri getMediaStoreAlbumCoverUri(int albumId) {
final Uri sArtworkUri = Uri final Uri sArtworkUri = Uri
.parse("content://media/external/audio/albumart"); .parse("content://media/external/audio/albumart");
return ContentUris.withAppendedId(sArtworkUri, albumId); 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); 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) { public static void setRingtone(@NonNull final Context context, final int id) {
final ContentResolver resolver = context.getContentResolver(); final ContentResolver resolver = context.getContentResolver();
final Uri uri = getSongUri(id); final Uri uri = getSongFileUri(id);
try { try {
final ContentValues values = new ContentValues(2); final ContentValues values = new ContentValues(2);
values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1"); values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1");