diff options
4 files changed, 32 insertions, 76 deletions
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java index 1812ad253744..066c05dc9662 100644 --- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -169,24 +169,12 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin mDocumentOverlay = new DocumentOverlay(this, layerView); mbISReadOnlyMode = !isExperimentalMode(); - boolean isNewDocument = false; mDocumentUri = getIntent().getData(); if (mDocumentUri != null) { if (mDocumentUri.getScheme().equals(ContentResolver.SCHEME_CONTENT) || mDocumentUri.getScheme().equals(ContentResolver.SCHEME_ANDROID_RESOURCE)) { - final boolean isReadOnlyDoc; - if (getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY) != null) { - // New document type string is not null, meaning we want to open a new document - String newDocumentType = getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY); - // create a temporary local file, will be copied to the actual URI when saving - loadNewDocument(newDocumentType); - isNewDocument = true; - isReadOnlyDoc = false; - } else { - isReadOnlyDoc = (getIntent().getFlags() & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) == 0; - } - + final boolean isReadOnlyDoc = (getIntent().getFlags() & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) == 0; mbISReadOnlyMode = !isExperimentalMode() || isReadOnlyDoc; Log.d(LOGTAG, "SCHEME_CONTENT: getPath(): " + mDocumentUri.getPath()); @@ -198,12 +186,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin Log.d(LOGTAG, "SCHEME_FILE: getPath(): " + mDocumentUri.getPath()); toolbarTop.setTitle(mDocumentUri.getLastPathSegment()); } - } else { - Log.e(LOGTAG, "No document specified. This should never happen."); - return; - } - - if (!isNewDocument) { // create a temporary local copy to work with boolean copyOK = copyFileToTemp() && mTempFile != null; if (!copyOK) { @@ -212,6 +194,15 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin return; } LOKitShell.sendLoadEvent(mTempFile.getPath()); + } else if (getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY) != null) { + // New document type string is not null, meaning we want to open a new document + String newDocumentType = getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY); + // create a temporary local file, will be copied to the actual URI when saving + loadNewDocument(newDocumentType); + toolbarTop.setTitle(getString(R.string.default_document_name)); + } else { + Log.e(LOGTAG, "No document specified. This should never happen."); + return; } mDrawerLayout = findViewById(R.id.drawer_layout); @@ -339,6 +330,8 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin String displayName = FileUtilities.retrieveDisplayNameForDocumentUri(getContentResolver(), mDocumentUri); toolbarTop.setTitle(displayName); + // make sure that "Save" menu item is enabled + getToolbarController().setupToolbars(); } public void exportToPDF() { @@ -880,6 +873,10 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin return mbISReadOnlyMode; } + public boolean hasLocationForSave() { + return mDocumentUri != null; + } + public static void setDocumentChanged (boolean changed) { isDocumentChanged = changed; } diff --git a/android/source/src/java/org/libreoffice/ToolbarController.java b/android/source/src/java/org/libreoffice/ToolbarController.java index 1384339f8c30..d4985aee180e 100644 --- a/android/source/src/java/org/libreoffice/ToolbarController.java +++ b/android/source/src/java/org/libreoffice/ToolbarController.java @@ -45,12 +45,12 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener { clipboardManager = (ClipboardManager)mContext.getSystemService(Context.CLIPBOARD_SERVICE); } - public void disableMenuItem(final int menuItemId, final boolean disabled) { + private void enableMenuItem(final int menuItemId, final boolean enabled) { LOKitShell.getMainHandler().post(new Runnable() { public void run() { MenuItem menuItem = mMainMenu.findItem(menuItemId); if (menuItem != null) { - menuItem.setEnabled(!disabled); + menuItem.setEnabled(enabled); } else { Log.e(LOGTAG, "MenuItem not found."); } @@ -245,11 +245,14 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener { } void setupToolbars() { - // show message in case experimental mode is enabled (i.e. editing is supported in general), - // but current document is readonly - if (LibreOfficeMainActivity.isExperimentalMode() && LibreOfficeMainActivity.isReadOnlyMode()) { - disableMenuItem(R.id.action_save, true); - Toast.makeText(mContext, mContext.getString(R.string.temp_file_saving_disabled), Toast.LENGTH_LONG).show(); + if (LibreOfficeMainActivity.isExperimentalMode()) { + boolean enableSaveEntry = !LibreOfficeMainActivity.isReadOnlyMode() && mContext.hasLocationForSave(); + enableMenuItem(R.id.action_save, enableSaveEntry); + if (LibreOfficeMainActivity.isReadOnlyMode()) { + // show message in case experimental mode is enabled (i.e. editing is supported in general), + // but current document is readonly + Toast.makeText(mContext, mContext.getString(R.string.temp_file_saving_disabled), Toast.LENGTH_LONG).show(); + } } mMainMenu.findItem(R.id.action_parts).setVisible(mContext.isDrawerEnabled()); } diff --git a/android/source/src/java/org/libreoffice/ui/FileUtilities.java b/android/source/src/java/org/libreoffice/ui/FileUtilities.java index 660fbc0e4528..0d51dd55e1e5 100644 --- a/android/source/src/java/org/libreoffice/ui/FileUtilities.java +++ b/android/source/src/java/org/libreoffice/ui/FileUtilities.java @@ -33,11 +33,6 @@ public class FileUtilities { static final int UNKNOWN = 10; - public static final String DEFAULT_WRITER_EXTENSION = ".odt"; - public static final String DEFAULT_IMPRESS_EXTENSION = ".odp"; - public static final String DEFAULT_SPREADSHEET_EXTENSION = ".ods"; - public static final String DEFAULT_DRAWING_EXTENSION = ".odg"; - public static final String MIMETYPE_OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text"; public static final String MIMETYPE_OPENDOCUMENT_SPREADSHEET = "application/vnd.oasis.opendocument.spreadsheet"; public static final String MIMETYPE_OPENDOCUMENT_PRESENTATION = "application/vnd.oasis.opendocument.presentation"; diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java index 9f1cd7a9089d..110123f54acf 100644 --- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java +++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java @@ -23,7 +23,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; @@ -66,9 +65,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings INVALID } - private String LOGTAG = LibreOfficeUIActivity.class.getSimpleName(); - - private DocumentType newDocType = DocumentType.INVALID; + private static final String LOGTAG = LibreOfficeUIActivity.class.getSimpleName(); public static final String EXPLORER_PREFS_KEY = "EXPLORER_PREFS"; private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENT_URIS"; @@ -123,7 +120,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings }; private static final int REQUEST_CODE_OPEN_FILECHOOSER = 12345; - private static final int REQUEST_CODE_CREATE_NEW_DOCUMENT = 12346; private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0; @@ -257,10 +253,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings if (requestCode == REQUEST_CODE_OPEN_FILECHOOSER && resultCode == RESULT_OK) { final Uri fileUri = data.getData(); openDocument(fileUri); - } else if (requestCode == REQUEST_CODE_CREATE_NEW_DOCUMENT && resultCode == RESULT_OK) { - // "forward" to LibreOfficeMainActivity to create + open the file - final Uri fileUri = data.getData(); - loadNewDocument(newDocType, fileUri); } } @@ -295,33 +287,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings startActivity(intent); } - private void createNewFileDialog() { - final String extension; - if (newDocType == DocumentType.WRITER) { - extension = FileUtilities.DEFAULT_WRITER_EXTENSION; - } else if (newDocType == DocumentType.CALC) { - extension = FileUtilities.DEFAULT_SPREADSHEET_EXTENSION; - } else if (newDocType == DocumentType.IMPRESS) { - extension = FileUtilities.DEFAULT_IMPRESS_EXTENSION; - } else if (newDocType == DocumentType.DRAW) { - extension = FileUtilities.DEFAULT_DRAWING_EXTENSION; - } else { - Log.e(LOGTAG, "Invalid document type passed."); - return; - } - - String defaultFileName = getString(R.string.default_document_name) + extension; - String mimeType = FileUtilities.getMimeType(defaultFileName); - - Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType(mimeType); - intent.putExtra(Intent.EXTRA_TITLE, defaultFileName); - - startActivityForResult(intent, REQUEST_CODE_CREATE_NEW_DOCUMENT); - } - - private void loadNewDocument(DocumentType docType, Uri newFileUri) { + private void loadNewDocument(DocumentType docType) { final String newDocumentType; if (docType == DocumentType.WRITER) { newDocumentType = NEW_WRITER_STRING_KEY; @@ -338,7 +304,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings Intent intent = new Intent(LibreOfficeUIActivity.this, LibreOfficeMainActivity.class); intent.putExtra(NEW_DOC_TYPE_KEY, newDocumentType); - intent.setData(newFileUri); startActivity(intent); } @@ -493,20 +458,16 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings showSystemFilePickerAndOpenFile(); break; case R.id.newWriterFAB: - newDocType = DocumentType.WRITER; - createNewFileDialog(); + loadNewDocument(DocumentType.WRITER); break; case R.id.newImpressFAB: - newDocType = DocumentType.IMPRESS; - createNewFileDialog(); + loadNewDocument(DocumentType.IMPRESS); break; case R.id.newCalcFAB: - newDocType = DocumentType.CALC; - createNewFileDialog(); + loadNewDocument(DocumentType.CALC); break; case R.id.newDrawFAB: - newDocType = DocumentType.DRAW; - createNewFileDialog(); + loadNewDocument(DocumentType.DRAW); break; } } |