aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-01-14 23:01:39 -0600
committerIván Ávalos <avalos@disroot.org>2022-01-14 23:01:39 -0600
commite1360bc0fad1838a8c431d5142ce13cc81c10480 (patch)
tree8fe678322d0370ce4f138ad748f86c4748fcc5e8 /androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
parenta22a13de9b4d1e46bb64371242fa3528bfac7675 (diff)
downloadetbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.tar.gz
etbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.tar.bz2
etbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.zip
Refactored even more session management code into SessionController
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt62
1 files changed, 47 insertions, 15 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
index b2379fc..607f4e5 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt
@@ -1,44 +1,76 @@
package mx.trackermap.TrackerMap.android.session
import android.util.Log
+import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.zhuinden.eventemitter.EventEmitter
+import com.zhuinden.eventemitter.EventSource
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import mx.trackermap.TrackerMap.client.apis.SessionApi
import mx.trackermap.TrackerMap.client.models.User
+import mx.trackermap.TrackerMap.controllers.SessionController
+import org.koin.core.component.KoinComponent
+import org.koin.core.component.inject
-class UserInformationViewModel(private val sessionApi: SessionApi) : ViewModel() {
+@DelicateCoroutinesApi
+class UserInformationViewModel : ViewModel(), KoinComponent {
- sealed class InformationState {
- object Loading: InformationState()
- object Failure: InformationState()
- class Success(val user: User) : InformationState()
- object Signout: InformationState()
+ private val sessionController: SessionController by inject()
+
+ init {
+ Log.d("UserInformationVM", "Initializing User Information View Model")
}
- var userInformation = MutableLiveData<InformationState>(InformationState.Loading)
+ private val _user = MutableLiveData<User>()
+ val user: LiveData<User> get() = _user
+
+ private val loginStateEmitter = EventEmitter<SessionController.LoginState>()
+ val loginState: EventSource<SessionController.LoginState> = loginStateEmitter
init {
- Log.d("UserInformationVM", "Initializing User Information View Model")
+ viewModelScope.launch {
+ setupLoginStateObserver()
+ }
+ viewModelScope.launch {
+ setupUserObserver()
+ }
+ }
+
+ private suspend fun setupLoginStateObserver() {
+ sessionController.loginStateFlow.collect {
+ it?.let {
+ loginStateEmitter.emit(it)
+ }
+ }
+ }
+
+ private suspend fun setupUserObserver() {
+ sessionController.userFlow.collect {
+ it?.let {
+ _user.postValue(it)
+ }
+ }
}
fun fetchUserInfo() {
viewModelScope.launch {
- userInformation.postValue(InformationState.Loading)
+ loginStateEmitter.emit(SessionController.LoginState.Loading)
try {
- userInformation.postValue(InformationState.Success(sessionApi.sessionGet()))
+ sessionController.getSession()
+ loginStateEmitter.emit(SessionController.LoginState.Success)
} catch (e: Exception) {
- userInformation.postValue(InformationState.Failure)
+ loginStateEmitter.emit(SessionController.LoginState.Failure)
}
}
}
- fun signout() {
+ fun signOut() {
viewModelScope.launch {
- userInformation.postValue(InformationState.Loading)
- sessionApi.sessionDelete()
- userInformation.postValue(InformationState.Signout)
+ sessionController.logout()
}
}
} \ No newline at end of file