summaryrefslogtreecommitdiff
path: root/platform/android/src/com/artifex/mupdfdemo/ReaderView.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/com/artifex/mupdfdemo/ReaderView.java')
-rw-r--r--platform/android/src/com/artifex/mupdfdemo/ReaderView.java48
1 files changed, 46 insertions, 2 deletions
diff --git a/platform/android/src/com/artifex/mupdfdemo/ReaderView.java b/platform/android/src/com/artifex/mupdfdemo/ReaderView.java
index 7b129916..65d8f665 100644
--- a/platform/android/src/com/artifex/mupdfdemo/ReaderView.java
+++ b/platform/android/src/com/artifex/mupdfdemo/ReaderView.java
@@ -3,6 +3,11 @@ package com.artifex.mupdfdemo;
import java.util.LinkedList;
import java.util.NoSuchElementException;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+
import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
@@ -552,6 +557,7 @@ public class ReaderView
}
}
+ requestLayout();
return true;
}
@@ -565,10 +571,40 @@ public class ReaderView
}
@Override
- protected void onLayout(boolean changed, int left, int top, int right,
- int bottom) {
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
+ try {
+ onLayout2(changed, left, top, right, bottom);
+ }
+ catch (java.lang.OutOfMemoryError e) {
+ System.out.println("Out of memory during layout");
+
+ // we might get an out of memory error.
+ // so let's display an alert.
+ // TODO: a better message, in resources.
+
+ if (!memAlert) {
+ memAlert = true;
+ AlertDialog alertDialog = MuPDFActivity.getAlertBuilder().create();
+ alertDialog.setMessage("Out of memory during layout");
+ alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ memAlert = false;
+ }
+ });
+ alertDialog.show();
+ }
+ }
+ }
+
+ private boolean memAlert = false;
+
+ private void onLayout2(boolean changed, int left, int top, int right,
+ int bottom) {
+
// "Edit mode" means when the View is being displayed in the Android GUI editor. (this class
// is instantiated in the IDE, so we need to be a bit careful what we do).
if (isInEditMode())
@@ -752,6 +788,14 @@ public class ReaderView
@Override
public void setAdapter(Adapter adapter) {
+
+ // release previous adapter's bitmaps
+ if (null!=mAdapter && adapter!=mAdapter) {
+ if (adapter instanceof MuPDFPageAdapter){
+ ((MuPDFPageAdapter) adapter).releaseBitmaps();
+ }
+ }
+
mAdapter = adapter;
requestLayout();