RoomList : add invite filter
This commit is contained in:
parent
9434bbbfd3
commit
1cdf561688
6 changed files with 23 additions and 7 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue