Skip to content

Commit f05f530

Browse files
author
Shaun Parkison
committed
change permission requests logic
fixes #288
1 parent c3ade44 commit f05f530

File tree

1 file changed

+74
-2
lines changed

1 file changed

+74
-2
lines changed

android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@
5555
import com.facebook.react.bridge.ReactMethod;
5656
import com.facebook.react.bridge.ReadableArray;
5757
import com.facebook.react.bridge.ReadableMap;
58+
import com.facebook.react.bridge.WritableArray;
5859
import com.facebook.react.bridge.WritableMap;
5960
import com.facebook.react.HeadlessJsTaskService;
6061
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
62+
import com.facebook.react.modules.permissions.PermissionsModule;
6163

6264
import java.lang.reflect.Array;
6365
import java.util.ArrayList;
@@ -253,13 +255,83 @@ public void checkPhoneAccountPermission(ReadableArray optionalPermissions, Promi
253255
optionalPermsArr[i] = optionalPermissions.getString(i);
254256
}
255257

256-
String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length);
258+
final String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length);
257259
System.arraycopy(optionalPermsArr, 0, allPermissions, permissions.length, optionalPermsArr.length);
258260

259261
hasPhoneAccountPromise = promise;
260262

261263
if (!this.hasPermissions()) {
262-
requestPermissions(currentActivity, allPermissions, REQUEST_READ_PHONE_STATE);
264+
WritableArray allPermissionaw = Arguments.createArray();
265+
for (String allPermission : allPermissions) {
266+
allPermissionaw.pushString(allPermission);
267+
}
268+
269+
getReactApplicationContext()
270+
.getNativeModule(PermissionsModule.class)
271+
.requestMultiplePermissions(allPermissionaw, new Promise() {
272+
@Override
273+
public void resolve(@Nullable Object value) {
274+
WritableMap grantedPermission = (WritableMap) value;
275+
int[] grantedResult = new int[allPermissions.length];
276+
for (int i=0; i<allPermissions.length; ++i) {
277+
String perm = allPermissions[i];
278+
grantedResult[i] = grantedPermission.getString(perm).equals("granted")
279+
? PackageManager.PERMISSION_GRANTED
280+
: PackageManager.PERMISSION_DENIED;
281+
}
282+
RNCallKeepModule.onRequestPermissionsResult(REQUEST_READ_PHONE_STATE, allPermissions, grantedResult);
283+
}
284+
285+
@Override
286+
public void reject(String code, String message) {
287+
hasPhoneAccountPromise.resolve(false);
288+
}
289+
290+
@Override
291+
public void reject(String code, Throwable throwable) {
292+
hasPhoneAccountPromise.resolve(false);
293+
}
294+
295+
@Override
296+
public void reject(String code, String message, Throwable throwable) {
297+
hasPhoneAccountPromise.resolve(false);
298+
}
299+
300+
@Override
301+
public void reject(Throwable throwable) {
302+
hasPhoneAccountPromise.resolve(false);
303+
}
304+
305+
@Override
306+
public void reject(Throwable throwable, WritableMap userInfo) {
307+
hasPhoneAccountPromise.resolve(false);
308+
}
309+
310+
@Override
311+
public void reject(String code, @NonNull WritableMap userInfo) {
312+
hasPhoneAccountPromise.resolve(false);
313+
}
314+
315+
@Override
316+
public void reject(String code, Throwable throwable, WritableMap userInfo) {
317+
hasPhoneAccountPromise.resolve(false);
318+
}
319+
320+
@Override
321+
public void reject(String code, String message, @NonNull WritableMap userInfo) {
322+
hasPhoneAccountPromise.resolve(false);
323+
}
324+
325+
@Override
326+
public void reject(String code, String message, Throwable throwable, WritableMap userInfo) {
327+
hasPhoneAccountPromise.resolve(false);
328+
}
329+
330+
@Override
331+
public void reject(String message) {
332+
hasPhoneAccountPromise.resolve(false);
333+
}
334+
});
263335
return;
264336
}
265337

0 commit comments

Comments
 (0)