RoomListFilters : branch the logic

This commit is contained in:
ganfra
2024-02-20 11:17:15 +01:00
parent 5ca7a3af10
commit dd7c2cbf9a
4 changed files with 28 additions and 5 deletions

View File

@@ -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
}
}

View File

@@ -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(),

View File

@@ -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.
*/

View File

@@ -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
}
}