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 index 377761f2c..ccf5a8b40 100644 --- a/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java +++ b/native/android/app/src/main/java/app/comm/android/CommCoreJSIModulePackage.java @@ -1,27 +1,38 @@ 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.JSIModuleSpec; import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.ReactApplicationContext; import com.swmansion.reanimated.ReanimatedJSIModulePackage; 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 extends ReanimatedJSIModulePackage { @Override public List getJSIModules( ReactApplicationContext reactApplicationContext, JavaScriptContextHolder jsContext) { Supplier secureStoreModuleSupplier = ExpoUtils.createExpoSecureStoreSupplier(reactApplicationContext); CommSecureStore.getInstance().initialize(secureStoreModuleSupplier); CommHybrid.initHybrid(reactApplicationContext); super.getJSIModules(reactApplicationContext, jsContext); + + 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.java b/native/android/app/src/main/java/app/comm/android/MainApplication.java index 3c52232d0..6cd830bd2 100644 --- a/native/android/app/src/main/java/app/comm/android/MainApplication.java +++ b/native/android/app/src/main/java/app/comm/android/MainApplication.java @@ -1,128 +1,110 @@ package app.comm.android; import android.content.Context; import android.content.res.Configuration; import android.database.CursorWindow; import androidx.annotation.NonNull; import androidx.multidex.MultiDexApplication; import app.comm.android.commservices.CommServicesPackage; -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.newarchitecture.MainApplicationReactNativeHost; import app.comm.android.notifications.CommAndroidNotificationsPackage; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JSIModulePackage; import com.facebook.react.config.ReactFeatureFlags; import com.facebook.soloader.SoLoader; import com.wix.reactnativekeyboardinput.KeyboardInputPackage; import expo.modules.ApplicationLifecycleDispatcher; import expo.modules.ReactNativeHostWrapper; -import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.security.Security; import java.util.List; public class MainApplication extends MultiDexApplication implements ReactApplication { static { System.loadLibrary("fbjni"); System.loadLibrary("comm_jni_module"); } private static Context context; private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper(this, new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); packages.add(new KeyboardInputPackage(this.getApplication())); packages.add(new CommAndroidNotificationsPackage()); packages.add(new CommServicesPackage()); return packages; } @Override protected String getJSMainModuleName() { return "index"; } @Override protected JSIModulePackage getJSIModulePackage() { return new CommCoreJSIModulePackage(); } }); private final ReactNativeHost mNewArchitectureNativeHost = new ReactNativeHostWrapper( this, new MainApplicationReactNativeHost(this)); @Override public ReactNativeHost getReactNativeHost() { if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { return mNewArchitectureNativeHost; } else { return mReactNativeHost; } } @Override public void onCreate() { super.onCreate(); // If you opted-in for the New Architecture, we enable the TurboModule // system MainApplication.context = this.getApplicationContext(); ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; Security.insertProviderAt(new org.conscrypt.OpenSSLProvider(), 1); SoLoader.init(this, /* native exopackage */ false); - this.initializeDatabase(); - CommMMKV.initialize(); ApplicationLifecycleDispatcher.onApplicationCreate(this); try { Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize"); field.setAccessible(true); field.set(null, 100 * 1024 * 1024); // 100 MiB } catch (Exception e) { if (BuildConfig.DEBUG) { e.printStackTrace(); } } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); } public static Context getMainApplicationContext() { return MainApplication.context; } - - private void initializeDatabase() { - File sqliteFile = - this.getApplicationContext().getDatabasePath("comm.sqlite"); - CommSecureStore.getInstance().initialize( - ExpoUtils.createExpoSecureStoreSupplier(this.getApplicationContext())); - - GlobalDBSingleton.scheduleOrRun(() -> { - DatabaseInitializer.initializeDatabaseManager(sqliteFile.getPath()); - }); - } }