Skip to content

Commit

Permalink
fix: properly handle denied perms
Browse files Browse the repository at this point in the history
Signed-off-by: clegirar <clemntgirard@gmail.com>
  • Loading branch information
clegirar committed Dec 17, 2021
1 parent cd0c3a6 commit 2656ee2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 16 deletions.
4 changes: 2 additions & 2 deletions js/ios/Podfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 25 additions & 14 deletions js/packages/components/main/Permissions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
PERMISSIONS,
RESULTS,
openSettings,
PermissionStatus,
} from 'react-native-permissions'

import { useStyles } from '@berty-tech/styles'
Expand Down Expand Up @@ -40,16 +41,23 @@ export const Permissions: ScreenFC<'Main.Permissions'> = ({ route: { params }, n
const { persistentOptions, setPersistentOption, selectedAccount } = useMessengerContext()
const { permissionType, permissionStatus, navigateNext, onComplete } = params

const handleOnComplete = useCallback(async () => {
if (typeof onComplete === 'function') {
await onComplete()
}
if (navigateNext) {
navigation.navigate(navigateNext)
} else {
navigation.goBack()
}
}, [navigateNext, navigation, onComplete])
const handleOnComplete = useCallback(
async (status: PermissionStatus | undefined) => {
if (status !== RESULTS.GRANTED) {
navigation.goBack()
return
}
if (typeof onComplete === 'function') {
await onComplete()
}
if (navigateNext) {
navigation.navigate(navigateNext)
} else {
navigation.goBack()
}
},
[navigateNext, navigation, onComplete],
)

const handleAppStateChange = useCallback(
async (nextAppState: string) => {
Expand All @@ -59,21 +67,23 @@ export const Permissions: ScreenFC<'Main.Permissions'> = ({ route: { params }, n
})

if (status === RESULTS.GRANTED) {
await handleOnComplete()
await handleOnComplete(status)
}
}
},
[handleOnComplete, navigation.navigate, permissionType],
)

const requestPermission = useCallback(async () => {
let retStatus
try {
if (permissionStatus === RESULTS.BLOCKED) {
return openSettings()
}
if (permissionType === 'notification') {
try {
const { status } = await requestNotifications(['alert', 'sound'])
retStatus = status
await setPersistentOption({
type: PersistentOptionsKeys.Configurations,
payload: {
Expand All @@ -93,6 +103,7 @@ export const Permissions: ScreenFC<'Main.Permissions'> = ({ route: { params }, n
? PERMISSIONS.IOS.BLUETOOTH_PERIPHERAL
: PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION,
)
retStatus = status

if (selectedAccount) {
const currentConfig = await accountService.networkConfigGet({
Expand Down Expand Up @@ -121,18 +132,18 @@ export const Permissions: ScreenFC<'Main.Permissions'> = ({ route: { params }, n
})
}
} else if (permissionType === 'camera') {
await request(
retStatus = await request(
Platform.OS === 'android' ? PERMISSIONS.ANDROID.CAMERA : PERMISSIONS.IOS.CAMERA,
)
} else if (permissionType === 'audio') {
await request(
retStatus = await request(
Platform.OS === 'ios' ? PERMISSIONS.IOS.MICROPHONE : PERMISSIONS.ANDROID.RECORD_AUDIO,
)
}
} catch (err) {
console.warn('request permission err:', err)
}
await handleOnComplete()
await handleOnComplete(retStatus)
}, [
handleOnComplete,
permissionStatus,
Expand Down

0 comments on commit 2656ee2

Please sign in to comment.