verify glide isn't loading into destroyed activity

Fixes #3110
Closes #3114

// FREEBIE
This commit is contained in:
Jake McGinty 2015-05-05 15:14:41 -07:00 committed by Moxie Marlinspike
parent cdd7a1042a
commit 8332342d75
1 changed files with 23 additions and 4 deletions

View File

@ -1,8 +1,12 @@
package org.thoughtcrime.securesms.components;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -44,6 +48,11 @@ public class ThumbnailView extends ForegroundImageView {
super(context, attrs, defStyle);
}
@Override protected void onDetachedFromWindow() {
Glide.clear(this);
super.onDetachedFromWindow();
}
public void setImageResource(@NonNull ListenableFutureTask<SlideDeck> slideDeckFuture,
@Nullable MasterSecret masterSecret)
{
@ -57,12 +66,15 @@ public class ThumbnailView extends ForegroundImageView {
}
public void setImageResource(@NonNull Slide slide, @Nullable MasterSecret masterSecret) {
buildGlideRequest(slide, masterSecret).into(ThumbnailView.this);
setOnClickListener(new ThumbnailClickDispatcher(thumbnailClickListener, slide));
if (isContextValid()) {
buildGlideRequest(slide, masterSecret).into(ThumbnailView.this);
setOnClickListener(new ThumbnailClickDispatcher(thumbnailClickListener, slide));
} else {
Log.w(TAG, "Not going to load resource, context is invalid");
}
}
public void setImageResource(@NonNull Slide slide)
{
public void setImageResource(@NonNull Slide slide) {
setImageResource(slide, null);
}
@ -70,6 +82,13 @@ public class ThumbnailView extends ForegroundImageView {
this.thumbnailClickListener = listener;
}
@TargetApi(VERSION_CODES.JELLY_BEAN_MR1)
private boolean isContextValid() {
return !(getContext() instanceof Activity) ||
VERSION.SDK_INT < VERSION_CODES.JELLY_BEAN_MR1 ||
!((Activity)getContext()).isDestroyed();
}
private GenericRequestBuilder buildGlideRequest(@NonNull Slide slide,
@Nullable MasterSecret masterSecret)
{