Redirect to confirmation screen from the confirmation email

This commit is contained in:
Z. Charles Dziura 2024-11-19 16:09:11 -05:00
parent f107994f0b
commit 83d477f6bb
3 changed files with 29 additions and 15 deletions

View file

@ -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<Destination.AuthGraph>(
startDestination = Destination.RegistrationConfirmationCheckEmailScreen(
emailAddress = "zachary@dziura.email"
)
startDestination = Destination.LoginScreen
) {
composable<Destination.LoginScreen>() { LoginScreen() }
composable<Destination.RegistrationScreen>() { RegistrationScreen() }
composable<Destination.RegistrationConfirmationCheckEmailScreen>() {
composable<Destination.LoginScreen> { LoginScreen() }
composable<Destination.RegistrationScreen> { RegistrationScreen() }
composable<Destination.RegistrationConfirmationCheckEmailScreen> {
val (emailAddress, _) = it.toRoute<Destination.RegistrationConfirmationCheckEmailScreen>()
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))
}
}
}

View file

@ -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)
}
}
}

View file

@ -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()