Skip to content

Commit 5f0f576

Browse files
committed
Check granted status even if blocked
1 parent b9a664c commit 5f0f576

File tree

4 files changed

+99
-104
lines changed

4 files changed

+99
-104
lines changed

example/ios/Podfile.lock

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,35 @@ PODS:
7070
- OpenSSL-Universal (1.0.2.19):
7171
- OpenSSL-Universal/Static (= 1.0.2.19)
7272
- OpenSSL-Universal/Static (1.0.2.19)
73-
- Permission-BluetoothPeripheral (2.1.1):
73+
- Permission-BluetoothPeripheral (2.1.2):
7474
- RNPermissions
75-
- Permission-Calendars (2.1.1):
75+
- Permission-Calendars (2.1.2):
7676
- RNPermissions
77-
- Permission-Camera (2.1.1):
77+
- Permission-Camera (2.1.2):
7878
- RNPermissions
79-
- Permission-Contacts (2.1.1):
79+
- Permission-Contacts (2.1.2):
8080
- RNPermissions
81-
- Permission-FaceID (2.1.1):
81+
- Permission-FaceID (2.1.2):
8282
- RNPermissions
83-
- Permission-LocationAlways (2.1.1):
83+
- Permission-LocationAlways (2.1.2):
8484
- RNPermissions
85-
- Permission-LocationWhenInUse (2.1.1):
85+
- Permission-LocationWhenInUse (2.1.2):
8686
- RNPermissions
87-
- Permission-MediaLibrary (2.1.1):
87+
- Permission-MediaLibrary (2.1.2):
8888
- RNPermissions
89-
- Permission-Microphone (2.1.1):
89+
- Permission-Microphone (2.1.2):
9090
- RNPermissions
91-
- Permission-Motion (2.1.1):
91+
- Permission-Motion (2.1.2):
9292
- RNPermissions
93-
- Permission-Notifications (2.1.1):
93+
- Permission-Notifications (2.1.2):
9494
- RNPermissions
95-
- Permission-PhotoLibrary (2.1.1):
95+
- Permission-PhotoLibrary (2.1.2):
9696
- RNPermissions
97-
- Permission-Reminders (2.1.1):
97+
- Permission-Reminders (2.1.2):
9898
- RNPermissions
99-
- Permission-SpeechRecognition (2.1.1):
99+
- Permission-SpeechRecognition (2.1.2):
100100
- RNPermissions
101-
- Permission-StoreKit (2.1.1):
101+
- Permission-StoreKit (2.1.2):
102102
- RNPermissions
103103
- RCTRequired (0.62.2)
104104
- RCTTypeSafety (0.62.2):
@@ -322,7 +322,7 @@ PODS:
322322
- React-cxxreact (= 0.62.2)
323323
- React-jsi (= 0.62.2)
324324
- ReactCommon/callinvoker (= 0.62.2)
325-
- RNPermissions (2.1.1):
325+
- RNPermissions (2.1.2):
326326
- React
327327
- RNVectorIcons (6.6.0):
328328
- React
@@ -514,21 +514,21 @@ SPEC CHECKSUMS:
514514
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
515515
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
516516
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
517-
Permission-BluetoothPeripheral: 6558cc3b561acc237c8a7985ea6d7c2c8e8d60ac
518-
Permission-Calendars: 57c913bf2041762cbfca886f02094ed324e15680
519-
Permission-Camera: 01583e5864cb99d89cbfb3ec62cb83c78d8d227a
520-
Permission-Contacts: ad583342a76f0c77f9060cab1fb64eef05ed310c
521-
Permission-FaceID: fafd8c4809ad5be3547e1b66c2ce444c5abd92a6
522-
Permission-LocationAlways: 88ef003dd56cb9d136d884bcf20ebe2b34eed970
523-
Permission-LocationWhenInUse: ec0f1ad0b57c773b69ecf56a8fc15edeadb42a64
524-
Permission-MediaLibrary: 785ee34382bab60650cc11de901977de1e36d8c4
525-
Permission-Microphone: 88f81d5238d064cea3e498f5d344454a5ce3e550
526-
Permission-Motion: c9b889229f42cc2e98e8d8953fa9ba5327637ce4
527-
Permission-Notifications: ce3c8648a2dd45af1d8daca246e37f141436b650
528-
Permission-PhotoLibrary: 260f9a0d7c3e8471bf6d56560f3d7c113ad078ff
529-
Permission-Reminders: 2678fc0ad81120234a6d97e9472db79b4c0ac5d1
530-
Permission-SpeechRecognition: 89f2c49b6977fb56be43f27bd6e58002dfa0cd46
531-
Permission-StoreKit: b7878818791847376b37eb181ca2f658c5a26bad
517+
Permission-BluetoothPeripheral: b15b0ebbe4ad2cca5d01776216f5a9d267538b0e
518+
Permission-Calendars: 3510f6a17c2b29064724f1d2f0dccfc838f65297
519+
Permission-Camera: ebdba00e6926aface672cc547b19fa317c3d956e
520+
Permission-Contacts: be99347b627cd4df4e9da5dd0d3b1df63b08884d
521+
Permission-FaceID: 47e37e5acf891b4b7a8fd6736b422045d74db17c
522+
Permission-LocationAlways: 5f8a9ffe42bc2df8962cd955354cf57cb0663411
523+
Permission-LocationWhenInUse: cfd0d39a1c8ab2e9aeb0a1460800f85f74705404
524+
Permission-MediaLibrary: 934d1eabde4fe27dcc4a13d3f8ab59cf84ae1a0b
525+
Permission-Microphone: 49b2fe2f5db61aef24488d1155447534a9fc8aa4
526+
Permission-Motion: 49ed1329962256b8388ad850700efd34f28130ec
527+
Permission-Notifications: 2f2ff1d01fe7677c3858c8f0a0bd3f3accdbb6bb
528+
Permission-PhotoLibrary: e29736d903e867d278747eb30951528303425f64
529+
Permission-Reminders: 017ca0ba66a094c9da8158bcf05e74c65566cdbf
530+
Permission-SpeechRecognition: 5dda034438269ec23ab4811e71de97e045002b23
531+
Permission-StoreKit: 0c31eb77803332a646c3742bc3cb3c5a92df5b67
532532
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
533533
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
534534
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
@@ -548,11 +548,11 @@ SPEC CHECKSUMS:
548548
React-RCTText: fae545b10cfdb3d247c36c56f61a94cfd6dba41d
549549
React-RCTVibration: 4356114dbcba4ce66991096e51a66e61eda51256
550550
ReactCommon: ed4e11d27609d571e7eee8b65548efc191116eb3
551-
RNPermissions: 18cf517660d0247a4b66d21b6f85272fd1870cd2
551+
RNPermissions: a96580116f7894146552e92b000ac30bf1661947
552552
RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4
553553
Yoga: 3ebccbdd559724312790e7742142d062476b698e
554554
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
555555

