diff --git a/app/src/androidTest/java/org/tasks/injection/TestModule.kt b/app/src/androidTest/java/org/tasks/injection/TestModule.kt index b5b19d07d..6b5f6c09d 100644 --- a/app/src/androidTest/java/org/tasks/injection/TestModule.kt +++ b/app/src/androidTest/java/org/tasks/injection/TestModule.kt @@ -2,7 +2,6 @@ package org.tasks.injection import android.content.Context import androidx.room.Room -import androidx.sqlite.driver.bundled.BundledSQLiteDriver import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -24,12 +23,12 @@ import javax.inject.Singleton class TestModule { @Provides @Singleton - fun getDatabase(@ApplicationContext context: Context): Database { - return Room.inMemoryDatabaseBuilder(context, Database::class.java) - .setDriver(BundledSQLiteDriver()) - .fallbackToDestructiveMigration(dropAllTables = true) - .build() - } + fun getDatabase(@ApplicationContext context: Context): Database = + Room + .inMemoryDatabaseBuilder(context, Database::class.java) + .fallbackToDestructiveMigration(dropAllTables = true) + .setDriver() + .build() @Provides fun getPermissionChecker(@ApplicationContext context: Context): PermissionChecker { diff --git a/app/src/main/java/org/tasks/injection/ProductionModule.kt b/app/src/main/java/org/tasks/injection/ProductionModule.kt index 3e249d830..c5a830245 100644 --- a/app/src/main/java/org/tasks/injection/ProductionModule.kt +++ b/app/src/main/java/org/tasks/injection/ProductionModule.kt @@ -6,6 +6,7 @@ import androidx.room.RoomDatabase import androidx.sqlite.SQLiteConnection import androidx.sqlite.driver.bundled.BundledSQLiteDriver import androidx.sqlite.execSQL +import com.todoroo.andlib.utility.AndroidUtilities.atLeastR import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -37,20 +38,13 @@ internal class ProductionModule { fileStorage: FileStorage, ): Database { val databaseFile = context.getDatabasePath(Database.NAME) - val builder = Room.databaseBuilder( - context = context, - name = databaseFile.absolutePath - ) - .setDriver(BundledSQLiteDriver()) - .setQueryCoroutineContext(Dispatchers.IO) - .addCallback(object : RoomDatabase.Callback() { - override fun onOpen(connection: SQLiteConnection) { - super.onOpen(connection) - - connection.execSQL("PRAGMA busy_timeout = 30000") - } - }) + val builder = Room + .databaseBuilder( + context = context, + name = databaseFile.absolutePath + ) .addMigrations(*Migrations.migrations(context, fileStorage)) + .setDriver() if (!BuildConfig.DEBUG || !preferences.getBoolean(R.string.p_crash_main_queries, false)) { builder.allowMainThreadQueries() } @@ -71,4 +65,21 @@ internal class ProductionModule { caldavDao: CaldavDao, openTaskDao: OpenTaskDao, ): WorkManager = WorkManagerImpl(context, preferences, caldavDao, openTaskDao) -} \ No newline at end of file +} + +fun RoomDatabase.Builder.setDriver() = + if (atLeastR()) { + this + } else { + // need bundled sqlite for window functions + this + .setDriver(BundledSQLiteDriver()) + .setQueryCoroutineContext(Dispatchers.IO) + .addCallback(object : RoomDatabase.Callback() { + override fun onOpen(connection: SQLiteConnection) { + super.onOpen(connection) + + connection.execSQL("PRAGMA busy_timeout = 60000") + } + }) + }