UNPKG

expo-intent-launcher

Version:

Provides a way to launch Android intents, e.g. opening a specific activity.

183 lines (176 loc) 9.06 kB
import { UnavailabilityError } from 'expo-modules-core'; import ExpoIntentLauncher from './ExpoIntentLauncher'; // @needsAudit /** * Constants are from the source code of [Settings provider](https://developer.android.com/reference/android/provider/Settings). */ export enum ActivityAction { ACCESSIBILITY_SETTINGS = 'android.settings.ACCESSIBILITY_SETTINGS', ADD_ACCOUNT_SETTINGS = 'android.settings.ADD_ACCOUNT_SETTINGS', AIRPLANE_MODE_SETTINGS = 'android.settings.AIRPLANE_MODE_SETTINGS', APN_SETTINGS = 'android.settings.APN_SETTINGS', APP_NOTIFICATION_REDACTION = 'android.settings.ACTION_APP_NOTIFICATION_REDACTION', APP_NOTIFICATION_SETTINGS = 'android.settings.APP_NOTIFICATION_SETTINGS', APP_OPS_SETTINGS = 'android.settings.APP_OPS_SETTINGS', APPLICATION_DETAILS_SETTINGS = 'android.settings.APPLICATION_DETAILS_SETTINGS', APPLICATION_DEVELOPMENT_SETTINGS = 'android.settings.APPLICATION_DEVELOPMENT_SETTINGS', APPLICATION_SETTINGS = 'android.settings.APPLICATION_SETTINGS', BATTERY_SAVER_SETTINGS = 'android.settings.BATTERY_SAVER_SETTINGS', BLUETOOTH_SETTINGS = 'android.settings.BLUETOOTH_SETTINGS', CAPTIONING_SETTINGS = 'android.settings.CAPTIONING_SETTINGS', CAST_SETTINGS = 'android.settings.CAST_SETTINGS', CONDITION_PROVIDER_SETTINGS = 'android.settings.ACTION_CONDITION_PROVIDER_SETTINGS', DATA_ROAMING_SETTINGS = 'android.settings.DATA_ROAMING_SETTINGS', DATE_SETTINGS = 'android.settings.DATE_SETTINGS', DEVICE_INFO_SETTINGS = 'android.settings.DEVICE_INFO_SETTINGS', DEVICE_NAME = 'android.settings.DEVICE_NAME', DISPLAY_SETTINGS = 'android.settings.DISPLAY_SETTINGS', DREAM_SETTINGS = 'android.settings.DREAM_SETTINGS', HARD_KEYBOARD_SETTINGS = 'android.settings.HARD_KEYBOARD_SETTINGS', HOME_SETTINGS = 'android.settings.HOME_SETTINGS', IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS = 'android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS', IGNORE_BATTERY_OPTIMIZATION_SETTINGS = 'android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS', INPUT_METHOD_SETTINGS = 'android.settings.INPUT_METHOD_SETTINGS', INPUT_METHOD_SUBTYPE_SETTINGS = 'android.settings.INPUT_METHOD_SUBTYPE_SETTINGS', INTERNAL_STORAGE_SETTINGS = 'android.settings.INTERNAL_STORAGE_SETTINGS', LOCALE_SETTINGS = 'android.settings.LOCALE_SETTINGS', LOCATION_SOURCE_SETTINGS = 'android.settings.LOCATION_SOURCE_SETTINGS', MANAGE_ALL_APPLICATIONS_SETTINGS = 'android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS', MANAGE_APPLICATIONS_SETTINGS = 'android.settings.MANAGE_APPLICATIONS_SETTINGS', MANAGE_DEFAULT_APPS_SETTINGS = 'android.settings.MANAGE_DEFAULT_APPS_SETTINGS', MEMORY_CARD_SETTINGS = 'android.settings.MEMORY_CARD_SETTINGS', MONITORING_CERT_INFO = 'android.settings.MONITORING_CERT_INFO', NETWORK_OPERATOR_SETTINGS = 'android.settings.NETWORK_OPERATOR_SETTINGS', NFC_PAYMENT_SETTINGS = 'android.settings.NFC_PAYMENT_SETTINGS', NFC_SETTINGS = 'android.settings.NFC_SETTINGS', NFCSHARING_SETTINGS = 'android.settings.NFCSHARING_SETTINGS', NIGHT_DISPLAY_SETTINGS = 'android.settings.NIGHT_DISPLAY_SETTINGS', NOTIFICATION_LISTENER_SETTINGS = 'android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS', NOTIFICATION_POLICY_ACCESS_SETTINGS = 'android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS', NOTIFICATION_SETTINGS = 'android.settings.NOTIFICATION_SETTINGS', PAIRING_SETTINGS = 'android.settings.PAIRING_SETTINGS', PRINT_SETTINGS = 'android.settings.ACTION_PRINT_SETTINGS', PRIVACY_SETTINGS = 'android.settings.PRIVACY_SETTINGS', QUICK_LAUNCH_SETTINGS = 'android.settings.QUICK_LAUNCH_SETTINGS', REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = 'android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS', SECURITY_SETTINGS = 'android.settings.SECURITY_SETTINGS', SETTINGS = 'android.settings.SETTINGS', SHOW_ADMIN_SUPPORT_DETAILS = 'android.settings.SHOW_ADMIN_SUPPORT_DETAILS', SHOW_INPUT_METHOD_PICKER = 'android.settings.SHOW_INPUT_METHOD_PICKER', SHOW_REGULATORY_INFO = 'android.settings.SHOW_REGULATORY_INFO', SHOW_REMOTE_BUGREPORT_DIALOG = 'android.settings.SHOW_REMOTE_BUGREPORT_DIALOG', SOUND_SETTINGS = 'android.settings.SOUND_SETTINGS', STORAGE_MANAGER_SETTINGS = 'android.settings.STORAGE_MANAGER_SETTINGS', SYNC_SETTINGS = 'android.settings.SYNC_SETTINGS', SYSTEM_UPDATE_SETTINGS = 'android.settings.SYSTEM_UPDATE_SETTINGS', TETHER_PROVISIONING_UI = 'android.settings.TETHER_PROVISIONING_UI', TRUSTED_CREDENTIALS_USER = 'android.settings.TRUSTED_CREDENTIALS_USER', USAGE_ACCESS_SETTINGS = 'android.settings.USAGE_ACCESS_SETTINGS', USER_DICTIONARY_INSERT = 'android.settings.USER_DICTIONARY_INSERT', USER_DICTIONARY_SETTINGS = 'android.settings.USER_DICTIONARY_SETTINGS', USER_SETTINGS = 'android.settings.USER_SETTINGS', VOICE_CONTROL_AIRPLANE_MODE = 'android.settings.VOICE_CONTROL_AIRPLANE_MODE', VOICE_CONTROL_BATTERY_SAVER_MODE = 'android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE', VOICE_CONTROL_DO_NOT_DISTURB_MODE = 'android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE', VOICE_INPUT_SETTINGS = 'android.settings.VOICE_INPUT_SETTINGS', VPN_SETTINGS = 'android.settings.VPN_SETTINGS', VR_LISTENER_SETTINGS = 'android.settings.VR_LISTENER_SETTINGS', WEBVIEW_SETTINGS = 'android.settings.WEBVIEW_SETTINGS', WIFI_IP_SETTINGS = 'android.settings.WIFI_IP_SETTINGS', WIFI_SETTINGS = 'android.settings.WIFI_SETTINGS', WIRELESS_SETTINGS = 'android.settings.WIRELESS_SETTINGS', ZEN_MODE_AUTOMATION_SETTINGS = 'android.settings.ZEN_MODE_AUTOMATION_SETTINGS', ZEN_MODE_EVENT_RULE_SETTINGS = 'android.settings.ZEN_MODE_EVENT_RULE_SETTINGS', ZEN_MODE_EXTERNAL_RULE_SETTINGS = 'android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS', ZEN_MODE_PRIORITY_SETTINGS = 'android.settings.ZEN_MODE_PRIORITY_SETTINGS', ZEN_MODE_SCHEDULE_RULE_SETTINGS = 'android.settings.ZEN_MODE_SCHEDULE_RULE_SETTINGS', ZEN_MODE_SETTINGS = 'android.settings.ZEN_MODE_SETTINGS', } // @needsAudit export interface IntentLauncherParams { /** * A string specifying the MIME type of the data represented by the data parameter. Ignore this * argument to allow Android to infer the correct MIME type. */ type?: string; /** * Category provides more details about the action the intent performs. See [Intent.addCategory](https://developer.android.com/reference/android/content/Intent.html#addCategory(java.lang.String)). */ category?: string; /** * A map specifying additional key-value pairs which are passed with the intent as `extras`. * The keys must include a package prefix, for example the app `com.android.contacts` would use * names like `com.android.contacts.ShowAll`. */ extra?: Record<string, any>; /** * A URI specifying the data that the intent should operate upon. (_Note:_ Android requires the URI * scheme to be lowercase, unlike the formal RFC.) */ data?: string; /** * Bitmask of flags to be used. See [Intent.setFlags](<https://developer.android.com/reference/android/content/Intent.html#setFlags(int)>) for more details. */ flags?: number; /** * Package name used as an identifier of ComponentName. Set this only if you want to explicitly * set the component to handle the intent. */ packageName?: string; /** * Class name of the ComponentName. */ className?: string; } // @needsAudit export interface IntentLauncherResult { /** * Result code returned by the activity. */ resultCode: ResultCode; /** * Optional data URI that can be returned by the activity. */ data?: string; /** * Optional extras object that can be returned by the activity. */ extra?: object; } // @needsAudit export enum ResultCode { /** * Indicates that the activity operation succeeded. */ Success = -1, /** * Means that the activity was canceled, e.g. by tapping on the back button. */ Canceled = 0, /** * First custom, user-defined value that can be returned by the activity. */ FirstUser = 1, } // @needsAudit /** * Starts the specified activity. The method will return a promise which resolves when the user * returns to the app. * @param activityAction The action to be performed, e.g. `IntentLauncher.ActivityAction.WIRELESS_SETTINGS`. * There are a few pre-defined constants you can use for this parameter. * You can find them at [expo-intent-launcher/src/IntentLauncher.ts](https://github.com/expo/expo/blob/main/packages/expo-intent-launcher/src/IntentLauncher.ts). * @param params An object of intent parameters. * @return A promise which fulfils with `IntentLauncherResult` object. */ export async function startActivityAsync( activityAction: ActivityAction | string, params: IntentLauncherParams = {} ): Promise<IntentLauncherResult> { if (!ExpoIntentLauncher.startActivity) { throw new UnavailabilityError('IntentLauncher', 'startActivityAsync'); } if (!activityAction || typeof activityAction !== 'string') { throw new TypeError(`'activityAction' argument must be a non-empty string!`); } return ExpoIntentLauncher.startActivity(activityAction, params); }