feat: add home screen long-press shortcuts via expo-quick-actions#6001
feat: add home screen long-press shortcuts via expo-quick-actions#6001
Conversation
Help users about to uninstall Edge recover their accounts: add a warning shortcut linking to the "save 2FA & credentials before uninstalling" support article, and a direct "Contact Support" link. Use expo-quick-actions so titles/subtitles flow through lstrings and Crowdin instead of duplicating translations across 12 locales of InfoPlist.strings and values-*/strings.xml. Shortcuts are registered dynamically in JS, which means they only appear after the first app launch post-install — acceptable since the audience is established users considering uninstall, not fresh installs. The `import 'expo-modules-core'` side effect in index.ts is non- obvious but required: expo-quick-actions reads globalThis.expo.modules.ExpoQuickActions at module-evaluation time, and that global is installed lazily by expo-modules-core's NativeModule/SharedObject/EventEmitter module imports. Without one of those evaluating first the global stays empty and every expo-quick-actions call silently no-ops, including setItems, so the shortcuts never appear.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4bec8ad. Configure here.
| }), | ||
| params: { url: CONTACT_SUPPORT_URL } | ||
| } | ||
| ]).catch(showError) |
There was a problem hiding this comment.
Shorthand .catch(showError) loses stack traces
Low Severity
Both .catch(showError) calls (on QuickActions.setItems(…) and Linking.openURL(url)) use the shorthand form that loses the calling-site stack trace. The project convention (and other service files like Services.tsx and ContactsLoader.ts) consistently use .catch((error: unknown) => showError(error)) instead. This violates the preserve-stack-traces rule.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 4bec8ad. Configure here.
| shortcut_do_not_uninstall_title: '⚠️ Save 2FA First!', | ||
| shortcut_do_not_uninstall_subtitle: 'Login requires 2FA & credentials!', | ||
| shortcut_contact_support_title: 'Contact Support', | ||
| shortcut_contact_support_subtitle: 'Get help from our live support agents', |
There was a problem hiding this comment.
The "live support agents" may not be accurate for white label versions of the app. Should be more generic, something like "Get help from our support team"
| const handleQuickAction = useHandler((action: QuickActions.Action) => { | ||
| const url = action.params?.url | ||
| if (typeof url === 'string') { | ||
| Linking.openURL(url).catch(showError) |
There was a problem hiding this comment.
Instead of sending the user to the browser could we launch the app with a deeplink to a special scene? I don't think it's appropriate to put links to our support pages with our branding in the quick actions of our white label apps. If we deeplink into a scene it can remain themed and use strings with the white label name in them


Help users about to uninstall Edge recover their accounts: add a warning shortcut linking to the "save 2FA & credentials before uninstalling" support article, and a direct "Contact Support" link.
Use expo-quick-actions so titles/subtitles flow through lstrings and Crowdin instead of duplicating translations across 12 locales of InfoPlist.strings and values-*/strings.xml. Shortcuts are registered dynamically in JS, which means they only appear after the first app launch post-install — acceptable since the audience is established users considering uninstall, not fresh installs.
The
import 'expo-modules-core'side effect in index.ts is non- obvious but required: expo-quick-actions readsglobalThis.expo.modules.ExpoQuickActions at module-evaluation time, and that global is installed lazily by expo-modules-core's NativeModule/SharedObject/EventEmitter module imports. Without one of those evaluating first the global stays empty and every expo-quick-actions call silently no-ops, including setItems, so the shortcuts never appear.
CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
noneRequirements
If you have made any visual changes to the GUI. Make sure you have:
Note
Medium Risk
Moderate risk due to new native module dependency (
expo-quick-actions) and iOS pod changes, plus startup-side-effect initialization inindex.tsthat could impact app boot if misconfigured.Overview⚠️ Save 2FA First!" and "Contact Support") that open Edge support URLs.
Adds home screen long-press quick actions via
expo-quick-actions, registering two shortcuts ("Wires a new
QuickActionsManagerintoAppto set items on startup and handle shortcut activation, and adds anexpo-modules-coreside-effect import inindex.tsto ensure the module registry is initialized.Updates iOS pods (
ExpoQuickActions),package.json, lockfiles, localized strings, and theCHANGELOGentry to reflect the new shortcuts.Reviewed by Cursor Bugbot for commit 4bec8ad. Bugbot is set up for automated code reviews on this repo. Configure here.