FeedImageLoader now works independently from FeedImages
This commit is contained in:
parent
30ba44b17a
commit
56db791e7d
@ -5,7 +5,7 @@ import android.content.SharedPreferences;
|
|||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.EventDistributor;
|
import de.danoeh.antennapod.feed.EventDistributor;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
import de.danoeh.antennapod.feed.FeedMedia;
|
import de.danoeh.antennapod.feed.FeedMedia;
|
||||||
@ -50,7 +50,7 @@ public class PodcastApp extends Application implements
|
|||||||
public void onLowMemory() {
|
public void onLowMemory() {
|
||||||
super.onLowMemory();
|
super.onLowMemory();
|
||||||
Log.w(TAG, "Received onLowOnMemory warning. Cleaning image cache...");
|
Log.w(TAG, "Received onLowOnMemory warning. Cleaning image cache...");
|
||||||
FeedImageLoader.getInstance().wipeImageCache();
|
ImageLoader.getInstance().wipeImageCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -20,7 +20,7 @@ import com.actionbarsherlock.view.Window;
|
|||||||
import de.danoeh.antennapod.AppConfig;
|
import de.danoeh.antennapod.AppConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.adapter.ChapterListAdapter;
|
import de.danoeh.antennapod.adapter.ChapterListAdapter;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.Chapter;
|
import de.danoeh.antennapod.feed.Chapter;
|
||||||
import de.danoeh.antennapod.feed.FeedMedia;
|
import de.danoeh.antennapod.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.feed.SimpleChapter;
|
import de.danoeh.antennapod.feed.SimpleChapter;
|
||||||
@ -181,7 +181,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
media.getItem().getFeed().getImage(),
|
media.getItem().getFeed().getImage(),
|
||||||
butNavLeft);
|
butNavLeft);
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
media.getItem().getFeed().getImage(),
|
media.getItem().getFeed().getImage(),
|
||||||
butNavLeft);
|
butNavLeft);
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import com.actionbarsherlock.view.MenuItem;
|
|||||||
|
|
||||||
import de.danoeh.antennapod.AppConfig;
|
import de.danoeh.antennapod.AppConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||||
import de.danoeh.antennapod.feed.Feed;
|
import de.danoeh.antennapod.feed.Feed;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
@ -58,7 +58,7 @@ public class FeedInfoActivity extends SherlockActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
feed.getImage(), imgvCover);
|
feed.getImage(), imgvCover);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -16,7 +16,7 @@ import com.actionbarsherlock.view.MenuItem;
|
|||||||
import com.mobeta.android.dslv.DragSortListView;
|
import com.mobeta.android.dslv.DragSortListView;
|
||||||
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.EventDistributor;
|
import de.danoeh.antennapod.feed.EventDistributor;
|
||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
@ -146,7 +146,7 @@ public class OrganizeQueueActivity extends SherlockListActivity {
|
|||||||
holder.feedTitle.setText(item.getFeed().getTitle());
|
holder.feedTitle.setText(item.getFeed().getTitle());
|
||||||
|
|
||||||
holder.feedImage.setTag(item.getFeed().getImage());
|
holder.feedImage.setTag(item.getFeed().getImage());
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
item.getFeed().getImage(),
|
item.getFeed().getImage(),
|
||||||
holder.feedImage,
|
holder.feedImage,
|
||||||
(int) convertView.getResources().getDimension(
|
(int) convertView.getResources().getDimension(
|
||||||
|
@ -11,7 +11,7 @@ import android.widget.ImageButton;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
import de.danoeh.antennapod.feed.FeedMedia;
|
import de.danoeh.antennapod.feed.FeedMedia;
|
||||||
@ -162,7 +162,7 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
holder.feedImage.setTag(item.getFeed().getImage());
|
holder.feedImage.setTag(item.getFeed().getImage());
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
item.getFeed().getImage(),
|
item.getFeed().getImage(),
|
||||||
holder.feedImage,
|
holder.feedImage,
|
||||||
(int) convertView.getResources().getDimension(
|
(int) convertView.getResources().getDimension(
|
||||||
|
@ -11,7 +11,7 @@ import android.widget.BaseAdapter;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.Feed;
|
import de.danoeh.antennapod.feed.Feed;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||||
@ -24,14 +24,14 @@ public class FeedlistAdapter extends BaseAdapter {
|
|||||||
private FeedManager manager = FeedManager.getInstance();
|
private FeedManager manager = FeedManager.getInstance();
|
||||||
|
|
||||||
private int selectedItemIndex;
|
private int selectedItemIndex;
|
||||||
private FeedImageLoader imageLoader;
|
private ImageLoader imageLoader;
|
||||||
public static final int SELECTION_NONE = -1;
|
public static final int SELECTION_NONE = -1;
|
||||||
|
|
||||||
public FeedlistAdapter(Context context) {
|
public FeedlistAdapter(Context context) {
|
||||||
super();
|
super();
|
||||||
this.context = context;
|
this.context = context;
|
||||||
selectedItemIndex = SELECTION_NONE;
|
selectedItemIndex = SELECTION_NONE;
|
||||||
imageLoader = FeedImageLoader.getInstance();
|
imageLoader = ImageLoader.getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -109,7 +109,8 @@ public class FeedlistAdapter extends BaseAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
holder.image.setTag(feed.getImage());
|
holder.image.setTag(feed.getImage());
|
||||||
|
final String imageUrl = (feed.getImage() != null) ?
|
||||||
|
feed.getImage().getFile_url() : null;
|
||||||
imageLoader.loadThumbnailBitmap(
|
imageLoader.loadThumbnailBitmap(
|
||||||
feed.getImage(),
|
feed.getImage(),
|
||||||
holder.image,
|
holder.image,
|
||||||
|
@ -10,7 +10,7 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.Feed;
|
import de.danoeh.antennapod.feed.Feed;
|
||||||
import de.danoeh.antennapod.feed.FeedComponent;
|
import de.danoeh.antennapod.feed.FeedComponent;
|
||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
@ -51,7 +51,7 @@ public class SearchlistAdapter extends ArrayAdapter<SearchResult> {
|
|||||||
final Feed feed = (Feed) component;
|
final Feed feed = (Feed) component;
|
||||||
holder.title.setText(feed.getTitle());
|
holder.title.setText(feed.getTitle());
|
||||||
holder.subtitle.setVisibility(View.GONE);
|
holder.subtitle.setVisibility(View.GONE);
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(feed.getImage(),
|
ImageLoader.getInstance().loadThumbnailBitmap(feed.getImage(),
|
||||||
holder.cover, (int) convertView.getResources().getDimension(R.dimen.thumbnail_length));
|
holder.cover, (int) convertView.getResources().getDimension(R.dimen.thumbnail_length));
|
||||||
} else if (component.getClass() == FeedItem.class) {
|
} else if (component.getClass() == FeedItem.class) {
|
||||||
final FeedItem item = (FeedItem) component;
|
final FeedItem item = (FeedItem) component;
|
||||||
@ -61,7 +61,7 @@ public class SearchlistAdapter extends ArrayAdapter<SearchResult> {
|
|||||||
holder.subtitle.setText(result.getSubtitle());
|
holder.subtitle.setText(result.getSubtitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
item.getFeed().getImage(),
|
item.getFeed().getImage(),
|
||||||
holder.cover,
|
holder.cover,
|
||||||
(int) convertView.getResources().getDimension(
|
(int) convertView.getResources().getDimension(
|
||||||
|
@ -11,10 +11,10 @@ import de.danoeh.antennapod.AppConfig;
|
|||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.util.BitmapDecoder;
|
import de.danoeh.antennapod.util.BitmapDecoder;
|
||||||
|
|
||||||
public abstract class BitmapDecodeWorkerTask extends Thread {
|
public class BitmapDecodeWorkerTask extends Thread {
|
||||||
|
|
||||||
protected int PREFERRED_LENGTH;
|
protected int PREFERRED_LENGTH;
|
||||||
|
|
||||||
/** Can be thumbnail or cover */
|
/** Can be thumbnail or cover */
|
||||||
protected int imageType;
|
protected int imageType;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ public abstract class BitmapDecodeWorkerTask extends Thread {
|
|||||||
protected String fileUrl;
|
protected String fileUrl;
|
||||||
|
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
|
|
||||||
private final int defaultCoverResource;
|
private final int defaultCoverResource;
|
||||||
|
|
||||||
public BitmapDecodeWorkerTask(Handler handler, ImageView target,
|
public BitmapDecodeWorkerTask(Handler handler, ImageView target,
|
||||||
@ -36,7 +36,8 @@ public abstract class BitmapDecodeWorkerTask extends Thread {
|
|||||||
this.fileUrl = fileUrl;
|
this.fileUrl = fileUrl;
|
||||||
this.PREFERRED_LENGTH = length;
|
this.PREFERRED_LENGTH = length;
|
||||||
this.imageType = imageType;
|
this.imageType = imageType;
|
||||||
TypedArray res = target.getContext().obtainStyledAttributes(new int[] {R.attr.default_cover});
|
TypedArray res = target.getContext().obtainStyledAttributes(
|
||||||
|
new int[] { R.attr.default_cover });
|
||||||
this.defaultCoverResource = res.getResourceId(0, 0);
|
this.defaultCoverResource = res.getResourceId(0, 0);
|
||||||
res.recycle();
|
res.recycle();
|
||||||
}
|
}
|
||||||
@ -45,7 +46,9 @@ public abstract class BitmapDecodeWorkerTask extends Thread {
|
|||||||
* Should return true if tag of the imageview is still the same it was
|
* Should return true if tag of the imageview is still the same it was
|
||||||
* before the bitmap was decoded
|
* before the bitmap was decoded
|
||||||
*/
|
*/
|
||||||
abstract protected boolean tagsMatching(ImageView target);
|
protected boolean tagsMatching(ImageView target) {
|
||||||
|
return target.getTag() == null || target.getTag() == fileUrl;
|
||||||
|
}
|
||||||
|
|
||||||
protected void onPostExecute() {
|
protected void onPostExecute() {
|
||||||
// check if imageview is still supposed to display this image
|
// check if imageview is still supposed to display this image
|
||||||
@ -64,13 +67,15 @@ public abstract class BitmapDecodeWorkerTask extends Thread {
|
|||||||
f = new File(fileUrl);
|
f = new File(fileUrl);
|
||||||
}
|
}
|
||||||
if (fileUrl != null && f.exists()) {
|
if (fileUrl != null && f.exists()) {
|
||||||
cBitmap = new CachedBitmap(BitmapDecoder.decodeBitmap(PREFERRED_LENGTH, fileUrl), PREFERRED_LENGTH);
|
cBitmap = new CachedBitmap(BitmapDecoder.decodeBitmap(
|
||||||
|
PREFERRED_LENGTH, fileUrl), PREFERRED_LENGTH);
|
||||||
if (cBitmap.getBitmap() != null) {
|
if (cBitmap.getBitmap() != null) {
|
||||||
storeBitmapInCache(cBitmap);
|
storeBitmapInCache(cBitmap);
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "Could not load bitmap. Using default image.");
|
Log.w(TAG, "Could not load bitmap. Using default image.");
|
||||||
cBitmap = new CachedBitmap(BitmapFactory.decodeResource(target.getResources(),
|
cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
|
||||||
defaultCoverResource), PREFERRED_LENGTH);
|
target.getResources(), defaultCoverResource),
|
||||||
|
PREFERRED_LENGTH);
|
||||||
}
|
}
|
||||||
if (AppConfig.DEBUG)
|
if (AppConfig.DEBUG)
|
||||||
Log.d(TAG, "Finished loading bitmaps");
|
Log.d(TAG, "Finished loading bitmaps");
|
||||||
@ -98,15 +103,15 @@ public abstract class BitmapDecodeWorkerTask extends Thread {
|
|||||||
|
|
||||||
protected void onInvalidFileUrl() {
|
protected void onInvalidFileUrl() {
|
||||||
Log.e(TAG, "FeedImage has no valid file url. Using default image");
|
Log.e(TAG, "FeedImage has no valid file url. Using default image");
|
||||||
cBitmap = new CachedBitmap(BitmapFactory.decodeResource(target.getResources(),
|
cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
|
||||||
defaultCoverResource), PREFERRED_LENGTH);
|
target.getResources(), defaultCoverResource), PREFERRED_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void storeBitmapInCache(CachedBitmap cb) {
|
protected void storeBitmapInCache(CachedBitmap cb) {
|
||||||
FeedImageLoader loader = FeedImageLoader.getInstance();
|
ImageLoader loader = ImageLoader.getInstance();
|
||||||
if (imageType == FeedImageLoader.IMAGE_TYPE_COVER) {
|
if (imageType == ImageLoader.IMAGE_TYPE_COVER) {
|
||||||
loader.addBitmapToCoverCache(fileUrl, cb);
|
loader.addBitmapToCoverCache(fileUrl, cb);
|
||||||
} else if (imageType == FeedImageLoader.IMAGE_TYPE_THUMBNAIL) {
|
} else if (imageType == ImageLoader.IMAGE_TYPE_THUMBNAIL) {
|
||||||
loader.addBitmapToThumbnailCache(fileUrl, cb);
|
loader.addBitmapToThumbnailCache(fileUrl, cb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,11 @@ import de.danoeh.antennapod.AppConfig;
|
|||||||
import de.danoeh.antennapod.PodcastApp;
|
import de.danoeh.antennapod.PodcastApp;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.feed.FeedImage;
|
import de.danoeh.antennapod.feed.FeedImage;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
|
||||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
|
||||||
|
|
||||||
/** Caches and loads FeedImage bitmaps in the background */
|
/** Caches and loads FeedImage bitmaps in the background */
|
||||||
public class FeedImageLoader {
|
public class ImageLoader {
|
||||||
private static final String TAG = "FeedImageLoader";
|
private static final String TAG = "ImageLoader";
|
||||||
private static FeedImageLoader singleton;
|
private static ImageLoader singleton;
|
||||||
|
|
||||||
public static final int IMAGE_TYPE_THUMBNAIL = 0;
|
public static final int IMAGE_TYPE_THUMBNAIL = 0;
|
||||||
public static final int IMAGE_TYPE_COVER = 1;
|
public static final int IMAGE_TYPE_COVER = 1;
|
||||||
@ -44,7 +42,7 @@ public class FeedImageLoader {
|
|||||||
private LruCache<String, CachedBitmap> coverCache;
|
private LruCache<String, CachedBitmap> coverCache;
|
||||||
private LruCache<String, CachedBitmap> thumbnailCache;
|
private LruCache<String, CachedBitmap> thumbnailCache;
|
||||||
|
|
||||||
private FeedImageLoader() {
|
private ImageLoader() {
|
||||||
handler = new Handler();
|
handler = new Handler();
|
||||||
executor = createExecutor();
|
executor = createExecutor();
|
||||||
|
|
||||||
@ -79,9 +77,9 @@ public class FeedImageLoader {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FeedImageLoader getInstance() {
|
public static ImageLoader getInstance() {
|
||||||
if (singleton == null) {
|
if (singleton == null) {
|
||||||
singleton = new FeedImageLoader();
|
singleton = new ImageLoader();
|
||||||
}
|
}
|
||||||
return singleton;
|
return singleton;
|
||||||
}
|
}
|
||||||
@ -92,8 +90,18 @@ public class FeedImageLoader {
|
|||||||
* ImageView's size has already been set or inside a Runnable which is
|
* ImageView's size has already been set or inside a Runnable which is
|
||||||
* posted to the ImageView's message queue.
|
* posted to the ImageView's message queue.
|
||||||
*/
|
*/
|
||||||
|
public void loadCoverBitmap(String fileUrl, ImageView target) {
|
||||||
|
loadCoverBitmap(fileUrl, target, target.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
public void loadCoverBitmap(FeedImage image, ImageView target) {
|
public void loadCoverBitmap(FeedImage image, ImageView target) {
|
||||||
loadCoverBitmap(image, target, target.getHeight());
|
loadCoverBitmap((image != null) ? image.getFile_url() : null, target,
|
||||||
|
target.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadCoverBitmap(FeedImage image, ImageView target, int length) {
|
||||||
|
loadCoverBitmap((image != null) ? image.getFile_url() : null, target,
|
||||||
|
length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -102,17 +110,18 @@ public class FeedImageLoader {
|
|||||||
* ImageView's size has already been set or inside a Runnable which is
|
* ImageView's size has already been set or inside a Runnable which is
|
||||||
* posted to the ImageView's message queue.
|
* posted to the ImageView's message queue.
|
||||||
*/
|
*/
|
||||||
public void loadCoverBitmap(FeedImage image, ImageView target, int length) {
|
public void loadCoverBitmap(String fileUrl, ImageView target, int length) {
|
||||||
final int defaultCoverResource = getDefaultCoverResource(target.getContext());
|
final int defaultCoverResource = getDefaultCoverResource(target
|
||||||
|
.getContext());
|
||||||
if (image != null && image.getFile_url() != null) {
|
|
||||||
CachedBitmap cBitmap = getBitmapFromCoverCache(image.getFile_url());
|
if (fileUrl != null) {
|
||||||
|
CachedBitmap cBitmap = getBitmapFromCoverCache(fileUrl);
|
||||||
if (cBitmap != null && cBitmap.getLength() >= length) {
|
if (cBitmap != null && cBitmap.getLength() >= length) {
|
||||||
target.setImageBitmap(cBitmap.getBitmap());
|
target.setImageBitmap(cBitmap.getBitmap());
|
||||||
} else {
|
} else {
|
||||||
target.setImageResource(defaultCoverResource);
|
target.setImageResource(defaultCoverResource);
|
||||||
FeedImageDecodeWorkerTask worker = new FeedImageDecodeWorkerTask(
|
BitmapDecodeWorkerTask worker = new BitmapDecodeWorkerTask(
|
||||||
handler, target, image, length, IMAGE_TYPE_COVER);
|
handler, target, fileUrl, length, IMAGE_TYPE_COVER);
|
||||||
executor.submit(worker);
|
executor.submit(worker);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -126,8 +135,19 @@ public class FeedImageLoader {
|
|||||||
* called if the ImageView's size has already been set or inside a Runnable
|
* called if the ImageView's size has already been set or inside a Runnable
|
||||||
* which is posted to the ImageView's message queue.
|
* which is posted to the ImageView's message queue.
|
||||||
*/
|
*/
|
||||||
|
public void loadThumbnailBitmap(String fileUrl, ImageView target) {
|
||||||
|
loadThumbnailBitmap(fileUrl, target, target.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
public void loadThumbnailBitmap(FeedImage image, ImageView target) {
|
public void loadThumbnailBitmap(FeedImage image, ImageView target) {
|
||||||
loadThumbnailBitmap(image, target, target.getHeight());
|
loadThumbnailBitmap((image != null) ? image.getFile_url() : null,
|
||||||
|
target, target.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadThumbnailBitmap(FeedImage image, ImageView target,
|
||||||
|
int length) {
|
||||||
|
loadThumbnailBitmap((image != null) ? image.getFile_url() : null,
|
||||||
|
target, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -136,18 +156,18 @@ public class FeedImageLoader {
|
|||||||
* called if the ImageView's size has already been set or inside a Runnable
|
* called if the ImageView's size has already been set or inside a Runnable
|
||||||
* which is posted to the ImageView's message queue.
|
* which is posted to the ImageView's message queue.
|
||||||
*/
|
*/
|
||||||
public void loadThumbnailBitmap(FeedImage image, ImageView target,
|
public void loadThumbnailBitmap(String fileUrl, ImageView target, int length) {
|
||||||
int length) {
|
final int defaultCoverResource = getDefaultCoverResource(target
|
||||||
final int defaultCoverResource = getDefaultCoverResource(target.getContext());
|
.getContext());
|
||||||
|
|
||||||
if (image != null && image.getFile_url() != null) {
|
if (fileUrl != null) {
|
||||||
CachedBitmap cBitmap = getBitmapFromThumbnailCache(image.getFile_url());
|
CachedBitmap cBitmap = getBitmapFromThumbnailCache(fileUrl);
|
||||||
if (cBitmap != null && cBitmap.getLength() >= length) {
|
if (cBitmap != null && cBitmap.getLength() >= length) {
|
||||||
target.setImageBitmap(cBitmap.getBitmap());
|
target.setImageBitmap(cBitmap.getBitmap());
|
||||||
} else {
|
} else {
|
||||||
target.setImageResource(defaultCoverResource);
|
target.setImageResource(defaultCoverResource);
|
||||||
FeedImageDecodeWorkerTask worker = new FeedImageDecodeWorkerTask(
|
BitmapDecodeWorkerTask worker = new BitmapDecodeWorkerTask(
|
||||||
handler, target, image, length, IMAGE_TYPE_THUMBNAIL);
|
handler, target, fileUrl, length, IMAGE_TYPE_THUMBNAIL);
|
||||||
executor.submit(worker);
|
executor.submit(worker);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -168,8 +188,8 @@ public class FeedImageLoader {
|
|||||||
thumbnailCache.evictAll();
|
thumbnailCache.evictAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInThumbnailCache(FeedImage image) {
|
public boolean isInThumbnailCache(String fileUrl) {
|
||||||
return thumbnailCache.get(image.getFile_url()) != null;
|
return thumbnailCache.get(fileUrl) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private CachedBitmap getBitmapFromThumbnailCache(String key) {
|
private CachedBitmap getBitmapFromThumbnailCache(String key) {
|
||||||
@ -180,8 +200,8 @@ public class FeedImageLoader {
|
|||||||
thumbnailCache.put(key, bitmap);
|
thumbnailCache.put(key, bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInCoverCache(FeedImage image) {
|
public boolean isInCoverCache(String fileUrl) {
|
||||||
return coverCache.get(image.getFile_url()) != null;
|
return coverCache.get(fileUrl) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private CachedBitmap getBitmapFromCoverCache(String key) {
|
private CachedBitmap getBitmapFromCoverCache(String key) {
|
||||||
@ -191,43 +211,13 @@ public class FeedImageLoader {
|
|||||||
public void addBitmapToCoverCache(String key, CachedBitmap bitmap) {
|
public void addBitmapToCoverCache(String key, CachedBitmap bitmap) {
|
||||||
coverCache.put(key, bitmap);
|
coverCache.put(key, bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDefaultCoverResource(Context context) {
|
private int getDefaultCoverResource(Context context) {
|
||||||
TypedArray res = context.obtainStyledAttributes(new int[] {R.attr.default_cover});
|
TypedArray res = context
|
||||||
|
.obtainStyledAttributes(new int[] { R.attr.default_cover });
|
||||||
final int defaultCoverResource = res.getResourceId(0, 0);
|
final int defaultCoverResource = res.getResourceId(0, 0);
|
||||||
res.recycle();
|
res.recycle();
|
||||||
return defaultCoverResource;
|
return defaultCoverResource;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FeedImageDecodeWorkerTask extends BitmapDecodeWorkerTask {
|
|
||||||
|
|
||||||
private static final String TAG = "FeedImageDecodeWorkerTask";
|
|
||||||
|
|
||||||
protected FeedImage image;
|
|
||||||
|
|
||||||
public FeedImageDecodeWorkerTask(Handler handler, ImageView target,
|
|
||||||
FeedImage image, int length, int imageType) {
|
|
||||||
super(handler, target, image.getFile_url(), length, imageType);
|
|
||||||
this.image = image;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean tagsMatching(ImageView target) {
|
|
||||||
return target.getTag() == null || target.getTag() == image;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onInvalidFileUrl() {
|
|
||||||
super.onInvalidFileUrl();
|
|
||||||
if (image.getFile_url() != null
|
|
||||||
&& !DownloadRequester.getInstance()
|
|
||||||
.isDownloadingFile(image)) {
|
|
||||||
FeedManager.getInstance().notifyInvalidImageFile(
|
|
||||||
PodcastApp.getInstance(), image);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -12,7 +12,7 @@ import com.actionbarsherlock.app.SherlockFragment;
|
|||||||
import de.danoeh.antennapod.AppConfig;
|
import de.danoeh.antennapod.AppConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.activity.AudioplayerActivity.AudioplayerContentFragment;
|
import de.danoeh.antennapod.activity.AudioplayerActivity.AudioplayerContentFragment;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.Feed;
|
import de.danoeh.antennapod.feed.Feed;
|
||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.feed.FeedManager;
|
import de.danoeh.antennapod.feed.FeedManager;
|
||||||
@ -79,7 +79,7 @@ public class CoverFragment extends SherlockFragment implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FeedImageLoader.getInstance().loadCoverBitmap(
|
ImageLoader.getInstance().loadCoverBitmap(
|
||||||
media.getItem().getFeed().getImage(), imgvCover);
|
media.getItem().getFeed().getImage(), imgvCover);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -14,7 +14,7 @@ import com.actionbarsherlock.app.SherlockFragment;
|
|||||||
|
|
||||||
import de.danoeh.antennapod.AppConfig;
|
import de.danoeh.antennapod.AppConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.asynctask.FeedImageLoader;
|
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||||
import de.danoeh.antennapod.feed.FeedMedia;
|
import de.danoeh.antennapod.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.service.PlaybackService;
|
import de.danoeh.antennapod.service.PlaybackService;
|
||||||
import de.danoeh.antennapod.util.Converter;
|
import de.danoeh.antennapod.util.Converter;
|
||||||
@ -196,7 +196,7 @@ public class ExternalPlayerFragment extends SherlockFragment {
|
|||||||
FeedMedia media = controller.getMedia();
|
FeedMedia media = controller.getMedia();
|
||||||
if (media != null) {
|
if (media != null) {
|
||||||
txtvTitle.setText(media.getItem().getTitle());
|
txtvTitle.setText(media.getItem().getTitle());
|
||||||
FeedImageLoader.getInstance().loadThumbnailBitmap(
|
ImageLoader.getInstance().loadThumbnailBitmap(
|
||||||
media.getItem().getFeed().getImage(),
|
media.getItem().getFeed().getImage(),
|
||||||
imgvCover,
|
imgvCover,
|
||||||
(int) getActivity().getResources().getDimension(
|
(int) getActivity().getResources().getDimension(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user