diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-07-31 10:24:55 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2024-08-23 09:44:47 +0200 |
| commit | 23ad8a63f42fe11fbe8bf9641efa56630dd47e0f (patch) | |
| tree | e4be2609d2d2a5ca03700b7c442f895798adb251 /android | |
| parent | e686a20f219343d113476ae994d20dba861ef694 (diff) | |
| download | mullvadvpn-23ad8a63f42fe11fbe8bf9641efa56630dd47e0f.tar.xz mullvadvpn-23ad8a63f42fe11fbe8bf9641efa56630dd47e0f.zip | |
Propagate clear account history errors
Diffstat (limited to 'android')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt | 24 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt | 14 |
2 files changed, 29 insertions, 9 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt index 8a31520aad..1758a31432 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable @@ -37,6 +38,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -73,6 +75,7 @@ import net.mullvad.mullvadvpn.compose.textfield.mullvadWhiteTextFieldColors import net.mullvad.mullvadvpn.compose.transitions.LoginTransition import net.mullvad.mullvadvpn.compose.util.CollectSideEffectWithLifecycle import net.mullvad.mullvadvpn.compose.util.accountNumberVisualTransformation +import net.mullvad.mullvadvpn.compose.util.showSnackbarImmediately import net.mullvad.mullvadvpn.lib.theme.AppTheme import net.mullvad.mullvadvpn.lib.theme.Dimens import net.mullvad.mullvadvpn.viewmodel.LoginUiSideEffect @@ -126,6 +129,8 @@ fun Login( } } + val context = LocalContext.current + val snackbarHostState = remember { SnackbarHostState() } CollectSideEffectWithLifecycle(vm.uiSideEffect) { when (it) { LoginUiSideEffect.NavigateToWelcome -> @@ -147,21 +152,27 @@ fun Login( launchSingleTop = true popUpTo(NavGraphs.root) { inclusive = true } } + LoginUiSideEffect.GenericError -> + snackbarHostState.showSnackbarImmediately( + message = context.getString(R.string.error_occurred), + ) } } LoginScreen( - state, - vm::login, - vm::createAccount, - vm::clearAccountHistory, - vm::onAccountNumberChange, - dropUnlessResumed { navigator.navigate(SettingsDestination) } + state = state, + snackbarHostState = snackbarHostState, + onLoginClick = vm::login, + onCreateAccountClick = vm::createAccount, + onDeleteHistoryClick = vm::clearAccountHistory, + onAccountNumberChange = vm::onAccountNumberChange, + onSettingsClick = dropUnlessResumed { navigator.navigate(SettingsDestination) } ) } @Composable private fun LoginScreen( state: LoginUiState, + snackbarHostState: SnackbarHostState = SnackbarHostState(), onLoginClick: (String) -> Unit = {}, onCreateAccountClick: () -> Unit = {}, onDeleteHistoryClick: () -> Unit = {}, @@ -169,6 +180,7 @@ private fun LoginScreen( onSettingsClick: () -> Unit = {}, ) { ScaffoldWithTopBar( + snackbarHostState = snackbarHostState, topBarColor = MaterialTheme.colorScheme.primary, iconTintColor = MaterialTheme.colorScheme.onPrimary, onSettingsClicked = onSettingsClick, diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt index 30bea42cfe..3c02c92917 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt @@ -42,6 +42,8 @@ sealed interface LoginUiSideEffect { data object NavigateToOutOfTime : LoginUiSideEffect data class TooManyDevices(val accountNumber: AccountNumber) : LoginUiSideEffect + + data object GenericError : LoginUiSideEffect } class LoginViewModel( @@ -78,9 +80,15 @@ class LoginViewModel( fun clearAccountHistory() = viewModelScope.launch { - accountRepository.clearAccountHistory() - _mutableAccountHistory.update { null } - _mutableAccountHistory.update { accountRepository.fetchAccountHistory() } + accountRepository + .clearAccountHistory() + .fold( + { _uiSideEffect.send(LoginUiSideEffect.GenericError) }, + { + _mutableAccountHistory.update { null } + _mutableAccountHistory.update { accountRepository.fetchAccountHistory() } + } + ) } fun createAccount() { |