556-
PODFILE CHECKSUM: 18d84e918bc93c61f572c1a13b167c0edd90e6b8
556+
PODFILE CHECKSUM: 48265109032bce1863187d238dd58c9e3563d7e5
557557

558558
COCOAPODS: 1.9.1

example/yarn.lock

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -768,19 +768,19 @@
768768
"@types/yargs" "^15.0.0"
769769
chalk "^3.0.0"
770770

771-
"@react-native-community/cli-debugger-ui@^4.6.3":
772-
version "4.6.3"
773-
resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.6.3.tgz#5e93bf170a092a011f1bb0e19886f94265a4ce97"
774-
integrity sha512-5hnzGBP1eXmc1gOuKm9x5uyw9z5QE3C2pSz57eaV6dHjl9LKfeBXd9L+RqeG/uWi7buE4YyJwirvpufLREoyJg==
771+
"@react-native-community/cli-debugger-ui@^4.7.0":
772+
version "4.7.0"
773+
resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.7.0.tgz#4a8689f56b99378b24bbbf0ff6a89869d667f013"
774+
integrity sha512-Z/xJ08Wz3J2fKDPrwxtQ44XSHnWsF6dnT0H2AANw63bWjnrR0E3sh8Nk8/oO+j9R7LH8S0+NHJdlniXYtL/bNg==
775775
dependencies:
776776
serve-static "^1.13.1"
777777

