Created
July 26, 2018 18:56
-
-
Save lomza/eed2014cb58d6c94888a3e3b5990a0f1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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