Skip to content

Commit 3ed19cf

Browse files
authored
BLE permissions (#916)
* fix ble permissions checking * fix: never null
1 parent 9d0e8f5 commit 3ed19cf

File tree

2 files changed

+23
-27
lines changed

2 files changed

+23
-27
lines changed

src/features/ledger/LedgerModal.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,7 @@ const LedgerModal = forwardRef(
369369
currentAccount?.ledgerDevice?.name ?? '',
370370
modelId: deviceModelId,
371371
wired:
372-
currentAccount?.ledgerDevice?.type === 'usb' ??
373-
false,
372+
currentAccount?.ledgerDevice?.type === 'usb',
374373
},
375374
key: ledgerModalState,
376375
theme: 'dark',

src/hooks/useLedgerDeviceScan.tsx

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import TransportBLE from '@ledgerhq/react-native-hw-transport-ble'
22
import { useCallback, useState, useRef } from 'react'
33
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'
512
import { Device } from 'react-native-ble-plx'
613
import { useAsync } from 'react-async-hook'
714
import * as Logger from '../utils/logger'
@@ -41,33 +48,23 @@ type LedgerAvailable = {
4148
}
4249

4350
const checkPermission = async () => {
51+
let permissions: Permission[] = []
4452
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+
]
4659
}
4760

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+
}
7168
}
7269
})
7370

0 commit comments

Comments
 (0)