Kaydet (Commit) 2fa47f8c authored tarafından Mert Tumer's avatar Mert Tumer Kaydeden (comit) Tomaž Vajngerl

tdf#106648 save current work when switching to other apps

Change-Id: Ieecfad2d0127fec850f7a4f3576a77eec94926b3
Signed-off-by: 's avatarMert Tumer <merttumer@outlook.com>
Reviewed-on: https://gerrit.libreoffice.org/58562
Tested-by: Jenkins
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst e4c9d68b
...@@ -20,6 +20,7 @@ import org.libreoffice.kit.DirectBufferAllocator; ...@@ -20,6 +20,7 @@ import org.libreoffice.kit.DirectBufferAllocator;
import org.libreoffice.kit.Document; import org.libreoffice.kit.Document;
import org.libreoffice.kit.LibreOfficeKit; import org.libreoffice.kit.LibreOfficeKit;
import org.libreoffice.kit.Office; import org.libreoffice.kit.Office;
import org.libreoffice.ui.FileUtilities;
import org.mozilla.gecko.gfx.BufferedCairoImage; import org.mozilla.gecko.gfx.BufferedCairoImage;
import org.mozilla.gecko.gfx.CairoImage; import org.mozilla.gecko.gfx.CairoImage;
import org.mozilla.gecko.gfx.IntSize; import org.mozilla.gecko.gfx.IntSize;
...@@ -65,17 +66,33 @@ class LOKitTileProvider implements TileProvider { ...@@ -65,17 +66,33 @@ class LOKitTileProvider implements TileProvider {
mOffice.setMessageCallback(messageCallback); mOffice.setMessageCallback(messageCallback);
mOffice.setOptionalFeatures(Document.LOK_FEATURE_DOCUMENT_PASSWORD); mOffice.setOptionalFeatures(Document.LOK_FEATURE_DOCUMENT_PASSWORD);
mContext.setTileProvider(this); mContext.setTileProvider(this);
mInputFile = input; 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 + "'"); 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()); String encodedFileName = android.net.Uri.encode(fileToBeEncoded.getName());
mDocument = mOffice.documentLoad( mDocument = mOffice.documentLoad(
(new File(fileToBeEncoded.getParent(),encodedFileName)).getPath() (new File(fileToBeEncoded.getParent(),encodedFileName)).getPath()
); );
if (mDocument == null && !mContext.isPasswordProtected()) { if (mDocument == null && !mContext.isPasswordProtected()) {
Log.i(LOGTAG, "====> mOffice.documentLoad() returned null, trying to restart 'Office' and loading again"); Log.i(LOGTAG, "====> mOffice.documentLoad() returned null, trying to restart 'Office' and loading again");
mOffice.destroy(); mOffice.destroy();
...@@ -325,6 +342,43 @@ class LOKitTileProvider implements TileProvider { ...@@ -325,6 +342,43 @@ class LOKitTileProvider implements TileProvider {
LOKitShell.hideProgressSpinner(mContext); 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() { private void setupDocumentFonts() {
String values = mDocument.getCommandValues(".uno:CharFontName"); String values = mDocument.getCommandValues(".uno:CharFontName");
if (values == null || values.isEmpty()) if (values == null || values.isEmpty())
......
...@@ -89,6 +89,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin ...@@ -89,6 +89,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private File mTempFile = null; private File mTempFile = null;
private File mTempSlideShowFile = null; private File mTempSlideShowFile = null;
private String newDocumentType = null; private String newDocumentType = null;
public boolean firstStart = true;
BottomSheetBehavior bottomToolbarSheetBehavior; BottomSheetBehavior bottomToolbarSheetBehavior;
BottomSheetBehavior toolbarColorPickerBottomSheetBehavior; BottomSheetBehavior toolbarColorPickerBottomSheetBehavior;
...@@ -460,7 +461,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin ...@@ -460,7 +461,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
if (isNewDocument) { if (isNewDocument) {
saveAs(); saveAs();
} else { } else {
saveDocument(); mTileProvider.saveDocument();
} }
isDocumentChanged=false; isDocumentChanged=false;
onBackPressed(); onBackPressed();
...@@ -961,6 +962,14 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin ...@@ -961,6 +962,14 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
mFormattingController.handleActivityResult(requestCode, resultCode, data); mFormattingController.handleActivityResult(requestCode, resultCode, data);
hideBottomToolbar(); hideBottomToolbar();
} }
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//save document to cache
mTileProvider.cacheDocument();
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -165,7 +165,7 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener { ...@@ -165,7 +165,7 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
if (mContext.isNewDocument) { if (mContext.isNewDocument) {
mContext.saveAs(); mContext.saveAs();
} else { } else {
mContext.saveDocument(); mContext.getTileProvider().saveDocument();
} }
return true; return true;
case R.id.action_parts: case R.id.action_parts:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment