diff --git a/app/src/main/java/one/mixin/android/crypto/db/SignalDatabase.kt b/app/src/main/java/one/mixin/android/crypto/db/SignalDatabase.kt index c87c0cf2de..8d18bdff13 100644 --- a/app/src/main/java/one/mixin/android/crypto/db/SignalDatabase.kt +++ b/app/src/main/java/one/mixin/android/crypto/db/SignalDatabase.kt @@ -12,6 +12,7 @@ import one.mixin.android.crypto.vo.RatchetSenderKey import one.mixin.android.crypto.vo.SenderKey import one.mixin.android.crypto.vo.Session import one.mixin.android.crypto.vo.SignedPreKey +import one.mixin.android.db.MixinDatabase @Database( entities = [ @@ -67,4 +68,9 @@ abstract class SignalDatabase : RoomDatabase() { object : RoomDatabase.Callback() { } } + + override fun close() { + INSTANCE = null + super.close() + } } diff --git a/app/src/main/java/one/mixin/android/db/DatabaseProvider.kt b/app/src/main/java/one/mixin/android/db/DatabaseProvider.kt index 2ec23e97f6..5b4a659004 100644 --- a/app/src/main/java/one/mixin/android/db/DatabaseProvider.kt +++ b/app/src/main/java/one/mixin/android/db/DatabaseProvider.kt @@ -1,6 +1,7 @@ package one.mixin.android.db import android.content.Context +import one.mixin.android.crypto.db.SignalDatabase import one.mixin.android.fts.FtsDatabase import one.mixin.android.db.pending.PendingDatabase import one.mixin.android.db.pending.PendingDatabaseImp @@ -13,6 +14,7 @@ class DatabaseProvider @Inject constructor( private var mixinDatabase: MixinDatabase? = null private var ftsDatabase: FtsDatabase? = null private var pendingDatabase: PendingDatabaseImp? = null + private var signalDatabase: SignalDatabase? = null @Synchronized fun getMixinDatabase(): MixinDatabase { @@ -29,6 +31,11 @@ class DatabaseProvider @Inject constructor( return pendingDatabase ?: throw IllegalStateException("PendingDatabase is not initialized") } + @Synchronized + fun getSignalDatabase(): SignalDatabase { + return signalDatabase ?: throw IllegalStateException("SignalDatabase is not initialized") + } + private var identityNumber: String? = null @Synchronized fun initAllDatabases() { @@ -56,5 +63,8 @@ class DatabaseProvider @Inject constructor( pendingDatabase?.close() pendingDatabase = null + + signalDatabase?.close() + signalDatabase = null } } \ No newline at end of file diff --git a/app/src/main/java/one/mixin/android/di/DatabaseModule.kt b/app/src/main/java/one/mixin/android/di/DatabaseModule.kt index c252a12105..b2b47cbe58 100644 --- a/app/src/main/java/one/mixin/android/di/DatabaseModule.kt +++ b/app/src/main/java/one/mixin/android/di/DatabaseModule.kt @@ -15,13 +15,6 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) @Module internal object DatabaseModule { - @Singleton - @Provides - fun provideSignalDb(app: Application) = SignalDatabase.getDatabase(app) - - @Singleton - @Provides - fun provideRatchetSenderKeyDao(db: SignalDatabase) = db.ratchetSenderKeyDao() @Singleton @Provides @@ -29,6 +22,14 @@ internal object DatabaseModule { return DatabaseProvider(app) } + @Provides + fun provideSignalDb(databaseProvider: DatabaseProvider): SignalDatabase { + return databaseProvider.getSignalDatabase() + } + + @Provides + fun provideRatchetSenderKeyDao(db: SignalDatabase) = db.ratchetSenderKeyDao() + @Provides fun provideAppDatabase( databaseProvider: DatabaseProvider