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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
package de.danoeh.antennapod.asynctask;
import java.io.File;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.util.BitmapDecoder;
public abstract class BitmapDecodeWorkerTask extends
AsyncTask<Void, Void, Void> {
protected int PREFERRED_LENGTH;
public static final int LENGTH_BASE_COVER = 200;
public static final int LENGTH_BASE_THUMBNAIL = 100;
private static final String TAG = "BitmapDecodeWorkerTask";
private ImageView target;
private Bitmap bitmap;
private Bitmap decodedBitmap;
protected int baseLength;
protected String fileUrl;
public BitmapDecodeWorkerTask(ImageView target, String fileUrl, int length) {
super();
this.target = target;
this.fileUrl = fileUrl;
this.baseLength = length;
this.PREFERRED_LENGTH = (int) (length * PodcastApp.getLogicalDensity());
}
/**
* Should return true if tag of the imageview is still the same it was
* before the bitmap was decoded
*/
abstract protected boolean tagsMatching(ImageView target);
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// check if imageview is still supposed to display this image
if (tagsMatching(target)) {
target.setImageBitmap(bitmap);
} else {
if (AppConfig.DEBUG)
Log.d(TAG, "Not displaying image");
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
File f = null;
if (fileUrl != null) {
f = new File(fileUrl);
}
if (fileUrl != null && f.exists()) {
bitmap = BitmapDecoder.decodeBitmap(PREFERRED_LENGTH, fileUrl);
if (bitmap != null) {
storeBitmapInCache(bitmap);
} else {
Log.w(TAG, "Could not load bitmap. Using default image.");
bitmap = BitmapFactory.decodeResource(target.getResources(),
R.drawable.default_cover);
}
if (AppConfig.DEBUG)
Log.d(TAG, "Finished loading bitmaps");
} else {
onInvalidFileUrl();
}
return null;
}
protected void onInvalidFileUrl() {
Log.e(TAG, "FeedImage has no valid file url. Using default image");
bitmap = BitmapFactory.decodeResource(target.getResources(),
R.drawable.default_cover);
}
protected void storeBitmapInCache(Bitmap bitmap) {
FeedImageLoader loader = FeedImageLoader.getInstance();
if (baseLength == LENGTH_BASE_COVER) {
loader.addBitmapToCoverCache(fileUrl, bitmap);
} else if (baseLength == LENGTH_BASE_THUMBNAIL) {
loader.addBitmapToThumbnailCache(fileUrl, bitmap);
}
}
@SuppressLint("NewApi")
public void executeAsync() {
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
execute();
}
}
}
|