@@ 925,10 925,9 @@ public abstract class XmppActivity extends ActionBarActivity {
}
} else {
if (cancelPotentialWork(message, imageView)) {
- imageView.setBackgroundColor(0xff333333);
- imageView.setImageDrawable(null);
final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
final BitmapDrawable fallbackThumb = xmppConnectionService.getFileBackend().getFallbackThumbnail(message, (int) (metrics.density * 288), true);
+ imageView.setBackgroundColor(fallbackThumb == null ? 0xff333333 : 0x00000000);
final AsyncDrawable asyncDrawable = new AsyncDrawable(
getResources(), fallbackThumb != null ? fallbackThumb.getBitmap() : null, task);
imageView.setImageDrawable(asyncDrawable);
@@ 998,7 997,8 @@ public abstract class XmppActivity extends ActionBarActivity {
d = activity.xmppConnectionService.getFileBackend().getThumbnail(message, imageViewReference.get().getContext().getResources(), (int) (activity.metrics.density * 288), false);
}
} catch (IOException e) { e.printStackTrace(); }
- if (d == null && activity != null && activity.xmppConnectionService != null) {
+ final ImageView imageView = imageViewReference.get();
+ if (d == null && activity != null && activity.xmppConnectionService != null && imageView != null && imageView.getDrawable() instanceof AsyncDrawable && ((AsyncDrawable) imageView.getDrawable()).getBitmap() == null) {
d = activity.xmppConnectionService.getFileBackend().getFallbackThumbnail(message, (int) (activity.metrics.density * 288), false);
}
return d;
@@ 1010,9 1010,10 @@ public abstract class XmppActivity extends ActionBarActivity {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
Drawable old = imageView.getDrawable();
- if (drawable == null && old instanceof AsyncDrawable) {
- imageView.setImageDrawable(new BitmapDrawable(((AsyncDrawable) old).getBitmap()));
- } else {
+ if (old instanceof AsyncDrawable) {
+ ((AsyncDrawable) old).clearTask();
+ }
+ if (drawable != null) {
imageView.setImageDrawable(drawable);
}
imageView.setBackgroundColor(drawable == null ? 0xff333333 : 0x00000000);
@@ 1025,16 1026,22 @@ public abstract class XmppActivity extends ActionBarActivity {
}
private static class AsyncDrawable extends BitmapDrawable {
- private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;
+ private WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;
private AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) {
super(res, bitmap);
bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask);
}
- private BitmapWorkerTask getBitmapWorkerTask() {
+ private synchronized BitmapWorkerTask getBitmapWorkerTask() {
+ if (bitmapWorkerTaskReference == null) return null;
+
return bitmapWorkerTaskReference.get();
}
+
+ public synchronized void clearTask() {
+ bitmapWorkerTaskReference = null;
+ }
}
public static XmppActivity find(@NonNull WeakReference<ImageView> viewWeakReference) {