Эх сурвалжийг харах

PermissionUtil: remember permission requested when requesting media storage permissions

For devices under SDK 30, permission was asked on every startup, which is not desired, and is different from the
behaviour above SDK 30. This fixes that.

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 жил өмнө
parent
commit
38a5283f98

+ 27 - 17
app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt

@@ -131,6 +131,7 @@ object PermissionUtil {
                         requestStoragePermission(
                         requestStoragePermission(
                             activity,
                             activity,
                             Manifest.permission.READ_EXTERNAL_STORAGE,
                             Manifest.permission.READ_EXTERNAL_STORAGE,
+                            permissionRequired,
                             viewThemeUtils
                             viewThemeUtils
                         )
                         )
                     }
                     }
@@ -138,6 +139,7 @@ object PermissionUtil {
                 else -> requestStoragePermission(
                 else -> requestStoragePermission(
                     activity,
                     activity,
                     Manifest.permission.WRITE_EXTERNAL_STORAGE,
                     Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                    permissionRequired,
                     viewThemeUtils
                     viewThemeUtils
                 )
                 )
             }
             }
@@ -151,33 +153,40 @@ object PermissionUtil {
     private fun requestStoragePermission(
     private fun requestStoragePermission(
         activity: Activity,
         activity: Activity,
         permission: String,
         permission: String,
+        permissionRequired: Boolean,
         viewThemeUtils: ViewThemeUtils
         viewThemeUtils: ViewThemeUtils
     ) {
     ) {
+        val preferences: AppPreferences = AppPreferencesImpl.fromContext(activity)
+        val shouldRequestPermission = !preferences.isStoragePermissionRequested || permissionRequired
+
         fun doRequest() {
         fun doRequest() {
             ActivityCompat.requestPermissions(
             ActivityCompat.requestPermissions(
                 activity,
                 activity,
                 arrayOf(permission),
                 arrayOf(permission),
                 PERMISSIONS_EXTERNAL_STORAGE
                 PERMISSIONS_EXTERNAL_STORAGE
             )
             )
+            preferences.isStoragePermissionRequested = true
         }
         }
 
 
-        // Check if we should show an explanation
-        if (shouldShowRequestPermissionRationale(activity, permission)) {
-            // Show explanation to the user and then request permission
-            Snackbar
-                .make(
-                    activity.findViewById(android.R.id.content),
-                    R.string.permission_storage_access,
-                    Snackbar.LENGTH_INDEFINITE
-                )
-                .setAction(R.string.common_ok) {
-                    doRequest()
-                }
-                .also { viewThemeUtils.material.themeSnackbar(it) }
-                .show()
-        } else {
-            // No explanation needed, request the permission.
-            doRequest()
+        if (shouldRequestPermission) {
+            // Check if we should show an explanation
+            if (shouldShowRequestPermissionRationale(activity, permission)) {
+                // Show explanation to the user and then request permission
+                Snackbar
+                    .make(
+                        activity.findViewById(android.R.id.content),
+                        R.string.permission_storage_access,
+                        Snackbar.LENGTH_INDEFINITE
+                    )
+                    .setAction(R.string.common_ok) {
+                        doRequest()
+                    }
+                    .also { viewThemeUtils.material.themeSnackbar(it) }
+                    .show()
+            } else {
+                // No explanation needed, request the permission.
+                doRequest()
+            }
         }
         }
     }
     }
 
 
@@ -228,6 +237,7 @@ object PermissionUtil {
                             requestStoragePermission(
                             requestStoragePermission(
                                 activity,
                                 activity,
                                 Manifest.permission.READ_EXTERNAL_STORAGE,
                                 Manifest.permission.READ_EXTERNAL_STORAGE,
+                                permissionRequired,
                                 viewThemeUtils
                                 viewThemeUtils
                             )
                             )
                         }
                         }