RoomListFilters : branch the logic
This commit is contained in:
parent
5ca7a3af10
commit
dd7c2cbf9a
4 changed files with 28 additions and 5 deletions
|
|
@ -26,15 +26,13 @@ enum class RoomListFilter(val stringResource: Int){
|
||||||
Rooms(R.string.screen_roomlist_filter_rooms),
|
Rooms(R.string.screen_roomlist_filter_rooms),
|
||||||
People(R.string.screen_roomlist_filter_people),
|
People(R.string.screen_roomlist_filter_people),
|
||||||
Unread(R.string.screen_roomlist_filter_unreads),
|
Unread(R.string.screen_roomlist_filter_unreads),
|
||||||
Favourites(R.string.screen_roomlist_filter_favourites),
|
Favourites(R.string.screen_roomlist_filter_favourites);
|
||||||
LowPriority(R.string.screen_roomlist_filter_low_priority);
|
|
||||||
|
|
||||||
val oppositeFilter: RoomListFilter?
|
val oppositeFilter: RoomListFilter?
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
Rooms -> People
|
Rooms -> People
|
||||||
People -> Rooms
|
People -> Rooms
|
||||||
Unread -> null
|
Unread -> null
|
||||||
Favourites -> LowPriority
|
Favourites -> null
|
||||||
LowPriority -> Favourites
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,20 @@
|
||||||
package io.element.android.features.roomlist.impl.filters
|
package io.element.android.features.roomlist.impl.filters
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toPersistentList
|
||||||
import javax.inject.Inject
|
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
|
@Composable
|
||||||
override fun present(): RoomListFiltersState {
|
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(
|
return RoomListFiltersState(
|
||||||
unselectedFilters = unselectedFilters.toPersistentList(),
|
unselectedFilters = unselectedFilters.toPersistentList(),
|
||||||
selectedFilters = selectedFilters.toPersistentList(),
|
selectedFilters = selectedFilters.toPersistentList(),
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,11 @@ sealed interface RoomListFilter {
|
||||||
*/
|
*/
|
||||||
data object Unread : 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.
|
* A filter that matches either Group or People rooms.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,6 @@ fun RoomListFilter.toRustFilter(): RoomListEntriesDynamicFilterKind {
|
||||||
RoomListFilter.None -> RoomListEntriesDynamicFilterKind.None
|
RoomListFilter.None -> RoomListEntriesDynamicFilterKind.None
|
||||||
is RoomListFilter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(pattern)
|
is RoomListFilter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(pattern)
|
||||||
RoomListFilter.Unread -> RoomListEntriesDynamicFilterKind.Unread
|
RoomListFilter.Unread -> RoomListEntriesDynamicFilterKind.Unread
|
||||||
|
RoomListFilter.Favorite -> RoomListEntriesDynamicFilterKind.Favourite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue