fix issues with fade animation on palette bitmap wrapper

This commit is contained in:
dkanada 2020-09-22 21:02:14 +09:00
commit 5085bbc1e7
7 changed files with 37 additions and 10 deletions

View file

@ -34,6 +34,6 @@ public class CustomGlideModule implements GlideModule {
@Override @Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
registry.register(Bitmap.class, BitmapPaletteWrapper.class, new BitmapPaletteTranscoder()); registry.register(Bitmap.class, BitmapPaletteWrapper.class, new BitmapPaletteTranscoder(glide.getBitmapPool()));
} }
} }

View file

@ -12,10 +12,10 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions; import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.transition.ViewAnimationFactory;
import com.bumptech.glide.signature.ObjectKey; import com.bumptech.glide.signature.ObjectKey;
import com.dkanada.gramophone.App; import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.glide.palette.BitmapPaletteCrossFadeFactory;
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper; import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
import org.jellyfin.apiclient.model.dto.ImageOptions; import org.jellyfin.apiclient.model.dto.ImageOptions;
@ -26,7 +26,6 @@ import static com.bumptech.glide.GenericTransitionOptions.with;
public class CustomGlideRequest { public class CustomGlideRequest {
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL; 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_IMAGE = R.drawable.default_album_art;
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;
@ -55,7 +54,7 @@ public class CustomGlideRequest {
Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE; Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE;
return requestManager.load(uri) return requestManager.load(uri)
.transition(new DrawableTransitionOptions().crossFade()); .transition(DrawableTransitionOptions.withCrossFade());
} }
} }
@ -70,7 +69,7 @@ public class CustomGlideRequest {
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE; Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
return builder.requestManager.asBitmap().load(uri) return builder.requestManager.asBitmap().load(uri)
.transition(new BitmapTransitionOptions().crossFade()); .transition(BitmapTransitionOptions.withCrossFade());
} }
} }
@ -87,7 +86,7 @@ public class CustomGlideRequest {
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE; 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(uri)
.transition(with(new ViewAnimationFactory<>(DEFAULT_ANIMATION))); .transition(with(new BitmapPaletteCrossFadeFactory()));
} }
} }

View file

@ -27,7 +27,6 @@ public abstract class CustomPaletteTarget extends BitmapPaletteTarget {
public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) { public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
super.onResourceReady(resource, glideAnimation); super.onResourceReady(resource, glideAnimation);
onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor())); onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor()));
view.setImageBitmap(resource.getBitmap());
} }
protected int getDefaultFooterColor() { protected int getDefaultFooterColor() {

View file

@ -0,0 +1,17 @@
package com.dkanada.gramophone.glide.palette;
import android.graphics.Bitmap;
import com.bumptech.glide.request.transition.BitmapContainerTransitionFactory;
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
public class BitmapPaletteCrossFadeFactory extends BitmapContainerTransitionFactory<BitmapPaletteWrapper> {
public BitmapPaletteCrossFadeFactory() {
super(new DrawableCrossFadeFactory.Builder().build());
}
@Override
protected Bitmap getBitmap(BitmapPaletteWrapper current) {
return current.getBitmap();
}
}

View file

@ -3,13 +3,16 @@ package com.dkanada.gramophone.glide.palette;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.util.Util; import com.bumptech.glide.util.Util;
public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> { public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
private final BitmapPaletteWrapper bitmapPaletteWrapper; private final BitmapPaletteWrapper bitmapPaletteWrapper;
private final BitmapPool bitmapPool;
public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper) { public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper, BitmapPool bitmapPool) {
this.bitmapPaletteWrapper = bitmapPaletteWrapper; this.bitmapPaletteWrapper = bitmapPaletteWrapper;
this.bitmapPool = bitmapPool;
} }
@NonNull @NonNull
@ -31,6 +34,6 @@ public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
@Override @Override
public void recycle() { public void recycle() {
bitmapPaletteWrapper.getBitmap().recycle(); bitmapPool.put(bitmapPaletteWrapper.getBitmap());
} }
} }

View file

@ -11,5 +11,7 @@ public class BitmapPaletteTarget extends ImageViewTarget<BitmapPaletteWrapper> {
@Override @Override
protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) { protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) {
if (bitmapPaletteWrapper == null) return;
view.setImageBitmap(bitmapPaletteWrapper.getBitmap());
} }
} }

View file

@ -6,13 +6,20 @@ import androidx.annotation.NonNull;
import com.bumptech.glide.load.Options; import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
import com.dkanada.gramophone.util.ThemeUtil; import com.dkanada.gramophone.util.ThemeUtil;
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> { public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
private final BitmapPool bitmapPool;
public BitmapPaletteTranscoder(BitmapPool bitmapPool) {
this.bitmapPool = bitmapPool;
}
@Override @Override
public Resource<BitmapPaletteWrapper> transcode(@NonNull Resource<Bitmap> resource, @NonNull Options options) { public Resource<BitmapPaletteWrapper> transcode(@NonNull Resource<Bitmap> resource, @NonNull Options options) {
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(resource.get(), ThemeUtil.generatePalette(resource.get())); BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(resource.get(), ThemeUtil.generatePalette(resource.get()));
return new BitmapPaletteResource(bitmapPaletteWrapper); return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
} }
} }