Skip to content

Commit 3f6c354

Browse files
committed
Use a static list of permissions
1 parent b13c467 commit 3f6c354

File tree

1 file changed

+27
-30
lines changed

1 file changed

+27
-30
lines changed

android/src/main/java/com/zoontek/rnpermissions/RNPermissionsModuleImpl.kt

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.zoontek.rnpermissions
22

3-
import android.Manifest
43
import android.app.AlarmManager
54
import android.content.Context
65
import android.content.Intent
@@ -34,31 +33,29 @@ object RNPermissionsModuleImpl {
3433
private const val UNAVAILABLE = "unavailable"
3534
private const val BLOCKED = "blocked"
3635

37-
private fun isPermissionAvailable(context: ReactApplicationContext, permission: String): Boolean {
38-
val fieldName = permission
39-
.removePrefix("android.permission.")
40-
.removePrefix("com.android.voicemail.permission.")
41-
42-
val availableInManifest = runCatching {
43-
Manifest.permission::class.java.getField(fieldName)
44-
}.isSuccess
45-
46-
val manager = context.packageManager
47-
48-
val groups = manager.getAllPermissionGroups(0).toMutableList().apply {
49-
add(null) // Add ungrouped permissions
50-
}
51-
52-
val availableInGroups = groups.any { group ->
53-
runCatching {
54-
manager.queryPermissionsByGroup(group?.name, 0)
55-
}.getOrDefault(emptyList()).any {
56-
it?.name == permission
57-
}
58-
}
59-
60-
return availableInManifest || availableInGroups
61-
}
36+
// Based on https://developer.android.com/reference/android/Manifest.permission
37+
// Permissions not explicitly listed are considered available (API < 21)
38+
private val minimumApi = mapOf(
39+
"android.permission.ACCEPT_HANDOVER" to 28,
40+
"android.permission.ACCESS_BACKGROUND_LOCATION" to 29,
41+
"android.permission.ACCESS_MEDIA_LOCATION" to 29,
42+
"android.permission.ACTIVITY_RECOGNITION" to 29,
43+
"android.permission.ANSWER_PHONE_CALLS" to 26,
44+
"android.permission.BLUETOOTH_ADVERTISE" to 31,
45+
"android.permission.BLUETOOTH_CONNECT" to 31,
46+
"android.permission.BLUETOOTH_SCAN" to 31,
47+
"android.permission.BODY_SENSORS_BACKGROUND" to 33,
48+
"android.permission.NEARBY_WIFI_DEVICES" to 33,
49+
"android.permission.READ_MEDIA_AUDIO" to 33,
50+
"android.permission.READ_MEDIA_IMAGES" to 33,
51+
"android.permission.READ_MEDIA_VIDEO" to 33,
52+
"android.permission.READ_MEDIA_VISUAL_USER_SELECTED" to 34,
53+
"android.permission.READ_PHONE_NUMBERS" to 26,
54+
"android.permission.UWB_RANGING" to 31
55+
)
56+
57+
private fun isPermissionAvailable(permission: String): Boolean =
58+
Build.VERSION.SDK_INT >= minimumApi.getOrDefault(permission, Build.VERSION_CODES.BASE)
6259

6360
fun openSettings(reactContext: ReactApplicationContext, type: String?, promise: Promise) {
6461
try {
@@ -100,7 +97,7 @@ object RNPermissionsModuleImpl {
10097
}
10198

10299
fun check(reactContext: ReactApplicationContext, permission: String, promise: Promise) {
103-
if (!isPermissionAvailable(reactContext, permission)) {
100+
if (!isPermissionAvailable(permission)) {
104101
return promise.resolve(UNAVAILABLE)
105102
}
106103

@@ -135,7 +132,7 @@ object RNPermissionsModuleImpl {
135132
output.putString(
136133
permission,
137134
when {
138-
!isPermissionAvailable(reactContext, permission) -> UNAVAILABLE
135+
!isPermissionAvailable(permission) -> UNAVAILABLE
139136
context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED -> GRANTED
140137
else -> DENIED
141138
}
@@ -152,7 +149,7 @@ object RNPermissionsModuleImpl {
152149
permission: String,
153150
promise: Promise
154151
) {
155-
if (!isPermissionAvailable(reactContext, permission)) {
152+
if (!isPermissionAvailable(permission)) {
156153
return promise.resolve(UNAVAILABLE)
157154
}
158155

@@ -214,7 +211,7 @@ object RNPermissionsModuleImpl {
214211
for (i in 0 until permissions.size()) {
215212
val permission = permissions.getString(i)
216213

217-
if (!isPermissionAvailable(reactContext, permission)) {
214+
if (!isPermissionAvailable(permission)) {
218215
output.putString(permission, UNAVAILABLE)
219216
checkedPermissionsCount++
220217
} else if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {

0 commit comments

Comments
 (0)