Skip to content

Commit 523f683

Browse files
authored
Merge pull request #324 from sparkison/fix-android-permissions-dialog-crash
[Android] fix app crash after permissions dialog closed
2 parents 3f8aaed + f05f530 commit 523f683

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;
@@ -255,13 +257,83 @@ public void checkPhoneAccountPermission(ReadableArray optionalPermissions, Promi
255257
optionalPermsArr[i] = optionalPermissions.getString(i);
256258
}
257259

258-
String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length);
260+
final String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length);
259261
System.arraycopy(optionalPermsArr, 0, allPermissions, permissions.length, optionalPermsArr.length);
260262

261263
hasPhoneAccountPromise = promise;
262264

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

0 commit comments

Comments
 (0)