Florian
10/30/2020, 10:54 AM@Module
@InstallIn(ApplicationComponent::class)
object AppModule {
private lateinit var database: TaskDatabase
@Provides
@Singleton
fun provideDatabase(
app: Application,
@ApplicationScope applicationScope: CoroutineScope
): TaskDatabase {
database = Room.databaseBuilder(app, TaskDatabase::class.java, "task_database")
.fallbackToDestructiveMigration()
.addCallback(object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
val dao = database.taskDao()
applicationScope.launch {
dao.insert(Task("Wash the dishes"))
dao.insert(Task("Do the laundry"))
dao.insert(Task("Buy groceries"))
dao.insert(Task("Call mom"))
}
}
})
.build()
return database
}
@Provides
@Singleton
fun provideTaskDao(db: TaskDatabase) = db.taskDao()
@ApplicationScope
@Provides
@Singleton
fun provideApplicationScope() = CoroutineScope(SupervisorJob())
}
@Retention(AnnotationRetention.BINARY)
@Qualifier
annotation class ApplicationScope
gildor
10/30/2020, 11:36 AMFlorian
10/31/2020, 9:39 AMgildor
10/31/2020, 11:33 AMFlorian
11/01/2020, 10:39 AM@Singleton
@Inject
class DatabaseInitializer(@ApplicationScope coroutineScope: CoroutineScope): RoomDatabase.Callback {
...
}