|
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; |
@@ -253,13 +255,83 @@ public void checkPhoneAccountPermission(ReadableArray optionalPermissions, Promi |
253 | 255 | optionalPermsArr[i] = optionalPermissions.getString(i); |
254 | 256 | } |
255 | 257 |
|
256 | | - String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length); |
| 258 | + final String[] allPermissions = Arrays.copyOf(permissions, permissions.length + optionalPermsArr.length); |
257 | 259 | System.arraycopy(optionalPermsArr, 0, allPermissions, permissions.length, optionalPermsArr.length); |
258 | 260 |
|
259 | 261 | hasPhoneAccountPromise = promise; |
260 | 262 |
|
261 | 263 | 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 | + }); |
263 | 335 | return; |
264 | 336 | } |
265 | 337 |
|
|
0 commit comments