From 009ceb87046b2db058c186bcfbc6f73d41884290 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Fri, 24 Oct 2025 09:30:10 +0200 Subject: [PATCH] Clearing the room list search clears the search term too (#5603) --- .../features/home/impl/search/RoomListSearchView.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt index a506ab7176..fe6fab0fde 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchView.kt @@ -25,6 +25,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind @@ -33,7 +34,6 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -111,7 +111,11 @@ private fun RoomListSearchContent( }, navigationIcon = { BackButton(onClick = ::onBackButtonClick) }, title = { - var value by remember { mutableStateOf(TextFieldValue(state.query)) } + // TODO replace `state.query` with TextFieldState when it's available for M3 TextField + // The stateSaver will keep the selection state when returning to this UI + var value by rememberSaveable(stateSaver = TextFieldValue.Saver) { + mutableStateOf(TextFieldValue(state.query)) + } val focusRequester = remember { FocusRequester() } FilledTextField( @@ -137,6 +141,8 @@ private fun RoomListSearchContent( if (value.text.isNotEmpty()) { IconButton(onClick = { state.eventSink(RoomListSearchEvents.ClearQuery) + // Clear local state too + value = value.copy(text = "") }) { Icon( imageVector = CompoundIcons.Close(), @@ -148,7 +154,6 @@ private fun RoomListSearchContent( ) LaunchedEffect(Unit) { - value = value.copy(selection = TextRange(value.text.length)) if (!focusRequester.restoreFocusedChild()) { focusRequester.requestFocus() }