This commit is contained in:
Thomas Andres Gomez 2021-05-08 08:48:16 +02:00
parent 7898a51252
commit 8fbe3c0b7b
21 changed files with 359 additions and 35 deletions

View file

@ -1,10 +1,24 @@
package com.pixelized.biblib.ui.viewmodel
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import androidx.core.content.edit
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.pixelized.biblib.data.network.query.AuthLoginQuery
import com.pixelized.biblib.injection.inject
import com.pixelized.biblib.network.client.IBibLibClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class AuthenticationViewModel: ViewModel() {
class AuthenticationViewModel(application: Application) : AndroidViewModel(application) {
private val preferences = application.getSharedPreferences(SHARED_PREF, Context.MODE_PRIVATE)
private val client: IBibLibClient by inject()
private val _login = MutableLiveData<String>()
val login: LiveData<String> get() = _login
@ -12,9 +26,17 @@ class AuthenticationViewModel: ViewModel() {
private val _password = MutableLiveData<String>()
val password: LiveData<String> get() = _password
private val _rememberCredential = MutableLiveData<Boolean>(false)
private val _rememberCredential = MutableLiveData<Boolean>()
val rememberCredential: LiveData<Boolean> get() = _rememberCredential
init {
viewModelScope.launch(Dispatchers.Main) {
_login.value = preferences.login
_password.value = preferences.password
_rememberCredential.value = preferences.rememberCredential
}
}
fun updateLogin(login: String) {
_login.postValue(login)
}
@ -23,7 +45,54 @@ class AuthenticationViewModel: ViewModel() {
_password.postValue(password)
}
fun updateRememberCredential(credential: Boolean) {
_rememberCredential.postValue(credential)
fun updateRememberCredential(rememberCredential: Boolean) {
_rememberCredential.postValue(rememberCredential)
viewModelScope.launch {
preferences.rememberCredential = rememberCredential
if (rememberCredential.not()) {
preferences.login = null
preferences.password = null
}
}
}
fun register() {
}
fun login() {
viewModelScope.launch(Dispatchers.IO) {
if (rememberCredential.value == true) {
preferences.login = login.value
preferences.password = password.value
}
// TODO : validation !
val query = AuthLoginQuery(
username = login.value,
password = password.value
)
// TODO : Repository (token management & co)
val response = client.service.login(query)
Log.e("pouet", response.toString())
}
}
private var SharedPreferences.login: String?
get() = getString(REMEMBER_USER, null)
set(value) = edit { putString(REMEMBER_USER, value) }
private var SharedPreferences.password: String?
get() = getString(REMEMBER_PASSWORD, null)
set(value) = edit { putString(REMEMBER_PASSWORD, value) }
private var SharedPreferences.rememberCredential: Boolean
get() = getBoolean(REMEMBER_CREDENTIAL, false)
set(value) = edit { putBoolean(REMEMBER_CREDENTIAL, value) }
companion object {
const val SHARED_PREF = "BIB_LIB_SHARED_PREF"
const val REMEMBER_CREDENTIAL = "REMEMBER_CREDENTIAL"
const val REMEMBER_USER = "REMEMBER_USER"
const val REMEMBER_PASSWORD = "REMEMBER_PASSWORD"
}
}