From 83d477f6bb8ba2ebf64549f5456caef11963ee64 Mon Sep 17 00:00:00 2001 From: "Z. Charles Dziura" Date: Tue, 19 Nov 2024 16:09:11 -0500 Subject: [PATCH] Redirect to confirmation screen from the confirmation email --- .../debtpirate/app/host/MainActivity.kt | 16 ++++++++++------ .../presentation/register/RegistrationScreen.kt | 17 ++++++++--------- .../register/RegistrationScreenViewModel.kt | 11 +++++++++++ 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/host/MainActivity.kt b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/host/MainActivity.kt index 5a2dc53..c29d494 100644 --- a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/host/MainActivity.kt +++ b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/host/MainActivity.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -31,6 +32,7 @@ import ing.bikeshedengineer.debtpirate.navigation.Navigator import ing.bikeshedengineer.debtpirate.theme.DebtPirateTheme import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import javax.inject.Inject @@ -86,13 +88,11 @@ class MainActivity : ComponentActivity() { } ) { navigation( - startDestination = Destination.RegistrationConfirmationCheckEmailScreen( - emailAddress = "zachary@dziura.email" - ) + startDestination = Destination.LoginScreen ) { - composable() { LoginScreen() } - composable() { RegistrationScreen() } - composable() { + composable { LoginScreen() } + composable { RegistrationScreen() } + composable { val (emailAddress, _) = it.toRoute() ConfirmationScreen( emailAddress @@ -129,6 +129,10 @@ class MainActivity : ComponentActivity() { private fun handleNewUserVerificationIntent(userId: Int, sessionToken: String) { Log.d("DebtPirate::MainActivity", "User ID: $userId, Session Token: $sessionToken") + + lifecycleScope.launch { + navigator.navigate(Destination.RegistrationConfirmationCheckEmailScreen(comingFromEmail = true)) + } } } diff --git a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreen.kt b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreen.kt index 1e4bab0..9344371 100644 --- a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreen.kt +++ b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreen.kt @@ -1,6 +1,7 @@ package ing.bikeshedengineer.debtpirate.app.screen.auth.presentation.register import android.annotation.SuppressLint +import android.util.Log import android.widget.Toast import androidx.activity.ComponentActivity import androidx.compose.foundation.layout.Column @@ -70,17 +71,15 @@ fun RegistrationScreen( val (emailAddress, password) = credentials val result = accountManager.storeCredentials(emailAddress, password) - when (result) { - is AccountManagerResult.Failure -> { - Toast.makeText(context, "Unable to store credentials", Toast.LENGTH_SHORT).show() - } - else -> { - Toast.makeText(context, "Registration successful", Toast.LENGTH_SHORT).show() - viewModel.onAction(RegistrationScreenAction.ResetFields) - viewModel.navigateUp() - } + if (result !is AccountManagerResult.Success) { + Log.i( + "DebtPirate::RegistrationScreen", + "Not able to store credentials in CredentialManager" + ) } + viewModel.onAction(RegistrationScreenAction.ResetFields) + viewModel.navigateToConfirmationScreen(emailAddress) } } } diff --git a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreenViewModel.kt b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreenViewModel.kt index d3ea658..d7b0c41 100644 --- a/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreenViewModel.kt +++ b/app/app/src/main/java/ing/bikeshedengineer/debtpirate/app/screen/auth/presentation/register/RegistrationScreenViewModel.kt @@ -6,6 +6,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import ing.bikeshedengineer.debtpirate.app.screen.auth.usecase.NewAccountRegistrationValidationResult import ing.bikeshedengineer.debtpirate.app.screen.auth.usecase.SubmitAccountRegistrationRequestUseCase import ing.bikeshedengineer.debtpirate.app.screen.auth.usecase.ValidateNewAccountRegistrationUseCase +import ing.bikeshedengineer.debtpirate.navigation.Destination import ing.bikeshedengineer.debtpirate.navigation.Navigator import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -27,6 +28,16 @@ class RegistrationScreenViewModel @Inject constructor( } } + fun navigateToConfirmationScreen(emailAddress: String) { + viewModelScope.launch { + navigator.navigate(Destination.RegistrationConfirmationCheckEmailScreen(emailAddress)) { + popUpTo(Destination.LoginScreen) { + inclusive = true + } + } + } + } + private val _emailAddress = MutableStateFlow("") val emailAddress = _emailAddress.asStateFlow()