summaryrefslogtreecommitdiff
path: root/android/source/src/java/org/libreoffice/LOKitTileProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/source/src/java/org/libreoffice/LOKitTileProvider.java')
-rw-r--r--android/source/src/java/org/libreoffice/LOKitTileProvider.java58
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())