@@ -34,6 +34,7 @@ import kotlinx.coroutines.flow.SharedFlow
34
34
import kotlinx.coroutines.flow.asSharedFlow
35
35
import kotlinx.coroutines.flow.combine
36
36
import kotlinx.coroutines.flow.distinctUntilChanged
37
+ import kotlinx.coroutines.flow.first
37
38
import kotlinx.coroutines.flow.launchIn
38
39
import kotlinx.coroutines.flow.map
39
40
import kotlinx.coroutines.flow.onEach
@@ -53,12 +54,14 @@ import org.matrix.android.sdk.api.session.room.model.Membership
53
54
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
54
55
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
55
56
import org.matrix.android.sdk.api.session.room.state.isPublic
57
+ import org.matrix.android.sdk.api.util.Optional
56
58
import org.matrix.android.sdk.flow.flow
57
59
58
60
class HomeRoomListViewModel @AssistedInject constructor(
59
61
@Assisted initialState : HomeRoomListViewState ,
60
62
private val session : Session ,
61
63
private val spaceStateHandler : SpaceStateHandler ,
64
+ private val preferencesStore : HomeLayoutPreferencesStore ,
62
65
) : VectorViewModel<HomeRoomListViewState, HomeRoomListAction, HomeRoomListViewEvents>(initialState) {
63
66
64
67
@AssistedFactory
@@ -82,17 +85,30 @@ class HomeRoomListViewModel @AssistedInject constructor(
82
85
83
86
init {
84
87
configureSections()
88
+ observePreferences()
85
89
}
86
90
87
- private fun configureSections () {
91
+ private fun observePreferences () {
92
+ preferencesStore.areRecentsEnabledFlow.onEach {
93
+ configureSections()
94
+ }.launchIn(viewModelScope)
95
+
96
+ preferencesStore.isAZOrderingEnabledFlow.onEach {
97
+ configureSections()
98
+ }.launchIn(viewModelScope)
99
+ }
100
+
101
+ private fun configureSections () = viewModelScope.launch {
88
102
val newSections = mutableSetOf<HomeRoomSection >()
89
103
90
- newSections.add(getRecentRoomsSection())
91
- newSections.add(getFilteredRoomsSection())
104
+ val areSettingsEnabled = preferencesStore.areRecentsEnabledFlow.first()
92
105
93
- viewModelScope.launch {
94
- _sections .emit(newSections )
106
+ if (areSettingsEnabled) {
107
+ newSections.add(getRecentRoomsSection() )
95
108
}
109
+ newSections.add(getFilteredRoomsSection())
110
+
111
+ _sections .emit(newSections)
96
112
97
113
setState {
98
114
copy(state = StateView .State .Content )
@@ -111,13 +127,17 @@ class HomeRoomListViewModel @AssistedInject constructor(
111
127
)
112
128
}
113
129
114
- private fun getFilteredRoomsSection (): HomeRoomSection .RoomSummaryData {
130
+ private suspend fun getFilteredRoomsSection (): HomeRoomSection .RoomSummaryData {
115
131
val builder = RoomSummaryQueryParams .Builder ().also {
116
132
it.memberships = listOf (Membership .JOIN )
117
133
}
118
134
119
135
val params = getFilteredQueryParams(HomeRoomFilter .ALL , builder.build())
120
- val sortOrder = RoomSortOrder .ACTIVITY // #6506
136
+ val sortOrder = if (preferencesStore.isAZOrderingEnabledFlow.first()) {
137
+ RoomSortOrder .NAME
138
+ } else {
139
+ RoomSortOrder .ACTIVITY
140
+ }
121
141
122
142
val liveResults = session.roomService().getFilteredPagedRoomSummariesLive(
123
143
params,
@@ -135,19 +155,18 @@ class HomeRoomListViewModel @AssistedInject constructor(
135
155
.onEach { selectedSpaceOption ->
136
156
val selectedSpace = selectedSpaceOption.orNull()
137
157
liveResults.queryParams = liveResults.queryParams.copy(
138
- spaceFilter = selectedSpace?.roomId.toActiveSpaceOrNoFilter()
158
+ spaceFilter = selectedSpace?.roomId.toActiveSpaceOrNoFilter()
139
159
)
140
160
}.launchIn(viewModelScope)
141
161
142
162
return HomeRoomSection .RoomSummaryData (
143
163
list = liveResults.livePagedList,
144
- showFilters = true , // #6506
145
164
filtersData = getFiltersDataFlow()
146
165
)
147
166
}
148
167
149
- private fun getFiltersDataFlow (): SharedFlow <List <HomeRoomFilter >> {
150
- val flow = MutableSharedFlow <List <HomeRoomFilter >>(replay = 1 )
168
+ private fun getFiltersDataFlow (): SharedFlow <Optional < List <HomeRoomFilter > >> {
169
+ val flow = MutableSharedFlow <Optional < List <HomeRoomFilter > >>(replay = 1 )
151
170
152
171
val favouritesFlow = session.flow()
153
172
.liveRoomSummaries(
@@ -168,25 +187,28 @@ class HomeRoomListViewModel @AssistedInject constructor(
168
187
.map { it.isNotEmpty() }
169
188
.distinctUntilChanged()
170
189
171
- favouritesFlow.combine(dmsFLow) { hasFavourite, hasDm ->
172
- hasFavourite to hasDm
173
- }.onEach { (hasFavourite, hasDm) ->
174
- val filtersData = mutableListOf (
175
- HomeRoomFilter .ALL ,
176
- HomeRoomFilter .UNREADS
177
- )
178
- if (hasFavourite) {
179
- filtersData.add(
180
- HomeRoomFilter .FAVOURITES
181
- )
182
- }
183
- if (hasDm) {
184
- filtersData.add(
185
- HomeRoomFilter .PEOPlE
190
+ combine(favouritesFlow, dmsFLow, preferencesStore.areFiltersEnabledFlow) { hasFavourite, hasDm, areFiltersEnabled ->
191
+ Triple (hasFavourite, hasDm, areFiltersEnabled)
192
+ }.onEach { (hasFavourite, hasDm, areFiltersEnabled) ->
193
+ if (areFiltersEnabled) {
194
+ val filtersData = mutableListOf (
195
+ HomeRoomFilter .ALL ,
196
+ HomeRoomFilter .UNREADS
186
197
)
198
+ if (hasFavourite) {
199
+ filtersData.add(
200
+ HomeRoomFilter .FAVOURITES
201
+ )
202
+ }
203
+ if (hasDm) {
204
+ filtersData.add(
205
+ HomeRoomFilter .PEOPlE
206
+ )
207
+ }
208
+ flow.emit(Optional .from(filtersData))
209
+ } else {
210
+ flow.emit(Optional .empty())
187
211
}
188
-
189
- flow.emit(filtersData)
190
212
}.launchIn(viewModelScope)
191
213
192
214
return flow
0 commit comments