|
1 | 1 | import TransportBLE from '@ledgerhq/react-native-hw-transport-ble' |
2 | 2 | import { useCallback, useState, useRef } from 'react' |
3 | 3 | import { Observable, Subscription } from 'rxjs' |
4 | | -import { PermissionsAndroid, Platform } from 'react-native' |
| 4 | +import { Platform } from 'react-native' |
| 5 | +import { |
| 6 | + check, |
| 7 | + Permission, |
| 8 | + PERMISSIONS, |
| 9 | + request, |
| 10 | + RESULTS, |
| 11 | +} from 'react-native-permissions' |
5 | 12 | import { Device } from 'react-native-ble-plx' |
6 | 13 | import { useAsync } from 'react-async-hook' |
7 | 14 | import * as Logger from '../utils/logger' |
@@ -41,33 +48,23 @@ type LedgerAvailable = { |
41 | 48 | } |
42 | 49 |
|
43 | 50 | const checkPermission = async () => { |
| 51 | + let permissions: Permission[] = [] |
44 | 52 | if (Platform.OS === 'ios') { |
45 | | - return true |
| 53 | + permissions = [PERMISSIONS.IOS.BLUETOOTH] |
| 54 | + } else if (Platform.OS === 'android') { |
| 55 | + permissions = [ |
| 56 | + PERMISSIONS.ANDROID.BLUETOOTH_SCAN, |
| 57 | + PERMISSIONS.ANDROID.BLUETOOTH_CONNECT, |
| 58 | + ] |
46 | 59 | } |
47 | 60 |
|
48 | | - const perms = [ |
49 | | - PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, |
50 | | - PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, |
51 | | - PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT, |
52 | | - ] |
53 | | - |
54 | | - const results = await Promise.all( |
55 | | - perms.map((p) => PermissionsAndroid.check(p)), |
56 | | - ) |
57 | | - |
58 | | - if (results.findIndex((r) => r === false) === -1) { |
59 | | - return true |
60 | | - } |
61 | | - |
62 | | - const granted = await PermissionsAndroid.requestMultiple([ |
63 | | - PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, |
64 | | - PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, |
65 | | - PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT, |
66 | | - ]) |
67 | | - |
68 | | - perms.forEach((p) => { |
69 | | - if (!granted[p]) { |
70 | | - return false |
| 61 | + permissions.forEach(async (perm) => { |
| 62 | + const result = await check(perm) |
| 63 | + if (result === RESULTS.DENIED) { |
| 64 | + const requestResult = await request(perm) |
| 65 | + if (requestResult !== RESULTS.GRANTED) { |
| 66 | + return false |
| 67 | + } |
71 | 68 | } |
72 | 69 | }) |
73 | 70 |
|
|
0 commit comments