use blurhash for most objects
This commit is contained in:
parent
5085bbc1e7
commit
a66f0d5fcd
24 changed files with 85 additions and 61 deletions
|
|
@ -2,10 +2,12 @@ package com.dkanada.gramophone.glide;
|
|||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
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;
|
||||
|
|
@ -17,6 +19,7 @@ import com.dkanada.gramophone.App;
|
|||
import com.dkanada.gramophone.R;
|
||||
import com.dkanada.gramophone.glide.palette.BitmapPaletteCrossFadeFactory;
|
||||
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
|
||||
import com.wolt.blurhashkt.BlurHashDecoder;
|
||||
|
||||
import org.jellyfin.apiclient.model.dto.ImageOptions;
|
||||
import org.jellyfin.apiclient.model.entities.ImageType;
|
||||
|
|
@ -26,24 +29,34 @@ import static com.bumptech.glide.GenericTransitionOptions.with;
|
|||
public class CustomGlideRequest {
|
||||
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
|
||||
public static final int DEFAULT_IMAGE = R.drawable.default_album_art;
|
||||
public static final int DEFAULT_DURATION = 200;
|
||||
|
||||
public static class Builder {
|
||||
final RequestManager requestManager;
|
||||
final String item;
|
||||
private final RequestManager requestManager;
|
||||
private final Object item;
|
||||
private final Context context;
|
||||
|
||||
private Builder(@NonNull RequestManager requestManager, String item) {
|
||||
requestManager.applyDefaultRequestOptions(createRequestOptions(item));
|
||||
private Builder(Context context, String item, String placeholder) {
|
||||
this.requestManager = Glide.with(context);
|
||||
this.item = item != null ? createUrl(item) : DEFAULT_IMAGE;
|
||||
this.context = context;
|
||||
|
||||
this.requestManager = requestManager;
|
||||
this.item = item;
|
||||
if (placeholder != null) {
|
||||
Bitmap bitmap = BlurHashDecoder.INSTANCE.decode(placeholder, 20, 20, 1, true);
|
||||
BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap);
|
||||
requestManager.applyDefaultRequestOptions(createRequestOptions(item, drawable));
|
||||
} else {
|
||||
Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), DEFAULT_IMAGE, null);
|
||||
requestManager.applyDefaultRequestOptions(createRequestOptions(item, drawable));
|
||||
}
|
||||
}
|
||||
|
||||
public static Builder from(@NonNull RequestManager requestManager, String item) {
|
||||
return new Builder(requestManager, item);
|
||||
public static Builder from(Context context, String item, String placeholder) {
|
||||
return new Builder(context, item, placeholder);
|
||||
}
|
||||
|
||||
public PaletteBuilder palette(Context context) {
|
||||
return new PaletteBuilder(this, context);
|
||||
public PaletteBuilder palette() {
|
||||
return new PaletteBuilder(this, this.context);
|
||||
}
|
||||
|
||||
public BitmapBuilder bitmap() {
|
||||
|
|
@ -51,10 +64,8 @@ public class CustomGlideRequest {
|
|||
}
|
||||
|
||||
public RequestBuilder<Drawable> build() {
|
||||
Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE;
|
||||
|
||||
return requestManager.load(uri)
|
||||
.transition(DrawableTransitionOptions.withCrossFade());
|
||||
return requestManager.load(item)
|
||||
.transition(DrawableTransitionOptions.withCrossFade(DEFAULT_DURATION));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,10 +77,8 @@ public class CustomGlideRequest {
|
|||
}
|
||||
|
||||
public RequestBuilder<Bitmap> build() {
|
||||
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
||||
|
||||
return builder.requestManager.asBitmap().load(uri)
|
||||
.transition(BitmapTransitionOptions.withCrossFade());
|
||||
return builder.requestManager.asBitmap().load(builder.item)
|
||||
.transition(BitmapTransitionOptions.withCrossFade(DEFAULT_DURATION));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,16 +92,15 @@ public class CustomGlideRequest {
|
|||
}
|
||||
|
||||
public RequestBuilder<BitmapPaletteWrapper> build() {
|
||||
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
||||
|
||||
return builder.requestManager.as(BitmapPaletteWrapper.class).load(uri)
|
||||
return builder.requestManager.as(BitmapPaletteWrapper.class).load(builder.item)
|
||||
.transition(with(new BitmapPaletteCrossFadeFactory()));
|
||||
}
|
||||
}
|
||||
|
||||
public static RequestOptions createRequestOptions(String item) {
|
||||
public static RequestOptions createRequestOptions(String item, Drawable placeholder) {
|
||||
return new RequestOptions()
|
||||
.centerCrop()
|
||||
.placeholder(placeholder)
|
||||
.error(DEFAULT_IMAGE)
|
||||
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
|
||||
.signature(new ObjectKey(item != null ? item : 0));
|
||||
|
|
|
|||
|
|
@ -4,10 +4,11 @@ import android.graphics.Bitmap;
|
|||
|
||||
import com.bumptech.glide.request.transition.BitmapContainerTransitionFactory;
|
||||
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
|
||||
import com.dkanada.gramophone.glide.CustomGlideRequest;
|
||||
|
||||
public class BitmapPaletteCrossFadeFactory extends BitmapContainerTransitionFactory<BitmapPaletteWrapper> {
|
||||
public BitmapPaletteCrossFadeFactory() {
|
||||
super(new DrawableCrossFadeFactory.Builder().build());
|
||||
super(new DrawableCrossFadeFactory.Builder(CustomGlideRequest.DEFAULT_DURATION).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue