RoomListFilters : branch the logic
This commit is contained in:
@@ -26,15 +26,13 @@ enum class RoomListFilter(val stringResource: Int){
|
||||
Rooms(R.string.screen_roomlist_filter_rooms),
|
||||
People(R.string.screen_roomlist_filter_people),
|
||||
Unread(R.string.screen_roomlist_filter_unreads),
|
||||
Favourites(R.string.screen_roomlist_filter_favourites),
|
||||
LowPriority(R.string.screen_roomlist_filter_low_priority);
|
||||
Favourites(R.string.screen_roomlist_filter_favourites);
|
||||
|
||||
val oppositeFilter: RoomListFilter?
|
||||
get() = when (this) {
|
||||
Rooms -> People
|
||||
People -> Rooms
|
||||
Unread -> null
|
||||
Favourites -> LowPriority
|
||||
LowPriority -> Favourites
|
||||
Favourites -> null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,15 +17,20 @@
|
||||
package io.element.android.features.roomlist.impl.filters
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import javax.inject.Inject
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as MatrixRoomListFilter
|
||||
|
||||
class RoomListFiltersPresenter @Inject constructor() : Presenter<RoomListFiltersState> {
|
||||
class RoomListFiltersPresenter @Inject constructor(
|
||||
private val roomListService: RoomListService,
|
||||
) : Presenter<RoomListFiltersState> {
|
||||
|
||||
@Composable
|
||||
override fun present(): RoomListFiltersState {
|
||||
@@ -59,6 +64,20 @@ class RoomListFiltersPresenter @Inject constructor() : Presenter<RoomListFilters
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(selectedFilters) {
|
||||
val allRoomsFilter = MatrixRoomListFilter.All(
|
||||
selectedFilters.map { roomListFilter ->
|
||||
when (roomListFilter) {
|
||||
RoomListFilter.Rooms -> MatrixRoomListFilter.Category.Group
|
||||
RoomListFilter.People -> MatrixRoomListFilter.Category.People
|
||||
RoomListFilter.Unread -> MatrixRoomListFilter.Unread
|
||||
RoomListFilter.Favourites -> MatrixRoomListFilter.Favorite
|
||||
}
|
||||
}.plus(MatrixRoomListFilter.NonLeft)
|
||||
)
|
||||
roomListService.allRooms.updateFilter(allRoomsFilter)
|
||||
}
|
||||
|
||||
return RoomListFiltersState(
|
||||
unselectedFilters = unselectedFilters.toPersistentList(),
|
||||
selectedFilters = selectedFilters.toPersistentList(),
|
||||
|
||||
@@ -57,6 +57,11 @@ sealed interface RoomListFilter {
|
||||
*/
|
||||
data object Unread : RoomListFilter
|
||||
|
||||
/**
|
||||
* A filter that matches rooms that are marked as favorite.
|
||||
*/
|
||||
data object Favorite : RoomListFilter
|
||||
|
||||
/**
|
||||
* A filter that matches either Group or People rooms.
|
||||
*/
|
||||
|
||||
@@ -31,5 +31,6 @@ fun RoomListFilter.toRustFilter(): RoomListEntriesDynamicFilterKind {
|
||||
RoomListFilter.None -> RoomListEntriesDynamicFilterKind.None
|
||||
is RoomListFilter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(pattern)
|
||||
RoomListFilter.Unread -> RoomListEntriesDynamicFilterKind.Unread
|
||||
RoomListFilter.Favorite -> RoomListEntriesDynamicFilterKind.Favourite
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user