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