Fix cursor position in room list search (#5138)
This commit is contained in:
parent
4752e2f910
commit
d926dda29c
1 changed files with 20 additions and 27 deletions
|
|
@ -23,13 +23,15 @@ import androidx.compose.material3.TextFieldDefaults
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
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
|
||||||
import androidx.compose.ui.focus.FocusRequester
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
import androidx.compose.ui.focus.focusRequester
|
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.input.pointer.pointerInput
|
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
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
|
||||||
|
|
@ -39,7 +41,7 @@ import io.element.android.features.home.impl.contentType
|
||||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListEvents
|
import io.element.android.features.home.impl.roomlist.RoomListEvents
|
||||||
import io.element.android.libraries.designsystem.components.button.BackButton
|
import io.element.android.libraries.designsystem.components.button.BackButton
|
||||||
import io.element.android.libraries.designsystem.modifiers.applyIf
|
import io.element.android.libraries.designsystem.components.form.textFieldState
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.theme.components.FilledTextField
|
import io.element.android.libraries.designsystem.theme.components.FilledTextField
|
||||||
|
|
@ -68,24 +70,13 @@ internal fun RoomListSearchView(
|
||||||
enter = fadeIn(),
|
enter = fadeIn(),
|
||||||
exit = fadeOut(),
|
exit = fadeOut(),
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(modifier = modifier) {
|
||||||
modifier = modifier
|
RoomListSearchContent(
|
||||||
.applyIf(
|
state = state,
|
||||||
condition = state.isSearchActive,
|
hideInvitesAvatars = hideInvitesAvatars,
|
||||||
ifTrue = {
|
onRoomClick = onRoomClick,
|
||||||
// Disable input interaction to underlying views
|
eventSink = eventSink,
|
||||||
pointerInput(Unit) {}
|
)
|
||||||
}
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
if (state.isSearchActive) {
|
|
||||||
RoomListSearchContent(
|
|
||||||
state = state,
|
|
||||||
hideInvitesAvatars = hideInvitesAvatars,
|
|
||||||
onRoomClick = onRoomClick,
|
|
||||||
eventSink = eventSink,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -120,15 +111,19 @@ private fun RoomListSearchContent(
|
||||||
},
|
},
|
||||||
navigationIcon = { BackButton(onClick = ::onBackButtonClick) },
|
navigationIcon = { BackButton(onClick = ::onBackButtonClick) },
|
||||||
title = {
|
title = {
|
||||||
val filter = state.query
|
var filter by textFieldState(state.query)
|
||||||
val focusRequester = FocusRequester()
|
|
||||||
|
val focusRequester = remember { FocusRequester() }
|
||||||
FilledTextField(
|
FilledTextField(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.focusRequester(focusRequester),
|
.focusRequester(focusRequester),
|
||||||
value = filter,
|
value = filter,
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
onValueChange = { state.eventSink(RoomListSearchEvents.QueryChanged(it)) },
|
onValueChange = {
|
||||||
|
filter = it
|
||||||
|
state.eventSink(RoomListSearchEvents.QueryChanged(it))
|
||||||
|
},
|
||||||
colors = TextFieldDefaults.colors(
|
colors = TextFieldDefaults.colors(
|
||||||
focusedContainerColor = Color.Transparent,
|
focusedContainerColor = Color.Transparent,
|
||||||
unfocusedContainerColor = Color.Transparent,
|
unfocusedContainerColor = Color.Transparent,
|
||||||
|
|
@ -152,10 +147,8 @@ private fun RoomListSearchContent(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
LaunchedEffect(state.isSearchActive) {
|
LaunchedEffect(Unit) {
|
||||||
if (state.isSearchActive) {
|
focusRequester.requestFocus()
|
||||||
focusRequester.requestFocus()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
windowInsets = TopAppBarDefaults.windowInsets.copy(top = 0)
|
windowInsets = TopAppBarDefaults.windowInsets.copy(top = 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue