From b9f4c7de8ee8adabe4181023dbd55803cb41284d Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Mon, 12 Feb 2018 23:13:18 +0100 Subject: [PATCH] Use a file provider to implement sharing --- android_app/app/src/main/AndroidManifest.xml | 10 ++++++ .../gui/fragments/TableFragment.java | 31 +++++++++---------- .../app/src/main/res/values/strings.xml | 1 + .../src/main/res/xml/file_provider_paths.xml | 4 +++ 4 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 android_app/app/src/main/res/xml/file_provider_paths.xml diff --git a/android_app/app/src/main/AndroidManifest.xml b/android_app/app/src/main/AndroidManifest.xml index 2688f0e8..28ba58a6 100644 --- a/android_app/app/src/main/AndroidManifest.xml +++ b/android_app/app/src/main/AndroidManifest.xml @@ -34,6 +34,16 @@ + + + + diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 455b40be..ee8c45f7 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -29,6 +29,7 @@ import android.os.Environment; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; +import android.support.v4.content.FileProvider; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.view.Gravity; @@ -49,6 +50,7 @@ import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; +import com.health.openscale.BuildConfig; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleMeasurement; @@ -169,9 +171,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } return true; case R.id.shareData: - if (PermissionHelper.requestWritePermission(getActivity())) { - shareTable(); - } + shareTable(); return true; default: return false; @@ -368,26 +368,25 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private void shareTable() { final ScaleUser selectedScaleUser = OpenScale.getInstance(getContext()).getSelectedScaleUser(); - String exportFilename = prefs.getString("exportFilename" + selectedScaleUser.getId(), "openScale_data_" + selectedScaleUser.getUserName() + ".csv"); - String fullPath = Environment.getExternalStorageDirectory().getPath() + "/tmp/" + exportFilename; - - if (!OpenScale.getInstance(getContext()).exportData(fullPath)) { + File shareFile = new File(getContext().getCacheDir(), + String.format("openScale %s.csv", selectedScaleUser.getUserName())); + if (!OpenScale.getInstance(getContext()).exportData(shareFile.getPath())) { return; } - Intent intentShareFile = new Intent(Intent.ACTION_SEND); - File shareFile = new File(fullPath); + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setType("text/csv"); - if(shareFile.exists()) { - intentShareFile.setType("text/comma-separated-values"); - intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+fullPath)); + final Uri uri = FileProvider.getUriForFile( + getContext(), BuildConfig.APPLICATION_ID + ".fileprovider", shareFile); + intent.putExtra(Intent.EXTRA_STREAM, uri); - intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "openScale export csv file"); - intentShareFile.putExtra(Intent.EXTRA_TEXT, exportFilename); + intent.putExtra(Intent.EXTRA_SUBJECT, + getResources().getString(R.string.label_share_subject, selectedScaleUser.getUserName())); - startActivity(Intent.createChooser(intentShareFile, getResources().getString(R.string.label_share))); - } + startActivity(Intent.createChooser(intent, getResources().getString(R.string.label_share))); } @Override diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 3b26ccb7..4b2e84b1 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -25,6 +25,7 @@ Delete Add user Share + openScale CSV data export (%s) Id Weight diff --git a/android_app/app/src/main/res/xml/file_provider_paths.xml b/android_app/app/src/main/res/xml/file_provider_paths.xml new file mode 100644 index 00000000..b7974d83 --- /dev/null +++ b/android_app/app/src/main/res/xml/file_provider_paths.xml @@ -0,0 +1,4 @@ + + + +