diff --git a/.env.example b/.env.example index f39628e..718a4d1 100644 --- a/.env.example +++ b/.env.example @@ -30,3 +30,18 @@ GH_TOKEN= APP_VERSION= BUILD_NUMBER= BUILD_DATE= + +# Google-Services.JSON +GOOGLE_SERVICES_JSON_BASE64= + +# Expo LAN IP + Port +REACT_NATIVE_PACKAGER_HOSTNAME=192.168.68.63 +EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0 + +# Google Sign-In Development Client ID (with debug SHA-1) +GOOGLE_WEB_CLIENT_ID_DEV= + + +#DO NOT COMMIT THIS +SENTRY_AUTH_TOKEN= + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 62fd5fa..cd50307 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,369 +1,519 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app.config.js b/app.config.js index 0e905c6..645adb1 100644 --- a/app.config.js +++ b/app.config.js @@ -89,6 +89,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 @@ -97,335 +113,424 @@ module.exports = { backgroundColor: '#ffffff', }, package: 'com.digitalnomad91.codebuilderadmin', - "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_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.ACCOUNT_MANAGER", - "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK", - "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_MAP", - "android.permission.BLUETOOTH_PRIVILEGED", - "android.permission.BLUETOOTH_STACK", - "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_PRIVILEGED", - "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.FRAME_STATS", - "android.permission.FREEZE_SCREEN", - "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_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.NET_ADMIN", - "android.permission.NET_TUNNELING", - "android.permission.NFC", - "android.permission.NFC_HANDOVER_STATUS", - "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_PHONE_ACCOUNT_REGISTRATION", - "android.permission.PROVIDE_TRUST_AGENT", - "android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT", - "android.permission.READ_BLOCKED_NUMBERS", - "android.permission.READ_DREAM_STATE", - "android.permission.READ_FRAME_BUFFER", - "android.permission.READ_INPUT_STATE", - "android.permission.READ_INSTALL_SESSIONS", - "android.permission.READ_LOGS", - "android.permission.READ_NETWORK_USAGE_HISTORY", - "android.permission.READ_OEM_UNLOCK_STATE", - "android.permission.READ_PRECISE_PHONE_STATE", - "android.permission.READ_PRIVILEGED_PHONE_STATE", - "android.permission.READ_PROFILE", - "android.permission.READ_SEARCH_INDEXABLES", - "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_STK_COMMANDS", - "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE", - "android.permission.RECOVERY", - "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.SEND_CALL_LOG_CHANGE", - "android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS", - "android.permission.SEND_RESPOND_VIA_MESSAGE", - "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_CREDENTIALS", - "android.permission.VIBRATE", - "android.permission.WAKE_LOCK", - "android.permission.WRITE_APN_SETTINGS", - "android.permission.WRITE_BLOCKED_NUMBERS", - "android.permission.WRITE_DREAM_STATE", - "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" + + /** + * Permissions aligned to AndroidManifest.xml (deduped + invalid removed). + * + * Notes: + * - Removed "NOTIFICATIONS" (not a real Android permission; POST_NOTIFICATIONS is the real one). + * - Removed ACCESS_MOCK_LOCATION (not in the manifest we aligned to; also not generally grantable). + * - Many of the "System/Signature/Privileged" permissions will NOT be granted to normal apps. + * They’re here only because your manifest included them. + */ + permissions: [ + // ========================================================= + // Core app permissions (commonly used by regular apps) + // ========================================================= + + // Networking + 'android.permission.INTERNET', + 'android.permission.ACCESS_NETWORK_STATE', + 'android.permission.ACCESS_WIFI_STATE', + + // Notifications (Android 13+) + 'android.permission.POST_NOTIFICATIONS', + + // Foreground services (base + typed) + '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', + + // Bluetooth + Nearby + 'android.permission.BLUETOOTH', + 'android.permission.BLUETOOTH_ADMIN', + 'android.permission.BLUETOOTH_ADVERTISE', + 'android.permission.BLUETOOTH_CONNECT', + 'android.permission.BLUETOOTH_SCAN', + 'android.permission.NEARBY_WIFI_DEVICES', + + // Camera / Audio + 'android.permission.CAMERA', + 'android.permission.RECORD_AUDIO', + 'android.permission.MODIFY_AUDIO_SETTINGS', + + // Sensors / motion + 'android.permission.ACTIVITY_RECOGNITION', + 'android.permission.BODY_SENSORS', + 'android.permission.BODY_SENSORS_BACKGROUND', + + // NFC + 'android.permission.NFC', + + // Wake / boot + 'android.permission.WAKE_LOCK', + 'android.permission.RECEIVE_BOOT_COMPLETED', + 'android.permission.VIBRATE', + + // ========================================================= + // Runtime permissions (prompted at runtime when used) + // ========================================================= + + // Location + 'android.permission.ACCESS_COARSE_LOCATION', + 'android.permission.ACCESS_FINE_LOCATION', + 'android.permission.ACCESS_BACKGROUND_LOCATION', + 'android.permission.ACCESS_MEDIA_LOCATION', + + // Contacts / Calendar + 'android.permission.READ_CONTACTS', + 'android.permission.WRITE_CONTACTS', + 'android.permission.READ_CALENDAR', + 'android.permission.WRITE_CALENDAR', + + // Phone / call logs + 'android.permission.READ_PHONE_STATE', + 'android.permission.READ_PHONE_NUMBERS', + 'android.permission.ANSWER_PHONE_CALLS', + 'android.permission.CALL_PHONE', + 'android.permission.READ_CALL_LOG', + 'android.permission.WRITE_CALL_LOG', + + // SMS/MMS + 'android.permission.READ_SMS', + 'android.permission.RECEIVE_SMS', + 'android.permission.RECEIVE_MMS', + 'android.permission.RECEIVE_WAP_PUSH', + 'android.permission.SEND_SMS', + + // Storage (legacy scoped storage era) + 'android.permission.READ_EXTERNAL_STORAGE', + 'android.permission.WRITE_EXTERNAL_STORAGE', + + // ========================================================= + // Special access / Settings-granted (not normal runtime prompts) + // ========================================================= + 'android.permission.SCHEDULE_EXACT_ALARM', + 'android.permission.SYSTEM_ALERT_WINDOW', + 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS', + 'android.permission.REQUEST_INSTALL_PACKAGES', + 'android.permission.MANAGE_EXTERNAL_STORAGE', + 'android.permission.PACKAGE_USAGE_STATS', + 'android.permission.ACCESS_NOTIFICATION_POLICY', + 'android.permission.QUERY_ALL_PACKAGES', + 'android.permission.KILL_BACKGROUND_PROCESSES', + + // ========================================================= + // Deprecated / legacy / OEM-ish + // ========================================================= + 'android.permission.ACCESS_WIMAX_STATE', + 'android.permission.CHANGE_WIMAX_STATE', + 'android.permission.NFC_TRANSACTION_EVENT', + 'android.permission.NFC_HANDOVER_STATUS', + 'android.permission.ACCEPT_HANDOVER', + + // ========================================================= + // System / signature / privileged (won’t be granted to normal apps) + // ========================================================= + + // Accounts / auth + 'android.permission.ACCOUNT_MANAGER', + 'android.permission.AUTHENTICATE_ACCOUNTS', + 'android.permission.GET_ACCOUNTS', + 'android.permission.GET_ACCOUNTS_PRIVILEGED', + 'android.permission.MANAGE_ACCOUNTS', + 'android.permission.USE_CREDENTIALS', + + // App/package management + 'android.permission.DELETE_PACKAGES', + 'android.permission.INSTALL_PACKAGES', + 'android.permission.MOVE_PACKAGE', + 'android.permission.PACKAGE_VERIFICATION_AGENT', + 'android.permission.BIND_PACKAGE_VERIFIER', + 'android.permission.CLEAR_APP_USER_DATA', + 'android.permission.CLEAR_APP_CACHE', + 'android.permission.DELETE_CACHE_FILES', + 'android.permission.RESTART_PACKAGES', + + // System UI / status bar + 'android.permission.STATUS_BAR', + 'android.permission.STATUS_BAR_SERVICE', + 'android.permission.EXPAND_STATUS_BAR', + + // Logs / diagnostics + 'android.permission.READ_LOGS', + 'android.permission.DUMP', + 'android.permission.DIAGNOSTIC', + + // Device admin / power + 'android.permission.BIND_DEVICE_ADMIN', + 'android.permission.DEVICE_POWER', + 'android.permission.REBOOT', + 'android.permission.SHUTDOWN', + 'android.permission.MASTER_CLEAR', + + // Input / injection + 'android.permission.INJECT_EVENTS', + 'android.permission.ACCESS_INPUT_FLINGER', + + // Network internals + 'android.permission.NET_ADMIN', + 'android.permission.NET_TUNNELING', + 'android.permission.CONNECTIVITY_INTERNAL', + 'android.permission.OVERRIDE_WIFI_CONFIG', + 'android.permission.LOCAL_MAC_ADDRESS', + + // Internal windows + 'android.permission.INTERNAL_SYSTEM_WINDOW', + + // Telephony privileged + 'android.permission.MODIFY_PHONE_STATE', + 'android.permission.READ_PRIVILEGED_PHONE_STATE', + 'android.permission.READ_PRECISE_PHONE_STATE', + 'android.permission.PROCESS_OUTGOING_CALLS', + 'android.permission.CALL_PRIVILEGED', + + // Media capture + 'android.permission.CAPTURE_AUDIO_OUTPUT', + 'android.permission.CAPTURE_VIDEO_OUTPUT', + 'android.permission.CAPTURE_SECURE_VIDEO_OUTPUT', + 'android.permission.CAPTURE_AUDIO_HOTWORD', + 'android.permission.CAPTURE_TV_INPUT', + + // Notifications/management (privileged) + 'android.permission.ACCESS_NOTIFICATIONS', + 'android.permission.MANAGE_NOTIFICATIONS', + 'android.permission.BIND_NOTIFICATION_LISTENER_SERVICE', + 'android.permission.BIND_NOTIFICATION_RANKER_SERVICE', + + // Wallpapers / secure settings + 'android.permission.SET_WALLPAPER', + 'android.permission.SET_WALLPAPER_COMPONENT', + 'android.permission.SET_WALLPAPER_HINTS', + 'android.permission.WRITE_SETTINGS', + 'android.permission.WRITE_SECURE_SETTINGS', + + // The remaining system-ish items from your aligned manifest block + 'android.permission.ACCESS_ALL_DOWNLOADS', + '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_KEYGUARD_SECURE_STORAGE', + 'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS', + 'android.permission.ACCESS_MTP', + 'android.permission.ACCESS_NETWORK_CONDITIONS', + 'android.permission.ACCESS_PDB_STATE', + 'android.permission.ACCESS_SURFACE_FLINGER', + 'android.permission.ACCESS_VOICE_INTERACTION_SERVICE', + 'android.permission.ACCESS_VR_MANAGER', + 'android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK', + 'android.permission.BACKUP', + 'android.permission.BATTERY_STATS', + 'android.permission.BLUETOOTH_MAP', + 'android.permission.BLUETOOTH_PRIVILEGED', + 'android.permission.BLUETOOTH_STACK', + '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.CAMERA_DISABLE_TRANSMIT_LED', + 'android.permission.CAMERA_SEND_SYSTEM_EVENTS', + '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.CLEAR_APP_GRANTED_URI_PERMISSIONS', + 'android.permission.CONFIGURE_DISPLAY_COLOR_TRANSFORM', + 'android.permission.CONFIGURE_WIFI_DISPLAY', + 'android.permission.CONFIRM_FULL_BACKUP', + '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.DVB_DEVICE', + 'android.permission.FACTORY_TEST', + 'android.permission.FILTER_EVENTS', + 'android.permission.FLASHLIGHT', + 'android.permission.FORCE_BACK', + 'android.permission.FORCE_STOP_PACKAGES', + 'android.permission.FRAME_STATS', + 'android.permission.FREEZE_SCREEN', + '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.INSTALL_GRANT_RUNTIME_PERMISSIONS', + 'android.permission.INSTALL_LOCATION_PROVIDER', + 'android.permission.INTENT_FILTER_VERIFICATION_AGENT', + 'android.permission.INTERACT_ACROSS_USERS', + 'android.permission.INTERACT_ACROSS_USERS_FULL', + 'android.permission.INVOKE_CARRIER_SETUP', + 'android.permission.KILL_UID', + 'android.permission.LAUNCH_TRUST_AGENT_SETTINGS', + 'android.permission.LOCATION_HARDWARE', + 'android.permission.LOOP_RADIO', + '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_FINGERPRINT', + 'android.permission.MANAGE_MEDIA_PROJECTION', + 'android.permission.MANAGE_NETWORK_POLICY', + '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.MEDIA_CONTENT_CONTROL', + 'android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS', + 'android.permission.MODIFY_AUDIO_ROUTING', + 'android.permission.MODIFY_CELL_BROADCASTS', + 'android.permission.MODIFY_DAY_NIGHT_MODE', + 'android.permission.MODIFY_NETWORK_ACCOUNTING', + 'android.permission.MODIFY_PARENTAL_CONTROLS', + 'android.permission.MOUNT_FORMAT_FILESYSTEMS', + 'android.permission.MOUNT_UNMOUNT_FILESYSTEMS', + 'android.permission.NOTIFY_PENDING_SYSTEM_UPDATE', + 'android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS', + 'android.permission.OEM_UNLOCK_STATE', + '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_PHONE_ACCOUNT_REGISTRATION', + 'android.permission.PROVIDE_TRUST_AGENT', + 'android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT', + 'android.permission.READ_BLOCKED_NUMBERS', + 'android.permission.READ_DREAM_STATE', + 'android.permission.READ_FRAME_BUFFER', + 'android.permission.READ_INPUT_STATE', + 'android.permission.READ_INSTALL_SESSIONS', + '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_PROFILE', + 'android.permission.READ_SEARCH_INDEXABLES', + '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.RECEIVE_BLUETOOTH_MAP', + 'android.permission.RECEIVE_DATA_ACTIVITY_CHANGE', + 'android.permission.RECEIVE_EMERGENCY_BROADCAST', + 'android.permission.RECEIVE_MEDIA_RESOURCE_USAGE', + 'android.permission.RECEIVE_STK_COMMANDS', + 'android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE', + 'android.permission.RECOVERY', + '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.RESET_FINGERPRINT_LOCKOUT', + 'android.permission.RESET_SHORTCUT_MANAGER_THROTTLING', + 'android.permission.RETRIEVE_WINDOW_CONTENT', + 'android.permission.RETRIEVE_WINDOW_TOKEN', + 'android.permission.REVOKE_RUNTIME_PERMISSIONS', + 'android.permission.SCORE_NETWORKS', + 'android.permission.SEND_CALL_LOG_CHANGE', + 'android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS', + 'android.permission.SEND_RESPOND_VIA_MESSAGE', + '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.SIGNAL_PERSISTENT_PROCESSES', + 'android.permission.START_ANY_ACTIVITY', + 'android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY', + 'android.permission.START_TASKS_FROM_RECENTS', + '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.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_FINGERPRINT', + 'android.permission.USE_FULL_SCREEN_INTENT', + 'android.permission.USE_SIP', + 'android.permission.WRITE_APN_SETTINGS', + 'android.permission.WRITE_BLOCKED_NUMBERS', + 'android.permission.WRITE_DREAM_STATE', + 'android.permission.WRITE_GSERVICES', + 'android.permission.WRITE_MEDIA_STORAGE', + 'android.permission.WRITE_PROFILE', + '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: { @@ -505,4 +610,4 @@ module.exports = { reactCanary: true, }, }, -}; +}; \ No newline at end of file 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. + +