Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32158315
D14972.1765037568.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D14972.1765037568.diff
View Options
diff --git a/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java b/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java
deleted file mode 100644
--- a/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package app.comm.android;
-
-import app.comm.android.fbjni.CommHybrid;
-import app.comm.android.fbjni.CommMMKV;
-import app.comm.android.fbjni.CommSecureStore;
-import app.comm.android.fbjni.DatabaseInitializer;
-import app.comm.android.fbjni.GlobalDBSingleton;
-import com.facebook.react.bridge.JSIModulePackage;
-import com.facebook.react.bridge.JSIModuleSpec;
-import com.facebook.react.bridge.JavaScriptContextHolder;
-import com.facebook.react.bridge.ReactApplicationContext;
-import expo.modules.securestore.SecureStoreModule;
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-import java.util.function.Supplier;
-
-public class CommCoreJSIModulePackage implements JSIModulePackage {
-
- @Override
- public List<JSIModuleSpec> getJSIModules(
- ReactApplicationContext reactApplicationContext,
- JavaScriptContextHolder jsContext) {
- Supplier<SecureStoreModule> secureStoreModuleSupplier =
- ExpoUtils.createExpoSecureStoreSupplier(reactApplicationContext);
- CommSecureStore.getInstance().initialize(secureStoreModuleSupplier);
- CommHybrid.initHybrid(reactApplicationContext);
-
- // We issue a useless set on CommSecureStore here to force it to initialize
- // prior to scheduling initializeDatabaseManager on the DB thread below.
- // This avoids a race condition where the DB thread and main thread both
- // attempt to initialize CommSecureStore at the same time, which can cause
- // a crash loop as described in ENG-7696 and ENG-8069.
- CommSecureStore.set("comm.secure_store_initialization_complete", "1");
-
- File sqliteFile = reactApplicationContext.getDatabasePath("comm.sqlite");
- GlobalDBSingleton.scheduleOrRun(() -> {
- DatabaseInitializer.initializeDatabaseManager(sqliteFile.getPath());
- });
- CommMMKV.initialize();
-
- return Collections.emptyList();
- }
-}
diff --git a/native/android/app/src/main/java/app/comm/android/MainApplication.kt b/native/android/app/src/main/java/app/comm/android/MainApplication.kt
--- a/native/android/app/src/main/java/app/comm/android/MainApplication.kt
+++ b/native/android/app/src/main/java/app/comm/android/MainApplication.kt
@@ -8,6 +8,7 @@
import android.content.res.Configuration
import android.database.CursorWindow
import android.os.Build
+import app.comm.android.comminitializermodule.CommInitializerPackage
import app.comm.android.commservices.CommServicesPackage
import app.comm.android.notifications.CommAndroidNotificationsPackage
import com.facebook.react.PackageList
@@ -36,6 +37,7 @@
packages.add(KeyboardInputPackage(this.application))
packages.add(CommAndroidNotificationsPackage())
packages.add(CommServicesPackage())
+ packages.add(CommInitializerPackage())
return packages
}
diff --git a/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModule.kt b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModule.kt
new file mode 100644
--- /dev/null
+++ b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModule.kt
@@ -0,0 +1,38 @@
+package app.comm.android.comminitializermodule
+
+import app.comm.android.fbjni.CommHybrid
+import app.comm.android.fbjni.CommMMKV
+import app.comm.android.fbjni.CommSecureStore
+import app.comm.android.fbjni.DatabaseInitializer
+import app.comm.android.fbjni.GlobalDBSingleton
+import app.comm.android.securestore.SecureStoreModule
+import com.facebook.react.bridge.ReactApplicationContext
+import com.facebook.react.bridge.ReactMethod
+import com.facebook.react.module.annotations.ReactModule
+
+@ReactModule(name = CommInitializerModuleSpec.NAME)
+class CommInitializerModule(reactContext: ReactApplicationContext?) :
+ CommInitializerModuleSpec(reactContext) {
+ @ReactMethod(isBlockingSynchronousMethod = true)
+ override fun initializeComm(): Boolean {
+ CommSecureStore.getInstance().initialize({
+ SecureStoreModule(reactApplicationContext)
+ })
+ CommHybrid.initHybrid(reactApplicationContext)
+
+ // We issue a useless set on CommSecureStore here to force it to initialize
+ // prior to scheduling initializeDatabaseManager on the DB thread below.
+ // This avoids a race condition where the DB thread and main thread both
+ // attempt to initialize CommSecureStore at the same time, which can cause
+ // a crash loop as described in ENG-7696 and ENG-8069.
+ CommSecureStore.set("comm.secure_store_initialization_complete", "1")
+
+ val sqliteFile = reactApplicationContext.getDatabasePath("comm.sqlite")
+ GlobalDBSingleton.scheduleOrRun {
+ DatabaseInitializer.initializeDatabaseManager(sqliteFile.path)
+ }
+ CommMMKV.initialize()
+
+ return true
+ }
+}
\ No newline at end of file
diff --git a/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModuleSpec.kt b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModuleSpec.kt
new file mode 100644
--- /dev/null
+++ b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerModuleSpec.kt
@@ -0,0 +1,24 @@
+package app.comm.android.comminitializermodule
+
+import com.facebook.proguard.annotations.DoNotStrip
+import com.facebook.react.bridge.ReactApplicationContext
+import com.facebook.react.bridge.ReactContextBaseJavaModule
+import com.facebook.react.bridge.ReactMethod
+import com.facebook.react.turbomodule.core.interfaces.TurboModule
+import javax.annotation.Nonnull
+
+abstract class CommInitializerModuleSpec(reactContext: ReactApplicationContext?) :
+ ReactContextBaseJavaModule(reactContext), TurboModule {
+ @Nonnull
+ override fun getName(): String {
+ return NAME
+ }
+
+ @ReactMethod(isBlockingSynchronousMethod = true)
+ @DoNotStrip
+ abstract fun initializeComm(): Boolean
+
+ companion object {
+ const val NAME: String = "CommInitializerModule"
+ }
+}
\ No newline at end of file
diff --git a/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerPackage.kt b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerPackage.kt
new file mode 100644
--- /dev/null
+++ b/native/android/app/src/main/java/app/comm/android/comminitializermodule/CommInitializerPackage.kt
@@ -0,0 +1,50 @@
+package app.comm.android.comminitializermodule
+
+import com.facebook.react.BaseReactPackage
+import com.facebook.react.ReactPackage
+import com.facebook.react.bridge.NativeModule
+import com.facebook.react.bridge.ReactApplicationContext
+import com.facebook.react.module.annotations.ReactModule
+import com.facebook.react.module.annotations.ReactModuleList
+import com.facebook.react.module.model.ReactModuleInfo
+import com.facebook.react.module.model.ReactModuleInfoProvider
+import java.util.Objects
+
+@ReactModuleList(
+ nativeModules = [CommInitializerModule::class]
+)
+class CommInitializerPackage : BaseReactPackage(), ReactPackage {
+ override fun getModule(
+ name: String, reactContext: ReactApplicationContext
+ ): NativeModule? {
+ return when (name) {
+ CommInitializerModuleSpec.NAME -> CommInitializerModule(reactContext)
+ else -> null
+ }
+ }
+
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
+ val moduleList: Array<Class<*>> = arrayOf(CommInitializerModule::class.java)
+
+ val reactModuleInfoMap: MutableMap<String, ReactModuleInfo> = HashMap()
+ for (moduleClass in moduleList) {
+ val reactModule =
+ Objects.requireNonNull(
+ moduleClass.getAnnotation(
+ ReactModule::class.java
+ )
+ )
+
+ reactModuleInfoMap[reactModule.name] = ReactModuleInfo(
+ reactModule.name,
+ moduleClass.name,
+ reactModule.canOverrideExistingModule,
+ reactModule.needsEagerInit,
+ reactModule.isCxxModule,
+ true
+ )
+ }
+
+ return ReactModuleInfoProvider { reactModuleInfoMap }
+ }
+}
\ No newline at end of file
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Dec 6, 4:12 PM (22 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5839408
Default Alt Text
D14972.1765037568.diff (8 KB)
Attached To
Mode
D14972: [native][RN79][skip-ci] Add CommInitializerModule [android]
Attached
Detach File
Event Timeline
Log In to Comment