diff --git a/native/components/edit-avatar.react.js b/native/components/edit-avatar.react.js --- a/native/components/edit-avatar.react.js +++ b/native/components/edit-avatar.react.js @@ -1,12 +1,20 @@ // @flow import { useActionSheet } from '@expo/react-native-action-sheet'; +import * as ImagePicker from 'expo-image-picker'; import * as React from 'react'; import { View, TouchableOpacity, Platform } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { + extensionFromFilename, + filenameFromPathOrURI, +} from 'lib/media/file-utils.js'; +import type { MediaLibrarySelection } from 'lib/types/media-types.js'; + import CommIcon from '../components/comm-icon.react.js'; import SWMansionIcon from '../components/swmansion-icon.react.js'; +import { getCompatibleMediaURI } from '../media/identifier-utils.js'; import { useColors, useStyles } from '../themes/colors.js'; type Props = { @@ -22,6 +30,47 @@ const colors = useColors(); const styles = useStyles(unboundStyles); + // eslint-disable-next-line no-unused-vars + const openPhotoGallery = React.useCallback(async () => { + try { + const { assets, canceled } = await ImagePicker.launchImageLibraryAsync({ + mediaTypes: ImagePicker.MediaTypeOptions.Images, + allowsEditing: true, + allowsMultipleSelection: false, + quality: 1, + }); + + if (canceled || assets.length === 0) { + return; + } + + const asset = assets.pop(); + const { width, height, assetId: mediaNativeID } = asset; + const filename = asset.fileName || filenameFromPathOrURI(asset.uri) || ''; + const uri = getCompatibleMediaURI( + asset.uri, + extensionFromFilename(filename), + ); + + const currentTime = Date.now(); + const selection: MediaLibrarySelection = { + step: 'photo_library', + dimensions: { height, width }, + uri, + filename, + mediaNativeID, + selectTime: currentTime, + sendTime: currentTime, + retries: currentTime, + }; + + return selection; + } catch (e) { + console.log(e); + return; + } + }, []); + const editAvatarOptions = React.useMemo(() => { const options = [ {