Space filters fix previews

This commit is contained in:
ganfra 2026-02-05 13:52:41 +01:00
parent 0466663d64
commit e64f0af4e4
2 changed files with 19 additions and 23 deletions

View file

@ -19,7 +19,7 @@ import io.element.android.features.home.impl.model.anInviteSender
import io.element.android.features.home.impl.search.RoomListSearchState import io.element.android.features.home.impl.search.RoomListSearchState
import io.element.android.features.home.impl.search.aRoomListSearchState import io.element.android.features.home.impl.search.aRoomListSearchState
import io.element.android.features.home.impl.spacefilters.SpaceFiltersState import io.element.android.features.home.impl.spacefilters.SpaceFiltersState
import io.element.android.features.home.impl.spacefilters.aDisabledSpaceFiltersState import io.element.android.features.home.impl.spacefilters.anUnselectedSpaceFiltersState
import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState
import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState
import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomEvent
@ -54,7 +54,7 @@ internal fun aRoomListState(
leaveRoomState: LeaveRoomState = aLeaveRoomState(), leaveRoomState: LeaveRoomState = aLeaveRoomState(),
searchState: RoomListSearchState = aRoomListSearchState(), searchState: RoomListSearchState = aRoomListSearchState(),
filtersState: RoomListFiltersState = aRoomListFiltersState(), filtersState: RoomListFiltersState = aRoomListFiltersState(),
spaceFiltersState: SpaceFiltersState = aDisabledSpaceFiltersState(), spaceFiltersState: SpaceFiltersState = anUnselectedSpaceFiltersState(),
contentState: RoomListContentState = aRoomsContentState(), contentState: RoomListContentState = aRoomsContentState(),
acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(),
hideInvitesAvatars: Boolean = false, hideInvitesAvatars: Boolean = false,

View file

@ -23,13 +23,12 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SheetValue
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
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.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -56,33 +55,30 @@ fun SpaceFiltersView(
state: SpaceFiltersState, state: SpaceFiltersState,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) val isSelecting by rememberUpdatedState(state is SpaceFiltersState.Selecting)
val isSelecting = state is SpaceFiltersState.Selecting val sheetState = rememberModalBottomSheetState(
var showSheet by remember { mutableStateOf(false) } skipPartiallyExpanded = true,
confirmValueChange = { sheetValueTarget ->
// This ensures the hide animation is not cancelled
when (sheetValueTarget) {
SheetValue.Expanded -> isSelecting
else -> true
}
}
)
LaunchedEffect(isSelecting) { LaunchedEffect(isSelecting) {
if (isSelecting) { if (!isSelecting) {
showSheet = true
} else {
sheetState.hide() sheetState.hide()
} }
} }
if (sheetState.isVisible || isSelecting) {
// This is necessary because the animation can get cancelled
// then the sheetState is hidden but the showSheet is still true.
LaunchedEffect(sheetState.isVisible, sheetState.isAnimationRunning) {
if (!sheetState.isVisible && !sheetState.isAnimationRunning) {
showSheet = false
}
}
if (showSheet) {
ModalBottomSheet( ModalBottomSheet(
modifier = modifier modifier = modifier
.systemBarsPadding() .systemBarsPadding()
.navigationBarsPadding(), .navigationBarsPadding(),
sheetState = sheetState, sheetState = sheetState,
onDismissRequest = { onDismissRequest = {
if (isSelecting) { if (state is SpaceFiltersState.Selecting) {
state.eventSink(SpaceFiltersEvent.Selecting.Cancel) state.eventSink(SpaceFiltersEvent.Selecting.Cancel)
} }
} }
@ -92,7 +88,7 @@ fun SpaceFiltersView(
.fillMaxWidth() .fillMaxWidth()
.fillMaxHeight(0.9f) .fillMaxHeight(0.9f)
) { ) {
if (isSelecting) { if (state is SpaceFiltersState.Selecting) {
SpaceFiltersBottomSheetContent( SpaceFiltersBottomSheetContent(
filters = state.visibleFilters, filters = state.visibleFilters,
searchQuery = state.searchQuery, searchQuery = state.searchQuery,