[Android] Display the app settings when runtime permission previously denied
Nicolas Pomepuy
git at videolan.org
Fri Dec 20 09:59:07 UTC 2024
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Dec 20 10:24:44 2024 +0100| [5821fab251c06b78241037788f1a3fc86aa8d985] | committer: Nicolas Pomepuy
Display the app settings when runtime permission previously denied
> https://code.videolan.org/videolan/vlc-android/commit/5821fab251c06b78241037788f1a3fc86aa8d985
---
.../src/org/videolan/vlc/gui/BaseActivity.kt | 15 +++++++++++++++
.../videolan/vlc/gui/dialogs/PermissionListDialog.kt | 20 +++++++++++++-------
.../src/org/videolan/vlc/util/Permissions.kt | 1 +
3 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
index 3f111fbb20..e170ff5c64 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
@@ -38,6 +38,7 @@ import org.videolan.vlc.gui.helpers.hf.PinCodeDelegate
import org.videolan.vlc.gui.helpers.hf.checkPIN
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.util.FileUtils
+import org.videolan.vlc.util.Permissions
import org.videolan.vlc.util.RemoteAccessUtils
@@ -95,6 +96,20 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array<String?>,
+ grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ if (requestCode == Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE) {
+ if (System.currentTimeMillis() - Permissions.timeAsked < 300) {
+ //Answered really quick (not human) -> forwarding to app settings
+ Permissions.showAppSettingsPage(this)
+ }
+ }
+ }
+
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
val relockItem = menu?.findItem(R.id.pin_relocked)
if (relockItem != null) {
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PermissionListDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PermissionListDialog.kt
index c2f3936ab2..abacebb1ab 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PermissionListDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/PermissionListDialog.kt
@@ -124,11 +124,14 @@ class PermissionListDialog : VLCBottomSheetDialogFragment() {
binding.notificationPermissionContainer.setOnClickListener {
if (Permissions.canSendNotifications(requireActivity())) {
Permissions.showAppSettingsPage(requireActivity())
- } else ActivityCompat.requestPermissions(
- requireActivity(), arrayOf(
- Manifest.permission.POST_NOTIFICATIONS
- ), Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE
- )
+ } else {
+ ActivityCompat.requestPermissions(
+ requireActivity(), arrayOf(
+ Manifest.permission.POST_NOTIFICATIONS
+ ), Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE
+ )
+ Permissions.timeAsked = System.currentTimeMillis()
+ }
}
@@ -246,14 +249,15 @@ class PermissionListDialog : VLCBottomSheetDialogFragment() {
binding.manageAllPermsCheck.background = ContextCompat.getDrawable(requireActivity(), R.drawable.rounded_corners_permissions_warning)
showWarning()
} else
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ActivityCompat.requestPermissions(
requireActivity(), arrayOf(
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_AUDIO
), Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE
)
- else lifecycleScope.launch {
+ Permissions.timeAsked = System.currentTimeMillis()
+ } else lifecycleScope.launch {
requireActivity().getStoragePermission(withDialog = false, onlyMedia = true)
}
}
@@ -265,6 +269,7 @@ class PermissionListDialog : VLCBottomSheetDialogFragment() {
Manifest.permission.READ_MEDIA_AUDIO
), Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE
)
+ Permissions.timeAsked = System.currentTimeMillis()
}
}
@@ -275,6 +280,7 @@ class PermissionListDialog : VLCBottomSheetDialogFragment() {
Manifest.permission.READ_MEDIA_VIDEO
), Permissions.FINE_STORAGE_PERMISSION_REQUEST_CODE
)
+ Permissions.timeAsked = System.currentTimeMillis()
}
}
diff --git a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
index 6d43518bdc..8021100daf 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
@@ -59,6 +59,7 @@ import org.videolan.vlc.gui.helpers.hf.WriteExternalDelegate
object Permissions {
+ var timeAsked: Long = -1L
const val PERMISSION_STORAGE_TAG = 255
const val PERMISSION_SETTINGS_TAG = 254
const val PERMISSION_WRITE_STORAGE_TAG = 253
More information about the Android
mailing list