Skip to content

Instantly share code, notes, and snippets.

@lomza
Created July 26, 2018 18:56
Show Gist options
  • Save lomza/eed2014cb58d6c94888a3e3b5990a0f1 to your computer and use it in GitHub Desktop.
Save lomza/eed2014cb58d6c94888a3e3b5990a0f1 to your computer and use it in GitHub Desktop.
@Database(entities = [DayLookEntity::class], version = 2)
abstract class ScreenCounterDb : RoomDatabase() {
private var dbClearFlag = false
abstract fun dayLookDao(): DayLookDbDao
companion object {
@Volatile
private var INSTANCE: ScreenCounterDb? = null
private const val DB_NAME = "lookcount-db"
private val FROM_1_TO_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// tables haven't changed, we're just moving from
// greenDAO impl to Room
}
}
fun getDatabase(context: Context): ScreenCounterDb =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
ScreenCounterDb::class.java, DB_NAME)
.addMigrations(FROM_1_TO_2)
.build()
}
@Synchronized
fun getDayLook(date: String): Maybe<DayLookEntity> {
return if (dbClearFlag) {
Maybe.just(DayLookEntity(null, date, null, null, null))
} else {
dayLookDao().getDayLookByDate(date)
}
}
@Synchronized
fun addDayLook(dayLook: DayLookEntity): Disposable {
Log.d(C.TAG, "Insert/update daylook into the database.")
return Completable.fromAction {
dayLookDao().insert(dayLook)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onComplete = {
Log.d(C.TAG, "addDayLook() insert() completed.")
}, onError = {
Log.e(C.TAG, "addDayLook() error: ${it.printStackTrace()}")
})
}
@Synchronized
fun dropDb() {
this.dbClearFlag = false
Completable.fromAction {
dayLookDao().deleteAll()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onError = {
Log.e(C.TAG, "dropDb() error: ${it.printStackTrace()}")
}
)
}
@Synchronized
fun setDbClearFlag(dbClearFlag: Boolean) {
this.dbClearFlag = dbClearFlag
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment