use blurhash for most objects

This commit is contained in:
dkanada 2020-09-23 01:19:44 +09:00
commit a66f0d5fcd
24 changed files with 85 additions and 61 deletions

View file

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

View file

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