|
55 | 55 | import com.facebook.react.bridge.ReactMethod; |
56 | 56 | import com.facebook.react.bridge.ReadableArray; |
57 | 57 | import com.facebook.react.bridge.ReadableMap; |
| 58 | +import com.facebook.react.bridge.WritableArray; |
58 | 59 | import com.facebook.react.bridge.WritableMap; |
59 | 60 | import com.facebook.react.HeadlessJsTaskService; |
60 | 61 | import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter; |
| 62 | +import com.facebook.react.modules.permissions.PermissionsModule; |
61 | 63 |
|
62 | 64 | import java.lang.reflect.Array; |
63 | 65 | import java.util.ArrayList; |
@@ -255,13 +257,83 @@ public void checkPhoneAccountPermission(ReadableArray optionalPermissions, Promi |
255 | 257 | optionalPermsArr[i] = optionalPermissions.getString(i); |
256 | 258 | } |
257 | 259 |
|
258 | | - String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length); |
| 260 | + final String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length); |
259 | 261 | System.arraycopy(optionalPermsArr, 0, allPermissions, permissions.length, optionalPermsArr.length); |
260 | 262 |
|
261 | 263 | hasPhoneAccountPromise = promise; |
262 | 264 |
|
263 | 265 | 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 | + }); |
265 | 337 | return; |
266 | 338 | } |
267 | 339 |
|
|
0 commit comments