778778
"@react-native-community/cli-platform-android@^4.5.1":
779-
version "4.6.3"
780-
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-4.6.3.tgz#a7377b97cb85b5714d063281eed8e4185444569d"
781-
integrity sha512-o88nUW2mjwvYSTwW/VTPdMmTi2vHS4T4gYGObb3qgkv/6H0JG1NC0SRo1FCHRpRGo1nQ7d+aB8sfpJeEkQ3Mbw==
779+
version "4.7.0"
780+
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-4.7.0.tgz#aace6b8004b8d3aae40d6affaad1c472e0310a25"
781+
integrity sha512-Lb6D0ipmFwYLJeQy5/NI4uJpeSHw85rd84C40wwpoUfsCgZhA93WUJdFkuQEIDkfTqs5Yqgl+/szhIZdnIXPxw==
782782
dependencies:
783-
"@react-native-community/cli-tools" "^4.6.3"
783+
"@react-native-community/cli-tools" "^4.7.0"
784784
chalk "^3.0.0"
785785
execa "^1.0.0"
786786
fs-extra "^8.1.0"
@@ -792,42 +792,42 @@
792792
xmldoc "^1.1.2"
793793

794794
"@react-native-community/cli-platform-ios@^4.5.0":
795-
version "4.6.3"
796-
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.6.3.tgz#bcd317e4b6d391a872f04de80fd6e56dbf8a5ba7"
797-
integrity sha512-blYP5DBVj3ZefmKvMsMvmOWrw3Fl6bQIvAAMt+J1nqhZKOONpunfKgKi9DmE/Pzxxdmsx/HhtV104OnBdtUPbw==
795+
version "4.7.0"
796+
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.7.0.tgz#471dcdbd2645c5650f16c0eddcca50e47ca78398"
797+
integrity sha512-XqnxP6H6+PG/wn4+Pwas5jaTSr5n7x6v8trkPY8iO37b8sq7tJLNYznaBMROF43i0NqO48JdhquYOqnDN8FdBA==
798798
dependencies:
799-
"@react-native-community/cli-tools" "^4.6.3"
799+
"@react-native-community/cli-tools" "^4.7.0"
800800
chalk "^3.0.0"
801801
glob "^7.1.3"
802802
js-yaml "^3.13.1"
803803
lodash "^4.17.15"
804804
plist "^3.0.1"
805805
xcode "^2.0.0"
806806

807-
"@react-native-community/cli-tools@^4.6.3":
808-
version "4.6.3"
809-
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-4.6.3.tgz#dab9ce5fc45ae8847caa9f6cc85b67b284777b1f"
810-
integrity sha512-ne/A1JUA86WgS3LpdqCwdpCbzfLJusfTllv+TDafNxEdziGPwTcRmeOk3QD3X0rwSawCJhfcnROzIc4AnfSP3w==
807+
"@react-native-community/cli-tools@^4.7.0":
808+
version "4.7.0"
809+
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-4.7.0.tgz#83d49277e7f56fef87bdfd0ba55d2cfa20190689"
810+
integrity sha512-llNWJEWXhGMsaHLWoieraPeWuva3kRsIEPi8oRVTybyz82JjR71mN0OFs41o1OnAR6+TR9d5cJPN+mIOESugEA==
811811
dependencies:
812812
chalk "^3.0.0"
813813
lodash "^4.17.15"
814814
mime "^2.4.1"
815815
node-fetch "^2.6.0"
816816

817-
"@react-native-community/cli-types@^4.6.3":
818-
version "4.6.3"
819-
resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-4.6.3.tgz#e431e895e4ddedd0e2c80c2f492af60dd13cc15a"
820-
integrity sha512-76uXaqPV1m6zGmL+x/KGHfLZiVVbCvkI4KElnd1dVEsDrVVoAsJ0tvBad+GhHh/NtYU1VmtuJ/zcKnjWdVla1A==
817+
"@react-native-community/cli-types@^4.7.0":
818+
version "4.7.0"
819+
resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-4.7.0.tgz#871905753f8ff83cf10c48e8df3fdd63cd7667a0"
820+
integrity sha512-Pw05Rsh/ENFs/Utv1SVRFfdMAn+W9yy1AOhyIKB36JX0Xw00sIZQDyZVsVfmaLSOpRpJ/qUdKWXB/WYV4XYELw==
821821

