From f43636fb5763233ae4eb1709b44ef4d22e78f31a Mon Sep 17 00:00:00 2001 From: Tomasz Zajac Date: Tue, 7 Apr 2026 20:47:45 +0100 Subject: [PATCH] style(LoginScreen): improved the advanced options layout, made scrolling easier in landscape --- .../chat/stoat/screens/login/LoginScreen.kt | 42 ++++++++++++------- app/src/main/res/values/strings.xml | 3 +- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/chat/stoat/screens/login/LoginScreen.kt b/app/src/main/java/chat/stoat/screens/login/LoginScreen.kt index 6239316d..a27fbf6e 100644 --- a/app/src/main/java/chat/stoat/screens/login/LoginScreen.kt +++ b/app/src/main/java/chat/stoat/screens/login/LoginScreen.kt @@ -1,5 +1,6 @@ package chat.stoat.screens.login +import android.content.res.Configuration import android.util.Log import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -35,6 +36,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.autofill.ContentType +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource @@ -60,6 +62,7 @@ import chat.stoat.api.routes.account.EmailPasswordAssessment import chat.stoat.api.routes.account.negotiateAuthentication import chat.stoat.api.routes.onboard.needsOnboarding import chat.stoat.api.updateStoatWebApp +import chat.stoat.composables.generic.CollapsibleCard import chat.stoat.composables.generic.FormTextField import chat.stoat.composables.generic.Weblink import chat.stoat.persistence.KVStorage @@ -205,10 +208,12 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi } } + val configuration = LocalConfiguration.current; + Column( modifier = Modifier .fillMaxSize() - .padding(20.dp) + .padding(10.dp) .imePadding() .safeDrawingPadding() .verticalScroll(rememberScrollState()) @@ -235,24 +240,16 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi ) Column( - modifier = Modifier - .width(270.dp) + modifier = (when(configuration.orientation) { + Configuration.ORIENTATION_LANDSCAPE -> Modifier.fillMaxWidth() + else -> Modifier.width(270.dp) + }) .overscroll(rememberOverscrollEffect()) .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - FormTextField( - value = viewModel.stoatInstanceUrl, - label = stringResource(R.string.stoat_instance), // TODO: needs translations - type = KeyboardType.Uri, - action = ImeAction.Next, - onChange = viewModel::setStoatInstanceUrl, - modifier = Modifier - .padding(vertical = 25.dp), - placeholder = {Text(text = STOAT_WEB_APP_DEFAULT)}, - supportingText = {Text(text = stringResource(R.string.stoat_instance_hint))} - ) + FormTextField( value = viewModel.email, label = stringResource(R.string.email), @@ -308,6 +305,23 @@ fun LoginScreen(navController: NavController, viewModel: LoginViewModel = hiltVi modifier = Modifier.padding(vertical = 7.dp) ) + CollapsibleCard( + header = {Text(text = stringResource(R.string.login_advanced_options))}, + modifier = Modifier.width(300.dp) + ) { + FormTextField( + value = viewModel.stoatInstanceUrl, + label = stringResource(R.string.stoat_instance), // TODO: needs translations + type = KeyboardType.Uri, + action = ImeAction.Next, + onChange = viewModel::setStoatInstanceUrl, + modifier = Modifier + .padding(vertical = 5.dp), + placeholder = {Text(text = STOAT_WEB_APP_DEFAULT)}, + supportingText = {Text(text = stringResource(R.string.stoat_instance_hint))} + ) + } + if (viewModel.error != null) { Text( text = viewModel.error!!, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2fda0a50..9c4b62f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,7 +18,8 @@ Stoat is one of the best ways to stay connected with your friends and community, anywhere, anytime. Stoat host - 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. + This is the base URL of the Stoat instance you\'re logging in to. If you\'re unsure, leave this field blank to use the official Stoat instance. + Advanced options Email Password