<lambda>null1 package versioned.host.exp.exponent.modules.universal
2
3 import com.facebook.react.bridge.NativeModule
4 import com.facebook.react.bridge.ReactApplicationContext
5 import expo.modules.adapters.react.ModuleRegistryAdapter
6 import expo.modules.adapters.react.ReactModuleRegistryProvider
7 import expo.modules.core.interfaces.RegistryLifecycleListener
8 import expo.modules.font.FontLoaderModule
9 import expo.modules.kotlin.ModulesProvider
10 import expo.modules.manifests.core.Manifest
11 import host.exp.exponent.kernel.ExperienceKey
12 import host.exp.exponent.utils.ScopedContext
13 import versioned.host.exp.exponent.core.modules.ExpoGoModule
14 import versioned.host.exp.exponent.modules.api.notifications.ScopedNotificationsCategoriesSerializer
15 import versioned.host.exp.exponent.modules.api.notifications.channels.ScopedNotificationsChannelsProvider
16 import versioned.host.exp.exponent.modules.universal.av.SharedCookiesDataSourceFactoryProvider
17 import versioned.host.exp.exponent.modules.universal.notifications.ScopedExpoNotificationCategoriesModule
18 import versioned.host.exp.exponent.modules.universal.notifications.ScopedExpoNotificationPresentationModule
19 import versioned.host.exp.exponent.modules.universal.notifications.ScopedNotificationScheduler
20 import versioned.host.exp.exponent.modules.universal.notifications.ScopedNotificationsEmitter
21 import versioned.host.exp.exponent.modules.universal.notifications.ScopedNotificationsHandler
22 import versioned.host.exp.exponent.modules.universal.notifications.ScopedServerRegistrationModule
23 import versioned.host.exp.exponent.modules.universal.sensors.ScopedAccelerometerService
24 import versioned.host.exp.exponent.modules.universal.sensors.ScopedGravitySensorService
25 import versioned.host.exp.exponent.modules.universal.sensors.ScopedGyroscopeService
26 import versioned.host.exp.exponent.modules.universal.sensors.ScopedLinearAccelerationSensorService
27 import versioned.host.exp.exponent.modules.universal.sensors.ScopedMagnetometerService
28 import versioned.host.exp.exponent.modules.universal.sensors.ScopedMagnetometerUncalibratedService
29 import versioned.host.exp.exponent.modules.universal.sensors.ScopedRotationVectorSensorService
30
31 open class ExpoModuleRegistryAdapter(moduleRegistryProvider: ReactModuleRegistryProvider?, modulesProvider: ModulesProvider? = null) :
32 ModuleRegistryAdapter(moduleRegistryProvider, modulesProvider), ScopedModuleRegistryAdapter {
33 override fun createNativeModules(
34 scopedContext: ScopedContext,
35 experienceKey: ExperienceKey,
36 experienceProperties: Map<String, Any?>,
37 manifest: Manifest,
38 otherModules: List<NativeModule>
39 ): List<NativeModule> {
40 val moduleRegistry = mModuleRegistryProvider[scopedContext]
41
42 // Overriding sensor services from expo-sensors for scoped implementations using kernel services
43 moduleRegistry.registerInternalModule(ScopedAccelerometerService(experienceKey))
44 moduleRegistry.registerInternalModule(ScopedGravitySensorService(experienceKey))
45 moduleRegistry.registerInternalModule(ScopedGyroscopeService(experienceKey))
46 moduleRegistry.registerInternalModule(ScopedLinearAccelerationSensorService(experienceKey))
47 moduleRegistry.registerInternalModule(ScopedMagnetometerService(experienceKey))
48 moduleRegistry.registerInternalModule(ScopedMagnetometerUncalibratedService(experienceKey))
49 moduleRegistry.registerInternalModule(ScopedRotationVectorSensorService(experienceKey))
50 moduleRegistry.registerInternalModule(SharedCookiesDataSourceFactoryProvider())
51
52 // Overriding expo-constants/ConstantsService -- binding provides manifest and other expo-related constants
53 moduleRegistry.registerInternalModule(ConstantsBinding(scopedContext, experienceProperties, manifest))
54
55 // Overriding expo-file-system FilePermissionModule
56 moduleRegistry.registerInternalModule(ScopedFilePermissionModule(scopedContext))
57
58 // Overriding expo-permissions ScopedPermissionsService
59 moduleRegistry.registerInternalModule(ScopedPermissionsService(scopedContext, experienceKey))
60
61 // Overriding expo-updates UpdatesService
62 moduleRegistry.registerInternalModule(UpdatesBinding(scopedContext, experienceProperties))
63
64 // Overriding expo-notifications classes
65 moduleRegistry.registerInternalModule(ScopedNotificationsChannelsProvider(scopedContext, experienceKey))
66 moduleRegistry.registerInternalModule(ScopedNotificationsCategoriesSerializer())
67
68 // ReactAdapterPackage requires ReactContext
69 val reactContext = scopedContext.context as ReactApplicationContext
70 for (internalModule in mReactAdapterPackage.createInternalModules(reactContext)) {
71 moduleRegistry.registerInternalModule(internalModule)
72 }
73
74 // Overriding ScopedUIManagerModuleWrapper from ReactAdapterPackage
75 moduleRegistry.registerInternalModule(ScopedUIManagerModuleWrapper(reactContext))
76
77 // Adding other modules (not universal) to module registry as consumers.
78 // It allows these modules to refer to universal modules.
79 for (otherModule in otherModules) {
80 if (otherModule is RegistryLifecycleListener) {
81 moduleRegistry.registerExtraListener(otherModule as RegistryLifecycleListener)
82 }
83 }
84 return getNativeModulesFromModuleRegistry(
85 reactContext,
86 moduleRegistry
87 ) { appContext ->
88 with(appContext.registry) {
89 register(
90 ExpoGoModule(manifest),
91 ScopedSecureStoreModule(scopedContext),
92 object : FontLoaderModule() {
93 override val prefix: String
94 get() = "ExpoFont-"
95 }
96 )
97
98 // Notifications
99 register(
100 ScopedNotificationsEmitter(scopedContext, experienceKey),
101 ScopedNotificationsHandler(scopedContext, experienceKey),
102 ScopedServerRegistrationModule(),
103 ScopedNotificationScheduler(scopedContext, experienceKey),
104 ScopedExpoNotificationPresentationModule(scopedContext, experienceKey),
105 ScopedExpoNotificationCategoriesModule(experienceKey)
106 )
107 }
108 }
109 }
110
111 override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
112 throw RuntimeException("Use other implementation of createNativeModules to get a list of native modules.")
113 }
114 }
115