Simple-Clock/app/src/main/kotlin/com/simplemobiletools/clock/databases/AppDatabase.kt

72 lines
2.7 KiB
Kotlin

package com.simplemobiletools.clock.databases
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.clock.helpers.Converters
import com.simplemobiletools.clock.interfaces.TimerDao
import com.simplemobiletools.clock.models.Timer
import com.simplemobiletools.clock.models.TimerState
import java.util.concurrent.Executors
@Database(entities = [Timer::class], version = 2)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun TimerDao(): TimerDao
companion object {
private var db: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
if (db == null) {
synchronized(AppDatabase::class) {
if (db == null) {
db = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "app.db")
.fallbackToDestructiveMigration()
.addMigrations(MIGRATION_1_2)
.addCallback(object : Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
insertDefaultTimer(context)
}
})
.build()
}
}
}
return db!!
}
private fun insertDefaultTimer(context: Context) {
Executors.newSingleThreadScheduledExecutor().execute {
val config = context.config
db!!.TimerDao().insertOrUpdateTimer(
Timer(
id = null,
seconds = config.timerSeconds,
state = TimerState.Idle,
vibrate = config.timerVibrate,
soundUri = config.timerSoundUri,
soundTitle = config.timerSoundTitle,
label = config.timerLabel ?: "",
createdAt = System.currentTimeMillis(),
channelId = config.timerChannelId,
)
)
}
}
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE timers ADD COLUMN oneShot INTEGER NOT NULL DEFAULT 0")
}
}
}
}