diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 33e6b4cb839..4b5e0c6e9a9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -92,6 +92,9 @@ + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 806da384537..3ba7f5e0a72 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Edge + Contact Support diff --git a/android/app/src/main/res/xml/shortcuts.xml b/android/app/src/main/res/xml/shortcuts.xml new file mode 100644 index 00000000000..430ba845c96 --- /dev/null +++ b/android/app/src/main/res/xml/shortcuts.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/ios/edge/AppDelegate.swift b/ios/edge/AppDelegate.swift index 9483d70d2ba..d107c63289d 100644 --- a/ios/edge/AppDelegate.swift +++ b/ios/edge/AppDelegate.swift @@ -11,6 +11,7 @@ import UserNotifications class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var securityView: UIView? + private var pendingShortcutItem: UIApplicationShortcutItem? var reactNativeDelegate: ReactNativeDelegate? var reactNativeFactory: RCTReactNativeFactory? @@ -49,6 +50,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate { _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { + if let shortcutItem = launchOptions?[.shortcutItem] as? UIApplicationShortcutItem { + pendingShortcutItem = shortcutItem + } + // Initialize SDK's: initializeSentry() FirebaseApp.configure() @@ -72,9 +77,28 @@ class AppDelegate: UIResponder, UIApplicationDelegate { launchOptions: launchOptions ) + if let shortcutItem = pendingShortcutItem { + _ = handleShortcutItem(shortcutItem) + pendingShortcutItem = nil + } + return true } + func application( + _ application: UIApplication, + performActionFor shortcutItem: UIApplicationShortcutItem, + completionHandler: @escaping (Bool) -> Void + ) { + let handled = handleShortcutItem(shortcutItem) + completionHandler(handled) + } + + private func handleShortcutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool { + guard let url = URL(string: shortcutItem.type) else { return false } + return RCTLinkingManager.application(UIApplication.shared, open: url, options: [:]) + } + /** * Periodic background fetch logic. * Edge addition. diff --git a/ios/edge/Info.plist b/ios/edge/Info.plist index 2a9afea9725..cc29dc66360 100644 --- a/ios/edge/Info.plist +++ b/ios/edge/Info.plist @@ -57,6 +57,15 @@ CFBundleVersion 99999999 + UIApplicationShortcutItems + + + UIApplicationShortcutItemTitle + Contact Support + UIApplicationShortcutItemType + edge://scene/webView?title=Contact%20Support&uri=https%3A%2F%2Fsupport.edge.app%2Fhc%2Fen-us%2Frequests%2Fnew + + LSApplicationQueriesSchemes https