From ab01674fa89807977e648b63ff0435f5af70d218 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 8 Jan 2026 13:39:23 -0300 Subject: [PATCH 1/4] fix: component was forcing the cursor to the end on every recomposition --- .../java/to/bitkit/ui/components/TextInput.kt | 26 +++++++++++++++++-- .../settings/advanced/ElectrumConfigScreen.kt | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TextInput.kt b/app/src/main/java/to/bitkit/ui/components/TextInput.kt index 7e1666695..38d43fe54 100644 --- a/app/src/main/java/to/bitkit/ui/components/TextInput.kt +++ b/app/src/main/java/to/bitkit/ui/components/TextInput.kt @@ -9,6 +9,11 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextStyle @@ -42,6 +47,20 @@ fun TextInput( visualTransformation: VisualTransformation = VisualTransformation.None, textStyle: TextStyle = AppTextStyles.BodySSB, ) { + + var textFieldValue by remember { mutableStateOf(TextFieldValue(value)) } + + // Sync external changes + LaunchedEffect(value) { + if (textFieldValue.text != value) { + textFieldValue = TextFieldValue( + text = value, + selection = TextRange(minOf(textFieldValue.selection.start, value.length)) + ) + } + } + + TextField( placeholder = { placeholder?.let { @@ -50,8 +69,11 @@ fun TextInput( }, isError = isError, textStyle = textStyle, - value = TextFieldValue(value, TextRange(value.length)), - onValueChange = { textFieldValue -> onValueChange(textFieldValue.text) }, + value = textFieldValue, + onValueChange = { + textFieldValue = it + onValueChange(it.text) + }, maxLines = maxLines, minLines = minLines, singleLine = singleLine, diff --git a/app/src/main/java/to/bitkit/ui/settings/advanced/ElectrumConfigScreen.kt b/app/src/main/java/to/bitkit/ui/settings/advanced/ElectrumConfigScreen.kt index cd091065f..72531e42f 100644 --- a/app/src/main/java/to/bitkit/ui/settings/advanced/ElectrumConfigScreen.kt +++ b/app/src/main/java/to/bitkit/ui/settings/advanced/ElectrumConfigScreen.kt @@ -159,6 +159,7 @@ private fun Content( placeholder = "127.0.0.1", keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Uri, + autoCorrectEnabled = false, capitalization = KeyboardCapitalization.None, imeAction = ImeAction.Next, ), From 594c2f121d303c981a8794add7e75e50ba13f79a Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 8 Jan 2026 13:51:50 -0300 Subject: [PATCH 2/4] fix: simplify text range --- app/src/main/java/to/bitkit/ui/components/TextInput.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TextInput.kt b/app/src/main/java/to/bitkit/ui/components/TextInput.kt index 38d43fe54..f65e67625 100644 --- a/app/src/main/java/to/bitkit/ui/components/TextInput.kt +++ b/app/src/main/java/to/bitkit/ui/components/TextInput.kt @@ -55,7 +55,7 @@ fun TextInput( if (textFieldValue.text != value) { textFieldValue = TextFieldValue( text = value, - selection = TextRange(minOf(textFieldValue.selection.start, value.length)) + selection = TextRange(value.length) ) } } From 980fbfd452f405e305d4118e06feebbb4954fd71 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 8 Jan 2026 13:52:17 -0300 Subject: [PATCH 3/4] chore: lint --- app/src/main/java/to/bitkit/ui/components/TextInput.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TextInput.kt b/app/src/main/java/to/bitkit/ui/components/TextInput.kt index f65e67625..bf73e4e80 100644 --- a/app/src/main/java/to/bitkit/ui/components/TextInput.kt +++ b/app/src/main/java/to/bitkit/ui/components/TextInput.kt @@ -47,7 +47,6 @@ fun TextInput( visualTransformation: VisualTransformation = VisualTransformation.None, textStyle: TextStyle = AppTextStyles.BodySSB, ) { - var textFieldValue by remember { mutableStateOf(TextFieldValue(value)) } // Sync external changes From f251e074f8c908b2a7f9077ee2e2b67d769b9570 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 8 Jan 2026 13:52:44 -0300 Subject: [PATCH 4/4] chore: lint --- app/src/main/java/to/bitkit/ui/components/TextInput.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TextInput.kt b/app/src/main/java/to/bitkit/ui/components/TextInput.kt index bf73e4e80..390f2ae7a 100644 --- a/app/src/main/java/to/bitkit/ui/components/TextInput.kt +++ b/app/src/main/java/to/bitkit/ui/components/TextInput.kt @@ -59,7 +59,6 @@ fun TextInput( } } - TextField( placeholder = { placeholder?.let {