load images throughout the interface

This commit is contained in:
dkanada 2020-04-25 21:57:02 +09:00
commit 876784495a
27 changed files with 87 additions and 452 deletions

View file

@ -11,8 +11,8 @@ import android.widget.ImageView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter; import com.kabouzeid.gramophone.misc.CustomFragmentStatePagerAdapter;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
@ -116,7 +116,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
} }
private void loadAlbumCover() { private void loadAlbumCover() {
SongGlideRequest.Builder.from(Glide.with(getContext()), song) CustomGlideRequest.Builder.from(Glide.with(getContext()), song.albumId)
.generatePalette(getActivity()).build() .generatePalette(getActivity()).build()
.into(new CustomPaletteTarget(albumCover) { .into(new CustomPaletteTarget(albumCover) {
@Override @Override

View file

@ -13,8 +13,7 @@ import com.bumptech.glide.Glide;
import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ATHUtil;
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.ArtistGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
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.model.Album; import com.kabouzeid.gramophone.model.Album;
@ -70,7 +69,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
final Album album = (Album) dataSet.get(position); final Album album = (Album) dataSet.get(position);
holder.title.setText(album.getTitle()); holder.title.setText(album.getTitle());
holder.text.setText(MusicUtil.getAlbumInfoString(activity, album)); holder.text.setText(MusicUtil.getAlbumInfoString(activity, album));
SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) CustomGlideRequest.Builder.from(Glide.with(activity), album.id)
.build() .build()
.into(holder.image); .into(holder.image);
break; break;
@ -78,7 +77,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
final Artist artist = (Artist) dataSet.get(position); final Artist artist = (Artist) dataSet.get(position);
holder.title.setText(artist.getName()); holder.title.setText(artist.getName());
holder.text.setText(MusicUtil.getArtistInfoString(activity, artist)); holder.text.setText(MusicUtil.getArtistInfoString(activity, artist));
ArtistGlideRequest.Builder.from(Glide.with(activity), artist) CustomGlideRequest.Builder.from(Glide.with(activity), artist.id)
.build().into(holder.image); .build().into(holder.image);
break; break;
case SONG: case SONG:

View file

@ -17,8 +17,8 @@ import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
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.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
@ -130,7 +130,7 @@ 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;
SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) CustomGlideRequest.Builder.from(Glide.with(activity), album.id)
.generatePalette(activity).build() .generatePalette(activity).build()
.into(new CustomPaletteTarget(holder.image) { .into(new CustomPaletteTarget(holder.image) {
@Override @Override

View file

@ -11,8 +11,8 @@ import android.view.ViewGroup;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.HorizontalAdapterHelper; import com.kabouzeid.gramophone.helper.HorizontalAdapterHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Album;
@ -51,7 +51,7 @@ public class HorizontalAlbumAdapter extends AlbumAdapter {
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;
SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) CustomGlideRequest.Builder.from(Glide.with(activity), album.id)
.generatePalette(activity).build() .generatePalette(activity).build()
.into(new CustomPaletteTarget(holder.image) { .into(new CustomPaletteTarget(holder.image) {
@Override @Override

View file

@ -17,7 +17,7 @@ import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
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.glide.ArtistGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
@ -123,7 +123,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;
ArtistGlideRequest.Builder.from(Glide.with(activity), artist) CustomGlideRequest.Builder.from(Glide.with(activity), artist.id)
.generatePalette(activity).build() .generatePalette(activity).build()
.into(new CustomPaletteTarget(holder.image) { .into(new CustomPaletteTarget(holder.image) {
@Override @Override

View file

@ -17,7 +17,7 @@ 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.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
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.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
@ -83,7 +83,7 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
songTitle.setText(song.title); songTitle.setText(song.title);
songInfo.setText(song.albumName); songInfo.setText(song.albumName);
SongGlideRequest.Builder.from(Glide.with(activity), song) CustomGlideRequest.Builder.from(Glide.with(activity), song.albumId)
.build() .build()
.into(albumArt); .into(albumArt);

View file

@ -18,8 +18,8 @@ import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
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.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
@ -130,7 +130,7 @@ 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;
SongGlideRequest.Builder.from(Glide.with(activity), song) CustomGlideRequest.Builder.from(Glide.with(activity), song.albumId)
.generatePalette(activity).build() .generatePalette(activity).build()
.into(new CustomPaletteTarget(holder.image) { .into(new CustomPaletteTarget(holder.image) {
@Override @Override

View file

@ -1,124 +0,0 @@
package com.kabouzeid.gramophone.glide;
import android.content.Context;
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
import com.bumptech.glide.BitmapRequestBuilder;
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.Priority;
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.request.target.Target;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.artistimage.AlbumCover;
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.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
public class ArtistGlideRequest {
private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
private static final int DEFAULT_ERROR_IMAGE = R.drawable.default_artist_image;
private static final int DEFAULT_ANIMATION = android.R.anim.fade_in;
public static class Builder {
final RequestManager requestManager;
final Artist artist;
public static Builder from(@NonNull RequestManager requestManager, Artist artist) {
return new Builder(requestManager, artist);
}
private Builder(@NonNull RequestManager requestManager, Artist artist) {
this.requestManager = requestManager;
this.artist = artist;
}
public PaletteBuilder generatePalette(Context context) {
return new PaletteBuilder(this, context);
}
public BitmapBuilder asBitmap() {
return new BitmapBuilder(this);
}
public DrawableRequestBuilder<GlideDrawable> build() {
//noinspection unchecked
return createBaseRequest(requestManager, artist)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE)
.animate(DEFAULT_ANIMATION)
.priority(Priority.LOW)
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.signature(createSignature(artist));
}
}
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.artist)
.asBitmap()
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE)
.animate(DEFAULT_ANIMATION)
.priority(Priority.LOW)
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.signature(createSignature(builder.artist));
}
}
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.artist)
.asBitmap()
.transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE)
.animate(DEFAULT_ANIMATION)
.priority(Priority.LOW)
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.signature(createSignature(builder.artist));
}
}
public static DrawableTypeRequest createBaseRequest(RequestManager requestManager, Artist artist) {
final List<AlbumCover> songs = new ArrayList<>();
for (final Album album : artist.albums) {
final Song song = album.safeGetFirstSong();
songs.add(new AlbumCover(album.getYear(), song.data));
}
return requestManager.load(new ArtistImage(artist.getName(), songs));
}
private static Key createSignature(Artist artist) {
return ArtistSignatureUtil.getInstance(App.getInstance()).getArtistSignature(artist.getName());
}
}

View file

@ -7,8 +7,6 @@ import java.io.InputStream;
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.audiocover.AudioFileCover; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover;
import com.kabouzeid.gramophone.glide.audiocover.AudioFileCoverLoader; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCoverLoader;
@ -20,6 +18,5 @@ public class CustomGlideModule implements GlideModule {
@Override @Override
public void registerComponents(Context context, Glide glide) { public void registerComponents(Context context, Glide glide) {
glide.register(AudioFileCover.class, InputStream.class, new AudioFileCoverLoader.Factory()); glide.register(AudioFileCover.class, InputStream.class, new AudioFileCoverLoader.Factory());
glide.register(ArtistImage.class, InputStream.class, new ArtistImageLoader.Factory());
} }
} }

View file

@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.glide;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.bumptech.glide.BitmapRequestBuilder; import com.bumptech.glide.BitmapRequestBuilder;
@ -16,24 +17,24 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover;
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.model.Song;
public class SongGlideRequest { public class CustomGlideRequest {
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE; public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
public static final int DEFAULT_ERROR_IMAGE = R.drawable.default_album_art;
public static final int DEFAULT_IMAGE = R.drawable.default_album_art;
public static final int DEFAULT_ANIMATION = android.R.anim.fade_in; public static final int DEFAULT_ANIMATION = android.R.anim.fade_in;
public static class Builder { public static class Builder {
final RequestManager requestManager; final RequestManager requestManager;
final Song song; final String item;
public static Builder from(@NonNull RequestManager requestManager, Song song) { public static Builder from(@NonNull RequestManager requestManager, String item) {
return new Builder(requestManager, song); return new Builder(requestManager, item);
} }
private Builder(@NonNull RequestManager requestManager, Song song) { private Builder(@NonNull RequestManager requestManager, String item) {
this.requestManager = requestManager; this.requestManager = requestManager;
this.song = song; this.item = item;
} }
public PaletteBuilder generatePalette(Context context) { public PaletteBuilder generatePalette(Context context) {
@ -46,11 +47,11 @@ public class SongGlideRequest {
public DrawableRequestBuilder<GlideDrawable> build() { public DrawableRequestBuilder<GlideDrawable> build() {
// noinspection unchecked // noinspection unchecked
return createBaseRequest(requestManager, song) return createBaseRequest(requestManager, item)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE) .error(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION) .animate(DEFAULT_ANIMATION)
.signature(createSignature(song)); .signature(createSignature(item));
} }
} }
@ -63,12 +64,12 @@ public class SongGlideRequest {
public BitmapRequestBuilder<?, Bitmap> build() { public BitmapRequestBuilder<?, Bitmap> build() {
// noinspection unchecked // noinspection unchecked
return createBaseRequest(builder.requestManager, builder.song) return createBaseRequest(builder.requestManager, builder.item)
.asBitmap() .asBitmap()
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE) .error(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION) .animate(DEFAULT_ANIMATION)
.signature(createSignature(builder.song)); .signature(createSignature(builder.item));
} }
} }
@ -83,21 +84,21 @@ public class SongGlideRequest {
public BitmapRequestBuilder<?, BitmapPaletteWrapper> build() { public BitmapRequestBuilder<?, BitmapPaletteWrapper> build() {
// noinspection unchecked // noinspection unchecked
return createBaseRequest(builder.requestManager, builder.song) return createBaseRequest(builder.requestManager, builder.item)
.asBitmap() .asBitmap()
.transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(DEFAULT_ERROR_IMAGE) .error(DEFAULT_IMAGE)
.animate(DEFAULT_ANIMATION) .animate(DEFAULT_ANIMATION)
.signature(createSignature(builder.song)); .signature(createSignature(builder.item));
} }
} }
public static DrawableTypeRequest createBaseRequest(RequestManager requestManager, Song song) { public static DrawableTypeRequest createBaseRequest(RequestManager requestManager, String item) {
return requestManager.load(new AudioFileCover(song.data)); return requestManager.load(new AudioFileCover(item));
} }
public static Key createSignature(Song song) { public static Key createSignature(String item) {
return new MediaStoreSignature("", song.dateModified, 0); return new MediaStoreSignature("image/jpeg", item.hashCode(), 0);
} }
} }

View file

@ -1,29 +0,0 @@
package com.kabouzeid.gramophone.glide.artistimage;
public class AlbumCover {
private int year;
private String filePath;
public AlbumCover(int year, String filePath) {
this.filePath = filePath;
this.year = year;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}

View file

@ -1,28 +0,0 @@
package com.kabouzeid.gramophone.glide.artistimage;
import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistImage {
public final String artistName;
// filePath to get the image of the artist
public final List<AlbumCover> albumCovers;
public ArtistImage(String artistName, final List<AlbumCover> albumCovers) {
this.artistName = artistName;
this.albumCovers = albumCovers;
}
public String toIdString() {
if (artistName == null) return "";
StringBuilder id = new StringBuilder(artistName);
for (AlbumCover albumCover: albumCovers) {
id.append(albumCover.getYear()).append(albumCover.getFilePath());
}
return id.toString();
}
}

View file

@ -1,145 +0,0 @@
package com.kabouzeid.gramophone.glide.artistimage;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.media.MediaMetadataRetriever;
import android.util.Log;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.data.DataFetcher;
import com.kabouzeid.gramophone.glide.audiocover.AudioFileCoverUtils;
import com.kabouzeid.gramophone.util.ImageUtil;
public class ArtistImageFetcher implements DataFetcher<InputStream> {
private ArtistImage model;
private InputStream stream;
public ArtistImageFetcher(final ArtistImage model) {
this.model = model;
}
@Override
public String getId() {
Log.d("MOSAIC", "get id for" + model.artistName);
// this id is used to determine whether the image is already cached
// we use the artist name as well as the album years + file paths
return model.toIdString();
}
@Override
public InputStream loadData(Priority priority) throws Exception {
Log.d("MOSAIC", "load data for" + model.artistName);
return stream = getMosaic(model.albumCovers);
}
private InputStream getMosaic(final List<AlbumCover> albumCovers) throws FileNotFoundException {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
int artistBitMapSize = 512;
final Map<InputStream, Integer> images = new HashMap<>();
InputStream result = null;
List<InputStream> streams = new ArrayList<>();
try {
for (final AlbumCover cover : albumCovers) {
InputStream stream = AudioFileCoverUtils.fallback(cover.getFilePath());
if (stream != null) {
images.put(stream, cover.getYear());
}
}
int nbImages = images.size();
if (nbImages > 3) {
streams = new ArrayList<>(images.keySet());
int divisor = 1;
for (int i = 1; i < nbImages && Math.pow(i, 2) <= nbImages; ++i) {
divisor = i;
}
divisor += 1;
double nbTiles = Math.pow(divisor, 2);
if (nbImages < nbTiles) {
divisor -= 1;
nbTiles = Math.pow(divisor, 2);
}
final int resize = (artistBitMapSize / divisor) + 1;
final Bitmap bitmap = Bitmap.createBitmap(artistBitMapSize, artistBitMapSize, Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(bitmap);
int x = 0;
int y = 0;
for (int i = 0; i < streams.size() && i < nbTiles; ++i) {
final Bitmap bitmap1 = ImageUtil.resize(streams.get(i), resize, resize);
canvas.drawBitmap(bitmap1, x, y, null);
x += resize;
if (x >= artistBitMapSize) {
x = 0;
y += resize;
}
}
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos);
result = new ByteArrayInputStream(bos.toByteArray());
} else if (nbImages > 0) {
// we return the last cover album of the artist
Map.Entry<InputStream, Integer> maxEntryYear = null;
for (final Map.Entry<InputStream, Integer> entry : images.entrySet()) {
if (maxEntryYear == null || entry.getValue().compareTo(maxEntryYear.getValue()) > 0) {
maxEntryYear = entry;
}
}
if (maxEntryYear != null) {
result = maxEntryYear.getKey();
} else {
result = images.entrySet().iterator().next().getKey();
}
}
} finally {
retriever.release();
try {
for (final InputStream stream : streams) {
stream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
@Override
public void cleanup() {
// already cleaned up in loadData and ByteArrayInputStream will be GC'd
if (stream != null) {
try {
stream.close();
} catch (IOException ignore) {
// can't do much about it
}
}
}
@Override
public void cancel() {
}
}

View file

@ -1,35 +0,0 @@
package com.kabouzeid.gramophone.glide.artistimage;
import android.content.Context;
import java.io.InputStream;
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;
public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
private Context context;
public ArtistImageLoader(Context context) {
this.context = context;
}
@Override
public DataFetcher<InputStream> getResourceFetcher(final ArtistImage model, int width, int height) {
return new ArtistImageFetcher(model);
}
public static class Factory implements ModelLoaderFactory<ArtistImage, InputStream> {
@Override
public ModelLoader<ArtistImage, InputStream> build(Context context, GenericLoaderFactory factories) {
return new ArtistImageLoader(context);
}
@Override
public void teardown() {
}
}
}

View file

@ -1,9 +1,22 @@
package com.kabouzeid.gramophone.glide.audiocover; package com.kabouzeid.gramophone.glide.audiocover;
public class AudioFileCover { import com.kabouzeid.gramophone.App;
public final String filePath;
public AudioFileCover(String filePath) { import org.jellyfin.apiclient.model.dto.ImageOptions;
this.filePath = filePath; import org.jellyfin.apiclient.model.entities.ImageType;
public class AudioFileCover {
public String location;
public AudioFileCover(String item) {
ImageOptions options = new ImageOptions();
options.setImageType(ImageType.Primary);
try {
this.location = App.getApiClient().GetImageUrl(item, options);
} catch (Exception e) {
e.printStackTrace();
this.location = "";
}
} }
} }

View file

@ -1,13 +1,12 @@
package com.kabouzeid.gramophone.glide.audiocover; package com.kabouzeid.gramophone.glide.audiocover;
import android.media.MediaMetadataRetriever;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
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.bumptech.glide.load.data.HttpUrlFetcher;
import com.bumptech.glide.load.model.GlideUrl;
public class AudioFileCoverFetcher implements DataFetcher<InputStream> { public class AudioFileCoverFetcher implements DataFetcher<InputStream> {
private final AudioFileCover model; private final AudioFileCover model;
@ -21,24 +20,15 @@ public class AudioFileCoverFetcher implements DataFetcher<InputStream> {
@Override @Override
public String getId() { public String getId() {
// make sure we never return null here // make sure we never return null here
return String.valueOf(model.filePath); return String.valueOf(model.location);
} }
@Override @Override
public InputStream loadData(final Priority priority) throws Exception { public InputStream loadData(final Priority priority) throws Exception {
final MediaMetadataRetriever retriever = new MediaMetadataRetriever(); final GlideUrl url = new GlideUrl(String.valueOf(model.location));
try { final HttpUrlFetcher retriever = new HttpUrlFetcher(url);
retriever.setDataSource(model.filePath);
byte[] picture = retriever.getEmbeddedPicture();
if (picture != null) {
stream = new ByteArrayInputStream(picture);
} else {
stream = AudioFileCoverUtils.fallback(model.filePath);
}
} finally {
retriever.release();
}
stream = retriever.loadData(Priority.NORMAL);
return stream; return stream;
} }
@ -49,7 +39,6 @@ public class AudioFileCoverFetcher implements DataFetcher<InputStream> {
try { try {
stream.close(); stream.close();
} catch (IOException e) { } catch (IOException e) {
// can't do much about it
e.printStackTrace(); e.printStackTrace();
} }
} }

View file

@ -29,7 +29,6 @@ public class Album implements Parcelable {
} }
this.songs = new ArrayList<>(); this.songs = new ArrayList<>();
songs.add(Song.EMPTY_SONG);
} }
public Album() { public Album() {

View file

@ -40,21 +40,19 @@ import com.bumptech.glide.Glide;
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.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.widgets.AppWidgetBig; import com.kabouzeid.gramophone.widgets.AppWidgetBig;
import com.kabouzeid.gramophone.widgets.AppWidgetCard; import com.kabouzeid.gramophone.widgets.AppWidgetCard;
import com.kabouzeid.gramophone.widgets.AppWidgetClassic; import com.kabouzeid.gramophone.widgets.AppWidgetClassic;
import com.kabouzeid.gramophone.widgets.AppWidgetSmall; import com.kabouzeid.gramophone.widgets.AppWidgetSmall;
import com.kabouzeid.gramophone.glide.BlurTransformation; import com.kabouzeid.gramophone.glide.BlurTransformation;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.ShuffleHelper; import com.kabouzeid.gramophone.helper.ShuffleHelper;
import com.kabouzeid.gramophone.helper.StopWatch; import com.kabouzeid.gramophone.helper.StopWatch;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.provider.HistoryStore;
import com.kabouzeid.gramophone.provider.QueueStore; import com.kabouzeid.gramophone.provider.QueueStore;
import com.kabouzeid.gramophone.provider.SongPlayCountStore;
import com.kabouzeid.gramophone.service.notification.PlayingNotification; import com.kabouzeid.gramophone.service.notification.PlayingNotification;
import com.kabouzeid.gramophone.service.notification.PlayingNotificationImpl; import com.kabouzeid.gramophone.service.notification.PlayingNotificationImpl;
import com.kabouzeid.gramophone.service.notification.PlayingNotificationImpl24; import com.kabouzeid.gramophone.service.notification.PlayingNotificationImpl24;
@ -275,9 +273,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
}); });
mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
| MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
mediaSession.setMediaButtonReceiver(mediaButtonReceiverPendingIntent); mediaSession.setMediaButtonReceiver(mediaButtonReceiverPendingIntent);
} }
@ -588,11 +584,13 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
if (PreferenceUtil.getInstance(this).getShowAlbumCover()) { if (PreferenceUtil.getInstance(this).getShowAlbumCover()) {
final Point screenSize = Util.getScreenSize(MusicService.this); final Point screenSize = Util.getScreenSize(MusicService.this);
final BitmapRequestBuilder<?, Bitmap> request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) final BitmapRequestBuilder<?, Bitmap> request = CustomGlideRequest.Builder.from(Glide.with(MusicService.this), song.albumId)
.asBitmap().build(); .asBitmap().build();
if (PreferenceUtil.getInstance(this).getBlurAlbumCover()) { if (PreferenceUtil.getInstance(this).getBlurAlbumCover()) {
request.transform(new BlurTransformation.Builder(MusicService.this).build()); request.transform(new BlurTransformation.Builder(MusicService.this).build());
} }
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {

View file

@ -21,7 +21,7 @@ import com.bumptech.glide.request.target.Target;
import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
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;
@ -88,7 +88,7 @@ public class PlayingNotificationImpl extends PlayingNotification {
if (target != null) { if (target != null) {
Glide.clear(target); Glide.clear(target);
} }
target = SongGlideRequest.Builder.from(Glide.with(service), song) target = CustomGlideRequest.Builder.from(Glide.with(service), song.albumId)
.generatePalette(service).build() .generatePalette(service).build()
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) { .into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
@Override @Override

View file

@ -16,7 +16,7 @@ import com.bumptech.glide.Glide;
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.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
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;
@ -50,7 +50,7 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, 0); final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, 0);
final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size); final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size);
service.runOnUiThread(() -> SongGlideRequest.Builder.from(Glide.with(service), song) service.runOnUiThread(() -> CustomGlideRequest.Builder.from(Glide.with(service), song.albumId)
.generatePalette(service).build() .generatePalette(service).build()
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) { .into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
@Override @Override

View file

@ -23,8 +23,8 @@ import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
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.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
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.interfaces.MediaCallback; import com.kabouzeid.gramophone.interfaces.MediaCallback;
@ -146,7 +146,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
} }
private void loadAlbumCover() { private void loadAlbumCover() {
SongGlideRequest.Builder.from(Glide.with(this), getAlbum().safeGetFirstSong()) CustomGlideRequest.Builder.from(Glide.with(this), getAlbum().id)
.generatePalette(this).build() .generatePalette(this).build()
.dontAnimate() .dontAnimate()
.into(new CustomPaletteTarget(albumArtImageView) { .into(new CustomPaletteTarget(albumArtImageView) {
@ -312,7 +312,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))); durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs)));
albumYearTextView.setText(MusicUtil.getYearString(album.getYear())); albumYearTextView.setText(MusicUtil.getYearString(album.getYear()));
adapter.swapDataSet(album.songs); if (album.songs.size() != 0) adapter.swapDataSet(album.songs);
} }
private Album getAlbum() { private Album getAlbum() {

View file

@ -29,7 +29,7 @@ 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.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog; import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.glide.ArtistGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget; import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
@ -185,7 +185,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
private void loadArtistImage() { private void loadArtistImage() {
ArtistGlideRequest.Builder.from(Glide.with(this), artist) CustomGlideRequest.Builder.from(Glide.with(this), artist.id)
.generatePalette(this).build() .generatePalette(this).build()
.dontAnimate() .dontAnimate()
.into(new CustomPaletteTarget(artistImage) { .into(new CustomPaletteTarget(artistImage) {

View file

@ -22,7 +22,7 @@ import com.kabouzeid.appthemehelper.ThemeStore;
import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.appthemehelper.util.NavigationViewUtil; import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.CustomGlideRequest;
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.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
@ -127,7 +127,7 @@ 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(MusicUtil.getSongInfoString(song)); ((TextView) navigationDrawerHeader.findViewById(R.id.text)).setText(MusicUtil.getSongInfoString(song));
SongGlideRequest.Builder.from(Glide.with(this), song) CustomGlideRequest.Builder.from(Glide.with(this), song.albumId)
.build() .build()
.into(((ImageView) navigationDrawerHeader.findViewById(R.id.image))); .into(((ImageView) navigationDrawerHeader.findViewById(R.id.image)));
} else { } else {

View file

@ -18,8 +18,8 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.widgets.base.BaseAppWidget; import com.kabouzeid.gramophone.widgets.base.BaseAppWidget;
import com.kabouzeid.gramophone.glide.SongGlideRequest;
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;
@ -95,7 +95,7 @@ public class AppWidgetBig extends BaseAppWidget {
if (target != null) { if (target != null) {
Glide.clear(target); Glide.clear(target);
} }
target = SongGlideRequest.Builder.from(Glide.with(appContext), song) target = CustomGlideRequest.Builder.from(Glide.with(appContext), song.albumId)
.asBitmap().build() .asBitmap().build()
.into(new SimpleTarget<Bitmap>(widgetImageSize, widgetImageSize) { .into(new SimpleTarget<Bitmap>(widgetImageSize, widgetImageSize) {
@Override @Override

View file

@ -18,8 +18,8 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.widgets.base.BaseAppWidget; import com.kabouzeid.gramophone.widgets.base.BaseAppWidget;
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;
@ -99,7 +99,7 @@ public class AppWidgetCard extends BaseAppWidget {
if (target != null) { if (target != null) {
Glide.clear(target); Glide.clear(target);
} }
target = SongGlideRequest.Builder.from(Glide.with(service), song) target = CustomGlideRequest.Builder.from(Glide.with(service), song.albumId)
.generatePalette(service).build() .generatePalette(service).build()
.centerCrop() .centerCrop()
.into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) {

View file

@ -18,8 +18,8 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.widgets.base.BaseAppWidget; import com.kabouzeid.gramophone.widgets.base.BaseAppWidget;
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;
@ -92,7 +92,7 @@ public class AppWidgetClassic extends BaseAppWidget {
if (target != null) { if (target != null) {
Glide.clear(target); Glide.clear(target);
} }
target = SongGlideRequest.Builder.from(Glide.with(appContext), song) target = CustomGlideRequest.Builder.from(Glide.with(appContext), song.albumId)
.generatePalette(service).build() .generatePalette(service).build()
.centerCrop() .centerCrop()
.into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) {

View file

@ -18,8 +18,8 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.glide.CustomGlideRequest;
import com.kabouzeid.gramophone.widgets.base.BaseAppWidget; import com.kabouzeid.gramophone.widgets.base.BaseAppWidget;
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;
@ -98,7 +98,7 @@ public class AppWidgetSmall extends BaseAppWidget {
if (target != null) { if (target != null) {
Glide.clear(target); Glide.clear(target);
} }
target = SongGlideRequest.Builder.from(Glide.with(appContext), song) target = CustomGlideRequest.Builder.from(Glide.with(appContext), song.albumId)
.generatePalette(service).build() .generatePalette(service).build()
.centerCrop() .centerCrop()
.into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(new SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) {