From f57e2a32b9dd72c970094eef46b7459a0c6ff7ba Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 26 Mar 2022 10:34:37 +0900 Subject: [PATCH] safer uri permission persistence --- .../deckers/thibault/aves/MainActivity.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt index 67a32443b..13f1d7800 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt @@ -164,11 +164,18 @@ class MainActivity : FlutterActivity() { } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - // save access permissions across reboots - val takeFlags = (data.flags - and (Intent.FLAG_GRANT_READ_URI_PERMISSION - or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) - contentResolver.takePersistableUriPermission(treeUri, takeFlags) + val canPersist = (data.flags and Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0 + if (canPersist) { + // save access permissions across reboots + val takeFlags = (data.flags + and (Intent.FLAG_GRANT_READ_URI_PERMISSION + or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) + try { + contentResolver.takePersistableUriPermission(treeUri, takeFlags) + } catch (e: SecurityException) { + Log.w(LOG_TAG, "failed to take persistable URI permission for uri=$treeUri", e) + } + } } // resume pending action