tempus/app/src/main/java/com/cappielloantonio/play/glide/CustomGlideRequest.java

113 lines
3.8 KiB
Java
Raw Normal View History

package com.cappielloantonio.play.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
2021-08-31 10:12:11 +02:00
import android.util.Log;
import androidx.core.content.res.ResourcesCompat;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.signature.ObjectKey;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.util.Preferences;
import java.util.Map;
public class CustomGlideRequest {
2021-07-27 17:23:14 +02:00
private static final String TAG = "CustomGlideRequest";
public static final String SONG_PIC = "SONG";
public static final String ALBUM_PIC = "ALBUM";
public static final String ARTIST_PIC = "ARTIST";
public static final String PLAYLIST_PIC = "PLAYLIST";
public static final int CORNER_RADIUS = 12;
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
public static RequestOptions createRequestOptions(String item, Drawable placeholder) {
return new RequestOptions()
2021-08-05 14:04:34 +02:00
.error(placeholder)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.signature(new ObjectKey(item != null ? item : 0))
.centerCrop();
}
public static String createUrl(String item, int size) {
String url = App.getSubsonicClientInstance(App.getInstance(), false).getUrl();
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
2020-11-27 09:06:50 +01:00
url = url + "getCoverArt" +
"?u=" + params.get("u") +
"&s=" + params.get("s") +
"&t=" + params.get("t") +
"&v=" + params.get("v") +
"&c=" + params.get("c") +
"&id=" + item;
if (size != -1) {
url = url + "&size=" + size;
}
2021-08-31 10:12:11 +02:00
2022-01-11 16:25:11 +01:00
if (params.get("p") != null) {
url = url + "&p=" + params.get("p");
}
2021-08-31 10:12:11 +02:00
Log.d(TAG, "createUrl() " + url);
return url;
}
public static class Builder {
private final RequestManager requestManager;
private final Object item;
private Builder(Context context, String item, String category, String custom) {
this.requestManager = Glide.with(context);
if (Preferences.isDataSavingMode()) {
this.item = MusicUtil.getDefaultPicPerCategory(category);
} else if (custom != null && !Preferences.isDataSavingMode()) {
this.item = custom;
} else if (item != null && !Preferences.isDataSavingMode()) {
this.item = createUrl(item, Preferences.getImageSize());
} else {
this.item = MusicUtil.getDefaultPicPerCategory(category);
}
2021-08-05 14:04:34 +02:00
Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), MusicUtil.getDefaultPicPerCategory(category), null);
requestManager.applyDefaultRequestOptions(createRequestOptions(item, drawable));
}
public static Builder from(Context context, String item, String category, String custom) {
return new Builder(context, item, category, custom);
}
public BitmapBuilder bitmap() {
return new BitmapBuilder(this);
}
public RequestBuilder<Drawable> build() {
return requestManager.load(item);
}
}
public static class BitmapBuilder {
private final Builder builder;
public BitmapBuilder(Builder builder) {
this.builder = builder;
}
public RequestBuilder<Bitmap> build() {
return builder.requestManager.asBitmap().load(builder.item);
}
}
}