diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 5d65bc1..664e1a7 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,15 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + @@ -42,4 +118,4 @@ - \ No newline at end of file + diff --git a/app.config.js b/app.config.js index d9f67bd..8c92868 100644 --- a/app.config.js +++ b/app.config.js @@ -80,6 +80,22 @@ module.exports = { // Provide your Google Maps API key googleMapsApiKey: 'YOUR_IOS_GOOGLE_MAPS_API_KEY', }, + infoPlist: { + NSCameraUsageDescription: 'Allow CodeBuilder Admin to access the camera for capturing photos and video.', + NSMicrophoneUsageDescription: 'Allow CodeBuilder Admin to access the microphone for calls, audio, and video capture.', + NSPhotoLibraryUsageDescription: 'Allow CodeBuilder Admin to access your photo library to select media.', + NSPhotoLibraryAddUsageDescription: 'Allow CodeBuilder Admin to save photos or videos to your library.', + NSLocationWhenInUseUsageDescription: 'Allow CodeBuilder Admin to access your location while using the app.', + NSLocationAlwaysAndWhenInUseUsageDescription: 'Allow CodeBuilder Admin to access your location even when the app is not active.', + NSCalendarsUsageDescription: 'Allow CodeBuilder Admin to access your calendars.', + NSContactsUsageDescription: 'Allow CodeBuilder Admin to access your contacts.', + NSBluetoothAlwaysUsageDescription: 'Allow CodeBuilder Admin to use Bluetooth for nearby devices.', + NSBluetoothPeripheralUsageDescription: 'Allow CodeBuilder Admin to use Bluetooth peripherals.', + NSMotionUsageDescription: 'Allow CodeBuilder Admin to access motion data.', + NSSpeechRecognitionUsageDescription: 'Allow CodeBuilder Admin to transcribe speech.', + NSFaceIDUsageDescription: 'Allow CodeBuilder Admin to use Face ID for authentication.', + NSUserTrackingUsageDescription: 'Allow CodeBuilder Admin to track activity for personalized experiences.', + }, }, android: { versionCode: versionData.androidVersionCode, // Using Android versionCode from version.json @@ -88,7 +104,391 @@ module.exports = { backgroundColor: '#ffffff', }, package: 'com.digitalnomad91.codebuilderadmin', - permissions: ['NOTIFICATIONS', 'POST_NOTIFICATIONS', 'READ_PHONE_STATE'], + permissions: [ + 'NOTIFICATIONS', + 'POST_NOTIFICATIONS', + 'android.permission.READ_PHONE_STATE', + 'android.permission.ACCESS_ALL_DOWNLOADS', + 'android.permission.ACCESS_BLUETOOTH_SHARE', + 'android.permission.ACCESS_CACHE_FILESYSTEM', + 'android.permission.ACCESS_CHECKIN_PROPERTIES', + 'android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY', + 'android.permission.ACCESS_DOWNLOAD_MANAGER', + 'android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED', + 'android.permission.ACCESS_DRM_CERTIFICATES', + 'android.permission.ACCESS_EPHEMERAL_APPS', + 'android.permission.ACCESS_FM_RADIO', + 'android.permission.ACCESS_INPUT_FLINGER', + 'android.permission.ACCESS_KEYGUARD_SECURE_STORAGE', + 'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS', + 'android.permission.ACCESS_MOCK_LOCATION', + 'android.permission.ACCESS_MTP', + 'android.permission.ACCESS_NETWORK_CONDITIONS', + 'android.permission.ACCESS_NETWORK_STATE', + 'android.permission.ACCESS_NOTIFICATIONS', + 'android.permission.ACCESS_NOTIFICATION_POLICY', + 'android.permission.ACCESS_PDB_STATE', + 'android.permission.ACCESS_SURFACE_FLINGER', + 'android.permission.ACCESS_VOICE_INTERACTION_SERVICE', + 'android.permission.ACCESS_VR_MANAGER', + 'android.permission.ACCESS_WIFI_STATE', + 'android.permission.ACCESS_WIMAX_STATE', + 'android.permission.ACCESS_BACKGROUND_LOCATION', + 'android.permission.ACCESS_COARSE_LOCATION', + 'android.permission.ACCESS_FINE_LOCATION', + 'android.permission.ACCESS_MEDIA_LOCATION', + 'android.permission.ACCEPT_HANDOVER', + 'android.permission.ACCOUNT_MANAGER', + 'android.permission.ACTIVITY_RECOGNITION', + 'android.permission.ADD_VOICEMAIL', + 'android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK', + 'android.permission.ANSWER_PHONE_CALLS', + 'android.permission.ASEC_ACCESS', + 'android.permission.ASEC_CREATE', + 'android.permission.ASEC_DESTROY', + 'android.permission.ASEC_MOUNT_UNMOUNT', + 'android.permission.ASEC_RENAME', + 'android.permission.AUTHENTICATE_ACCOUNTS', + 'android.permission.BACKUP', + 'android.permission.BATTERY_STATS', + 'android.permission.BIND_ACCESSIBILITY_SERVICE', + 'android.permission.BIND_APPWIDGET', + 'android.permission.BIND_CARRIER_MESSAGING_SERVICE', + 'android.permission.BIND_CARRIER_SERVICES', + 'android.permission.BIND_CHOOSER_TARGET_SERVICE', + 'android.permission.BIND_CONDITION_PROVIDER_SERVICE', + 'android.permission.BIND_CONNECTION_SERVICE', + 'android.permission.BIND_DEVICE_ADMIN', + 'android.permission.BIND_DIRECTORY_SEARCH', + 'android.permission.BIND_DREAM_SERVICE', + 'android.permission.BIND_INCALL_SERVICE', + 'android.permission.BIND_INPUT_METHOD', + 'android.permission.BIND_INTENT_FILTER_VERIFIER', + 'android.permission.BIND_JOB_SERVICE', + 'android.permission.BIND_KEYGUARD_APPWIDGET', + 'android.permission.BIND_MIDI_DEVICE_SERVICE', + 'android.permission.BIND_NFC_SERVICE', + 'android.permission.BIND_NOTIFICATION_LISTENER_SERVICE', + 'android.permission.BIND_NOTIFICATION_RANKER_SERVICE', + 'android.permission.BIND_PACKAGE_VERIFIER', + 'android.permission.BIND_PRINT_RECOMMENDATION_SERVICE', + 'android.permission.BIND_PRINT_SERVICE', + 'android.permission.BIND_PRINT_SPOOLER_SERVICE', + 'android.permission.BIND_QUICK_SETTINGS_TILE', + 'android.permission.BIND_REMOTEVIEWS', + 'android.permission.BIND_REMOTE_DISPLAY', + 'android.permission.BIND_ROUTE_PROVIDER', + 'android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE', + 'android.permission.BIND_SCREENING_SERVICE', + 'android.permission.BIND_TELECOM_CONNECTION_SERVICE', + 'android.permission.BIND_TEXT_SERVICE', + 'android.permission.BIND_TRUST_AGENT', + 'android.permission.BIND_TV_INPUT', + 'android.permission.BIND_TV_REMOTE_SERVICE', + 'android.permission.BIND_VOICE_INTERACTION', + 'android.permission.BIND_VPN_SERVICE', + 'android.permission.BIND_VR_LISTENER_SERVICE', + 'android.permission.BIND_WALLPAPER', + 'android.permission.BLUETOOTH', + 'android.permission.BLUETOOTH_ADMIN', + 'android.permission.BLUETOOTH_ADVERTISE', + 'android.permission.BLUETOOTH_CONNECT', + 'android.permission.BLUETOOTH_MAP', + 'android.permission.BLUETOOTH_PRIVILEGED', + 'android.permission.BLUETOOTH_SCAN', + 'android.permission.BLUETOOTH_STACK', + 'android.permission.BODY_SENSORS', + 'android.permission.BODY_SENSORS_BACKGROUND', + 'android.permission.BRICK', + 'android.permission.BROADCAST_CALLLOG_INFO', + 'android.permission.BROADCAST_NETWORK_PRIVILEGED', + 'android.permission.BROADCAST_PACKAGE_REMOVED', + 'android.permission.BROADCAST_PHONE_ACCOUNT_REGISTRATION', + 'android.permission.BROADCAST_SMS', + 'android.permission.BROADCAST_STICKY', + 'android.permission.BROADCAST_WAP_PUSH', + 'android.permission.CACHE_CONTENT', + 'android.permission.CALL_PHONE', + 'android.permission.CALL_PRIVILEGED', + 'android.permission.CAMERA', + 'android.permission.CAMERA_DISABLE_TRANSMIT_LED', + 'android.permission.CAMERA_SEND_SYSTEM_EVENTS', + 'android.permission.CAPTURE_AUDIO_HOTWORD', + 'android.permission.CAPTURE_AUDIO_OUTPUT', + 'android.permission.CAPTURE_SECURE_VIDEO_OUTPUT', + 'android.permission.CAPTURE_TV_INPUT', + 'android.permission.CAPTURE_VIDEO_OUTPUT', + 'android.permission.CARRIER_FILTER_SMS', + 'android.permission.CHANGE_APP_IDLE_STATE', + 'android.permission.CHANGE_BACKGROUND_DATA_SETTING', + 'android.permission.CHANGE_COMPONENT_ENABLED_STATE', + 'android.permission.CHANGE_CONFIGURATION', + 'android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST', + 'android.permission.CHANGE_NETWORK_STATE', + 'android.permission.CHANGE_WIFI_MULTICAST_STATE', + 'android.permission.CHANGE_WIFI_STATE', + 'android.permission.CHANGE_WIMAX_STATE', + 'android.permission.CLEAR_APP_CACHE', + 'android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS', + 'android.permission.CLEAR_APP_USER_DATA', + 'android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM', + 'android.permission.CONFIGURE_WIFI_DISPLAY', + 'android.permission.CONFIRM_FULL_BACKUP', + 'android.permission.CONNECTIVITY_INTERNAL', + 'android.permission.CONTROL_INCALL_EXPERIENCE', + 'android.permission.CONTROL_KEYGUARD', + 'android.permission.CONTROL_LOCATION_UPDATES', + 'android.permission.CONTROL_VPN', + 'android.permission.CONTROL_WIFI_DISPLAY', + 'android.permission.COPY_PROTECTED_DATA', + 'android.permission.CREATE_USERS', + 'android.permission.CRYPT_KEEPER', + 'android.permission.DELETE_CACHE_FILES', + 'android.permission.DELETE_PACKAGES', + 'android.permission.DEVICE_POWER', + 'android.permission.DIAGNOSTIC', + 'android.permission.DISABLE_KEYGUARD', + 'android.permission.DISPATCH_NFC_MESSAGE', + 'android.permission.DISPATCH_PROVISIONING_MESSAGE', + 'android.permission.DOWNLOAD_CACHE_NON_PURGEABLE', + 'android.permission.DUMP', + 'android.permission.DVB_DEVICE', + 'android.permission.EXPAND_STATUS_BAR', + 'android.permission.FACTORY_TEST', + 'android.permission.FILTER_EVENTS', + 'android.permission.FLASHLIGHT', + 'android.permission.FORCE_BACK', + 'android.permission.FORCE_STOP_PACKAGES', + 'android.permission.FOREGROUND_SERVICE', + 'android.permission.FOREGROUND_SERVICE_CAMERA', + 'android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE', + 'android.permission.FOREGROUND_SERVICE_DATA_SYNC', + 'android.permission.FOREGROUND_SERVICE_HEALTH', + 'android.permission.FOREGROUND_SERVICE_LOCATION', + 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK', + 'android.permission.FOREGROUND_SERVICE_MICROPHONE', + 'android.permission.FOREGROUND_SERVICE_PHONE_CALL', + 'android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING', + 'android.permission.FRAME_STATS', + 'android.permission.FREEZE_SCREEN', + 'android.permission.GET_ACCOUNTS', + 'android.permission.GET_ACCOUNTS_PRIVILEGED', + 'android.permission.GET_APP_GRANTED_URI_PERMISSIONS', + 'android.permission.GET_APP_OPS_STATS', + 'android.permission.GET_DETAILED_TASKS', + 'android.permission.GET_INTENT_SENDER_INTENT', + 'android.permission.GET_PACKAGE_IMPORTANCE', + 'android.permission.GET_PACKAGE_SIZE', + 'android.permission.GET_PASSWORD', + 'android.permission.GET_PROCESS_STATE_AND_OOM_SCORE', + 'android.permission.GET_TASKS', + 'android.permission.GET_TOP_ACTIVITY_INFO', + 'android.permission.GLOBAL_SEARCH', + 'android.permission.GLOBAL_SEARCH_CONTROL', + 'android.permission.GRANT_RUNTIME_PERMISSIONS', + 'android.permission.HARDWARE_TEST', + 'android.permission.HDMI_CEC', + 'android.permission.INJECT_EVENTS', + 'android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS', + 'android.permission.INSTALL_LOCATION_PROVIDER', + 'android.permission.INSTALL_PACKAGES', + 'android.permission.INTENT_FILTER_VERIFICATION_AGENT', + 'android.permission.INTERACT_ACROSS_USERS', + 'android.permission.INTERACT_ACROSS_USERS_FULL', + 'android.permission.INTERNAL_SYSTEM_WINDOW', + 'android.permission.INTERNET', + 'android.permission.INVOKE_CARRIER_SETUP', + 'android.permission.KILL_BACKGROUND_PROCESSES', + 'android.permission.KILL_UID', + 'android.permission.LAUNCH_TRUST_AGENT_SETTINGS', + 'android.permission.LOCAL_MAC_ADDRESS', + 'android.permission.LOCATION_HARDWARE', + 'android.permission.LOOP_RADIO', + 'android.permission.MANAGE_ACCOUNTS', + 'android.permission.MANAGE_ACTIVITY_STACKS', + 'android.permission.MANAGE_APP_OPS_RESTRICTIONS', + 'android.permission.MANAGE_APP_TOKENS', + 'android.permission.MANAGE_CA_CERTIFICATES', + 'android.permission.MANAGE_DEVICE_ADMINS', + 'android.permission.MANAGE_DOCUMENTS', + 'android.permission.MANAGE_EXTERNAL_STORAGE', + 'android.permission.MANAGE_FINGERPRINT', + 'android.permission.MANAGE_MEDIA_PROJECTION', + 'android.permission.MANAGE_NETWORK_POLICY', + 'android.permission.MANAGE_NOTIFICATIONS', + 'android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS', + 'android.permission.MANAGE_SOUND_TRIGGER', + 'android.permission.MANAGE_USB', + 'android.permission.MANAGE_USERS', + 'android.permission.MANAGE_VOICE_KEYPHRASES', + 'android.permission.MASTER_CLEAR', + 'android.permission.MEDIA_CONTENT_CONTROL', + 'android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS', + 'android.permission.MODIFY_AUDIO_ROUTING', + 'android.permission.MODIFY_AUDIO_SETTINGS', + 'android.permission.MODIFY_CELL_BROADCASTS', + 'android.permission.MODIFY_DAY_NIGHT_MODE', + 'android.permission.MODIFY_NETWORK_ACCOUNTING', + 'android.permission.MODIFY_PARENTAL_CONTROLS', + 'android.permission.MODIFY_PHONE_STATE', + 'android.permission.MOUNT_FORMAT_FILESYSTEMS', + 'android.permission.MOUNT_UNMOUNT_FILESYSTEMS', + 'android.permission.MOVE_PACKAGE', + 'android.permission.NEARBY_WIFI_DEVICES', + 'android.permission.NET_ADMIN', + 'android.permission.NET_TUNNELING', + 'android.permission.NFC', + 'android.permission.NFC_HANDOVER_STATUS', + 'android.permission.NFC_TRANSACTION_EVENT', + 'android.permission.NOTIFICATIONS', + 'android.permission.NOTIFY_PENDING_SYSTEM_UPDATE', + 'android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS', + 'android.permission.OEM_UNLOCK_STATE', + 'android.permission.OVERRIDE_WIFI_CONFIG', + 'android.permission.PACKAGE_USAGE_STATS', + 'android.permission.PACKAGE_VERIFICATION_AGENT', + 'android.permission.PACKET_KEEPALIVE_OFFLOAD', + 'android.permission.PEERS_MAC_ADDRESS', + 'android.permission.PERFORM_CDMA_PROVISIONING', + 'android.permission.PERFORM_SIM_ACTIVATION', + 'android.permission.PERSISTENT_ACTIVITY', + 'android.permission.PROCESS_CALLLOG_INFO', + 'android.permission.PROCESS_OUTGOING_CALLS', + 'android.permission.PROCESS_PHONE_ACCOUNT_REGISTRATION', + 'android.permission.PROVIDE_TRUST_AGENT', + 'android.permission.QUERY_ALL_PACKAGES', + 'android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT', + 'android.permission.READ_BLOCKED_NUMBERS', + 'android.permission.READ_CALENDAR', + 'android.permission.READ_CALL_LOG', + 'android.permission.READ_CONTACTS', + 'android.permission.READ_DREAM_STATE', + 'android.permission.READ_EXTERNAL_STORAGE', + 'android.permission.READ_FRAME_BUFFER', + 'android.permission.READ_INPUT_STATE', + 'android.permission.READ_INSTALL_SESSIONS', + 'android.permission.READ_LOGS', + 'android.permission.READ_MEDIA_AUDIO', + 'android.permission.READ_MEDIA_IMAGES', + 'android.permission.READ_MEDIA_VIDEO', + 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED', + 'android.permission.READ_NETWORK_USAGE_HISTORY', + 'android.permission.READ_OEM_UNLOCK_STATE', + 'android.permission.READ_PHONE_NUMBERS', + 'android.permission.READ_PRECISE_PHONE_STATE', + 'android.permission.READ_PRIVILEGED_PHONE_STATE', + 'android.permission.READ_PROFILE', + 'android.permission.READ_SEARCH_INDEXABLES', + 'android.permission.READ_SMS', + 'android.permission.READ_SOCIAL_STREAM', + 'android.permission.READ_SYNC_SETTINGS', + 'android.permission.READ_SYNC_STATS', + 'android.permission.READ_USER_DICTIONARY', + 'android.permission.READ_WIFI_CREDENTIAL', + 'android.permission.REAL_GET_TASKS', + 'android.permission.REBOOT', + 'android.permission.RECEIVE_BLUETOOTH_MAP', + 'android.permission.RECEIVE_BOOT_COMPLETED', + 'android.permission.RECEIVE_DATA_ACTIVITY_CHANGE', + 'android.permission.RECEIVE_EMERGENCY_BROADCAST', + 'android.permission.RECEIVE_MEDIA_RESOURCE_USAGE', + 'android.permission.RECEIVE_MMS', + 'android.permission.RECEIVE_SMS', + 'android.permission.RECEIVE_STK_COMMANDS', + 'android.permission.RECEIVE_WAP_PUSH', + 'android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE', + 'android.permission.RECOVERY', + 'android.permission.RECORD_AUDIO', + 'android.permission.REGISTER_CALL_PROVIDER', + 'android.permission.REGISTER_CONNECTION_MANAGER', + 'android.permission.REGISTER_SIM_SUBSCRIPTION', + 'android.permission.REGISTER_WINDOW_MANAGER_LISTENERS', + 'android.permission.REMOTE_AUDIO_PLAYBACK', + 'android.permission.REMOVE_DRM_CERTIFICATES', + 'android.permission.REMOVE_TASKS', + 'android.permission.REORDER_TASKS', + 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS', + 'android.permission.REQUEST_INSTALL_PACKAGES', + 'android.permission.RESET_FINGERPRINT_LOCKOUT', + 'android.permission.RESET_SHORTCUT_MANAGER_THROTTLING', + 'android.permission.RESTART_PACKAGES', + 'android.permission.RETRIEVE_WINDOW_CONTENT', + 'android.permission.RETRIEVE_WINDOW_TOKEN', + 'android.permission.REVOKE_RUNTIME_PERMISSIONS', + 'android.permission.SCORE_NETWORKS', + 'android.permission.SCHEDULE_EXACT_ALARM', + 'android.permission.SEND_CALL_LOG_CHANGE', + 'android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS', + 'android.permission.SEND_RESPOND_VIA_MESSAGE', + 'android.permission.SEND_SMS', + 'android.permission.SEND_SMS_NO_CONFIRMATION', + 'android.permission.SERIAL_PORT', + 'android.permission.SET_ACTIVITY_WATCHER', + 'android.permission.SET_ALWAYS_FINISH', + 'android.permission.SET_ANIMATION_SCALE', + 'android.permission.SET_DEBUG_APP', + 'android.permission.SET_INPUT_CALIBRATION', + 'android.permission.SET_KEYBOARD_LAYOUT', + 'android.permission.SET_ORIENTATION', + 'android.permission.SET_POINTER_SPEED', + 'android.permission.SET_PREFERRED_APPLICATIONS', + 'android.permission.SET_PROCESS_LIMIT', + 'android.permission.SET_SCREEN_COMPATIBILITY', + 'android.permission.SET_TIME', + 'android.permission.SET_TIME_ZONE', + 'android.permission.SET_WALLPAPER', + 'android.permission.SET_WALLPAPER_COMPONENT', + 'android.permission.SET_WALLPAPER_HINTS', + 'android.permission.SHUTDOWN', + 'android.permission.SIGNAL_PERSISTENT_PROCESSES', + 'android.permission.START_ANY_ACTIVITY', + 'android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY', + 'android.permission.START_TASKS_FROM_RECENTS', + 'android.permission.STATUS_BAR', + 'android.permission.STATUS_BAR_SERVICE', + 'android.permission.STOP_APP_SWITCHES', + 'android.permission.STORAGE_INTERNAL', + 'android.permission.SUBSCRIBED_FEEDS_READ', + 'android.permission.SUBSCRIBED_FEEDS_WRITE', + 'android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME', + 'android.permission.SYSTEM_ALERT_WINDOW', + 'android.permission.TABLET_MODE', + 'android.permission.TEMPORARY_ENABLE_ACCESSIBILITY', + 'android.permission.TETHER_PRIVILEGED', + 'android.permission.TRANSMIT_IR', + 'android.permission.TRUST_LISTENER', + 'android.permission.TV_INPUT_HARDWARE', + 'android.permission.TV_VIRTUAL_REMOTE_CONTROLLER', + 'android.permission.UPDATE_APP_OPS_STATS', + 'android.permission.UPDATE_CONFIG', + 'android.permission.UPDATE_DEVICE_STATS', + 'android.permission.UPDATE_LOCK', + 'android.permission.UPDATE_LOCK_TASK_PACKAGES', + 'android.permission.USER_ACTIVITY', + 'android.permission.USE_BIOMETRIC', + 'android.permission.USE_CREDENTIALS', + 'android.permission.USE_FINGERPRINT', + 'android.permission.USE_FULL_SCREEN_INTENT', + 'android.permission.USE_SIP', + 'android.permission.VIBRATE', + 'android.permission.WAKE_LOCK', + 'android.permission.WRITE_APN_SETTINGS', + 'android.permission.WRITE_BLOCKED_NUMBERS', + 'android.permission.WRITE_CALENDAR', + 'android.permission.WRITE_CALL_LOG', + 'android.permission.WRITE_CONTACTS', + 'android.permission.WRITE_DREAM_STATE', + 'android.permission.WRITE_EXTERNAL_STORAGE', + 'android.permission.WRITE_GSERVICES', + 'android.permission.WRITE_MEDIA_STORAGE', + 'android.permission.WRITE_PROFILE', + 'android.permission.WRITE_SECURE_SETTINGS', + 'android.permission.WRITE_SETTINGS', + 'android.permission.WRITE_SMS', + 'android.permission.WRITE_SOCIAL_STREAM', + 'android.permission.WRITE_SYNC_SETTINGS', + 'android.permission.WRITE_USER_DICTIONARY', + ], googleServicesFile: './google-services.json', useNextNotificationsApi: true, notification: { diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index 6ee54da..41e3084 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -44,6 +44,13 @@ export default function TabLayout() { tabBarIcon: ({ color }: { color: string }) => , }} /> + , + }} + /> ); } diff --git a/app/(tabs)/permissions/camera-mic.tsx b/app/(tabs)/permissions/camera-mic.tsx new file mode 100644 index 0000000..27779ab --- /dev/null +++ b/app/(tabs)/permissions/camera-mic.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import CameraMicrophonePermissionDemo from '@/components/permissions/CameraMicrophonePermissionDemo'; + +export default function CameraMicScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/connectivity.tsx b/app/(tabs)/permissions/connectivity.tsx new file mode 100644 index 0000000..fedd0f4 --- /dev/null +++ b/app/(tabs)/permissions/connectivity.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import BluetoothNearbyPermissionDemo from '@/components/permissions/BluetoothNearbyPermissionDemo'; + +export default function ConnectivityScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/index.tsx b/app/(tabs)/permissions/index.tsx new file mode 100644 index 0000000..a58330f --- /dev/null +++ b/app/(tabs)/permissions/index.tsx @@ -0,0 +1,60 @@ +import { Link } from 'expo-router'; +import React from 'react'; +import { View, Text, StyleSheet, ScrollView, Pressable } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; + +const routes = [ + { href: '/permissions/location', title: 'Location (foreground/background)' }, + { href: '/permissions/camera-mic', title: 'Camera & Microphone' }, + { href: '/permissions/notifications', title: 'Notifications' }, + { href: '/permissions/media-storage', title: 'Media Library' }, + { href: '/permissions/storage', title: 'Storage & File Access' }, + { href: '/permissions/telephony-sms', title: 'Telephony & SMS' }, + { href: '/permissions/connectivity', title: 'Bluetooth & Nearby' }, +]; + +export default function PermissionsHub() { + return ( + + + + + Explore Android permission demos. Each link opens a focused screen that requests the associated runtime permissions and + performs a small capability check. + + {routes.map((route) => ( + + {route.title} + + + Open demo + + + + ))} + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, + content: { padding: 16, gap: 12 }, + lead: { color: '#ccc', fontSize: 14, lineHeight: 20, marginBottom: 6 }, + card: { + backgroundColor: '#111', + padding: 16, + borderRadius: 10, + gap: 8, + borderWidth: 1, + borderColor: '#222', + }, + cardTitle: { color: '#fff', fontSize: 16, fontWeight: '600' }, + button: { + backgroundColor: '#1e88e5', + paddingVertical: 10, + borderRadius: 8, + alignItems: 'center', + }, + buttonText: { color: '#fff', fontWeight: '600' }, +}); diff --git a/app/(tabs)/permissions/location.tsx b/app/(tabs)/permissions/location.tsx new file mode 100644 index 0000000..c9d3855 --- /dev/null +++ b/app/(tabs)/permissions/location.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import LocationPermissionDemo from '@/components/permissions/LocationPermissionDemo'; + +export default function LocationScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/media-storage.tsx b/app/(tabs)/permissions/media-storage.tsx new file mode 100644 index 0000000..5a41d0e --- /dev/null +++ b/app/(tabs)/permissions/media-storage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import MediaLibraryPermissionDemo from '@/components/permissions/MediaLibraryPermissionDemo'; + +export default function MediaStorageScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/notifications.tsx b/app/(tabs)/permissions/notifications.tsx new file mode 100644 index 0000000..cd61eae --- /dev/null +++ b/app/(tabs)/permissions/notifications.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import NotificationsPermissionDemo from '@/components/permissions/NotificationsPermissionDemo'; + +export default function NotificationsScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/storage.tsx b/app/(tabs)/permissions/storage.tsx new file mode 100644 index 0000000..f0b5ce3 --- /dev/null +++ b/app/(tabs)/permissions/storage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import StoragePermissionDemo from '@/components/permissions/StoragePermissionDemo'; + +export default function StorageScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/app/(tabs)/permissions/telephony-sms.tsx b/app/(tabs)/permissions/telephony-sms.tsx new file mode 100644 index 0000000..dcd722b --- /dev/null +++ b/app/(tabs)/permissions/telephony-sms.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import CustomHeader from '@/components/CustomHeader'; +import TelephonySmsPermissionDemo from '@/components/permissions/TelephonySmsPermissionDemo'; + +export default function TelephonySmsScreen() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#000' }, +}); diff --git a/assets/permissions-hub.png b/assets/permissions-hub.png new file mode 100644 index 0000000..0f33627 Binary files /dev/null and b/assets/permissions-hub.png differ diff --git a/components/permissions/BluetoothNearbyPermissionDemo.tsx b/components/permissions/BluetoothNearbyPermissionDemo.tsx new file mode 100644 index 0000000..45a858d --- /dev/null +++ b/components/permissions/BluetoothNearbyPermissionDemo.tsx @@ -0,0 +1,54 @@ +import React, { useState } from 'react'; +import { View, Text, Button, StyleSheet, ScrollView, PermissionsAndroid, Platform } from 'react-native'; + +const REQUESTS = [ + PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT, + PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN, + PermissionsAndroid.PERMISSIONS.BLUETOOTH_ADVERTISE, + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + PermissionsAndroid.PERMISSIONS.NEARBY_WIFI_DEVICES, +]; + +export default function BluetoothNearbyPermissionDemo() { + const [statuses, setStatuses] = useState>({}); + + const request = async () => { + if (Platform.OS !== 'android') { + setStatuses({ platform: 'Only relevant on Android' }); + return; + } + const results = await PermissionsAndroid.requestMultiple(REQUESTS); + setStatuses(results); + }; + + return ( + + Bluetooth & Nearby + + Requests BLUETOOTH_CONNECT / SCAN / ADVERTISE along with NEARBY_WIFI_DEVICES and fine location to showcase nearby device + discovery prerequisites. + +