summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2019-01-03 14:59:35 +0100
committerByteHamster <info@bytehamster.com>2019-01-03 14:59:35 +0100
commitc05f81a9f1a39b1cf9b116fffb17befa03b6b08b (patch)
tree99a0ceae0c89cf37bd5242c107fe3c924f71cf91 /app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
parentf23682f53822fd01214bad1878947e001b392b8c (diff)
downloadAntennaPod-c05f81a9f1a39b1cf9b116fffb17befa03b6b08b.zip
Encapsulated CoverTarget
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.java123
1 files changed, 123 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..7d8ff2897
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java
@@ -0,0 +1,123 @@
+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);
+ }
+
+ Glide.with(activity)
+ .load(uri)
+ .apply(options)
+ .into(new CoverTarget(fallbackUri, txtvPlaceholder, imgvCover, activity));
+ }
+
+ class CoverTarget extends CustomViewTarget<ImageView, Drawable> {
+
+ private final WeakReference<String> fallback;
+ private final WeakReference<TextView> placeholder;
+ private final WeakReference<ImageView> cover;
+ private final WeakReference<MainActivity> mainActivity;
+
+ public CoverTarget(String fallbackUri, TextView txtvPlaceholder, ImageView imgvCover, MainActivity activity) {
+ super(imgvCover);
+ fallback = new WeakReference<>(fallbackUri);
+ placeholder = new WeakReference<>(txtvPlaceholder);
+ cover = new WeakReference<>(imgvCover);
+ mainActivity = new WeakReference<>(activity);
+ }
+
+ @Override
+ public void onLoadFailed(Drawable errorDrawable) {
+ String fallbackUri = fallback.get();
+ TextView txtvPlaceholder = placeholder.get();
+ ImageView imgvCover = cover.get();
+ if (fallbackUri != null && txtvPlaceholder != null && imgvCover != null) {
+ MainActivity activity = mainActivity.get();
+ new Handler().post(() -> Glide.with(activity)
+ .load(fallbackUri)
+ .apply(new RequestOptions()
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .fitCenter()
+ .dontAnimate())
+ .into(new CoverTarget(null, txtvPlaceholder, imgvCover, activity)));
+ }
+ }
+
+ @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