commit 6285e5d4535e12588f1ae27d228ed8a43687ce0c
parent 74c11b9dd9fad9f506d6e4426378131f29f21f70
Author: Harrison Oglesby <oglesby.harrison@gmail.com>
Date: Wed, 3 Dec 2025 23:57:38 +0000
Bug 2002028 - Fix cursor position for settings search r=android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D274662
Diffstat:
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchBar.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchBar.kt
@@ -14,7 +14,7 @@ import androidx.compose.material3.TextField
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.SideEffect
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -25,6 +25,8 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import mozilla.components.compose.base.button.IconButton
import mozilla.components.compose.base.theme.AcornTheme
@@ -63,7 +65,7 @@ fun SettingsSearchBar(
),
)
- SideEffect {
+ LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
}
@@ -74,19 +76,26 @@ private fun SettingsSearchField(
focusRequester: FocusRequester,
) {
val state by store.observeAsComposableState { it }
- var searchQuery by remember { mutableStateOf(state.searchQuery) }
+ var searchQuery by remember {
+ mutableStateOf(
+ TextFieldValue(
+ text = state.searchQuery,
+ selection = TextRange(state.searchQuery.length),
+ ),
+ )
+ }
TextField(
value = searchQuery,
- onValueChange = { value: String ->
+ onValueChange = { value: TextFieldValue ->
searchQuery = value
- store.dispatch(SettingsSearchAction.SearchQueryUpdated(value))
+ store.dispatch(SettingsSearchAction.SearchQueryUpdated(value.text))
},
textStyle = AcornTheme.typography.body1,
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester),
- placeholder = {
+ placeholder = @Composable {
Text(
text = stringResource(R.string.settings_search_title),
style = AcornTheme.typography.body1,
@@ -107,7 +116,7 @@ private fun SettingsSearchField(
-> {
ClearTextButton(
onClick = {
- searchQuery = ""
+ searchQuery = TextFieldValue("")
store.dispatch(SettingsSearchAction.SearchQueryUpdated(""))
},
)