MainActivity
Код: Выделить всё
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val firstTimeViewModel: FirstTimeViewModel = viewModel()
val isFirstTimeLaunch = firstTimeViewModel.isFirstTimeLaunch
if(isFirstTimeLaunch.value?.isFirstTime == -1){
Column (
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text ="The app was launched for first time")
Spacer(Modifier.height(16.dp))
Button(onClick = {
firstTimeViewModel.updateIsFirstTimeLaunch(FirstTime(1))
}) {
Text(text = "update db value")
}
}
}
else if(isFirstTimeLaunch.value?.isFirstTime == 1){
Text(text = "FirstTime launch is over")
}
}
}
}
Код: Выделить всё
class FirstTimeViewModel(application: Application) : AndroidViewModel(application) {
val isFirstTimeLaunch : LiveData
private val repository: FirstTimeRepository
init {
val firstTimeDao = PassLockDB.getDatabase(application).FirstTimeDao()
repository = FirstTimeRepository(firstTimeDao)
isFirstTimeLaunch = repository.readIsFirstTime
}
fun updateIsFirstTimeLaunch(isFirstTime: FirstTime){
viewModelScope.launch(Dispatchers.IO) {
repository.updateIsFirstTime(isFirstTime)
}
}
}
Код: Выделить всё
class FirstTimeRepository(private val firstTimeDao: FirstTimeDao) {
val readIsFirstTime: LiveData = firstTimeDao.isFirstTimeLaunch()
suspend fun updateIsFirstTime(firstTime:FirstTime){
firstTimeDao.updateFirstTime(firstTime)
}
}
Код: Выделить всё
@Dao
interface FirstTimeDao {
@Update
suspend fun updateFirstTime(firstTime: FirstTime)
@Query("SELECT *from FirstTimeLaunch")
fun isFirstTimeLaunch(): LiveData
}
Код: Выделить всё
@Database(entities = [FirstTime::class], version = 1, exportSchema = false)
abstract class PassLockDB : RoomDatabase() {
abstract fun FirstTimeDao(): FirstTimeDao
companion object{
@Volatile
private var INSTANCE: PassLockDB? = null
fun getDatabase(context: Context): PassLockDB {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
PassLockDB::class.java,
"FirstTimeLaunch"
).createFromAsset("Database/FirstTimeLaunch").build()
INSTANCE =
instance // use singleton , a single instance of database is very efficient
return instance
}
}
}
}
Код: Выделить всё
@Entity (tableName = "FirstTimeLaunch")
data class FirstTime(
@PrimaryKey
val isFirstTime: Int
)
Подробнее здесь: https://stackoverflow.com/questions/783 ... ime-or-not
Мобильная версия