Browse Source

Display the app settings when runtime permission previously denied

merge-requests/2174/head
Nicolas Pomepuy 1 year ago
parent
commit
5821fab251
  1. 15
      application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
  2. 20
      application/vlc-android/src/org/videolan/vlc/gui/dialogs/PermissionListDialog.kt
  3. 1
      application/vlc-android/src/org/videolan/vlc/util/Permissions.kt

15
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) {

20
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()
}
}

1
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

Loading…
Cancel
Save