[Android] Permissions: fix media showing without permission
Duncan McNamara
git at videolan.org
Thu Feb 6 10:01:57 UTC 2025
vlc-android | branch: master | Duncan McNamara <dcn.mcnamara at gmail.com> | Wed Jan 29 14:16:42 2025 +0100| [2efa09cb0268f2e7546193c86ae8d474a1c6d30e] | committer: Nicolas Pomepuy
Permissions: fix media showing without permission
In the case of the VideoGridFragment, canReadVideos will always return
true below API 33, showing media if there were media indexed before
revoking file permissions.
On android 11 an 12 (API 30/31/32) when media permission only,
isExternalStorageManager will return false, but checking for
READ_EXTERNAL_STORAGE will return true.
On Android API 33+, if given only audio or video permission,
READ_EXTERNAL_STORAGE will also return true meaning that the check must
be restrained to API 30/31/32,
Furthermore, for API 30/31/32, isExternalStorageManager also needs to be
checked for when the app has full access.
Fixes #3129
> https://code.videolan.org/videolan/vlc-android/commit/2efa09cb0268f2e7546193c86ae8d474a1c6d30e
---
.../src/org/videolan/vlc/util/Permissions.kt | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
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 8021100daf..1ce431ebd5 100644
--- a/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
+++ b/application/vlc-android/src/org/videolan/vlc/util/Permissions.kt
@@ -112,16 +112,27 @@ object Permissions {
}
fun canReadVideos(context: Context): Boolean {
- return Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU || isExternalStorageManager() ||
- ContextCompat.checkSelfPermission(
+ return Build.VERSION.SDK_INT < Build.VERSION_CODES.R && isExternalStorageManager() ||
+ ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) &&
+ (ContextCompat.checkSelfPermission(
+ context,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ ) == PackageManager.PERMISSION_GRANTED || isExternalStorageManager())) ||
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_MEDIA_VIDEO
) == PackageManager.PERMISSION_GRANTED
}
+
fun canReadAudios(context: Context): Boolean {
- return Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU || isExternalStorageManager() ||
- ContextCompat.checkSelfPermission(
+ return Build.VERSION.SDK_INT < Build.VERSION_CODES.R && isExternalStorageManager() ||
+ ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) &&
+ (ContextCompat.checkSelfPermission(
+ context,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ ) == PackageManager.PERMISSION_GRANTED || isExternalStorageManager())) ||
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_MEDIA_AUDIO
) == PackageManager.PERMISSION_GRANTED
More information about the Android
mailing list