822822
"@react-native-community/cli@^4.5.1":
823-
version "4.6.3"
824-
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-4.6.3.tgz#8b906b8af87753a6bc580358ea17116a040d7e67"
825-
integrity sha512-MqOvUyKfspzA/uUSQELouYDkS4hbqaCWG/Nc13/k+vwQnXjq2sJlVKZCrctV4IY33oKMr/S0LwyZiiiwhQ8GMg==
823+
version "4.7.0"
824+
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-4.7.0.tgz#be692631356d14fd1ffe23f25b479dca9e8e7c95"
825+
integrity sha512-DbpxcPC7lFCJ112dPXL4DBKh5TfH0QK2OTG7uEGjfsApT4c01Lae6OMTNSssXgXTcNJApqIT5a6GXK2vSE0CEQ==
826826
dependencies:
827827
"@hapi/joi" "^15.0.3"
828-
"@react-native-community/cli-debugger-ui" "^4.6.3"
829-
"@react-native-community/cli-tools" "^4.6.3"
830-
"@react-native-community/cli-types" "^4.6.3"
828+
"@react-native-community/cli-debugger-ui" "^4.7.0"
829+
"@react-native-community/cli-tools" "^4.7.0"
830+
"@react-native-community/cli-types" "^4.7.0"
831831
chalk "^3.0.0"
832832
command-exists "^1.2.8"
833833
commander "^2.19.0"
@@ -1398,9 +1398,9 @@ cli-spinners@^2.0.0:
13981398
integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==
13991399

14001400
cli-width@^2.0.0:
1401-
version "2.2.0"
1402-
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
1403-
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
1401+
version "2.2.1"
1402+
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
1403+
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
14041404

14051405
cliui@^4.0.0:
14061406
version "4.1.0"
@@ -1489,9 +1489,9 @@ colorette@^1.0.7:
14891489
integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
14901490

14911491
command-exists@^1.2.8:
1492-
version "1.2.8"
1493-
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
1494-
integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
1492+
version "1.2.9"
1493+
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
1494+
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
14951495

14961496
commander@^2.19.0:
14971497
version "2.20.3"
@@ -3695,7 +3695,7 @@ [email protected]:
36953695
react-native-safe-area-view "^0.14.6"
36963696

36973697
react-native-permissions@../:
3698-
version "2.1.1"
3698+
version "2.1.2"
36993699

37003700
react-native-safe-area-view@^0.14.6:
37013701
version "0.14.9"
@@ -3875,9 +3875,9 @@ resolve-url@^0.2.1:
38753875
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
38763876

38773877
resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1:
3878-
version "1.15.1"
3879-
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
3880-
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
3878+
version "1.16.0"
3879+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.0.tgz#063dc704fa3413e13ac1d0d1756a7cbfe95dd1a7"
3880+
integrity sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA==
38813881
dependencies:
38823882
path-parse "^1.0.6"
38833883

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-permissions",
3-
"version": "2.1.1",
3+
"version": "2.1.2",
44
"license": "MIT",
55
"description": "An unified permissions API for React Native on iOS and Android",
66
"author": "Mathieu Acthernoene <[email protected]>",

src/module.android.ts

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ const RNP: {
2121
setNonRequestables: (permissions: Permission[]) => Promise<true>;
2222
} = NativeModules.RNPermissions;
2323

