From ddd9ca40fcc32fbf8acc3fd20864f23c82798b1f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 27 Oct 2023 18:57:48 +0200 Subject: [PATCH] Enter recovery key: add Done ime action. --- .../enter/SecureBackupEnterRecoveryKeyView.kt | 7 +++++- .../impl/setup/SecureBackupSetupView.kt | 1 + .../impl/setup/views/RecoveryKeyView.kt | 23 ++++++++++++++++--- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt index 3fb95e7310..2e5157ddba 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyView.kt @@ -75,6 +75,9 @@ fun SecureBackupEnterRecoveryKeyView( state = state, onChange = { state.eventSink.invoke(SecureBackupEnterRecoveryKeyEvents.OnRecoveryKeyChange(it)) + }, + onSubmit = { + state.eventSink.invoke(SecureBackupEnterRecoveryKeyEvents.Submit) }) } } @@ -112,13 +115,15 @@ private fun BottomMenu( @Composable private fun Content( state: SecureBackupEnterRecoveryKeyState, - onChange: ((String) -> Unit)?, + onChange: (String) -> Unit, + onSubmit: () -> Unit, ) { RecoveryKeyView( modifier = Modifier.padding(top = 52.dp), state = state.recoveryKeyViewState, onClick = null, onChange = onChange, + onSubmit = onSubmit, ) } diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupView.kt index 0e1fa3b824..880b1a687f 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupView.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupView.kt @@ -192,6 +192,7 @@ private fun Content( state = state, onClick = onClick, onChange = null, + onSubmit = null, ) } diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt index 24e70d3b8c..e243889c90 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt @@ -25,12 +25,15 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.progressSemantics import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -52,6 +55,7 @@ internal fun RecoveryKeyView( state: RecoveryKeyViewState, onClick: (() -> Unit)?, onChange: ((String) -> Unit)?, + onSubmit: (() -> Unit)?, modifier: Modifier = Modifier, ) { Column( @@ -63,7 +67,7 @@ internal fun RecoveryKeyView( modifier = Modifier.padding(start = 16.dp), style = ElementTheme.typography.fontBodyMdRegular, ) - RecoveryKeyContent(state, onClick, onChange) + RecoveryKeyContent(state, onClick, onChange, onSubmit) RecoveryKeyFooter(state) } } @@ -73,11 +77,12 @@ private fun RecoveryKeyContent( state: RecoveryKeyViewState, onClick: (() -> Unit)?, onChange: ((String) -> Unit)?, + onSubmit: (() -> Unit)?, ) { when (state.recoveryKeyUserStory) { RecoveryKeyUserStory.Setup, RecoveryKeyUserStory.Change -> RecoveryKeyStaticContent(state, onClick) - RecoveryKeyUserStory.Enter -> RecoveryKeyFormContent(state, onChange) + RecoveryKeyUserStory.Enter -> RecoveryKeyFormContent(state, onChange, onSubmit) } } @@ -143,8 +148,13 @@ private fun RecoveryKeyStaticContent( } @Composable -private fun RecoveryKeyFormContent(state: RecoveryKeyViewState, onChange: ((String) -> Unit)?) { +private fun RecoveryKeyFormContent( + state: RecoveryKeyViewState, + onChange: ((String) -> Unit)?, + onSubmit: (() -> Unit)?, +) { onChange ?: error("onChange should not be null") + onSubmit ?: error("onSubmit should not be null") val recoveryKeyVisualTransformation = remember { RecoveryKeyVisualTransformation() } @@ -155,6 +165,12 @@ private fun RecoveryKeyFormContent(state: RecoveryKeyViewState, onChange: ((Stri onValueChange = onChange, enabled = state.inProgress.not(), visualTransformation = recoveryKeyVisualTransformation, + keyboardOptions = KeyboardOptions( + imeAction = ImeAction.Done, + ), + keyboardActions = KeyboardActions( + onDone = { onSubmit() } + ), label = { Text(text = stringResource(id = R.string.screen_recovery_key_confirm_key_placeholder)) } ) } @@ -217,5 +233,6 @@ internal fun RecoveryKeyViewPreview( state = state, onClick = {}, onChange = {}, + onSubmit = {}, ) }