UNPKG

onboardsync-react-native

Version:

Expo SDK for OnboardSync - Remote onboarding configuration platform with A/B testing

97 lines (88 loc) 3.35 kB
import { Alert, Linking } from 'react-native'; import { Camera } from 'expo-camera'; import * as MediaLibrary from 'expo-media-library'; import * as Location from 'expo-location'; import * as Contacts from 'expo-contacts'; import * as Notifications from 'expo-notifications'; // import * as Device from 'expo-device'; export class PermissionsHandler { static async requestPermission(permission: string): Promise<boolean> { console.log(`[OnboardSync] Requesting permission: ${permission}`); // Check if running in simulator/emulator // const isSimulator = !Device.isDevice; // if (isSimulator) { // console.log('[OnboardSync] Running in simulator, auto-granting permission'); // return true; // } try { switch (permission) { case 'camera': { const { status } = await Camera.requestCameraPermissionsAsync(); const granted = status === 'granted'; console.log(`[OnboardSync] Camera permission ${granted ? 'granted' : 'denied'}`); if (!granted) { this.showSettingsAlert('Camera'); } return granted; } case 'photos': { const { status } = await MediaLibrary.requestPermissionsAsync(); const granted = status === 'granted'; console.log(`[OnboardSync] Photos permission ${granted ? 'granted' : 'denied'}`); if (!granted) { this.showSettingsAlert('Photos'); } return granted; } case 'location': { const { status } = await Location.requestForegroundPermissionsAsync(); const granted = status === 'granted'; console.log(`[OnboardSync] Location permission ${granted ? 'granted' : 'denied'}`); if (!granted) { this.showSettingsAlert('Location'); } return granted; } case 'contacts': { const { status } = await Contacts.requestPermissionsAsync(); const granted = status === 'granted'; console.log(`[OnboardSync] Contacts permission ${granted ? 'granted' : 'denied'}`); if (!granted) { this.showSettingsAlert('Contacts'); } return granted; } case 'notification': { const { status } = await Notifications.requestPermissionsAsync(); const granted = status === 'granted'; console.log(`[OnboardSync] Notifications permission ${granted ? 'granted' : 'denied'}`); if (!granted) { this.showSettingsAlert('Notifications'); } return granted; } default: console.warn(`[OnboardSync] Unknown permission type: ${permission}`); return false; } } catch (error) { console.error(`[OnboardSync] Error requesting permission ${permission}:`, error); return false; } } private static showSettingsAlert(permission: string): void { Alert.alert( `${permission} Permission Required`, `Please enable ${permission} access in your device settings to use this feature.`, [ { text: 'Cancel', style: 'cancel' }, { text: 'Open Settings', onPress: () => { Linking.openSettings(); } }, ] ); } }