about summary refs log tree commit diff
path: root/src/lib/hooks/usePermissions.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-03-20 15:16:56 -0500
committerGitHub <noreply@github.com>2023-03-20 15:16:56 -0500
commitdf6a712834326d62fdac3fe459bcd1eb23bf5010 (patch)
tree93a9df1e797fc0a7e2bcbba78466a5a6c2ea8b6a /src/lib/hooks/usePermissions.ts
parent4f9e9e609e7ab902e2479447a555c94b719018d8 (diff)
downloadvoidsky-df6a712834326d62fdac3fe459bcd1eb23bf5010.tar.zst
Request permissions properly on mobile (closes #308) (#328)
Diffstat (limited to 'src/lib/hooks/usePermissions.ts')
-rw-r--r--src/lib/hooks/usePermissions.ts14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lib/hooks/usePermissions.ts b/src/lib/hooks/usePermissions.ts
index 19a420d9e..7849949c5 100644
--- a/src/lib/hooks/usePermissions.ts
+++ b/src/lib/hooks/usePermissions.ts
@@ -23,7 +23,7 @@ const openPermissionAlert = (perm: string) => {
 }
 
 export function usePhotoLibraryPermission() {
-  const [mediaLibraryPermissions] = MediaLibrary.usePermissions()
+  const [res, requestPermission] = MediaLibrary.usePermissions()
   const requestPhotoAccessIfNeeded = async () => {
     // On the, we use <input type="file"> to produce a filepicker
     // This does not need any permission granting.
@@ -31,8 +31,11 @@ export function usePhotoLibraryPermission() {
       return true
     }
 
-    if (mediaLibraryPermissions?.status === 'granted') {
+    if (res?.granted) {
       return true
+    } else if (!res || res?.status === 'undetermined' || res?.canAskAgain) {
+      const updatedRes = await requestPermission()
+      return updatedRes?.granted
     } else {
       openPermissionAlert('photo library')
       return false
@@ -42,11 +45,14 @@ export function usePhotoLibraryPermission() {
 }
 
 export function useCameraPermission() {
-  const [cameraPermissionStatus] = Camera.useCameraPermissions()
+  const [res, requestPermission] = Camera.useCameraPermissions()
 
   const requestCameraAccessIfNeeded = async () => {
-    if (cameraPermissionStatus?.granted) {
+    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