From 7f4cc0d8142245b20d29aae7a8bf1adc159e940c Mon Sep 17 00:00:00 2001 From: Erik Johansson Date: Wed, 28 Feb 2018 20:14:39 +0100 Subject: [PATCH] Release old persistable permission when new export is done --- .../health/openscale/gui/MainActivity.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index b6981b26..f92559bf 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -603,6 +603,8 @@ public class MainActivity extends AppCompatActivity try { String exportUri = prefs.getString(getExportPreferenceKey(selectedScaleUser), ""); uri = Uri.parse(exportUri); + + // Verify that the file still exists and that we have write permission getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION); openScale.getFilenameFromUri(uri); } @@ -684,16 +686,33 @@ public class MainActivity extends AppCompatActivity break; case EXPORT_DATA_REQUEST: if (doExportData(data.getData())) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences.Editor editor = prefs.edit(); + + String key = getExportPreferenceKey(openScale.getSelectedScaleUser()); + + // Remove any old persistable permission and export uri try { - getContentResolver().takePersistableUriPermission( - data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - String key = getExportPreferenceKey(openScale.getSelectedScaleUser()); - PreferenceManager.getDefaultSharedPreferences(this).edit() - .putString(key, data.getData().toString()).apply(); + getContentResolver().releasePersistableUriPermission( + Uri.parse(prefs.getString(key, "")), + Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + editor.remove(key); } catch (Exception ex) { // Ignore } + + // Take persistable permission and save export uri + try { + getContentResolver().takePersistableUriPermission( + data.getData(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + editor.putString(key, data.getData().toString()); + } + catch (Exception ex) { + // Ignore + } + + editor.apply(); } break; }