summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2013-09-12 12:55:07 +0200
committerdaniel oeh <daniel.oeh@gmail.com>2013-09-12 12:55:07 +0200
commitde5c6a97df094a41419b8f61c91e03c0600bd9f1 (patch)
tree0c1073fda0016ab017195d6dd18edb002983e896 /src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java
parent2c79135d6a36fc14dc0d77a9e0d2a014cce0c99c (diff)
parente1fc800d088a4b150deb3aff072cda7af8da8ca7 (diff)
downloadAntennaPod-de5c6a97df094a41419b8f61c91e03c0600bd9f1.zip
Merge branch 'move-to-top' of git://github.com/TomHennen/AntennaPod into TomHennen-move-to-top
Diffstat (limited to 'src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java')
-rw-r--r--src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java190
1 files changed, 100 insertions, 90 deletions
diff --git a/src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java b/src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java
index 7ba68ae22..cb8e4d292 100644
--- a/src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java
+++ b/src/de/danoeh/antennapod/asynctask/BitmapDecodeWorkerTask.java
@@ -2,105 +2,115 @@ package de.danoeh.antennapod.asynctask;
import android.content.res.TypedArray;
import android.graphics.BitmapFactory;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.TransitionDrawable;
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.asynctask.ImageLoader.ImageWorkerTaskResource;
import de.danoeh.antennapod.util.BitmapDecoder;
public class BitmapDecodeWorkerTask extends Thread {
- protected int PREFERRED_LENGTH;
-
- /** Can be thumbnail or cover */
- protected int imageType;
-
- private static final String TAG = "BitmapDecodeWorkerTask";
- private ImageView target;
- protected CachedBitmap cBitmap;
-
- protected ImageLoader.ImageWorkerTaskResource imageResource;
-
- private Handler handler;
-
- private final int defaultCoverResource;
-
- public BitmapDecodeWorkerTask(Handler handler, ImageView target,
- ImageWorkerTaskResource imageResource, int length, int imageType) {
- super();
- this.handler = handler;
- this.target = target;
- this.imageResource = imageResource;
- this.PREFERRED_LENGTH = length;
- this.imageType = imageType;
- TypedArray res = target.getContext().obtainStyledAttributes(
- new int[] { R.attr.default_cover });
- this.defaultCoverResource = res.getResourceId(0, 0);
- res.recycle();
- }
-
- /**
- * Should return true if tag of the imageview is still the same it was
- * before the bitmap was decoded
- */
- protected boolean tagsMatching(ImageView target) {
- return target.getTag() == null
- || target.getTag().equals(imageResource.getImageLoaderCacheKey());
- }
-
- protected void onPostExecute() {
- // check if imageview is still supposed to display this image
- if (tagsMatching(target) && cBitmap.getBitmap() != null) {
- target.setImageBitmap(cBitmap.getBitmap());
- } else {
- if (AppConfig.DEBUG)
- Log.d(TAG, "Not displaying image");
- }
- }
-
- @Override
- public void run() {
- cBitmap = new CachedBitmap(BitmapDecoder.decodeBitmapFromWorkerTaskResource(
- PREFERRED_LENGTH, imageResource), PREFERRED_LENGTH);
- if (cBitmap.getBitmap() != null) {
- storeBitmapInCache(cBitmap);
- } else {
- Log.w(TAG, "Could not load bitmap. Using default image.");
- cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
- target.getResources(), defaultCoverResource),
- PREFERRED_LENGTH);
- }
- if (AppConfig.DEBUG)
- Log.d(TAG, "Finished loading bitmaps");
-
- endBackgroundTask();
- }
-
- protected final void endBackgroundTask() {
- handler.post(new Runnable() {
-
- @Override
- public void run() {
- onPostExecute();
- }
-
- });
- }
-
- protected void onInvalidStream() {
- cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
- target.getResources(), defaultCoverResource), PREFERRED_LENGTH);
- }
-
- protected void storeBitmapInCache(CachedBitmap cb) {
- ImageLoader loader = ImageLoader.getInstance();
- if (imageType == ImageLoader.IMAGE_TYPE_COVER) {
- loader.addBitmapToCoverCache(imageResource.getImageLoaderCacheKey(), cb);
- } else if (imageType == ImageLoader.IMAGE_TYPE_THUMBNAIL) {
- loader.addBitmapToThumbnailCache(imageResource.getImageLoaderCacheKey(), cb);
- }
- }
+ protected int PREFERRED_LENGTH;
+ public static final int FADE_DURATION = 500;
+
+ /**
+ * Can be thumbnail or cover
+ */
+ protected int imageType;
+
+ private static final String TAG = "BitmapDecodeWorkerTask";
+ private ImageView target;
+ protected CachedBitmap cBitmap;
+
+ protected ImageLoader.ImageWorkerTaskResource imageResource;
+
+ private Handler handler;
+
+ private final int defaultCoverResource;
+
+ public BitmapDecodeWorkerTask(Handler handler, ImageView target,
+ ImageWorkerTaskResource imageResource, int length, int imageType) {
+ super();
+ this.handler = handler;
+ this.target = target;
+ this.imageResource = imageResource;
+ this.PREFERRED_LENGTH = length;
+ this.imageType = imageType;
+ this.defaultCoverResource = android.R.color.transparent;
+ }
+
+ /**
+ * Should return true if tag of the imageview is still the same it was
+ * before the bitmap was decoded
+ */
+ protected boolean tagsMatching(ImageView target) {
+ return target.getTag(R.id.imageloader_key) == null
+ || target.getTag(R.id.imageloader_key).equals(imageResource.getImageLoaderCacheKey());
+ }
+
+ protected void onPostExecute() {
+ // check if imageview is still supposed to display this image
+ if (tagsMatching(target) && cBitmap.getBitmap() != null) {
+ Drawable[] drawables = new Drawable[]{
+ PodcastApp.getInstance().getResources().getDrawable(android.R.color.transparent),
+ new BitmapDrawable(PodcastApp.getInstance().getResources(), cBitmap.getBitmap())
+ };
+ TransitionDrawable transitionDrawable = new TransitionDrawable(drawables);
+ target.setImageDrawable(transitionDrawable);
+ transitionDrawable.startTransition(FADE_DURATION);
+ } else {
+ if (AppConfig.DEBUG)
+ Log.d(TAG, "Not displaying image");
+ }
+ }
+
+ @Override
+ public void run() {
+ cBitmap = new CachedBitmap(BitmapDecoder.decodeBitmapFromWorkerTaskResource(
+ PREFERRED_LENGTH, imageResource), PREFERRED_LENGTH);
+ if (cBitmap.getBitmap() != null) {
+ storeBitmapInCache(cBitmap);
+ } else {
+ Log.w(TAG, "Could not load bitmap. Using default image.");
+ cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
+ target.getResources(), defaultCoverResource),
+ PREFERRED_LENGTH);
+ }
+ if (AppConfig.DEBUG)
+ Log.d(TAG, "Finished loading bitmaps");
+
+ endBackgroundTask();
+ }
+
+ protected final void endBackgroundTask() {
+ handler.post(new Runnable() {
+
+ @Override
+ public void run() {
+ onPostExecute();
+ }
+
+ });
+ }
+
+ protected void onInvalidStream() {
+ cBitmap = new CachedBitmap(BitmapFactory.decodeResource(
+ target.getResources(), defaultCoverResource), PREFERRED_LENGTH);
+ }
+
+ protected void storeBitmapInCache(CachedBitmap cb) {
+ ImageLoader loader = ImageLoader.getInstance();
+ if (imageType == ImageLoader.IMAGE_TYPE_COVER) {
+ loader.addBitmapToCoverCache(imageResource.getImageLoaderCacheKey(), cb);
+ } else if (imageType == ImageLoader.IMAGE_TYPE_THUMBNAIL) {
+ loader.addBitmapToThumbnailCache(imageResource.getImageLoaderCacheKey(), cb);
+ }
+ }
}