Merge develop into feature/fga/room_list_filters

This commit is contained in:
ganfra 2024-02-21 17:48:20 +01:00
commit 0eacdfe565
2 changed files with 51 additions and 51 deletions

View file

@ -45,6 +45,7 @@ data class RoomListState(
val eventSink: (RoomListEvents) -> Unit, val eventSink: (RoomListEvents) -> Unit,
) { ) {
val displayFilters = filtersState.isFeatureEnabled && !displayMigrationStatus val displayFilters = filtersState.isFeatureEnabled && !displayMigrationStatus
val displayEmptyState = roomList is AsyncData.Success && roomList.data.isEmpty()
sealed interface ContextMenu { sealed interface ContextMenu {
data object Hidden : ContextMenu data object Hidden : ContextMenu

View file

@ -59,7 +59,6 @@ import io.element.android.features.roomlist.impl.filters.RoomListFiltersView
import io.element.android.features.roomlist.impl.migration.MigrationScreenView import io.element.android.features.roomlist.impl.migration.MigrationScreenView
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummary
import io.element.android.features.roomlist.impl.search.RoomListSearchView import io.element.android.features.roomlist.impl.search.RoomListSearchView
import io.element.android.libraries.architecture.AsyncData
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.Button import io.element.android.libraries.designsystem.theme.components.Button
@ -136,9 +135,10 @@ fun RoomListView(
@Composable @Composable
private fun EmptyRoomListView( private fun EmptyRoomListView(
onCreateRoomClicked: () -> Unit, onCreateRoomClicked: () -> Unit,
modifier: Modifier = Modifier
) { ) {
Column( Column(
modifier = Modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
@ -222,62 +222,61 @@ private fun RoomListContent(
} }
}, },
content = { padding -> content = { padding ->
if (state.roomList is AsyncData.Success && state.roomList.data.isEmpty()) { LazyColumn(
EmptyRoomListView(onCreateRoomClicked) modifier = Modifier
} else { .padding(padding)
LazyColumn( .consumeWindowInsets(padding)
modifier = Modifier .nestedScroll(nestedScrollConnection),
.padding(padding) state = lazyListState,
.consumeWindowInsets(padding) // FAB height is 56dp, bottom padding is 16dp, we add 8dp as extra margin -> 56+16+8 = 80
.nestedScroll(nestedScrollConnection), contentPadding = PaddingValues(bottom = 80.dp)
state = lazyListState, ) {
// FAB height is 56dp, bottom padding is 16dp, we add 8dp as extra margin -> 56+16+8 = 80 when {
contentPadding = PaddingValues(bottom = 80.dp) state.displayEmptyState -> Unit
) { state.displayVerificationPrompt -> {
when {
state.displayVerificationPrompt -> {
item {
RequestVerificationHeader(
onVerifyClicked = onVerifyClicked,
onDismissClicked = { state.eventSink(RoomListEvents.DismissRequestVerificationPrompt) }
)
}
}
state.displayRecoveryKeyPrompt -> {
item {
ConfirmRecoveryKeyBanner(
onContinueClicked = onOpenSettings,
onDismissClicked = { state.eventSink(RoomListEvents.DismissRecoveryKeyPrompt) }
)
}
}
}
if (state.invitesState != InvitesState.NoInvites) {
item { item {
InvitesEntryPointView(onInvitesClicked, state.invitesState) RequestVerificationHeader(
onVerifyClicked = onVerifyClicked,
onDismissClicked = { state.eventSink(RoomListEvents.DismissRequestVerificationPrompt) }
)
} }
} }
state.displayRecoveryKeyPrompt -> {
val roomList = state.roomList.dataOrNull().orEmpty() item {
// Note: do not use a key for the LazyColumn, or the scroll will not behave as expected if a room ConfirmRecoveryKeyBanner(
// is moved to the top of the list. onContinueClicked = onOpenSettings,
itemsIndexed( onDismissClicked = { state.eventSink(RoomListEvents.DismissRecoveryKeyPrompt) }
items = roomList, )
contentType = { _, room -> room.contentType() },
) { index, room ->
RoomSummaryRow(
room = room,
onClick = ::onRoomClicked,
onLongClick = onRoomLongClicked,
)
if (index != roomList.lastIndex) {
HorizontalDivider()
} }
} }
} }
}
if (state.invitesState != InvitesState.NoInvites) {
item {
InvitesEntryPointView(onInvitesClicked, state.invitesState)
}
}
val roomList = state.roomList.dataOrNull().orEmpty()
// Note: do not use a key for the LazyColumn, or the scroll will not behave as expected if a room
// is moved to the top of the list.
itemsIndexed(
items = roomList,
contentType = { _, room -> room.contentType() },
) { index, room ->
RoomSummaryRow(
room = room,
onClick = ::onRoomClicked,
onLongClick = onRoomLongClicked,
)
if (index != roomList.lastIndex) {
HorizontalDivider()
}
}
}
if (state.displayEmptyState) {
EmptyRoomListView(onCreateRoomClicked)
}
MigrationScreenView(isMigrating = state.displayMigrationStatus) MigrationScreenView(isMigrating = state.displayMigrationStatus)
}, },
floatingActionButton = { floatingActionButton = {