summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java b/app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java
new file mode 100644
index 000000000..370a15919
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/ui/CoverLoader.java
@@ -0,0 +1,132 @@
+package de.danoeh.antennapod.ui;
+
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.RequestBuilder;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.CustomViewTarget;
+import com.bumptech.glide.request.transition.Transition;
+
+import java.lang.ref.WeakReference;
+
+public class CoverLoader {
+ private int resource = 0;
+ private String uri;
+ private String fallbackUri;
+ private ImageView imgvCover;
+ private boolean textAndImageCombined;
+ private TextView fallbackTitle;
+
+ public CoverLoader() {
+ }
+
+ public CoverLoader withUri(String uri) {
+ this.uri = uri;
+ return this;
+ }
+
+ public CoverLoader withResource(int resource) {
+ this.resource = resource;
+ return this;
+ }
+
+ public CoverLoader withFallbackUri(String uri) {
+ fallbackUri = uri;
+ return this;
+ }
+
+ public CoverLoader withCoverView(ImageView coverView) {
+ imgvCover = coverView;
+ return this;
+ }
+
+ public CoverLoader withPlaceholderView(TextView title) {
+ this.fallbackTitle = title;
+ return this;
+ }
+
+ /**
+ * Set cover text and if it should be shown even if there is a cover image.
+ * @param fallbackTitle Fallback title text
+ * @param textAndImageCombined Show cover text even if there is a cover image?
+ */
+ @NonNull
+ public CoverLoader withPlaceholderView(TextView fallbackTitle, boolean textAndImageCombined) {
+ this.fallbackTitle = fallbackTitle;
+ this.textAndImageCombined = textAndImageCombined;
+ return this;
+ }
+
+ public void load() {
+ CoverTarget coverTarget = new CoverTarget(fallbackTitle, imgvCover, textAndImageCombined);
+
+ if (resource != 0) {
+ Glide.with(imgvCover).clear(coverTarget);
+ imgvCover.setImageResource(resource);
+ CoverTarget.setTitleVisibility(fallbackTitle, textAndImageCombined);
+ return;
+ }
+
+ RequestOptions options = new RequestOptions()
+ .fitCenter()
+ .dontAnimate();
+
+ RequestBuilder<Drawable> builder = Glide.with(imgvCover)
+ .as(Drawable.class)
+ .load(uri)
+ .apply(options);
+
+ if (fallbackUri != null) {
+ builder = builder.error(Glide.with(imgvCover)
+ .as(Drawable.class)
+ .load(fallbackUri)
+ .apply(options));
+ }
+
+ builder.into(coverTarget);
+ }
+
+ static class CoverTarget extends CustomViewTarget<ImageView, Drawable> {
+ private final WeakReference<TextView> fallbackTitle;
+ private final WeakReference<ImageView> cover;
+ private final boolean textAndImageCombined;
+
+ public CoverTarget(TextView fallbackTitle, ImageView coverImage, boolean textAndImageCombined) {
+ super(coverImage);
+ this.fallbackTitle = new WeakReference<>(fallbackTitle);
+ this.cover = new WeakReference<>(coverImage);
+ this.textAndImageCombined = textAndImageCombined;
+ }
+
+ @Override
+ public void onLoadFailed(Drawable errorDrawable) {
+ setTitleVisibility(fallbackTitle.get(), true);
+ }
+
+ @Override
+ public void onResourceReady(@NonNull Drawable resource,
+ @Nullable Transition<? super Drawable> transition) {
+ ImageView ivCover = cover.get();
+ ivCover.setImageDrawable(resource);
+ setTitleVisibility(fallbackTitle.get(), textAndImageCombined);
+ }
+
+ @Override
+ protected void onResourceCleared(@Nullable Drawable placeholder) {
+ ImageView ivCover = cover.get();
+ ivCover.setImageDrawable(placeholder);
+ setTitleVisibility(fallbackTitle.get(), textAndImageCombined);
+ }
+
+ static void setTitleVisibility(TextView fallbackTitle, boolean textAndImageCombined) {
+ if (fallbackTitle != null) {
+ fallbackTitle.setVisibility(textAndImageCombined ? View.VISIBLE : View.GONE);
+ }
+ }
+ }
+} \ No newline at end of file