From 5085bbc1e7f7cc6855fb6991d62887bdea0d519e Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 22 Sep 2020 21:02:14 +0900 Subject: [PATCH] fix issues with fade animation on palette bitmap wrapper --- .../gramophone/glide/CustomGlideModule.java | 2 +- .../gramophone/glide/CustomGlideRequest.java | 9 ++++----- .../gramophone/glide/CustomPaletteTarget.java | 1 - .../palette/BitmapPaletteCrossFadeFactory.java | 17 +++++++++++++++++ .../glide/palette/BitmapPaletteResource.java | 7 +++++-- .../glide/palette/BitmapPaletteTarget.java | 2 ++ .../glide/palette/BitmapPaletteTranscoder.java | 9 ++++++++- 7 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteCrossFadeFactory.java diff --git a/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideModule.java b/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideModule.java index f4c024d2..3d57124e 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideModule.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideModule.java @@ -34,6 +34,6 @@ public class CustomGlideModule implements GlideModule { @Override 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())); } } diff --git a/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideRequest.java b/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideRequest.java index 361ee8b0..08deb306 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideRequest.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/CustomGlideRequest.java @@ -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.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.transition.ViewAnimationFactory; import com.bumptech.glide.signature.ObjectKey; 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 org.jellyfin.apiclient.model.dto.ImageOptions; @@ -26,7 +26,6 @@ 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_ANIMATION = android.R.anim.fade_in; public static class Builder { final RequestManager requestManager; @@ -55,7 +54,7 @@ public class CustomGlideRequest { Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE; 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; 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; return builder.requestManager.as(BitmapPaletteWrapper.class).load(uri) - .transition(with(new ViewAnimationFactory<>(DEFAULT_ANIMATION))); + .transition(with(new BitmapPaletteCrossFadeFactory())); } } diff --git a/app/src/main/java/com/dkanada/gramophone/glide/CustomPaletteTarget.java b/app/src/main/java/com/dkanada/gramophone/glide/CustomPaletteTarget.java index e14e8648..41d11007 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/CustomPaletteTarget.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/CustomPaletteTarget.java @@ -27,7 +27,6 @@ public abstract class CustomPaletteTarget extends BitmapPaletteTarget { public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition glideAnimation) { super.onResourceReady(resource, glideAnimation); onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor())); - view.setImageBitmap(resource.getBitmap()); } protected int getDefaultFooterColor() { diff --git a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteCrossFadeFactory.java b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteCrossFadeFactory.java new file mode 100644 index 00000000..3c8d48b6 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteCrossFadeFactory.java @@ -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 { + public BitmapPaletteCrossFadeFactory() { + super(new DrawableCrossFadeFactory.Builder().build()); + } + + @Override + protected Bitmap getBitmap(BitmapPaletteWrapper current) { + return current.getBitmap(); + } +} diff --git a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteResource.java b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteResource.java index f5126586..4f7f51b2 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteResource.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteResource.java @@ -3,13 +3,16 @@ package com.dkanada.gramophone.glide.palette; import androidx.annotation.NonNull; import com.bumptech.glide.load.engine.Resource; +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.util.Util; public class BitmapPaletteResource implements Resource { private final BitmapPaletteWrapper bitmapPaletteWrapper; + private final BitmapPool bitmapPool; - public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper) { + public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper, BitmapPool bitmapPool) { this.bitmapPaletteWrapper = bitmapPaletteWrapper; + this.bitmapPool = bitmapPool; } @NonNull @@ -31,6 +34,6 @@ public class BitmapPaletteResource implements Resource { @Override public void recycle() { - bitmapPaletteWrapper.getBitmap().recycle(); + bitmapPool.put(bitmapPaletteWrapper.getBitmap()); } } diff --git a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTarget.java b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTarget.java index b7d08a90..d8b32a83 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTarget.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTarget.java @@ -11,5 +11,7 @@ public class BitmapPaletteTarget extends ImageViewTarget { @Override protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) { + if (bitmapPaletteWrapper == null) return; + view.setImageBitmap(bitmapPaletteWrapper.getBitmap()); } } diff --git a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTranscoder.java b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTranscoder.java index 99fa8355..592a41f7 100644 --- a/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTranscoder.java +++ b/app/src/main/java/com/dkanada/gramophone/glide/palette/BitmapPaletteTranscoder.java @@ -6,13 +6,20 @@ import androidx.annotation.NonNull; import com.bumptech.glide.load.Options; 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.dkanada.gramophone.util.ThemeUtil; public class BitmapPaletteTranscoder implements ResourceTranscoder { + private final BitmapPool bitmapPool; + + public BitmapPaletteTranscoder(BitmapPool bitmapPool) { + this.bitmapPool = bitmapPool; + } + @Override public Resource transcode(@NonNull Resource resource, @NonNull Options options) { BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(resource.get(), ThemeUtil.generatePalette(resource.get())); - return new BitmapPaletteResource(bitmapPaletteWrapper); + return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool); } } \ No newline at end of file