1f6acc11ab
* package upgrades
* upgrade system ui
* update patches
* rename patch
* rm
* use .set/.set
* resolve yarnlock
* fix accidentally removed package
* fix use permissions hook
* fix some type errors
* type fixes
* more tweaking
* clean
* Discard changes to src/screens/Onboarding/StepProfile/index.tsx
* oops
* fix splash
* use ios/android in config
* Fix tests
* add back patch
* add to rn patch
* fullscreen?
* Revert "add to rn patch"
This reverts commit 4716d2c643.
* try this
* test with revert
* test
* maybe this
* fix config
* Bump @react-native-picker/picker
* Bump some packages
* Rm unused
* Update lockfile
* Rename expo-notifications+0.29.8.patch.md to expo-notifications+0.29.10.patch.md
* Update react-native+0.76.3.patch.md
* Update react-native+0.76.3.patch.md
* Inline splash configs
Jumping around the file is annoying and makes it harder to understand how this is structured.
* Start fixing Android splash
* Downgrade compressor
This version isn't building for me due to https://github.com/numandev1/react-native-compressor/issues/322.
* Make Android splash empty for now
* Work around a bug
* Bump the compressor
* Bump again
* Include splash fixes
* Try updating
* No custom Android splash
* Revert to using icons
* welp
* Fix sizes
* Make sizing work
* Bump size
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
import {Linking} from 'react-native'
|
|
import {useCameraPermissions as useExpoCameraPermissions} from 'expo-camera'
|
|
import * as MediaLibrary from 'expo-media-library'
|
|
|
|
import {isWeb} from '#/platform/detection'
|
|
import {Alert} from '#/view/com/util/Alert'
|
|
|
|
const openPermissionAlert = (perm: string) => {
|
|
Alert.alert(
|
|
'Permission needed',
|
|
`Bluesky does not have permission to access your ${perm}.`,
|
|
[
|
|
{
|
|
text: 'Cancel',
|
|
style: 'cancel',
|
|
},
|
|
{text: 'Open Settings', onPress: () => Linking.openSettings()},
|
|
],
|
|
)
|
|
}
|
|
|
|
export function usePhotoLibraryPermission() {
|
|
const [res, requestPermission] = MediaLibrary.usePermissions({
|
|
granularPermissions: ['photo'],
|
|
})
|
|
const requestPhotoAccessIfNeeded = async () => {
|
|
// On the, we use <input type="file"> to produce a filepicker
|
|
// This does not need any permission granting.
|
|
if (isWeb) {
|
|
return true
|
|
}
|
|
|
|
if (res?.granted) {
|
|
return true
|
|
} else if (!res || res.status === 'undetermined' || res?.canAskAgain) {
|
|
const {canAskAgain, granted, status} = await requestPermission()
|
|
|
|
if (!canAskAgain && status === 'undetermined') {
|
|
openPermissionAlert('photo library')
|
|
}
|
|
|
|
return granted
|
|
} else {
|
|
openPermissionAlert('photo library')
|
|
return false
|
|
}
|
|
}
|
|
return {requestPhotoAccessIfNeeded}
|
|
}
|
|
|
|
export function useVideoLibraryPermission() {
|
|
const [res, requestPermission] = MediaLibrary.usePermissions({
|
|
granularPermissions: ['video'],
|
|
})
|
|
const requestVideoAccessIfNeeded = async () => {
|
|
// On the, we use <input type="file"> to produce a filepicker
|
|
// This does not need any permission granting.
|
|
if (isWeb) {
|
|
return true
|
|
}
|
|
|
|
if (res?.granted) {
|
|
return true
|
|
} else if (!res || res.status === 'undetermined' || res?.canAskAgain) {
|
|
const {canAskAgain, granted, status} = await requestPermission()
|
|
|
|
if (!canAskAgain && status === 'undetermined') {
|
|
openPermissionAlert('video library')
|
|
}
|
|
|
|
return granted
|
|
} else {
|
|
openPermissionAlert('video library')
|
|
return false
|
|
}
|
|
}
|
|
return {requestVideoAccessIfNeeded}
|
|
}
|
|
|
|
export function useCameraPermission() {
|
|
const [res, requestPermission] = useExpoCameraPermissions()
|
|
|
|
const requestCameraAccessIfNeeded = async () => {
|
|
if (res?.granted) {
|
|
return true
|
|
} else if (!res || res?.status === 'undetermined' || res?.canAskAgain) {
|
|
const updatedRes = await requestPermission()
|
|
return updatedRes?.granted
|
|
} else {
|
|
openPermissionAlert('camera')
|
|
return false
|
|
}
|
|
}
|
|
|
|
return {requestCameraAccessIfNeeded}
|
|
}
|