Speculative fix to Android camera roll issue (#8397)

This commit is contained in:
Samuel Newman
2025-05-21 21:51:57 +03:00
committed by GitHub
parent c16cd36b64
commit a0ea634349
4 changed files with 75 additions and 66 deletions
+6 -40
View File
@@ -1,59 +1,25 @@
import React from 'react'
import * as MediaLibrary from 'expo-media-library'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useCallback} from 'react'
import {saveImageToMediaLibrary, shareImageModal} from '#/lib/media/manip'
import {shareImageModal} from '#/lib/media/manip'
import {useSaveImageToMediaLibrary} from '#/lib/media/save-image'
import {useLightbox, useLightboxControls} from '#/state/lightbox'
import * as Toast from '../util/Toast'
import ImageView from './ImageViewing'
export function Lightbox() {
const {activeLightbox} = useLightbox()
const {closeLightbox} = useLightboxControls()
const onClose = React.useCallback(() => {
const onClose = useCallback(() => {
closeLightbox()
}, [closeLightbox])
const {_} = useLingui()
const [permissionResponse, requestPermission] = MediaLibrary.usePermissions({
granularPermissions: ['photo'],
})
const saveImageToAlbumWithToasts = React.useCallback(
async (uri: string) => {
if (!permissionResponse || permissionResponse.granted === false) {
Toast.show(
_(msg`Permission to access camera roll is required.`),
'info',
)
if (permissionResponse?.canAskAgain) {
requestPermission()
} else {
Toast.show(
_(
msg`Permission to access camera roll was denied. Please enable it in your system settings.`,
),
'xmark',
)
}
return
}
try {
await saveImageToMediaLibrary({uri})
Toast.show(_(msg`Image saved`))
} catch (e: any) {
Toast.show(_(msg`Failed to save image: ${String(e)}`), 'xmark')
}
},
[permissionResponse, requestPermission, _],
)
const saveImageToAlbum = useSaveImageToMediaLibrary()
return (
<ImageView
lightbox={activeLightbox}
onRequestClose={onClose}
onPressSave={saveImageToAlbumWithToasts}
onPressSave={saveImageToAlbum}
onPressShare={uri => shareImageModal({uri})}
/>
)