diff options
author | ByteHamster <info@bytehamster.com> | 2019-01-03 14:59:35 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2019-01-03 14:59:35 +0100 |
commit | c05f81a9f1a39b1cf9b116fffb17befa03b6b08b (patch) | |
tree | 99a0ceae0c89cf37bd5242c107fe3c924f71cf91 /app/src/main/java/de/danoeh/antennapod/adapter/CoverLoader.java | |
parent | f23682f53822fd01214bad1878947e001b392b8c (diff) | |
download | AntennaPod-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.java | 123 |
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 |