observe regsitration state from login view model

This commit is contained in:
Satindar Dhillon
2022-09-08 13:06:12 -07:00
parent 04b4c5ac93
commit 868a24a608
4 changed files with 23 additions and 29 deletions

View File

@ -24,7 +24,7 @@ import androidx.compose.ui.unit.dp
@SuppressLint("CoroutineCreationDuringComposition")
@Composable
fun EmailLoginView(viewModel: LoginViewModel, onAuthProviderButtonTap: () -> Unit) {
fun EmailLoginView(viewModel: LoginViewModel) {
var email by rememberSaveable { mutableStateOf("") }
var password by rememberSaveable { mutableStateOf("") }
@ -53,7 +53,7 @@ fun EmailLoginView(viewModel: LoginViewModel, onAuthProviderButtonTap: () -> Uni
text = AnnotatedString("Return to Social Login"),
style = MaterialTheme.typography.titleMedium
.plus(TextStyle(textDecoration = TextDecoration.Underline)),
onClick = { onAuthProviderButtonTap() }
onClick = { viewModel.showSocialLogin() }
)
}
Spacer(modifier = Modifier.weight(1.0F))

View File

@ -3,10 +3,7 @@ package app.omnivore.omnivore.ui.auth
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.*
import app.omnivore.omnivore.*
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.common.api.ApiException
@ -19,7 +16,7 @@ import javax.inject.Inject
enum class RegistrationState {
AuthProviderButtons,
SocialLogin,
EmailSignIn
}
@ -38,10 +35,20 @@ class LoginViewModel @Inject constructor(
.distinctUntilChanged()
.asLiveData()
val registrationStateLiveData = MutableLiveData(RegistrationState.SocialLogin)
fun getAuthCookieString(): String? = runBlocking {
datastoreRepo.getString(DatastoreKeys.omnivoreAuthCookieString)
}
fun showSocialLogin() {
registrationStateLiveData.value = RegistrationState.SocialLogin
}
fun showEmailSignIn() {
registrationStateLiveData.value = RegistrationState.EmailSignIn
}
fun login(email: String, password: String) {
val emailLogin = RetrofitHelper.getInstance().create(EmailLoginSubmit::class.java)

View File

@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -35,11 +36,9 @@ fun WelcomeScreen(viewModel: LoginViewModel) {
@SuppressLint("CoroutineCreationDuringComposition")
@Composable
fun WelcomeScreenContent(viewModel: LoginViewModel) {
var registrationState by rememberSaveable { mutableStateOf(RegistrationState.AuthProviderButtons) }
val onRegistrationStateChange = { state: RegistrationState ->
registrationState = state
}
val registrationState: RegistrationState by viewModel
.registrationStateLiveData
.observeAsState(RegistrationState.SocialLogin)
val snackBarHostState = remember { SnackbarHostState() }
val coroutineScope = rememberCoroutineScope()
@ -62,14 +61,9 @@ fun WelcomeScreenContent(viewModel: LoginViewModel) {
when(registrationState) {
RegistrationState.EmailSignIn -> {
EmailLoginView(
viewModel = viewModel,
onAuthProviderButtonTap = {
onRegistrationStateChange(RegistrationState.AuthProviderButtons)
}
)
EmailLoginView(viewModel = viewModel)
}
RegistrationState.AuthProviderButtons -> {
RegistrationState.SocialLogin -> {
Text(
text = stringResource(id = R.string.welcome_title),
style = MaterialTheme.typography.headlineLarge
@ -84,10 +78,7 @@ fun WelcomeScreenContent(viewModel: LoginViewModel) {
Spacer(modifier = Modifier.height(50.dp))
AuthProviderView(
viewModel = viewModel,
onEmailButtonTap = { onRegistrationStateChange(RegistrationState.EmailSignIn) }
)
AuthProviderView(viewModel = viewModel)
}
}
@ -112,10 +103,7 @@ fun WelcomeScreenContent(viewModel: LoginViewModel) {
}
@Composable
fun AuthProviderView(
viewModel: LoginViewModel,
onEmailButtonTap: () -> Unit
) {
fun AuthProviderView(viewModel: LoginViewModel) {
val isGoogleAuthAvailable: Boolean = GoogleApiAvailability
.getInstance()
.isGooglePlayServicesAvailable(LocalContext.current) == 0
@ -138,7 +126,7 @@ fun AuthProviderView(
text = AnnotatedString("Continue with Email"),
style = MaterialTheme.typography.titleMedium
.plus(TextStyle(textDecoration = TextDecoration.Underline)),
onClick = { onEmailButtonTap() }
onClick = { viewModel.showEmailSignIn() }
)
}
Spacer(modifier = Modifier.weight(1.0F))

View File

@ -1,6 +1,5 @@
package app.omnivore.omnivore.ui.home
import android.util.Log
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel