diff options
author | Jan Holesovsky <kendy@collabora.com> | 2019-12-13 15:47:37 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2019-12-13 15:50:54 +0100 |
commit | 6e8ebc5f87e62a391cfca0429c6c4bea7f6ccbfb (patch) | |
tree | f1f8ff8f54d6467825156544f5099dccea425207 | |
parent | be3a03436730f1ea7c0d9c74135b3b611f5838c5 (diff) |
tdf#129192: Implement sharing from the shell.
The old code cannot work on newer Android.
Partially based on work by Kaishu Sahu, thank you!
Change-Id: I15e3f583572285642bc47595c21f4469f5a544a1
Reviewed-on: https://gerrit.libreoffice.org/85121
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Tested-by: Jan Holesovsky <kendy@collabora.com>
-rw-r--r-- | android/app/build.gradle | 1 | ||||
-rw-r--r-- | android/app/src/main/AndroidManifest.xml | 10 | ||||
-rw-r--r-- | android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java | 18 | ||||
-rw-r--r-- | android/app/src/main/res/values/strings.xml | 2 | ||||
-rw-r--r-- | android/app/src/main/res/xml/provider_paths.xml | 5 |
5 files changed, 27 insertions, 9 deletions
diff --git a/android/app/build.gradle b/android/app/build.gradle index 158ea2ddf..2a8c7e2e1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -58,6 +58,7 @@ repositories { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.core:core:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'com.google.android.material:material:1.1.0-alpha04' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index fb584befd..8a501c8a0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -126,6 +126,16 @@ android:name=".SettingsActivity" android:label="@string/app_name_settings" android:theme="@style/Theme.AppCompat.Light" /> + + <provider + android:name="androidx.core.content.FileProvider" + android:authorities="${applicationId}.fileprovider" + android:exported="false" + android:grantUriPermissions="true"> + <meta-data + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/provider_paths"/> + </provider> </application> </manifest> diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java index 167ae17c1..60273b622 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java @@ -92,6 +92,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; import androidx.core.view.ViewCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -730,7 +731,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings } private void share(int position) { - new AsyncTask<IFile, Void, File>() { @Override protected File doInBackground(IFile... document) { @@ -755,14 +755,14 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings @Override protected void onPostExecute(File file) { if (file != null) { - Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); - Uri uri = Uri.fromFile(file); - sharingIntent.setType(FileUtilities.getMimeType(file.getName())); - sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, uri); - sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, - file.getName()); - startActivity(Intent.createChooser(sharingIntent, - getString(R.string.share_via))); + Intent intentShareFile = new Intent(Intent.ACTION_SEND); + Uri finalDocUri = FileProvider.getUriForFile(LibreOfficeUIActivity.this, + LibreOfficeUIActivity.this.getApplicationContext().getPackageName() + ".fileprovider", + file); + intentShareFile.putExtra(Intent.EXTRA_STREAM, finalDocUri); + intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intentShareFile.setDataAndType(finalDocUri, LibreOfficeUIActivity.this.getContentResolver().getType(finalDocUri)); + LibreOfficeUIActivity.this.startActivity(Intent.createChooser(intentShareFile, LibreOfficeUIActivity.this.getString(R.string.share_document))); } } }.execute(filePaths.get(position)); diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 033ae98c2..12f65fc11 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -125,6 +125,8 @@ <!-- Loading SlideShow Dialog Strings --> <string name="loading">Loading...</string> + <string name="share_document">Share Document</string> + <!-- Presentation Mode Strings --> <!-- Calc Header Menu Strings --> diff --git a/android/app/src/main/res/xml/provider_paths.xml b/android/app/src/main/res/xml/provider_paths.xml new file mode 100644 index 000000000..7ac8d00a0 --- /dev/null +++ b/android/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<paths xmlns:android="http://schemas.android.com/apk/res/android"> + <cache-path name="cache_dir" path="/"/> + <external-path name="external_dir" path="/" /> +</paths> |