From c990d8196f29b340a801dbe45b67921d14639aea Mon Sep 17 00:00:00 2001 From: Zhiyuan Zheng Date: Sat, 8 Jan 2022 12:39:45 +0100 Subject: [PATCH] Fix Android saving image issue --- src/screens/ImageViewer/save.ts | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/screens/ImageViewer/save.ts b/src/screens/ImageViewer/save.ts index 0dfef8ac..55c250fd 100644 --- a/src/screens/ImageViewer/save.ts +++ b/src/screens/ImageViewer/save.ts @@ -3,10 +3,9 @@ import { displayMessage } from '@components/Message' import CameraRoll from '@react-native-community/cameraroll' import { RootStackParamList } from '@utils/navigation/navigators' import * as FileSystem from 'expo-file-system' -import * as MediaLibrary from 'expo-media-library' import i18next from 'i18next' import { RefObject } from 'react' -import { Platform } from 'react-native' +import { PermissionsAndroid, Platform } from 'react-native' import FlashMessage from 'react-native-flash-message' type CommonProps = { @@ -65,12 +64,31 @@ const saveAndroid = async ({ messageRef, mode, image }: CommonProps) => { await FileSystem.downloadAsync(image.url, fileUri) if (downloadedFile.status != 200) { - console.warn('error!') + haptics('Error') + displayMessage({ + ref: messageRef, + mode, + type: 'error', + message: i18next.t('screenImageViewer:content.save.failed') + }) + return } - const perm = await MediaLibrary.requestPermissionsAsync() - if (!perm.granted) { - return + const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE + + const hasPermission = await PermissionsAndroid.check(permission) + if (!hasPermission) { + const status = await PermissionsAndroid.request(permission) + if (status !== 'granted') { + haptics('Error') + displayMessage({ + ref: messageRef, + mode, + type: 'error', + message: i18next.t('screenImageViewer:content.save.failed') + }) + return + } } CameraRoll.save(downloadedFile.uri)