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
111
112
113
114
|
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.os.Handler;
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 Thread {
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;
protected Bitmap bitmap;
private Bitmap decodedBitmap;
protected int baseLength;
protected String fileUrl;
private Handler handler;
public BitmapDecodeWorkerTask(Handler handler, ImageView target,
String fileUrl, int length) {
super();
this.handler = handler;
this.target = target;
this.fileUrl = fileUrl;
this.baseLength = length;
this.PREFERRED_LENGTH = (int) (length * PodcastApp.getLogicalDensity() + 0.5f);
}
/**
* 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);
protected void onPostExecute() {
// check if imageview is still supposed to display this image
if (tagsMatching(target) && bitmap != null) {
target.setImageBitmap(bitmap);
} else {
if (AppConfig.DEBUG)
Log.d(TAG, "Not displaying image");
}
}
@Override
public void run() {
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 {
if (fileUrl == null) {
Log.w(TAG, "File URL is null");
} else {
Log.w(TAG, "File does not exist anymore.");
}
onInvalidFileUrl();
}
endBackgroundTask();
}
protected final void endBackgroundTask() {
handler.post(new Runnable() {
@Override
public void run() {
onPostExecute();
}
});
}
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);
}
}
}
|