1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package versioned.host.exp.exponent.modules.internal
3 
4 import android.net.Uri
5 import com.facebook.react.bridge.JSApplicationIllegalArgumentException
6 import com.facebook.react.bridge.Promise
7 import com.facebook.react.bridge.ReactApplicationContext
8 import com.facebook.react.module.annotations.ReactModule
9 import com.facebook.react.modules.intent.IntentModule
10 import host.exp.exponent.di.NativeModuleDepsProvider
11 import host.exp.exponent.kernel.KernelConstants
12 import host.exp.exponent.kernel.services.ExpoKernelServiceRegistry
13 import javax.inject.Inject
14 
15 @ReactModule(name = IntentModule.NAME, canOverrideExistingModule = true)
16 class ExponentIntentModule(
17   reactContext: ReactApplicationContext,
18   private val experienceProperties: Map<String, Any?>
19 ) : IntentModule(reactContext) {
20   @Inject
21   private lateinit var kernelServiceRegistry: ExpoKernelServiceRegistry
22 
canOverrideExistingModulenull23   override fun canOverrideExistingModule(): Boolean {
24     return true
25   }
26 
getInitialURLnull27   override fun getInitialURL(promise: Promise) {
28     try {
29       promise.resolve(experienceProperties[KernelConstants.INTENT_URI_KEY])
30     } catch (e: Exception) {
31       promise.reject(
32         JSApplicationIllegalArgumentException(
33           "Could not get the initial URL : " + e.message
34         )
35       )
36     }
37   }
38 
openURLnull39   override fun openURL(url: String?, promise: Promise) {
40     if (url == null || url.isEmpty()) {
41       promise.reject(JSApplicationIllegalArgumentException("Invalid URL: $url"))
42       return
43     }
44     val uri = Uri.parse(url)
45     if (kernelServiceRegistry.linkingKernelService.canOpenURI(uri)) {
46       reactApplicationContext.runOnUiQueueThread {
47         kernelServiceRegistry.linkingKernelService.openURI(uri)
48         promise.resolve(true)
49       }
50     } else {
51       super.openURL(url, promise)
52     }
53   }
54 
canOpenURLnull55   override fun canOpenURL(url: String?, promise: Promise) {
56     if (url == null || url.isEmpty()) {
57       promise.reject(JSApplicationIllegalArgumentException("Invalid URL: $url"))
58       return
59     }
60     val uri = Uri.parse(url)
61     if (kernelServiceRegistry.linkingKernelService.canOpenURI(uri)) {
62       promise.resolve(true)
63     } else {
64       super.canOpenURL(url, promise)
65     }
66   }
67 
68   init {
69     NativeModuleDepsProvider.instance.inject(ExponentIntentModule::class.java, this)
70   }
71 }
72