summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorbrainbreaker <gautamprajapati06@gmail.com>2017-04-06 15:00:33 +0530
committerTomaž Vajngerl <quikee@gmail.com>2017-04-18 14:14:14 +0200
commitd70636a3145c72fe7f34c0a73f3784f99dc329ee (patch)
treefa7b1515c1baaf6f71b33dea98d1f2b6d569e7c2 /android
parent78bc5053a15ef218cce394b0d0e012f1700f760a (diff)
Discard StorageAccessFramework for creating new documents
This commit adds the ability to create a new document using existing file system browsing in the app. Usage of StorageAccessFramework to create new document has been ditched as it is not backward compatible. Change-Id: I852c3de337613cb01e689d532476d2c5f932c1b3 Reviewed-on: https://gerrit.libreoffice.org/36195 Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'android')
-rw-r--r--android/source/res/values/strings.xml16
-rw-r--r--android/source/src/java/org/libreoffice/LOKitTileProvider.java4
-rwxr-xr-xandroid/source/src/java/org/libreoffice/LibreOfficeMainActivity.java125
-rw-r--r--android/source/src/java/org/libreoffice/ui/FileUtilities.java5
-rw-r--r--android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java49
5 files changed, 97 insertions, 102 deletions
diff --git a/android/source/res/values/strings.xml b/android/source/res/values/strings.xml
index a554c84b4aef..4495ca584927 100644
--- a/android/source/res/values/strings.xml
+++ b/android/source/res/values/strings.xml
@@ -16,9 +16,11 @@
<string name="about_moreinfo">More Info</string>
<string name="back_again_to_quit">Press back again to quit</string>
+ <string name="new_write">New Write</string>
<string name="new_impress">New Impress</string>
<string name="new_spreadsheet">New Sheet</string>
<string name="new_draw">New Draw</string>
+ <string name="default_document_name">untitled</string>
<string name="browser_app_name">LibreOffice Browser</string>
<string name="menu_search">Search</string>
@@ -94,7 +96,8 @@
<string name="message_saved">Save complete</string>
<string name="message_saving">Saving the document…</string>
<string name="message_save_incomplete">Save incomplete. Were there any changes?</string>
- <string name="new_file_created">File created in Documents folder</string>
+ <string name="create_new_file_success">"Created new file - "</string>
+ <string name="create_new_file_error">Unable to create new file, please check entered file name.</string>
<!-- Document provider settings -->
<string name="storage_provider_settings">Storage provider settings</string>
@@ -118,15 +121,14 @@
<string name="directory_browser_label">Choose Directory</string>
<string name="bad_directory">Invalid directory path</string>
- <!-- Closing alert dialog strings -->
+ <!-- Save Alert dialog strings -->
<string name="save_alert_dialog_title">Save the document before closing?</string>
<string name="save_document">SAVE</string>
- <string name="cancel_save_document">CANCEL</string>
+ <string name="action_cancel">Cancel</string>
<string name="no_save_document">NO</string>
- <string name="new_write">New Write</string>
-
- <string name="save_as_success">Saved file -</string>
- <string name="save_as_error">Unable to create new file, please check entered file name.</string>
+ <!-- Create New Document Dialog Strings -->
+ <string name="create_new_document_title">Enter file name</string>
+ <string name="action_create">CREATE</string>
</resources>
diff --git a/android/source/src/java/org/libreoffice/LOKitTileProvider.java b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
index 1996a1b5bedd..29def6e97794 100644
--- a/android/source/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
@@ -142,7 +142,7 @@ class LOKitTileProvider implements TileProvider {
@Override
public void run() {
// There was some error
- mContext.showSaveStatusToast(true);
+ mContext.showSaveStatusMessage(true);
}
});
}
@@ -150,7 +150,7 @@ class LOKitTileProvider implements TileProvider {
@Override
public void run() {
// There was no error
- mContext.showSaveStatusToast(false);
+ mContext.showSaveStatusMessage(false);
}
});
}
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
index 3e41a7dda98f..267fce39315e 100755
--- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -10,12 +10,11 @@ import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.RectF;
-import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.Environment;
import android.os.Handler;
import android.preference.PreferenceManager;
+import android.support.design.widget.Snackbar;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
@@ -76,16 +75,12 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
private DocumentPartViewListAdapter mDocumentPartViewListAdapter;
private int partIndex=-1;
private File mInputFile;
- private String newFileName = "untitled";
- private String newFilePath = "/storage/emulated/0/Documents/";
private DocumentOverlay mDocumentOverlay;
private File mTempFile = null;
- private String newDocumentType = null;
private FormattingController mFormattingController;
private ToolbarController mToolbarController;
private FontController mFontController;
private SearchController mSearchController;
- private static final int PICKFOLDER_RESULT_CODE = 1;
public GeckoLayerClient getLayerClient() {
return mLayerClient;
@@ -134,20 +129,35 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
mFontController = new FontController(this);
mSearchController = new SearchController(this);
- // New document type string is not null, it means we want to open a new document
+ loKitThread = new LOKitThread(this);
+ loKitThread.start();
+
+ mLayerClient = new GeckoLayerClient(this);
+ LayerView layerView = (LayerView) findViewById(R.id.layer_view);
+ mLayerClient.setView(layerView);
+ layerView.setInputConnectionHandler(new LOKitInputConnectionHandler());
+ mLayerClient.notifyReady();
+
+ layerView.setOnKeyListener(new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View view, int i, KeyEvent keyEvent) {
+ if(keyEvent.getKeyCode() != KeyEvent.KEYCODE_BACK){
+ isDocumentChanged=true;
+ }
+ return false;
+ }
+ });
+
+ // create TextCursorLayer
+ mDocumentOverlay = new DocumentOverlay(this, layerView);
+
+ // New document type string is not null, meaning we want to open a new document
if (getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY) != null) {
- newDocumentType = getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY);
- if (newDocumentType.matches(LibreOfficeUIActivity.NEW_WRITER_STRING_KEY))
- newFileName = newFileName + ".odt";
- else if (newDocumentType.matches(LibreOfficeUIActivity.NEW_IMPRESS_STRING_KEY))
- newFileName = newFileName + ".odp";
- else if (newDocumentType.matches(LibreOfficeUIActivity.NEW_CALC_STRING_KEY))
- newFileName = newFileName + ".ods";
- else
- newFileName = newFileName + ".odg";
- // We want to create a new Document, create an alert dialogue to name the new file.
- openSelectPathIntent();
- isNewDocument = true;
+ String newDocumentType = getIntent().getStringExtra(LibreOfficeUIActivity.NEW_DOC_TYPE_KEY);
+ String newFilePath = getIntent().getStringExtra(LibreOfficeUIActivity.NEW_FILE_PATH_KEY);
+
+ // Load the new document
+ loadNewDocument(newFilePath, newDocumentType);
}
if (getIntent().getData() != null) {
@@ -170,10 +180,10 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
documentUri = (URI) getIntent().getSerializableExtra(
"org.libreoffice.document_uri");
}
- } else if (isNewDocument){
- toolbarTop.setTitle(newFileName);
} else {
- mInputFile = new File(DEFAULT_DOC_PATH);
+ if (!isNewDocument) {
+ mInputFile = new File(DEFAULT_DOC_PATH);
+ }
}
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@@ -186,28 +196,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
mDrawerList.setOnItemClickListener(new DocumentPartClickListener());
}
- loKitThread = new LOKitThread(this);
- loKitThread.start();
-
- mLayerClient = new GeckoLayerClient(this);
- LayerView layerView = (LayerView) findViewById(R.id.layer_view);
- mLayerClient.setView(layerView);
- layerView.setInputConnectionHandler(new LOKitInputConnectionHandler());
- mLayerClient.notifyReady();
-
- layerView.setOnKeyListener(new View.OnKeyListener() {
- @Override
- public boolean onKey(View view, int i, KeyEvent keyEvent) {
- if(keyEvent.getKeyCode() != KeyEvent.KEYCODE_BACK){
- isDocumentChanged=true;
- }
- return false;
- }
- });
-
- // create TextCursorLayer
- mDocumentOverlay = new DocumentOverlay(this, layerView);
-
mToolbarController.setupToolbars();
TabHost host = (TabHost) findViewById(R.id.toolbarTabHost);
@@ -229,40 +217,12 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
host.addTab(spec);
}
- private void openSelectPathIntent() {
- Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)
- .addCategory(Intent.CATEGORY_OPENABLE)
- .setType("*/*")
- .putExtra(Intent.EXTRA_TITLE, newFileName);
- startActivityForResult(intent, PICKFOLDER_RESULT_CODE);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch(requestCode){
- case PICKFOLDER_RESULT_CODE:
- if(resultCode==RESULT_OK){
- Uri fileURI = data.getData();
- newFilePath = fileURI.getPath();
- if (newFilePath.contains("primary")) {
- /* When file is being saved in primary storage folder other than Documents home.
- * newFilePath content is similar to this - /document/primary:Downloads/untitled1.odt */
- newFilePath = Environment.getExternalStorageDirectory().getPath() + "/" + newFilePath.split(":")[1];
- } else if (newFilePath.contains("home")) {
- /* When file is being saved in documents folder itself i.e. Document home.
- * newFilePath content is similar to this - /document/home:untitled1.odt */
- newFilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/" + newFilePath.split(":")[1];
- } else {
- newFilePath = Environment.getExternalStorageDirectory().getPath() + "/";
- }
- Log.d("newFilePath", newFilePath);
- }
- // Now set the input file variable to new file created
- mInputFile = new File(newFilePath);
- // and load the new document
- LOKitShell.sendNewDocumentLoadEvent(newFilePath, newDocumentType);
- break;
- }
+ // Loads a new Document
+ private void loadNewDocument(String newFilePath, String newDocumentType) {
+ mInputFile = new File(newFilePath);
+ LOKitShell.sendNewDocumentLoadEvent(newFilePath, newDocumentType);
+ isNewDocument = true;
+ toolbarTop.setTitle(mInputFile.getName());
}
public RectF getCurrentCursorPosition() {
@@ -475,7 +435,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.save_alert_dialog_title)
.setPositiveButton(R.string.save_document, dialogClickListener)
- .setNegativeButton(R.string.cancel_save_document, dialogClickListener)
+ .setNegativeButton(R.string.action_cancel, dialogClickListener)
.setNeutralButton(R.string.no_save_document, dialogClickListener)
.show();
@@ -770,12 +730,11 @@ public class LibreOfficeMainActivity extends AppCompatActivity {
}
// This method is used in LOKitTileProvider.java to show status of new file creation.
- public void showSaveStatusToast(boolean error) {
+ public void showSaveStatusMessage(boolean error) {
if (!error)
- Toast.makeText(this, getString(R.string.save_as_success) + newFilePath, Toast.LENGTH_SHORT).show();
+ Snackbar.make(mDrawerLayout, getString(R.string.create_new_file_success) + mInputFile.getName(), Snackbar.LENGTH_LONG).show();
else
- Toast.makeText(this, R.string.save_as_error, Toast.LENGTH_SHORT).show();
- }
+ Snackbar.make(mDrawerLayout, getString(R.string.create_new_file_error) + mInputFile.getName(), Snackbar.LENGTH_LONG).show(); }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/source/src/java/org/libreoffice/ui/FileUtilities.java b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
index c98a505dff91..422b1e9971cd 100644
--- a/android/source/src/java/org/libreoffice/ui/FileUtilities.java
+++ b/android/source/src/java/org/libreoffice/ui/FileUtilities.java
@@ -46,6 +46,11 @@ public class FileUtilities {
/** Smallest Files First */
static final int SORT_SMALLEST = 5;
+ 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";
+
private static final Map<String, Integer> mExtnMap = new HashMap<String, Integer>();
private static final Map<String, String> extensionToMimeTypeMap = new HashMap<String, String>();
static {
diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
index 06d6daba90e3..5b20c7d98fef 100644
--- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -10,9 +10,11 @@
package org.libreoffice.ui;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
@@ -23,7 +25,6 @@ import android.hardware.usb.UsbManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.Environment;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
@@ -39,6 +40,7 @@ import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
+import android.text.InputType;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@@ -53,6 +55,7 @@ import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.OvershootInterpolator;
+import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -67,12 +70,10 @@ import org.libreoffice.storage.DocumentProviderFactory;
import org.libreoffice.storage.DocumentProviderSettingsActivity;
import org.libreoffice.storage.IDocumentProvider;
import org.libreoffice.storage.IFile;
-import org.libreoffice.storage.local.LocalFile;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
-import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
@@ -107,6 +108,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
public static final String SORT_MODE_KEY = "SORT_MODE";
private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS";
+ public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY";
public static final String NEW_DOC_TYPE_KEY = "NEW_DOC_TYPE_KEY";
public static final String NEW_WRITER_STRING_KEY = "private:factory/swriter";
public static final String NEW_IMPRESS_STRING_KEY = "private:factory/simpress";
@@ -547,10 +549,37 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
}.execute(document);
}
- // For opening a new Document
- private void open(String newDocumentType) {
- Intent intent = new Intent(this, LibreOfficeMainActivity.class);
+ // Opens an Input dialog to get the name of new file
+ private void createNewFileInputDialog(final String defaultFileName, final String newDocumentType) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.create_new_document_title);
+ final EditText input = new EditText(this);
+ input.setInputType(InputType.TYPE_CLASS_TEXT);
+ input.setText(defaultFileName);
+ builder.setView(input);
+
+ builder.setPositiveButton(R.string.action_create, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final String newFilePath = currentDirectory.getUri().getPath() + input.getText().toString();
+ loadNewDocument(newDocumentType, newFilePath);
+ }
+ });
+
+ builder.setNegativeButton(R.string.action_cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ });
+
+ builder.show();
+ }
+
+ private void loadNewDocument(String newDocumentType, String newFilePath) {
+ Intent intent = new Intent(LibreOfficeUIActivity.this, LibreOfficeMainActivity.class);
intent.putExtra(NEW_DOC_TYPE_KEY, newDocumentType);
+ intent.putExtra(NEW_FILE_PATH_KEY, newFilePath);
startActivity(intent);
}
@@ -990,16 +1019,16 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
}
break;
case R.id.newWriterFAB:
- open(NEW_WRITER_STRING_KEY);
+ createNewFileInputDialog(getString(R.string.default_document_name) + FileUtilities.DEFAULT_WRITER_EXTENSION, NEW_WRITER_STRING_KEY);
break;
case R.id.newImpressFAB:
- open(NEW_IMPRESS_STRING_KEY);
+ createNewFileInputDialog(getString(R.string.default_document_name) + FileUtilities.DEFAULT_IMPRESS_EXTENSION, NEW_IMPRESS_STRING_KEY);
break;
case R.id.newCalcFAB:
- open(NEW_CALC_STRING_KEY);
+ createNewFileInputDialog(getString(R.string.default_document_name) + FileUtilities.DEFAULT_SPREADSHEET_EXTENSION, NEW_CALC_STRING_KEY);
break;
case R.id.newDrawFAB:
- open(NEW_DRAW_STRING_KEY);
+ createNewFileInputDialog(getString(R.string.default_document_name) + FileUtilities.DEFAULT_DRAWING_EXTENSION, NEW_DRAW_STRING_KEY);
break;
}
}