До сих пор в моем приложении для Android я использовал общие настройки для хранения локальных данных. Сейчас я работаю над заменой его на Room Persistance Library.
То, что я пытаюсь сделать здесь, довольно просто, но у меня есть некоторые трудности с достижением желаемого результата.
Вот как моя проверка входа в систему работает с общими настройками:
SplashScreenActivity:
if (splashViewModel.isUserLoggedIn()) {
        startActivity(Intent(this, ProfileScreenActivity::class.java))
} else {
        startActivity(Intent(this, LoginScreenActivity::class.java))
}
SplashViewModel:
fun isUserLoggedIn(): Boolean {
        return MainRepository.isUserLoggedIn()
    }
Основной репозиторий:
fun isUserLoggedIn(): Boolean {
        return MySharedPreferences.isUserLoggedIn()
    }
Мои общие настройки:
fun isUserLoggedIn(): Boolean {
        return preferences.getBoolean(ID_USER_LOGGED_IN, false)
    }
Как видите - довольно просто и понятно.
Я смог добиться того же с помощью Room и LiveData, однако моя реализация приводит к странной задержке с SplashScreen, и я думаю, что в этом случае может быть что-то более простое.
Вот моя реализация Room & LiveData:
SplashScreenActivity:
splashViewModel.isUserLoggedInRoom()
splashViewModel.isLoggedIn.observe(this, {
        if (it == true) {
                startActivity(Intent(this, ProfileScreenActivity::class.java))
        } else if (it == false) { 
                startActivity(Intent(this, LoginScreenActivity::class.java))
        }
})
SplashViewModel:
private val _isLoggedIn: MutableLiveData<Boolean> = MutableLiveData()
val isLoggedIn: LiveData<Boolean> = _isLoggedIn
    fun isUserLoggedInRoom() {
        viewModelScope.launch(IO) {
            val response = MainRepository.isUserLoggedInRoom()
            withContext(Main) {
                _isLoggedIn.value = response
            }
        }
    }
Основной репозиторий:
fun isUserLoggedInRoom(): Boolean {
        return loginInfoDao.isLoggedIn()
    }
ЛогинИнфоДао:
@Query("SELECT isLoggedIn FROM LoginInfo WHERE id=$LoginInfoID")
fun isLoggedIn(): Boolean
Я был бы очень признателен, если бы вы могли указать мне правильное направление здесь. Спасибо!
 
                                                                     
                                                                    