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 3f111fbb2..e170ff5c6 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, + 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 c2f3936ab..abacebb1a 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 6d43518bd..8021100da 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