diff options
Diffstat (limited to 'android/source/src/java/org/libreoffice/LOKitTileProvider.java')
-rw-r--r-- | android/source/src/java/org/libreoffice/LOKitTileProvider.java | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/android/source/src/java/org/libreoffice/LOKitTileProvider.java b/android/source/src/java/org/libreoffice/LOKitTileProvider.java index 3672cdeb0bc2..3fcaf6ce0939 100644 --- a/android/source/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/source/src/java/org/libreoffice/LOKitTileProvider.java @@ -20,6 +20,7 @@ import org.libreoffice.kit.DirectBufferAllocator; import org.libreoffice.kit.Document; import org.libreoffice.kit.LibreOfficeKit; import org.libreoffice.kit.Office; +import org.libreoffice.ui.FileUtilities; import org.mozilla.gecko.gfx.BufferedCairoImage; import org.mozilla.gecko.gfx.CairoImage; import org.mozilla.gecko.gfx.IntSize; @@ -65,17 +66,33 @@ class LOKitTileProvider implements TileProvider { mOffice.setMessageCallback(messageCallback); mOffice.setOptionalFeatures(Document.LOK_FEATURE_DOCUMENT_PASSWORD); mContext.setTileProvider(this); - mInputFile = input; + File f = new File(mInputFile); + final String cacheFile = mContext.getExternalCacheDir().getAbsolutePath() + "/lo_cached_" + f.getName(); + + if(mContext.firstStart){ + File cacheFileObj = new File(cacheFile); + if(cacheFileObj.exists()) { + cacheFileObj.delete(); + } + mContext.firstStart=false; + } Log.i(LOGTAG, "====> Loading file '" + input + "'"); - File fileToBeEncoded = new File(input); + File fileToBeEncoded; + if(isDocumentCached()){ + fileToBeEncoded = new File(cacheFile); + }else{ + fileToBeEncoded = new File(input); + + } String encodedFileName = android.net.Uri.encode(fileToBeEncoded.getName()); mDocument = mOffice.documentLoad( (new File(fileToBeEncoded.getParent(),encodedFileName)).getPath() ); + if (mDocument == null && !mContext.isPasswordProtected()) { Log.i(LOGTAG, "====> mOffice.documentLoad() returned null, trying to restart 'Office' and loading again"); mOffice.destroy(); @@ -325,6 +342,43 @@ class LOKitTileProvider implements TileProvider { LOKitShell.hideProgressSpinner(mContext); } + public boolean isDocumentCached(){ + File input = new File(mInputFile); + final String cacheFile = mContext.getExternalCacheDir().getAbsolutePath() + "/lo_cached_" + input.getName(); + File cacheFileObj = new File(cacheFile); + if(cacheFileObj.exists()) + return true; + + return false; + } + + public void cacheDocument() { + String cacheDir = mContext.getExternalCacheDir().getAbsolutePath(); + File input = new File(mInputFile); + final String cacheFile = cacheDir + "/lo_cached_" + input.getName(); + Log.i(LOGTAG, "cacheDocument: " + cacheFile); + if(isDocumentCached()){ + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:Save")); + }else{ + mDocument.saveAs("file://"+cacheFile, FileUtilities.getExtension(input.getPath()).substring(1),""); + } + } + + public void saveDocument(){ + if(isDocumentCached()){ + String format = FileUtilities.getExtension(mInputFile).substring(1); + String cacheDir = mContext.getExternalCacheDir().getAbsolutePath(); + File input = new File(mInputFile); + final String cacheFile = cacheDir + "/lo_cached_" + input.getName(); + String path = input.getAbsolutePath(); + saveDocumentAs(path, format); + (new File(cacheFile)).delete(); + }else{ + mContext.saveDocument(); + } + } + + private void setupDocumentFonts() { String values = mDocument.getCommandValues(".uno:CharFontName"); if (values == null || values.isEmpty()) |