diff --git a/native/android/app/src/cpp/DatabaseInitializerJNIHelper.cpp b/native/android/app/src/cpp/DatabaseInitializerJNIHelper.cpp new file mode 100644 --- /dev/null +++ b/native/android/app/src/cpp/DatabaseInitializerJNIHelper.cpp @@ -0,0 +1,18 @@ +#include +#include + +namespace comm { +void DatabaseInitializerJNIHelper::initializeDatabaseManager( + facebook::jni::alias_ref jThis, + std::string sqliteFilePath) { + DatabaseManager::initializeQueryExecutor(sqliteFilePath); +} + +void DatabaseInitializerJNIHelper::registerNatives() { + javaClassStatic()->registerNatives({ + makeNativeMethod( + "initializeDatabaseManager", + DatabaseInitializerJNIHelper::initializeDatabaseManager), + }); +} +} // namespace comm diff --git a/native/android/app/src/cpp/MessageOperationsUtilitiesJNIHelper.cpp b/native/android/app/src/cpp/MessageOperationsUtilitiesJNIHelper.cpp --- a/native/android/app/src/cpp/MessageOperationsUtilitiesJNIHelper.cpp +++ b/native/android/app/src/cpp/MessageOperationsUtilitiesJNIHelper.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -9,7 +9,7 @@ facebook::jni::JString rawMessageInfosString) { std::string sqliteFilePathCpp = sqliteFilePath.toStdString(); std::string rawMessageInfosStringCpp = rawMessageInfosString.toStdString(); - SQLiteQueryExecutor::initialize(sqliteFilePathCpp); + DatabaseManager::initializeQueryExecutor(sqliteFilePathCpp); MessageOperationsUtilities::storeMessageInfos(rawMessageInfosStringCpp); } diff --git a/native/android/app/src/cpp/ThreadOperationsJNIHelper.cpp b/native/android/app/src/cpp/ThreadOperationsJNIHelper.cpp --- a/native/android/app/src/cpp/ThreadOperationsJNIHelper.cpp +++ b/native/android/app/src/cpp/ThreadOperationsJNIHelper.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -8,7 +8,7 @@ std::string sqliteFilePath, std::string threadID, bool unread) { - SQLiteQueryExecutor::initialize(sqliteFilePath); + DatabaseManager::initializeQueryExecutor(sqliteFilePath); ThreadOperations::updateSQLiteUnreadStatus(threadID, unread); } diff --git a/native/android/app/src/cpp/jsiInstaller.cpp b/native/android/app/src/cpp/jsiInstaller.cpp --- a/native/android/app/src/cpp/jsiInstaller.cpp +++ b/native/android/app/src/cpp/jsiInstaller.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -57,5 +58,6 @@ comm::ThreadOperationsJNIHelper::registerNatives(); comm::MessageOperationsUtilitiesJNIHelper::registerNatives(); comm::GlobalDBSingletonJNIHelper::registerNatives(); + comm::DatabaseInitializerJNIHelper::registerNatives(); }); } 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 --- a/native/android/app/src/main/java/app/comm/android/MainApplication.java +++ b/native/android/app/src/main/java/app/comm/android/MainApplication.java @@ -5,6 +5,9 @@ import android.database.CursorWindow; import androidx.annotation.NonNull; import androidx.multidex.MultiDexApplication; +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; @@ -18,6 +21,7 @@ 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; @@ -81,6 +85,7 @@ Security.insertProviderAt(new org.conscrypt.OpenSSLProvider(), 1); SoLoader.init(this, /* native exopackage */ false); + this.initializeDatabase(); ApplicationLifecycleDispatcher.onApplicationCreate(this); try { Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize"); @@ -98,4 +103,15 @@ super.onConfigurationChanged(newConfig); ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); } + + private void initializeDatabase() { + File sqliteFile = + this.getApplicationContext().getDatabasePath("comm.sqlite"); + CommSecureStore.getInstance().initialize( + ExpoUtils.createExpoSecureStoreSupplier(this.getApplicationContext())); + + GlobalDBSingleton.scheduleOrRun(() -> { + DatabaseInitializer.initializeDatabaseManager(sqliteFile.getPath()); + }); + } } diff --git a/native/android/app/src/main/java/app/comm/android/fbjni/DatabaseInitializer.java b/native/android/app/src/main/java/app/comm/android/fbjni/DatabaseInitializer.java new file mode 100644 --- /dev/null +++ b/native/android/app/src/main/java/app/comm/android/fbjni/DatabaseInitializer.java @@ -0,0 +1,5 @@ +package app.comm.android.fbjni; + +public class DatabaseInitializer { + public static native void initializeDatabaseManager(String sqliteFilePath); +} diff --git a/native/cpp/CommonCpp/NativeModules/InternalModules/DatabaseInitializerJNIHelper.h b/native/cpp/CommonCpp/NativeModules/InternalModules/DatabaseInitializerJNIHelper.h new file mode 100644 --- /dev/null +++ b/native/cpp/CommonCpp/NativeModules/InternalModules/DatabaseInitializerJNIHelper.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace comm { +class DatabaseInitializerJNIHelper + : public facebook::jni::JavaClass { +public: + static auto constexpr kJavaDescriptor = + "Lapp/comm/android/fbjni/DatabaseInitializer;"; + static void initializeDatabaseManager( + facebook::jni::alias_ref jThis, + std::string sqliteFilePath); + static void registerNatives(); +}; +} // namespace comm