From c7e6335d9d888f191f986e88dafbc2284cfe39f9 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 | 4 ++++ .../helpers/ImagePicker/getPermissions.ts | 16 ++++++++++++++++ app/views/ChangeAvatarView/index.tsx | 5 +++-- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 app/lib/methods/helpers/ImagePicker/getPermissions.ts diff --git a/app/containers/MessageComposer/hooks/useChooseMedia.ts b/app/containers/MessageComposer/hooks/useChooseMedia.ts index 27d11c17ab..9f90d4903c 100644 --- a/app/containers/MessageComposer/hooks/useChooseMedia.ts +++ b/app/containers/MessageComposer/hooks/useChooseMedia.ts @@ -12,6 +12,7 @@ import { useAppSelector } from '../../../lib/hooks'; import { useRoomContext } from '../../../views/RoomView/context'; import ImagePicker from '../../../lib/methods/helpers/ImagePicker/ImagePicker'; import { mapMediaResult } from '../../../lib/methods/helpers/ImagePicker/mapMediaResult'; +import { getPermissions } from '../../../lib/methods/helpers/ImagePicker/getPermissions'; import { IShareAttachment } from '../../../definitions'; export const useChooseMedia = ({ @@ -30,6 +31,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 +55,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 +79,7 @@ export const useChooseMedia = ({ const chooseFromLibrary = async () => { try { + await getPermissions('library'); const result = await ImagePicker.launchImageLibraryAsync(LIBRARY_PICKER_CONFIG); if (result.canceled) { return; diff --git a/app/lib/methods/helpers/ImagePicker/getPermissions.ts b/app/lib/methods/helpers/ImagePicker/getPermissions.ts new file mode 100644 index 0000000000..1d2c441a06 --- /dev/null +++ b/app/lib/methods/helpers/ImagePicker/getPermissions.ts @@ -0,0 +1,16 @@ +import { Linking } from 'react-native'; + +import ImagePicker from './ImagePicker'; + +export const getPermissions = async (type: 'camera' | 'library') => { + 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(); +}; diff --git a/app/views/ChangeAvatarView/index.tsx b/app/views/ChangeAvatarView/index.tsx index 05202c1119..cec3dd33ea 100644 --- a/app/views/ChangeAvatarView/index.tsx +++ b/app/views/ChangeAvatarView/index.tsx @@ -27,6 +27,7 @@ import AvatarSuggestion from './AvatarSuggestion'; import log from '../../lib/methods/helpers/log'; import { changeRoomsAvatar, changeUserAvatar, resetUserAvatar } from './submitServices'; import ImagePicker from '../../lib/methods/helpers/ImagePicker/ImagePicker'; +import { getPermissions } from '../../lib/methods/helpers/ImagePicker/getPermissions'; import { mapMediaResult } from '../../lib/methods/helpers/ImagePicker/mapMediaResult'; import { isImageURL, useDebounce } from '../../lib/methods/helpers'; import { FormTextInput } from '../../containers/TextInput'; @@ -172,8 +173,8 @@ const ChangeAvatarView = () => { exif: true, base64: true }; - const response = - isCam === true ? await ImagePicker.launchCameraAsync(options) : await ImagePicker.launchImageLibraryAsync(options); + await getPermissions(isCam ? 'camera' : 'library'); + const response = isCam ? await ImagePicker.launchCameraAsync(options) : await ImagePicker.launchImageLibraryAsync(options); if (response.canceled) { return; }