Clearing the room list search clears the search term too (#5603)

This commit is contained in:
Jorge Martin Espinosa 2025-10-24 09:30:10 +02:00 committed by GitHub
parent 6008af36ec
commit 009ceb8704

View file

@ -25,6 +25,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind 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.geometry.Offset
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -111,7 +111,11 @@ private fun RoomListSearchContent(
}, },
navigationIcon = { BackButton(onClick = ::onBackButtonClick) }, navigationIcon = { BackButton(onClick = ::onBackButtonClick) },
title = { 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() } val focusRequester = remember { FocusRequester() }
FilledTextField( FilledTextField(
@ -137,6 +141,8 @@ private fun RoomListSearchContent(
if (value.text.isNotEmpty()) { if (value.text.isNotEmpty()) {
IconButton(onClick = { IconButton(onClick = {
state.eventSink(RoomListSearchEvents.ClearQuery) state.eventSink(RoomListSearchEvents.ClearQuery)
// Clear local state too
value = value.copy(text = "")
}) { }) {
Icon( Icon(
imageVector = CompoundIcons.Close(), imageVector = CompoundIcons.Close(),
@ -148,7 +154,6 @@ private fun RoomListSearchContent(
) )
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
value = value.copy(selection = TextRange(value.text.length))
if (!focusRequester.restoreFocusedChild()) { if (!focusRequester.restoreFocusedChild()) {
focusRequester.requestFocus() focusRequester.requestFocus()
} }