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