From b05d9d0cf3fdba283e6c4b5d832985afb04633ef Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Fri, 7 May 2021 17:57:08 +0200 Subject: [PATCH] Keyboard management on login screen. --- .idea/misc.xml | 2 ++ .../screen/LoginScreenComposable.kt | 34 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 6c70665..8d206dc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -79,6 +79,8 @@ + + diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt index c87a365..4f84925 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt @@ -4,11 +4,12 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.ButtonDefaults.outlinedButtonColors import androidx.compose.material.TextFieldDefaults.outlinedTextFieldColors -import androidx.compose.material.TextFieldDefaults.textFieldColors import androidx.compose.material.icons.Icons import androidx.compose.material.icons.sharp.Visibility import androidx.compose.material.icons.sharp.VisibilityOff @@ -16,8 +17,12 @@ import androidx.compose.runtime.* import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.tooling.preview.Preview @@ -63,17 +68,24 @@ fun LoginScreenComposable( Spacer(modifier = Modifier.weight(1f)) + val focusRequester = remember { FocusRequester() } + val localFocus = LocalFocusManager.current LoginField( viewModel = authenticationViewModel, modifier = Modifier .fillMaxWidth() - .padding(bottom = 16.dp) + .padding(bottom = 16.dp), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), + keyboardActions = KeyboardActions { focusRequester.requestFocus() } ) PasswordField( viewModel = authenticationViewModel, modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp) + .focusRequester(focusRequester), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + keyboardActions = KeyboardActions { localFocus.clearFocus() } ) CredentialRemember( viewModel = authenticationViewModel, @@ -122,7 +134,12 @@ fun LoginScreenComposable( } @Composable -private fun LoginField(viewModel: AuthenticationViewModel, modifier: Modifier = Modifier) { +private fun LoginField( + viewModel: AuthenticationViewModel, + modifier: Modifier = Modifier, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions(), +) { val login: State = viewModel.login.observeAsState() TextField( modifier = modifier, @@ -132,11 +149,18 @@ private fun LoginField(viewModel: AuthenticationViewModel, modifier: Modifier = colors = outlinedTextFieldColors(), maxLines = 1, singleLine = true, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, ) } @Composable -private fun PasswordField(viewModel: AuthenticationViewModel, modifier: Modifier = Modifier) { +private fun PasswordField( + viewModel: AuthenticationViewModel, + modifier: Modifier = Modifier, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions(), +) { val password = viewModel.password.observeAsState() var passwordVisibility by remember { mutableStateOf(false) } TextField( @@ -156,6 +180,8 @@ private fun PasswordField(viewModel: AuthenticationViewModel, modifier: Modifier ) } }, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, ) }