diff --git a/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt b/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt index 5de674d1ca..cabc41b4ed 100644 --- a/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt +++ b/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt @@ -17,8 +17,10 @@ package io.element.encrypteddb import android.content.Context -import app.cash.sqldelight.android.AndroidSqliteDriver +import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlDriver +import app.cash.sqldelight.db.SqlSchema +import app.cash.sqldelight.driver.android.AndroidSqliteDriver import io.element.encrypteddb.passphrase.PassphraseProvider import net.sqlcipher.database.SupportFactory @@ -35,7 +37,7 @@ class SqlCipherDriverFactory( * @param name The name of the database to create. * @param context Android [Context], used to instantiate the driver. */ - fun create(schema: SqlDriver.Schema, name: String, context: Context): SqlDriver { + fun create(schema: SqlSchema>, name: String, context: Context): SqlDriver { val passphrase = passphraseProvider.getPassphrase() val factory = SupportFactory(passphrase) return AndroidSqliteDriver(schema = schema, context = context, name = name, factory = factory) diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt index d799a39dac..c437a4ef08 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt @@ -16,10 +16,11 @@ package io.element.android.libraries.sessionstorage.impl +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import app.cash.sqldelight.coroutines.mapToOneOrNull import com.squareup.anvil.annotations.ContributesBinding -import app.cash.sqldelight.runtime.coroutines.asFlow -import app.cash.sqldelight.runtime.coroutines.mapToList -import app.cash.sqldelight.runtime.coroutines.mapToOneOrNull +import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.sessionstorage.api.LoggedInState @@ -34,12 +35,13 @@ import javax.inject.Inject @ContributesBinding(AppScope::class) class DatabaseSessionStore @Inject constructor( private val database: SessionDatabase, + private val dispatchers: CoroutineDispatchers, ) : SessionStore { override fun isLoggedIn(): Flow { return database.sessionDataQueries.selectFirst() .asFlow() - .mapToOneOrNull() + .mapToOneOrNull(dispatchers.io) .map { if (it == null) { LoggedInState.NotLoggedIn @@ -96,7 +98,7 @@ class DatabaseSessionStore @Inject constructor( Timber.w("Observing session list!") return database.sessionDataQueries.selectAll() .asFlow() - .mapToList() + .mapToList(dispatchers.io) .map { it.map { sessionData -> sessionData.toApiModel() } } } diff --git a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt index 30c586abe0..cb5569fb62 100644 --- a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt +++ b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt @@ -16,12 +16,15 @@ package io.element.android.libraries.sessionstorage.impl +import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import app.cash.turbine.test import com.google.common.truth.Truth.assertThat -import app.cash.sqldelight.sqlite.driver.JdbcSqliteDriver +import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.session.SessionData import io.element.android.libraries.sessionstorage.api.LoggedInState import io.element.android.libraries.sessionstorage.api.LoginType +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -44,6 +47,7 @@ class DatabaseSessionStoreTests { loginType = LoginType.UNKNOWN.name, ) + @OptIn(ExperimentalCoroutinesApi::class) @Before fun setup() { // Initialise in memory SQLite driver @@ -51,7 +55,14 @@ class DatabaseSessionStoreTests { SessionDatabase.Schema.create(driver) database = SessionDatabase(driver) - databaseSessionStore = DatabaseSessionStore(database) + databaseSessionStore = DatabaseSessionStore( + database = database, + dispatchers = CoroutineDispatchers( + io = UnconfinedTestDispatcher(), + computation = UnconfinedTestDispatcher(), + main = UnconfinedTestDispatcher(), + ) + ) } @Test