From b767a8df69092fdcecafbb54c2f5edf51f58193f Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 21 Feb 2025 09:49:06 -0300 Subject: [PATCH] Get permissions --- .../MessageComposer/hooks/useChooseMedia.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/containers/MessageComposer/hooks/useChooseMedia.ts b/app/containers/MessageComposer/hooks/useChooseMedia.ts index 27d11c17ab..02e4c050e0 100644 --- a/app/containers/MessageComposer/hooks/useChooseMedia.ts +++ b/app/containers/MessageComposer/hooks/useChooseMedia.ts @@ -1,4 +1,4 @@ -import { Alert } from 'react-native'; +import { Alert, Linking } from 'react-native'; import * as DocumentPicker from 'expo-document-picker'; import { IMAGE_PICKER_CONFIG, LIBRARY_PICKER_CONFIG, VIDEO_PICKER_CONFIG } from '../constants'; @@ -14,6 +14,19 @@ import ImagePicker from '../../../lib/methods/helpers/ImagePicker/ImagePicker'; import { mapMediaResult } from '../../../lib/methods/helpers/ImagePicker/mapMediaResult'; import { IShareAttachment } from '../../../definitions'; +const getPermissions = async (type: 'camera' | 'media') => { + const method = type === 'camera' ? 'requestCameraPermissionsAsync' : 'requestMediaLibraryPermissionsAsync'; + const requestResult = await ImagePicker[method](); + if (!requestResult.canAskAgain) { + Linking.openURL('app-settings:'); + return Promise.reject(); + } + if (!requestResult.granted) { + return Promise.reject(); + } + return Promise.resolve(); +}; + export const useChooseMedia = ({ rid, tmid, @@ -30,6 +43,7 @@ export const useChooseMedia = ({ const takePhoto = async () => { try { + await getPermissions('camera'); const result = await ImagePicker.launchCameraAsync(IMAGE_PICKER_CONFIG); if (result.canceled) { return; @@ -53,6 +67,7 @@ export const useChooseMedia = ({ const takeVideo = async () => { try { + await getPermissions('camera'); const result = await ImagePicker.launchCameraAsync(VIDEO_PICKER_CONFIG); if (result.canceled) { return; @@ -76,6 +91,7 @@ export const useChooseMedia = ({ const chooseFromLibrary = async () => { try { + await getPermissions('media'); const result = await ImagePicker.launchImageLibraryAsync(LIBRARY_PICKER_CONFIG); if (result.canceled) { return;