1
1
package com .zoontek .rnpermissions ;
2
2
3
3
import android .Manifest ;
4
- import android .annotation .SuppressLint ;
5
4
import android .app .Activity ;
6
5
import android .content .Context ;
7
6
import android .content .Intent ;
8
- import android .content .SharedPreferences ;
9
7
import android .content .pm .PackageManager ;
10
8
import android .net .Uri ;
11
9
import android .os .Build ;
@@ -36,10 +34,8 @@ public class RNPermissionsModule extends ReactContextBaseJavaModule implements P
36
34
37
35
private static final String ERROR_INVALID_ACTIVITY = "E_INVALID_ACTIVITY" ;
38
36
public static final String MODULE_NAME = "RNPermissions" ;
39
- private static final String SETTING_NAME = "@RNPermissions:NonRequestables" ;
40
37
41
- private final SharedPreferences mSharedPrefs ;
42
- private final SparseArray <Request > mRequests ;
38
+ private final SparseArray <Callback > mCallbacks ;
43
39
private int mRequestCode = 0 ;
44
40
private final String GRANTED = "granted" ;
45
41
private final String DENIED = "denied" ;
@@ -48,26 +44,14 @@ public class RNPermissionsModule extends ReactContextBaseJavaModule implements P
48
44
49
45
public RNPermissionsModule (ReactApplicationContext reactContext ) {
50
46
super (reactContext );
51
- mSharedPrefs = reactContext .getSharedPreferences (SETTING_NAME , Context .MODE_PRIVATE );
52
- mRequests = new SparseArray <Request >();
47
+ mCallbacks = new SparseArray <Callback >();
53
48
}
54
49
55
50
@ Override
56
51
public String getName () {
57
52
return MODULE_NAME ;
58
53
}
59
54
60
- private class Request {
61
-
62
- public boolean [] rationaleStatuses ;
63
- public Callback callback ;
64
-
65
- public Request (boolean [] rationaleStatuses , Callback callback ) {
66
- this .rationaleStatuses = rationaleStatuses ;
67
- this .callback = callback ;
68
- }
69
- }
70
-
71
55
private @ Nullable String getFieldName (final String permission ) {
72
56
if (permission .equals ("android.permission.ACCEPT_HANDOVER" ))
73
57
return "ACCEPT_HANDOVER" ;
@@ -79,10 +63,10 @@ public Request(boolean[] rationaleStatuses, Callback callback) {
79
63
return "ACCESS_FINE_LOCATION" ;
80
64
if (permission .equals ("android.permission.ACCESS_MEDIA_LOCATION" ))
81
65
return "ACCESS_MEDIA_LOCATION" ;
82
- if (permission .equals ("com.android.voicemail.permission.ADD_VOICEMAIL" ))
83
- return "ADD_VOICEMAIL" ;
84
66
if (permission .equals ("android.permission.ACTIVITY_RECOGNITION" ))
85
67
return "ACTIVITY_RECOGNITION" ;
68
+ if (permission .equals ("com.android.voicemail.permission.ADD_VOICEMAIL" ))
69
+ return "ADD_VOICEMAIL" ;
86
70
if (permission .equals ("android.permission.ANSWER_PHONE_CALLS" ))
87
71
return "ANSWER_PHONE_CALLS" ;
88
72
if (permission .equals ("android.permission.BLUETOOTH_ADVERTISE" ))
@@ -127,6 +111,8 @@ public Request(boolean[] rationaleStatuses, Callback callback) {
127
111
return "SEND_SMS" ;
128
112
if (permission .equals ("android.permission.USE_SIP" ))
129
113
return "USE_SIP" ;
114
+ if (permission .equals ("android.permission.UWB_RANGING" ))
115
+ return "UWB_RANGING" ;
130
116
if (permission .equals ("android.permission.WRITE_CALENDAR" ))
131
117
return "WRITE_CALENDAR" ;
132
118
if (permission .equals ("android.permission.WRITE_CALL_LOG" ))
@@ -157,16 +143,13 @@ private boolean permissionExists(final String permission) {
157
143
public void checkNotifications (final Promise promise ) {
158
144
final boolean enabled = NotificationManagerCompat
159
145
.from (getReactApplicationContext ()).areNotificationsEnabled ();
146
+
160
147
final WritableMap output = Arguments .createMap ();
161
148
final WritableMap settings = Arguments .createMap ();
162
149
163
- if (enabled ) {
164
- output .putString ("status" , "granted" );
165
- } else {
166
- output .putString ("status" , "blocked" );
167
- }
168
-
150
+ output .putString ("status" , enabled ? GRANTED : BLOCKED );
169
151
output .putMap ("settings" , settings );
152
+
170
153
promise .resolve (output );
171
154
}
172
155
@@ -207,8 +190,6 @@ public void checkPermission(final String permission, final Promise promise) {
207
190
208
191
if (context .checkSelfPermission (permission ) == PackageManager .PERMISSION_GRANTED ) {
209
192
promise .resolve (GRANTED );
210
- } else if (mSharedPrefs .getBoolean (permission , false )) {
211
- promise .resolve (BLOCKED );
212
193
} else {
213
194
promise .resolve (DENIED );
214
195
}
@@ -248,20 +229,14 @@ public void requestPermission(final String permission, final Promise promise) {
248
229
if (context .checkSelfPermission (permission ) == PackageManager .PERMISSION_GRANTED ) {
249
230
promise .resolve (GRANTED );
250
231
return ;
251
- } else if (mSharedPrefs .getBoolean (permission , false )) {
252
- promise .resolve (BLOCKED ); // not supporting reset the permission with "Ask me every time"
253
- return ;
254
232
}
255
233
256
234
try {
257
235
PermissionAwareActivity activity = getPermissionAwareActivity ();
258
- boolean [] rationaleStatuses = new boolean [1 ];
259
- rationaleStatuses [0 ] = activity .shouldShowRequestPermissionRationale (permission );
260
236
261
- mRequests .put ( mRequestCode , new Request (
262
- rationaleStatuses ,
237
+ mCallbacks .put (
238
+ mRequestCode ,
263
239
new Callback () {
264
- @ SuppressLint ("ApplySharedPref" )
265
240
@ Override
266
241
public void invoke (Object ... args ) {
267
242
int [] results = (int []) args [0 ];
@@ -270,18 +245,15 @@ public void invoke(Object... args) {
270
245
promise .resolve (GRANTED );
271
246
} else {
272
247
PermissionAwareActivity activity = (PermissionAwareActivity ) args [1 ];
273
- boolean [] rationaleStatuses = (boolean []) args [2 ];
274
248
275
- if (rationaleStatuses [0 ] &&
276
- !activity .shouldShowRequestPermissionRationale (permission )) {
277
- mSharedPrefs .edit ().putBoolean (permission , true ).commit (); // enforce sync
278
- promise .resolve (BLOCKED );
279
- } else {
249
+ if (activity .shouldShowRequestPermissionRationale (permission )) {
280
250
promise .resolve (DENIED );
251
+ } else {
252
+ promise .resolve (BLOCKED );
281
253
}
282
254
}
283
255
}
284
- })) ;
256
+ });
285
257
286
258
activity .requestPermissions (new String [] {permission }, mRequestCode , this );
287
259
mRequestCode ++;
@@ -309,8 +281,6 @@ public void checkMultiplePermissions(final ReadableArray permissions, final Prom
309
281
: BLOCKED );
310
282
} else if (context .checkSelfPermission (permission ) == PackageManager .PERMISSION_GRANTED ) {
311
283
output .putString (permission , GRANTED );
312
- } else if (mSharedPrefs .getBoolean (permission , false )) {
313
- output .putString (permission , BLOCKED ); // not supporting reset the permission with "Ask me every time"
314
284
} else {
315
285
output .putString (permission , DENIED );
316
286
}
@@ -345,9 +315,6 @@ public void requestMultiplePermissions(final ReadableArray permissions, final Pr
345
315
} else if (context .checkSelfPermission (permission ) == PackageManager .PERMISSION_GRANTED ) {
346
316
output .putString (permission , GRANTED );
347
317
checkedPermissionsCount ++;
348
- } else if (mSharedPrefs .getBoolean (permission , false )) {
349
- output .putString (permission , BLOCKED ); // not supporting reset the permission with "Ask me every time"
350
- checkedPermissionsCount ++;
351
318
} else {
352
319
permissionsToCheck .add (permission );
353
320
}
@@ -360,42 +327,32 @@ public void requestMultiplePermissions(final ReadableArray permissions, final Pr
360
327
361
328
try {
362
329
PermissionAwareActivity activity = getPermissionAwareActivity ();
363
- boolean [] rationaleStatuses = new boolean [permissionsToCheck .size ()];
364
330
365
- for (int i = 0 ; i < permissionsToCheck .size (); i ++) {
366
- rationaleStatuses [i ] = activity
367
- .shouldShowRequestPermissionRationale (permissionsToCheck .get (i ));
368
- }
369
-
370
- mRequests .put (mRequestCode , new Request (
371
- rationaleStatuses ,
331
+ mCallbacks .put (
332
+ mRequestCode ,
372
333
new Callback () {
373
- @ SuppressLint ("ApplySharedPref" )
374
334
@ Override
375
335
public void invoke (Object ... args ) {
376
336
int [] results = (int []) args [0 ];
377
337
PermissionAwareActivity activity = (PermissionAwareActivity ) args [1 ];
378
- boolean [] rationaleStatuses = (boolean []) args [2 ];
379
338
380
339
for (int j = 0 ; j < permissionsToCheck .size (); j ++) {
381
340
String permission = permissionsToCheck .get (j );
382
341
383
342
if (results .length > 0 && results [j ] == PackageManager .PERMISSION_GRANTED ) {
384
343
output .putString (permission , GRANTED );
385
344
} else {
386
- if (rationaleStatuses [j ] &&
387
- !activity .shouldShowRequestPermissionRationale (permission )) {
388
- mSharedPrefs .edit ().putBoolean (permission , true ).commit (); // enforce sync
389
- output .putString (permission , BLOCKED );
390
- } else {
345
+ if (activity .shouldShowRequestPermissionRationale (permission )) {
391
346
output .putString (permission , DENIED );
347
+ } else {
348
+ output .putString (permission , BLOCKED );
392
349
}
393
350
}
394
351
}
395
352
396
353
promise .resolve (output );
397
354
}
398
- })) ;
355
+ });
399
356
400
357
activity .requestPermissions (permissionsToCheck .toArray (new String [0 ]), mRequestCode , this );
401
358
mRequestCode ++;
@@ -406,10 +363,9 @@ public void invoke(Object... args) {
406
363
407
364
@ Override
408
365
public boolean onRequestPermissionsResult (int requestCode , String [] permissions , int [] grantResults ) {
409
- Request request = mRequests .get (requestCode );
410
- request .callback .invoke (grantResults , getPermissionAwareActivity (), request .rationaleStatuses );
411
- mRequests .remove (requestCode );
412
- return mRequests .size () == 0 ;
366
+ mCallbacks .get (requestCode ).invoke (grantResults , getPermissionAwareActivity ());
367
+ mCallbacks .remove (requestCode );
368
+ return mCallbacks .size () == 0 ;
413
369
}
414
370
415
371
private PermissionAwareActivity getPermissionAwareActivity () {
0 commit comments