style(login): fixed overflow making it difficult to type password with stoat instance field

This commit is contained in:
Tomasz Zajac 2026-03-30 23:53:52 +01:00
parent 1ca13ade68
commit eb9a4fe344
3 changed files with 20 additions and 6 deletions

View File

@ -23,7 +23,8 @@ fun FormTextField(
action: ImeAction = ImeAction.Done, action: ImeAction = ImeAction.Done,
supportingText: @Composable (() -> Unit)? = null, supportingText: @Composable (() -> Unit)? = null,
singleLine: Boolean = true, singleLine: Boolean = true,
enabled: Boolean = true enabled: Boolean = true,
placeholder: @Composable (() -> Unit)? = null,
) { ) {
TextField( TextField(
value = value, value = value,
@ -34,6 +35,7 @@ fun FormTextField(
label = { Text(label) }, label = { Text(label) },
supportingText = supportingText, supportingText = supportingText,
enabled = enabled, enabled = enabled,
modifier = modifier modifier = modifier,
placeholder = placeholder
) )
} }

View File

@ -12,8 +12,12 @@ import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.overscroll
import androidx.compose.foundation.rememberOverscrollEffect
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.input.TextObfuscationMode import androidx.compose.foundation.text.input.TextObfuscationMode
import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@ -206,7 +210,9 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi
.fillMaxSize() .fillMaxSize()
.padding(20.dp) .padding(20.dp)
.imePadding() .imePadding()
.safeDrawingPadding(), .safeDrawingPadding()
.verticalScroll(rememberScrollState())
.overscroll(rememberOverscrollEffect()),
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
@ -230,18 +236,22 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi
Column( Column(
modifier = Modifier modifier = Modifier
.width(270.dp), .width(270.dp)
.overscroll(rememberOverscrollEffect())
.verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
FormTextField( FormTextField(
value = viewModel.stoatInstanceUrl, value = viewModel.stoatInstanceUrl,
label = "Stoat instance", // FIXME hardcoded string label = stringResource(R.string.stoat_instance), // TODO: needs translations
type = KeyboardType.Uri, type = KeyboardType.Uri,
action = ImeAction.Next, action = ImeAction.Next,
onChange = viewModel::setStoatInstanceUrl, onChange = viewModel::setStoatInstanceUrl,
modifier = Modifier modifier = Modifier
.padding(vertical = 25.dp) .padding(vertical = 25.dp),
placeholder = {Text(text = STOAT_WEB_APP_DEFAULT)},
supportingText = {Text(text = stringResource(R.string.stoat_instance_hint))}
) )
FormTextField( FormTextField(
value = viewModel.email, value = viewModel.email,

View File

@ -17,6 +17,8 @@
<string name="login_onboarding_heading">Find your community, connect with the world.</string> <string name="login_onboarding_heading">Find your community, connect with the world.</string>
<string name="login_onboarding_body">Stoat is one of the best ways to stay connected with your friends and community, anywhere, anytime.</string> <string name="login_onboarding_body">Stoat is one of the best ways to stay connected with your friends and community, anywhere, anytime.</string>
<string name="stoat_instance">Stoat host</string>
<string name="stoat_instance_hint">This is the base URL of the Stoat instance you\'re logging in to, if you want to connect to self-hosted instances. You can leave this blank to use the official Stoat instance.</string>
<string name="email">Email</string> <string name="email">Email</string>
<string name="password">Password</string> <string name="password">Password</string>