24-
function grantedToStatus(granted: boolean): PermissionStatus {
25-
return granted ? RESULTS.GRANTED : RESULTS.DENIED;
26-
}
27-
2824
function coreStatusToStatus(status: CoreStatus): PermissionStatus {
2925
switch (status) {
3026
case 'granted':
@@ -46,12 +42,14 @@ async function check(permission: Permission): Promise<PermissionStatus> {
4642
if (!RNP.available.includes(permission)) {
4743
return RESULTS.UNAVAILABLE;
4844
}
49-
if (await RNP.isNonRequestable(permission)) {
50-
return RESULTS.BLOCKED;
45+
46+
if (await Core.check(permission as CorePermission)) {
47+
return RESULTS.GRANTED;
5148
}
5249

53-
const granted = await Core.check(permission as CorePermission);
54-
return grantedToStatus(granted);
50+
return (await RNP.isNonRequestable(permission))
51+
? RESULTS.BLOCKED
52+
: RESULTS.DENIED;
5553
}
5654

5755
async function request(
@@ -61,9 +59,6 @@ async function request(
6159
if (!RNP.available.includes(permission)) {
6260
return RESULTS.UNAVAILABLE;
6361
}
64-
if (await RNP.isNonRequestable(permission)) {
65-
return RESULTS.BLOCKED;
66-
}
6762

6863
const status = coreStatusToStatus(
6964
await Core.request(permission as CorePermission, rationale),
@@ -76,32 +71,26 @@ async function request(
7671
return status;
7772
}
7873

79-
async function splitByUsability<P extends Permission[]>(
74+
function splitByAvailability<P extends Permission[]>(
8075
permissions: P,
81-
): Promise<{
82-
unusables: Partial<Record<P[number], PermissionStatus>>;
83-
usables: P[number][];
84-
}> {
85-
const unusables: Partial<Record<P[number], PermissionStatus>> = {};
86-
const usables: P[number][] = [];
87-
const blocklist = await RNP.getNonRequestables();
76+
): {
77+
unavailable: Partial<Record<P[number], PermissionStatus>>;
78+
available: P[number][];
79+
} {
80+
const unavailable: Partial<Record<P[number], PermissionStatus>> = {};
81+
const available: P[number][] = [];
8882

8983
for (let index = 0; index < permissions.length; index++) {
9084
const permission: P[number] = permissions[index];
9185

92-
if (blocklist.includes(permission)) {
93-
unusables[permission] = RESULTS.BLOCKED;
94-
continue;
86+
if (RNP.available.includes(permission)) {
87+
available.push(permission);
88+
} else {
89+
unavailable[permission] = RESULTS.UNAVAILABLE;
9590
}
96-
if (!RNP.available.includes(permission)) {
97-
unusables[permission] = RESULTS.UNAVAILABLE;
98-
continue;
99-
}
100-
101-
usables.push(permission);
10291
}
10392

104-
return {unusables, usables};
93+
return {unavailable, available};
10594
}
10695

10796
function checkNotifications(): Promise<NotificationsResponse> {
@@ -112,12 +101,18 @@ async function checkMultiple<P extends Permission[]>(
112101
permissions: P,
113102
): Promise<Record<P[number], PermissionStatus>> {
114103
const dedup = uniq(permissions);
115-
const {unusables: output, usables} = await splitByUsability(dedup);
104+
const {unavailable: output, available} = splitByAvailability(dedup);
105+
const blocklist = await RNP.getNonRequestables();
116106

117107
await Promise.all(
118-
usables.map(async (permission: P[number]) => {
108+
available.map(async (permission: P[number]) => {
119109
const granted = await Core.check(permission as CorePermission);
120-
output[permission] = grantedToStatus(granted);
110+
111+
output[permission] = granted
112+
? RESULTS.GRANTED
113+
: blocklist.includes(permission)
114+
? RESULTS.BLOCKED
115+
: RESULTS.DENIED;
121116
}),
122117
);
123118

@@ -129,8 +124,8 @@ async function requestMultiple<P extends Permission[]>(
129124
): Promise<Record<P[number], PermissionStatus>> {
130125
const toSetAsNonRequestable: Permission[] = [];
131126
const dedup = uniq(permissions);
132-
const {unusables: output, usables} = await splitByUsability(dedup);
133-
const statuses = await Core.requestMultiple(usables as CorePermission[]);
127+
const {unavailable: output, available} = splitByAvailability(dedup);
128+
const statuses = await Core.requestMultiple(available as CorePermission[]);
134129

135130
for (const permission in statuses) {
136131
if (statuses.hasOwnProperty(permission)) {

0 commit comments

Comments
 (0)