Request Android 13 media permissions instead of read external storage
This commit is contained in:
parent
dc155e7302
commit
f428a170c5
8 changed files with 63 additions and 21 deletions
|
@ -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
|
||||
|
|
|
@ -20,10 +20,14 @@
|
|||
<!-- To vibrate when pressing DTMF keys on numpad & incoming calls -->
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
|
||||
<!-- TODO: require new permissions instead: https://developer.android.com/about/versions/13/behavior-changes-13 -->
|
||||
<!-- Needed to attach file(s) in chat room fragment -->
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32"/>
|
||||
<!-- Starting Android 13 you need those 3 permissions instead (https://developer.android.com/about/versions/13/behavior-changes-13) -->
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
|
||||
<!-- Needed to shared downloaded files if setting is on -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="28" />
|
||||
|
|
|
@ -567,17 +567,11 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
|||
}
|
||||
|
||||
binding.setAttachFileClickListener {
|
||||
if (PermissionHelper.get().hasReadExternalStoragePermission() && PermissionHelper.get().hasCameraPermission()) {
|
||||
if (PermissionHelper.get().hasReadExternalStoragePermission() || PermissionHelper.get().hasCameraPermission()) {
|
||||
pickFile()
|
||||
} else {
|
||||
Log.i("[Chat Room] Asking for READ_EXTERNAL_STORAGE and CAMERA permissions")
|
||||
requestPermissions(
|
||||
arrayOf(
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.CAMERA
|
||||
),
|
||||
0
|
||||
)
|
||||
Compatibility.requestReadExternalStorageAndCameraPermissions(this, 0)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
*/
|
||||
package org.linphone.activities.voip.fragments
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
|
@ -41,6 +40,7 @@ import org.linphone.activities.main.chat.adapters.ChatMessagesListAdapter
|
|||
import org.linphone.activities.main.chat.data.ChatMessageData
|
||||
import org.linphone.activities.main.chat.viewmodels.*
|
||||
import org.linphone.activities.main.viewmodels.ListTopBarViewModel
|
||||
import org.linphone.compatibility.Compatibility
|
||||
import org.linphone.core.ChatRoom
|
||||
import org.linphone.core.Factory
|
||||
import org.linphone.core.tools.Log
|
||||
|
@ -83,17 +83,11 @@ class ChatFragment : GenericFragment<VoipChatFragmentBinding>() {
|
|||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue