diff --git a/Clover/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/Clover/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
index 72dc5bfa..bb726f2c 100644
--- a/Clover/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
+++ b/Clover/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
@@ -1028,6 +1028,10 @@ public class SubsamplingScaleImageView extends View {
} catch (OutOfMemoryError e) {
Log.e(TAG, "OOM in decode tile", e);
System.gc();
+ final SubsamplingScaleImageView view = viewRef.get();
+ if (view != null) {
+ view.onOutOfMemory();
+ }
}
return null;
}
@@ -1092,6 +1096,10 @@ public class SubsamplingScaleImageView extends View {
} catch (OutOfMemoryError e) {
Log.e(TAG, "OOM in decode tile", e);
System.gc();
+ final SubsamplingScaleImageView view = viewRef.get();
+ if (view != null) {
+ view.onOutOfMemory();
+ }
}
return null;
}
@@ -1538,6 +1546,10 @@ public class SubsamplingScaleImageView extends View {
}
+ protected void onOutOfMemory() {
+
+ }
+
/**
* Call to find whether the view is initialised and ready for rendering tiles.
*/
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java
index 89980d73..a21c81c1 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java
@@ -20,6 +20,8 @@ import android.util.AttributeSet;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+import org.floens.chan.utils.Utils;
+
public class CustomScaleImageView extends SubsamplingScaleImageView {
private InitedCallback initCallback;
@@ -39,12 +41,33 @@ public class CustomScaleImageView extends SubsamplingScaleImageView {
protected void onImageReady() {
super.onImageReady();
- if (initCallback != null) {
- initCallback.onInit();
- }
+ Utils.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (initCallback != null) {
+ initCallback.onInit();
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void onOutOfMemory() {
+ super.onOutOfMemory();
+
+ Utils.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (initCallback != null) {
+ initCallback.onOutOfMemory();
+ }
+ }
+ });
}
public interface InitedCallback {
public void onInit();
+
+ public void onOutOfMemory();
}
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
index d2498d3a..fd9945da 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
@@ -158,14 +158,14 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
image.setInitCallback(new CustomScaleImageView.InitedCallback() {
@Override
public void onInit() {
- Utils.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- removeAllViews();
- addView(image);
- callback.setProgress(false);
- }
- });
+ removeAllViews();
+ addView(image);
+ callback.setProgress(false);
+ }
+
+ @Override
+ public void onOutOfMemory() {
+ onOutOfMemoryError();
}
});
}
@@ -213,6 +213,11 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
e.printStackTrace();
onError();
return;
+ } catch (OutOfMemoryError e) {
+ System.gc();
+ e.printStackTrace();
+ onOutOfMemoryError();
+ return;
}
GifImageView view = new GifImageView(getContext());
@@ -302,7 +307,7 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
}
public void onError() {
- Toast.makeText(getContext(), R.string.image_preview_failed, Toast.LENGTH_LONG).show();
+ Toast.makeText(getContext(), R.string.image_preview_failed, Toast.LENGTH_SHORT).show();
callback.setProgress(false);
}
@@ -311,6 +316,11 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
callback.setProgress(false);
}
+ public void onOutOfMemoryError() {
+ Toast.makeText(getContext(), R.string.image_preview_failed_oom, Toast.LENGTH_SHORT).show();
+ callback.setProgress(false);
+ }
+
public void cancelLoad() {
if (imageRequest != null) {
imageRequest.cancel();
diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml
index f49c4344..dfba6588 100644
--- a/Clover/app/src/main/res/values/strings.xml
+++ b/Clover/app/src/main/res/values/strings.xml
@@ -61,6 +61,7 @@ along with this program. If not, see .
Start / stop playing
Failed to show image
+ Failed to show image, out of memory
Image not found
Failed to open image