bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
129 lines
3.8 KiB
JavaScript
129 lines
3.8 KiB
JavaScript
/**
|
|
* Permissions Utility
|
|
* Handle camera, location, and storage permissions
|
|
*/
|
|
|
|
import { Platform, PermissionsAndroid } from 'react-native';
|
|
import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions';
|
|
|
|
/**
|
|
* Request camera permission
|
|
*/
|
|
export async function requestCameraPermission() {
|
|
if (Platform.OS === 'ios') {
|
|
const result = await check(PERMISSIONS.IOS.CAMERA);
|
|
if (result === RESULTS.DENIED) {
|
|
return await request(PERMISSIONS.IOS.CAMERA);
|
|
}
|
|
return result;
|
|
} else {
|
|
const result = await PermissionsAndroid.request(
|
|
PermissionsAndroid.PERMISSIONS.CAMERA,
|
|
{
|
|
title: 'Camera Permission',
|
|
message: 'quiXzoom needs camera access to capture observations.',
|
|
buttonPositive: 'Allow',
|
|
buttonNegative: 'Deny',
|
|
}
|
|
);
|
|
return result === PermissionsAndroid.RESULTS.GRANTED ? RESULTS.GRANTED : RESULTS.DENIED;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Request location permission
|
|
*/
|
|
export async function requestLocationPermission() {
|
|
if (Platform.OS === 'ios') {
|
|
const result = await check(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);
|
|
if (result === RESULTS.DENIED) {
|
|
return await request(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);
|
|
}
|
|
return result;
|
|
} else {
|
|
const result = await PermissionsAndroid.request(
|
|
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
|
|
{
|
|
title: 'Location Permission',
|
|
message: 'quiXzoom needs location access to tag observations with GPS.',
|
|
buttonPositive: 'Allow',
|
|
buttonNegative: 'Deny',
|
|
}
|
|
);
|
|
return result === PermissionsAndroid.RESULTS.GRANTED ? RESULTS.GRANTED : RESULTS.DENIED;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Request storage permission
|
|
*/
|
|
export async function requestStoragePermission() {
|
|
if (Platform.OS === 'ios') {
|
|
const result = await check(PERMISSIONS.IOS.PHOTO_LIBRARY);
|
|
if (result === RESULTS.DENIED) {
|
|
return await request(PERMISSIONS.IOS.PHOTO_LIBRARY);
|
|
}
|
|
return result;
|
|
} else {
|
|
const result = await PermissionsAndroid.request(
|
|
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
|
|
{
|
|
title: 'Storage Permission',
|
|
message: 'quiXzoom needs storage access to save observations.',
|
|
buttonPositive: 'Allow',
|
|
buttonNegative: 'Deny',
|
|
}
|
|
);
|
|
return result === PermissionsAndroid.RESULTS.GRANTED ? RESULTS.GRANTED : RESULTS.DENIED;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Request all required permissions
|
|
*/
|
|
export async function requestAllPermissions() {
|
|
const results = await Promise.all([
|
|
requestCameraPermission(),
|
|
requestLocationPermission(),
|
|
requestStoragePermission(),
|
|
]);
|
|
|
|
return {
|
|
camera: results[0],
|
|
location: results[1],
|
|
storage: results[2],
|
|
allGranted: results.every(r => r === RESULTS.GRANTED),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Check if all permissions are granted
|
|
*/
|
|
export async function checkPermissions() {
|
|
if (Platform.OS === 'ios') {
|
|
const [camera, location, storage] = await Promise.all([
|
|
check(PERMISSIONS.IOS.CAMERA),
|
|
check(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE),
|
|
check(PERMISSIONS.IOS.PHOTO_LIBRARY),
|
|
]);
|
|
return {
|
|
camera,
|
|
location,
|
|
storage,
|
|
allGranted: camera === RESULTS.GRANTED && location === RESULTS.GRANTED && storage === RESULTS.GRANTED,
|
|
};
|
|
} else {
|
|
const [camera, location, storage] = await Promise.all([
|
|
PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.CAMERA),
|
|
PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION),
|
|
PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE),
|
|
]);
|
|
return {
|
|
camera: camera ? RESULTS.GRANTED : RESULTS.DENIED,
|
|
location: location ? RESULTS.GRANTED : RESULTS.DENIED,
|
|
storage: storage ? RESULTS.GRANTED : RESULTS.DENIED,
|
|
allGranted: camera && location && storage,
|
|
};
|
|
}
|
|
}
|