diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-11-20 12:38:21 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-11-20 12:51:00 +0100 |
commit | 4460f406a4c33be48f31f296c6ca9d85ef2bd4c1 (patch) | |
tree | 3d06d5d6a41306c6e557ab49e18ef05a404ab855 /android | |
parent | fd91019804398c0643951eb291a45d3931968ae3 (diff) |
android: don't load the document after every rotation
Change-Id: I0af154bc5bc6cc79ab45a85a5a06e4539442ec81
Diffstat (limited to 'android')
-rw-r--r-- | android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java | 57 |
1 files changed, 42 insertions, 15 deletions
diff --git a/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java b/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java index 9dc7540c66aa..64d4248f5657 100644 --- a/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java +++ b/android/experimental/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java @@ -108,6 +108,7 @@ import com.sun.star.view.XRenderable; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.ArrayList; import org.libreoffice.android.Bootstrap; @@ -127,9 +128,7 @@ public class DocumentLoader private static final int PAGECACHE_SIZE = PAGECACHE_PLUSMINUS*2 + 1; BootstrapContext bootstrapContext; - Object doc; - int pageCount; - XRenderable renderable; + DocumentContext documentContext; GestureDetector.OnGestureListener gestureListener; GestureDetector gestureDetector; @@ -151,7 +150,7 @@ public class DocumentLoader { Log.i(TAG, "onFling: " + event1 + " " + event2); if (event1.getX() - event2.getX() > 120) { - if (((PageViewer)flipper.getCurrentView()).currentPageNumber == pageCount-1) + if (((PageViewer)flipper.getCurrentView()).currentPageNumber == documentContext.pageCount-1) return false; Animation inFromRight = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0, @@ -612,7 +611,7 @@ public class DocumentLoader // getRenderer returns a set of properties that include the PageSize long t0 = System.currentTimeMillis(); - PropertyValue rendererProps[] = renderable.getRenderer(number, doc, renderProps); + PropertyValue rendererProps[] = documentContext.renderable.getRenderer(number, documentContext.doc, renderProps); long t1 = System.currentTimeMillis(); Log.i(TAG, "getRenderer took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms"); @@ -692,7 +691,7 @@ public class DocumentLoader renderProps[1].Value = device; t0 = System.currentTimeMillis(); - renderable.render(number, doc, renderProps); + documentContext.renderable.render(number, documentContext.doc, renderProps); t1 = System.currentTimeMillis(); Log.i(TAG, "Rendering page " + number + " took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms"); @@ -727,7 +726,7 @@ public class DocumentLoader Log.i(TAG, "doInBackground(" + number + ")"); - if (number >= pageCount) + if (number >= documentContext.pageCount) return -1; state = PageState.LOADING; @@ -811,11 +810,11 @@ public class DocumentLoader loadProps[2].Value = new Boolean(true); long t0 = System.currentTimeMillis(); - doc = bootstrapContext.componentLoader.loadComponentFromURL(url, "_blank", 0, loadProps); + documentContext.doc = bootstrapContext.componentLoader.loadComponentFromURL(url, "_blank", 0, loadProps); long t1 = System.currentTimeMillis(); Log.i(TAG, "Loading took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms"); - renderable = (XRenderable) UnoRuntime.queryInterface(XRenderable.class, doc); + documentContext.renderable = (XRenderable) UnoRuntime.queryInterface(XRenderable.class, documentContext.doc); PropertyValue renderProps[] = new PropertyValue[3]; renderProps[0] = new PropertyValue(); @@ -829,9 +828,9 @@ public class DocumentLoader renderProps[2].Value = new MyXController(); t0 = System.currentTimeMillis(); - pageCount = renderable.getRendererCount(doc, renderProps); + documentContext.pageCount = documentContext.renderable.getRendererCount(documentContext.doc, renderProps); t1 = System.currentTimeMillis(); - Log.i(TAG, "getRendererCount: " + pageCount + ", took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms"); + Log.i(TAG, "getRendererCount: " + documentContext.pageCount + ", took " + ((t1-t0)-bootstrapContext.timingOverhead) + " ms"); } catch (Exception e) { e.printStackTrace(System.err); @@ -855,6 +854,18 @@ public class DocumentLoader public XDevice dummySmallDevice; } + /** + * This class contains the state that is specific to a document, but + * independent from a view. + */ + class DocumentContext + { + public Object doc; + public int pageCount; + public XRenderable renderable; + public String input; + } + static void dumpUNOObject(String objectName, Object object) { Log.i(TAG, objectName + " is " + (object != null ? object.toString() : "null")); @@ -924,7 +935,10 @@ public class DocumentLoader @Override public Object onRetainNonConfigurationInstance() { - return bootstrapContext; + ArrayList ret = new ArrayList(2); + ret.add(bootstrapContext); + ret.add(documentContext); + return ret; } private void initBootstrapContext() @@ -982,12 +996,25 @@ public class DocumentLoader } } + private void initDocumentContext(String input) + { + documentContext = new DocumentContext(); + documentContext.input = input; + // Load the wanted document + new DocumentLoadTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, "file://" + input); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - bootstrapContext = (BootstrapContext)getLastNonConfigurationInstance(); + ArrayList contexts = (ArrayList)getLastNonConfigurationInstance(); + if (contexts != null) + { + bootstrapContext = (BootstrapContext)contexts.get(0); + documentContext = (DocumentContext)contexts.get(1); + } extras = getIntent().getExtras(); @@ -1011,8 +1038,8 @@ public class DocumentLoader if (bootstrapContext == null) initBootstrapContext(); - // Load the wanted document - new DocumentLoadTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, "file://" + input); + if (documentContext == null || !documentContext.input.equals(input)) + initDocumentContext(input); flipper = new ViewFlipper(this); |