summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java b/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
new file mode 100644
index 000000000..54ecdae77
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
@@ -0,0 +1,113 @@
+package de.danoeh.antennapod.adapter;
+
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.RequestBuilder;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.CustomViewTarget;
+
+import java.lang.ref.WeakReference;
+
+import com.bumptech.glide.request.transition.Transition;
+import de.danoeh.antennapod.activity.MainActivity;
+import de.danoeh.antennapod.core.glide.ApGlideSettings;
+
+public class CoverLoader {
+ private String uri;
+ private String fallbackUri;
+ private TextView txtvPlaceholder;
+ private ImageView imgvCover;
+ private MainActivity activity;
+ private int errorResource = -1;
+
+ public CoverLoader(MainActivity activity) {
+ this.activity = activity;
+ }
+
+ public CoverLoader withUri(String uri) {
+ this.uri = uri;
+ return this;
+ }
+
+ public CoverLoader withFallbackUri(String uri) {
+ fallbackUri = uri;
+ return this;
+ }
+
+ public CoverLoader withCoverView(ImageView coverView) {
+ imgvCover = coverView;
+ return this;
+ }
+
+ public CoverLoader withError(int errorResource) {
+ this.errorResource = errorResource;
+ return this;
+ }
+
+ public CoverLoader withPlaceholderView(TextView placeholderView) {
+ txtvPlaceholder = placeholderView;
+ return this;
+ }
+
+ public void load() {
+ RequestOptions options = new RequestOptions()
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .fitCenter()
+ .dontAnimate();
+
+ if (errorResource != -1) {
+ options = options.error(errorResource);
+ }
+
+ RequestBuilder builder = Glide.with(activity)
+ .load(uri)
+ .apply(options);
+
+ if (fallbackUri != null && txtvPlaceholder != null && imgvCover != null) {
+ builder = builder.error(Glide.with(activity)
+ .load(fallbackUri)
+ .apply(options));
+ }
+
+ builder.into(new CoverTarget(txtvPlaceholder, imgvCover));
+ }
+
+ class CoverTarget extends CustomViewTarget<ImageView, Drawable> {
+ private final WeakReference<TextView> placeholder;
+ private final WeakReference<ImageView> cover;
+
+ public CoverTarget(TextView txtvPlaceholder, ImageView imgvCover) {
+ super(imgvCover);
+ placeholder = new WeakReference<>(txtvPlaceholder);
+ cover = new WeakReference<>(imgvCover);
+ }
+
+ @Override
+ public void onLoadFailed(Drawable errorDrawable) {
+
+ }
+
+ @Override
+ public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
+ TextView txtvPlaceholder = placeholder.get();
+ if (txtvPlaceholder != null) {
+ txtvPlaceholder.setVisibility(View.INVISIBLE);
+ }
+ ImageView ivCover = cover.get();
+ ivCover.setImageDrawable(resource);
+ }
+
+ @Override
+ protected void onResourceCleared(@Nullable Drawable placeholder) {
+ ImageView ivCover = cover.get();
+ ivCover.setImageDrawable(placeholder);
+ }
+ }
+} \ No newline at end of file