From 0539861008d8c7493bb95bcce634c9596c7b0ce8 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 15 Jan 2023 11:50:01 -0500 Subject: [PATCH] Adds error handling for invalid keys on login --- .../ui/screen/loggedOff/LoginScreen.kt | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt index d01f3c6de..8079c5544 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.ClickableText +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.Button import androidx.compose.material.Icon @@ -67,6 +68,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) { ) { val key = remember { mutableStateOf(TextFieldValue("")) } + var errorMessage by remember { mutableStateOf("") } Image( painterResource(id = R.drawable.amethyst_logo), @@ -89,7 +91,7 @@ fun LoginPage(accountViewModel: AccountStateViewModel) { keyboardOptions = KeyboardOptions( autoCorrect = false, keyboardType = KeyboardType.Ascii, - imeAction = ImeAction.Next + imeAction = ImeAction.Go ), placeholder = { Text( @@ -105,14 +107,36 @@ fun LoginPage(accountViewModel: AccountStateViewModel) { ) } }, - visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation() + visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(), + keyboardActions = KeyboardActions( + onGo = { + try { + accountViewModel.login(key.value.text) + } catch (e: Exception) { + errorMessage = "Invalid key" + } + } + ) ) + if (errorMessage.isNotBlank()) { + Text( + text = "${errorMessage}", + color = MaterialTheme.colors.error, + style = MaterialTheme.typography.caption + ) + } Spacer(modifier = Modifier.height(20.dp)) Box(modifier = Modifier.padding(40.dp, 0.dp, 40.dp, 0.dp)) { Button( - onClick = { accountViewModel.login(key.value.text) }, + onClick = { + try { + accountViewModel.login(key.value.text) + } catch (e: Exception) { + errorMessage = "Invalid key" + } + }, shape = RoundedCornerShape(35.dp), modifier = Modifier .fillMaxWidth()