summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/adapter/CoverTarget.java
blob: 5c6980b854619e8c184342205f7e040ef561d4d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package de.danoeh.antennapod.adapter;

import android.graphics.drawable.Drawable;
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.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;

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();
            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);
    }
}