diff --git a/changelog.d/133.bugfix b/changelog.d/133.bugfix new file mode 100644 index 0000000000..946909fb0f --- /dev/null +++ b/changelog.d/133.bugfix @@ -0,0 +1 @@ +Clear focus on TextFields when submitting forms to prevent issues with the IME keyboard. diff --git a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt index 5460c3d42f..ba9a754fd5 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt @@ -92,6 +92,14 @@ fun ChangeServerView( } } val focusManager = LocalFocusManager.current + + fun submit() { + // Clear focus to prevent keyboard issues with textfields + focusManager.clearFocus(force = true) + + eventSink(ChangeServerEvents.Submit) + } + Scaffold( topBar = { TopAppBar( @@ -175,7 +183,7 @@ fun ChangeServerView( imeAction = ImeAction.Done, ), keyboardActions = KeyboardActions( - onDone = { eventSink(ChangeServerEvents.Submit) } + onDone = { submit() } ), singleLine = true, maxLines = 1, @@ -216,7 +224,7 @@ fun ChangeServerView( ) Spacer(Modifier.height(32.dp)) Button( - onClick = { eventSink(ChangeServerEvents.Submit) }, + onClick = ::submit, enabled = interactionEnabled && state.submitEnabled, modifier = Modifier .fillMaxWidth() diff --git a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt index 40db2742fd..0b8a09b42d 100644 --- a/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt +++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt @@ -223,6 +223,14 @@ internal fun LoginForm( val focusManager = LocalFocusManager.current val eventSink = state.eventSink + + fun submit() { + // Clear focus to prevent keyboard issues with textfields + focusManager.clearFocus(force = true) + + eventSink(LoginRootEvents.Submit) + } + Column(modifier) { Text( text = stringResource(StringR.string.login_form_title), @@ -301,7 +309,7 @@ internal fun LoginForm( imeAction = ImeAction.Done, ), keyboardActions = KeyboardActions( - onDone = { eventSink(LoginRootEvents.Submit) } + onDone = { submit() } ), singleLine = true, maxLines = 1, @@ -310,7 +318,7 @@ internal fun LoginForm( // Submit Button( - onClick = { eventSink(LoginRootEvents.Submit) }, + onClick = ::submit, enabled = interactionEnabled && state.submitEnabled, modifier = Modifier .fillMaxWidth()