RoomList : add invite filter

This commit is contained in:
ganfra 2024-04-15 22:50:43 +02:00
parent 9434bbbfd3
commit 1cdf561688
6 changed files with 23 additions and 7 deletions

View file

@ -26,13 +26,15 @@ enum class RoomListFilter(val stringResource: Int) {
Unread(R.string.screen_roomlist_filter_unreads), Unread(R.string.screen_roomlist_filter_unreads),
People(R.string.screen_roomlist_filter_people), People(R.string.screen_roomlist_filter_people),
Rooms(R.string.screen_roomlist_filter_rooms), Rooms(R.string.screen_roomlist_filter_rooms),
Favourites(R.string.screen_roomlist_filter_favourites); Favourites(R.string.screen_roomlist_filter_favourites),
Invites(R.string.screen_roomlist_filter_invites);
val oppositeFilter: RoomListFilter? val incompatibleFilters: Set<RoomListFilter>
get() = when (this) { get() = when (this) {
Rooms -> People Rooms -> setOf(People, Invites)
People -> Rooms People -> setOf(Rooms, Invites)
Unread -> null Unread -> setOf(Invites)
Favourites -> null Favourites -> setOf(Invites)
Invites -> setOf(Rooms, People, Unread, Favourites)
} }
} }

View file

@ -53,6 +53,10 @@ data class RoomListFiltersEmptyStateResources(
title = R.string.screen_roomlist_filter_favourites_empty_state_title, title = R.string.screen_roomlist_filter_favourites_empty_state_title,
subtitle = R.string.screen_roomlist_filter_favourites_empty_state_subtitle subtitle = R.string.screen_roomlist_filter_favourites_empty_state_subtitle
) )
RoomListFilter.Invites -> RoomListFiltersEmptyStateResources(
title = R.string.screen_roomlist_filter_invites_empty_state_title,
subtitle = R.string.screen_roomlist_filter_mixed_empty_state_subtitle
)
} }
} }
else -> RoomListFiltersEmptyStateResources( else -> RoomListFiltersEmptyStateResources(

View file

@ -66,6 +66,7 @@ class RoomListFiltersPresenter @Inject constructor(
RoomListFilter.People -> MatrixRoomListFilter.Category.People RoomListFilter.People -> MatrixRoomListFilter.Category.People
RoomListFilter.Unread -> MatrixRoomListFilter.Unread RoomListFilter.Unread -> MatrixRoomListFilter.Unread
RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite
RoomListFilter.Invites -> MatrixRoomListFilter.Invite
} }
} }
) )

View file

@ -54,7 +54,7 @@ class DefaultFilterSelectionStrategy @Inject constructor() : FilterSelectionStra
isSelected = true isSelected = true
) )
} }
val unselectedFilters = RoomListFilter.entries - selectedFilters - selectedFilters.mapNotNull { it.oppositeFilter }.toSet() val unselectedFilters = RoomListFilter.entries - selectedFilters - selectedFilters.flatMap { it.incompatibleFilters }.toSet()
val unselectedFilterStates = unselectedFilters.map { val unselectedFilterStates = unselectedFilters.map {
FilterSelectionState( FilterSelectionState(
filter = it, filter = it,

View file

@ -57,6 +57,11 @@ sealed interface RoomListFilter {
*/ */
data object Favorite : RoomListFilter data object Favorite : RoomListFilter
/**
* A filter that matches rooms that with Invited membership.
*/
data object Invite : RoomListFilter
/** /**
* A filter that matches either Group or People rooms. * A filter that matches either Group or People rooms.
*/ */

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.matrix.impl.roomlist package io.element.android.libraries.matrix.impl.roomlist
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
import io.element.android.libraries.matrix.api.roomlist.RoomSummary import io.element.android.libraries.matrix.api.roomlist.RoomSummary
@ -40,6 +41,9 @@ val RoomListFilter.predicate
is RoomListFilter.NormalizedMatchRoomName -> { roomSummary: RoomSummary -> is RoomListFilter.NormalizedMatchRoomName -> { roomSummary: RoomSummary ->
roomSummary is RoomSummary.Filled && roomSummary.details.name.contains(pattern, ignoreCase = true) roomSummary is RoomSummary.Filled && roomSummary.details.name.contains(pattern, ignoreCase = true)
} }
RoomListFilter.Invite -> { roomSummary: RoomSummary ->
roomSummary is RoomSummary.Filled && roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED
}
} }
fun List<RoomSummary>.filter(filter: RoomListFilter): List<RoomSummary> { fun List<RoomSummary>.filter(filter: RoomListFilter): List<RoomSummary> {