From f428a170c5563181c1f52e6cd16eb29f8778dd7f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 10 Jun 2022 15:34:19 +0200 Subject: [PATCH] Request Android 13 media permissions instead of read external storage --- CHANGELOG.md | 1 + app/src/main/AndroidManifest.xml | 6 ++++- .../chat/fragments/DetailChatRoomFragment.kt | 10 ++------ .../activities/voip/fragments/ChatFragment.kt | 12 +++------- .../compatibility/Api23Compatibility.kt | 14 +++++++++++ .../compatibility/Api33Compatibility.kt | 23 +++++++++++++++++-- .../linphone/compatibility/Compatibility.kt | 16 +++++++++++++ .../org/linphone/utils/PermissionHelper.kt | 2 +- 8 files changed, 63 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index baed65906..63d2480c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ Group changes to describe their impact on the project, as follows: - Chat rooms can be individually muted (no notification when receiving a chat message) - Image & Video in-app viewers allow for full-screen display - Display name can be set during assistant when creating / logging in a sip.linphone.org account +- Android 13 support, using new post notifications & media permissions ### Changed - In-call views have been re-designed diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 339352e72..e1063725e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,10 +20,14 @@ - + + + + + diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 6e23ce50c..7d562ab8b 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -567,17 +567,11 @@ class DetailChatRoomFragment : MasterFragment() { } binding.setAttachFileClickListener { - if (PermissionHelper.get().hasReadExternalStoragePermission() && PermissionHelper.get().hasCameraPermission()) { + if (PermissionHelper.get().hasReadExternalStoragePermission() || PermissionHelper.get().hasCameraPermission()) { pickFile() } else { Log.i("[Chat] Asking for READ_EXTERNAL_STORAGE and CAMERA permissions") - requestPermissions( - arrayOf( - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.CAMERA - ), - 0 - ) + Compatibility.requestReadExternalStorageAndCameraPermissions(this, 0) } } diff --git a/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt index 79a5727d9..77b46fbdd 100644 --- a/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api23Compatibility.kt @@ -281,5 +281,19 @@ class Api23Compatibility { } return "" } + + fun requestReadExternalStorageAndCameraPermissions(fragment: Fragment, code: Int) { + fragment.requestPermissions( + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.CAMERA + ), + code + ) + } + + fun hasReadExternalStoragePermission(context: Context): Boolean { + return Compatibility.hasPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt index 5bbb6e9f0..633661414 100644 --- a/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt @@ -19,6 +19,7 @@ */ package org.linphone.compatibility +import android.Manifest import android.annotation.TargetApi import android.content.Context import androidx.fragment.app.Fragment @@ -29,14 +30,32 @@ class Api33Compatibility { fun requestPostNotificationsPermission(fragment: Fragment, code: Int) { fragment.requestPermissions( arrayOf( - "android.permission.POST_NOTIFICATIONS" + Manifest.permission.POST_NOTIFICATIONS ), code ) } fun hasPostNotificationsPermission(context: Context): Boolean { - return Compatibility.hasPermission(context, "android.permission.POST_NOTIFICATIONS") + return Compatibility.hasPermission(context, Manifest.permission.POST_NOTIFICATIONS) + } + + fun requestReadMediaAndCameraPermissions(fragment: Fragment, code: Int) { + fragment.requestPermissions( + arrayOf( + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.READ_MEDIA_AUDIO, + Manifest.permission.CAMERA + ), + code + ) + } + + fun hasReadExternalStoragePermission(context: Context): Boolean { + return Compatibility.hasPermission(context, Manifest.permission.READ_MEDIA_IMAGES) || + Compatibility.hasPermission(context, Manifest.permission.READ_MEDIA_VIDEO) || + Compatibility.hasPermission(context, Manifest.permission.READ_MEDIA_AUDIO) } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 20458fa88..106b0999f 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -107,6 +107,22 @@ class Compatibility { } else true } + fun requestReadExternalStorageAndCameraPermissions(fragment: Fragment, code: Int) { + if (Version.sdkAboveOrEqual(Version.API33_ANDROID_13_TIRAMISU)) { + Api33Compatibility.requestReadMediaAndCameraPermissions(fragment, code) + } else { + Api23Compatibility.requestReadExternalStorageAndCameraPermissions(fragment, code) + } + } + + fun hasReadExternalStoragePermission(context: Context): Boolean { + return if (Version.sdkAboveOrEqual(Version.API33_ANDROID_13_TIRAMISU)) { + Api33Compatibility.hasReadExternalStoragePermission(context) + } else { + Api23Compatibility.hasReadExternalStoragePermission(context) + } + } + fun getDeviceName(context: Context): String { return when (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { true -> Api25Compatibility.getDeviceName(context) diff --git a/app/src/main/java/org/linphone/utils/PermissionHelper.kt b/app/src/main/java/org/linphone/utils/PermissionHelper.kt index c52a3c31f..e8ab6599e 100644 --- a/app/src/main/java/org/linphone/utils/PermissionHelper.kt +++ b/app/src/main/java/org/linphone/utils/PermissionHelper.kt @@ -60,7 +60,7 @@ class PermissionHelper private constructor(private val context: Context) { } fun hasReadExternalStoragePermission(): Boolean { - return hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE) + return Compatibility.hasReadExternalStoragePermission(context) } fun hasWriteExternalStoragePermission(): Boolean {