aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session
diff options
context:
space:
mode:
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/session')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginFragment.kt11
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt70
2 files changed, 33 insertions, 48 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginFragment.kt
index 185a444..fa61d53 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginFragment.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginFragment.kt
@@ -15,6 +15,7 @@ import com.zhuinden.liveevent.observe
import kotlinx.coroutines.DelicateCoroutinesApi
import mx.trackermap.TrackerMap.android.databinding.LoginBinding
import mx.trackermap.TrackerMap.android.units.UnitsActivity
+import mx.trackermap.TrackerMap.controllers.SessionController
import org.koin.androidx.viewmodel.ext.android.viewModel
@DelicateCoroutinesApi
@@ -74,19 +75,19 @@ class LoginFragment : Fragment() {
loginViewModel.loginState.observe(viewLifecycleOwner) { result ->
Log.d("LoginFragment", result.toString())
when (result) {
- LoginViewModel.LoginState.Loading -> {
+ SessionController.LoginState.Loading -> {
Toast.makeText(context, "Loading...", Toast.LENGTH_SHORT).show()
}
- LoginViewModel.LoginState.EmailMissing -> {
+ SessionController.LoginState.EmailMissing -> {
Toast.makeText(context, "Email is missing", Toast.LENGTH_SHORT).show()
}
- LoginViewModel.LoginState.PasswordMissing -> {
+ SessionController.LoginState.PasswordMissing -> {
Toast.makeText(context, "Password is missing", Toast.LENGTH_SHORT).show()
}
- LoginViewModel.LoginState.Failure -> {
+ SessionController.LoginState.Failure -> {
Toast.makeText(context, "Failed login", Toast.LENGTH_SHORT).show()
}
- LoginViewModel.LoginState.Success -> {
+ SessionController.LoginState.Success -> {
broadcastManager.sendBroadcast(Intent(EVENT_LOGIN))
val activity = requireActivity()
val intent = Intent(activity.applicationContext, UnitsActivity::class.java)
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
index 8f53b7e..2590504 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
@@ -1,70 +1,54 @@
package mx.trackermap.TrackerMap.android.session
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
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.SessionBody
+import mx.trackermap.TrackerMap.controllers.SessionController
+import org.koin.core.component.KoinComponent
+import org.koin.core.component.inject
+@DelicateCoroutinesApi
class LoginViewModel(
- private val sessionApi: SessionApi,
savedStateHandle: SavedStateHandle
-) : ViewModel() {
+) : ViewModel(), KoinComponent {
- sealed class LoginState {
- object Loading: LoginState()
- object EmailMissing : LoginState()
- object PasswordMissing : LoginState()
- object Failure : LoginState()
- object Success : LoginState()
- }
+ private val sessionController: SessionController by inject()
val email: MutableLiveData<String> = savedStateHandle.getLiveData("user", "")
val password: MutableLiveData<String> = savedStateHandle.getLiveData("password", "")
- private val loginStateEmitter = EventEmitter<LoginState>()
- val loginState: EventSource<LoginState> = loginStateEmitter
+ private val loginStateEmitter = EventEmitter<SessionController.LoginState>()
+ val loginState: EventSource<SessionController.LoginState> = loginStateEmitter
- fun restoreSession() {
- loginStateEmitter.emit(LoginState.Loading);
+ init {
viewModelScope.launch {
- try {
- val user = sessionApi.sessionGet()
- Log.d("LoginViewModel", user.toString())
- loginStateEmitter.emit(LoginState.Success)
- } catch (e: Exception) {
- Log.d("LoginViewModel", "No session")
- }
+ setupLoginStateObserver()
}
}
- fun login() {
- val email = email.value!!.toString().trim()
- val password = password.value!!.toString().trim()
-
- if (email.isEmpty()) {
- loginStateEmitter.emit(LoginState.EmailMissing)
- return
+ private suspend fun setupLoginStateObserver() {
+ sessionController.loginStateFlow.collect {
+ it?.let {
+ loginStateEmitter.emit(it)
+ }
}
+ }
- if (password.isEmpty()) {
- loginStateEmitter.emit(LoginState.PasswordMissing)
- return
- }
+ fun restoreSession() {
+ sessionController.restoreSession()
+ }
- loginStateEmitter.emit(LoginState.Loading)
- viewModelScope.launch {
- try {
- val user = sessionApi.sessionPost(email, password)
- Log.d("LoginViewModel", user.toString())
- loginStateEmitter.emit(LoginState.Success)
- } catch (e: Exception) {
- loginStateEmitter.emit(LoginState.Failure)
- }
- }
+ fun login() {
+ sessionController.login(SessionBody(
+ email = email.value!!,
+ password = password.value!!
+ ))
}
} \ No newline at end of file