summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-07-31 10:24:55 +0200
committerAlbin <albin@mullvad.net>2024-08-23 09:44:47 +0200
commit23ad8a63f42fe11fbe8bf9641efa56630dd47e0f (patch)
treee4be2609d2d2a5ca03700b7c442f895798adb251 /android
parente686a20f219343d113476ae994d20dba861ef694 (diff)
downloadmullvadvpn-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.kt24
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt14
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() {