Skip to content

Commit cb6d0a6

Browse files
author
ganfra
committed
Merge branch 'hotfix/1.5.0_v2' into main
2 parents 21806ef + 8d94643 commit cb6d0a6

File tree

4 files changed

+26
-33
lines changed

4 files changed

+26
-33
lines changed

vector/src/main/java/im/vector/app/features/home/room/list/home/HomeFilteredRoomsController.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package im.vector.app.features.home.room.list.home
1818

19-
import androidx.paging.PagedList
2019
import com.airbnb.epoxy.EpoxyModel
2120
import com.airbnb.epoxy.paging.PagedListEpoxyController
2221
import im.vector.app.core.platform.StateView
@@ -76,13 +75,6 @@ class HomeFilteredRoomsController @Inject constructor(
7675
this.emptyStateData = state
7776
}
7877

79-
fun submitPagedList(newList: PagedList<RoomSummary>) {
80-
submitList(newList)
81-
if (newList.isEmpty()) {
82-
requestForcedModelBuild()
83-
}
84-
}
85-
8678
override fun buildItemModel(currentPosition: Int, item: RoomSummary?): EpoxyModel<*> {
8779
return if (item == null) {
8880
val host = this

vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListFragment.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,10 @@ class HomeRoomListFragment :
152152
headersController.submitData(it)
153153
}
154154

155-
roomListViewModel.onEach(HomeRoomListViewState::roomsPagedList) { roomsList ->
156-
roomsList?.let {
157-
roomsController.submitPagedList(it)
158-
if (it.isEmpty()) {
159-
roomsController.requestForcedModelBuild()
160-
}
155+
roomListViewModel.roomsLivePagedList.observe(viewLifecycleOwner) { roomsList ->
156+
roomsController.submitList(roomsList)
157+
if (roomsList.isEmpty()) {
158+
roomsController.requestForcedModelBuild()
161159
}
162160
}
163161

vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewModel.kt

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
package im.vector.app.features.home.room.list.home
1818

1919
import android.widget.ImageView
20-
import androidx.lifecycle.asFlow
20+
import androidx.lifecycle.LiveData
21+
import androidx.lifecycle.MutableLiveData
22+
import androidx.lifecycle.Observer
2123
import androidx.paging.PagedList
24+
import arrow.core.Option
2225
import arrow.core.toOption
2326
import com.airbnb.mvrx.MavericksViewModelFactory
2427
import dagger.assisted.Assisted
@@ -35,7 +38,6 @@ import im.vector.app.core.resources.StringProvider
3538
import im.vector.app.features.displayname.getBestName
3639
import im.vector.app.features.home.room.list.home.header.HomeRoomFilter
3740
import kotlinx.coroutines.Dispatchers
38-
import kotlinx.coroutines.Job
3941
import kotlinx.coroutines.flow.Flow
4042
import kotlinx.coroutines.flow.MutableSharedFlow
4143
import kotlinx.coroutines.flow.asSharedFlow
@@ -69,7 +71,6 @@ import org.matrix.android.sdk.api.session.room.state.isPublic
6971
import org.matrix.android.sdk.api.util.Optional
7072
import org.matrix.android.sdk.api.util.toMatrixItem
7173
import org.matrix.android.sdk.flow.flow
72-
import java.util.concurrent.CancellationException
7374

7475
class HomeRoomListViewModel @AssistedInject constructor(
7576
@Assisted initialState: HomeRoomListViewState,
@@ -87,19 +88,24 @@ class HomeRoomListViewModel @AssistedInject constructor(
8788

8889
companion object : MavericksViewModelFactory<HomeRoomListViewModel, HomeRoomListViewState> by hiltMavericksViewModelFactory()
8990

91+
private var roomsFlow: Flow<Option<RoomSummary>>? = null
9092
private val pagedListConfig = PagedList.Config.Builder()
9193
.setPageSize(10)
9294
.setInitialLoadSizeHint(20)
9395
.setEnablePlaceholders(true)
94-
.setPrefetchDistance(10)
9596
.build()
9697

98+
private val _roomsLivePagedList = MutableLiveData<PagedList<RoomSummary>>()
99+
val roomsLivePagedList: LiveData<PagedList<RoomSummary>> = _roomsLivePagedList
100+
101+
private val internalPagedListObserver = Observer<PagedList<RoomSummary>> {
102+
_roomsLivePagedList.postValue(it)
103+
}
104+
97105
private var currentFilter: HomeRoomFilter = HomeRoomFilter.ALL
98106
private val _emptyStateFlow = MutableSharedFlow<Optional<StateView.State.Empty>>(replay = 1)
99107
val emptyStateFlow = _emptyStateFlow.asSharedFlow()
100108

101-
private var roomsFlowJob: Job? = null
102-
103109
private var filteredPagedRoomSummariesLive: UpdatableLivePageResult? = null
104110

105111
init {
@@ -223,6 +229,8 @@ class HomeRoomListViewModel @AssistedInject constructor(
223229
}
224230

225231
private fun observeRooms() = viewModelScope.launch {
232+
filteredPagedRoomSummariesLive?.livePagedList?.removeObserver(internalPagedListObserver)
233+
226234
val builder = RoomSummaryQueryParams.Builder().also {
227235
it.memberships = listOf(Membership.JOIN)
228236
}
@@ -233,7 +241,6 @@ class HomeRoomListViewModel @AssistedInject constructor(
233241
} else {
234242
RoomSortOrder.ACTIVITY
235243
}
236-
237244
val liveResults = session.roomService().getFilteredPagedRoomSummariesLive(
238245
params,
239246
pagedListConfig,
@@ -249,21 +256,15 @@ class HomeRoomListViewModel @AssistedInject constructor(
249256
}
250257
.onEach { selectedSpaceOption ->
251258
val selectedSpace = selectedSpaceOption.orNull()
252-
liveResults.queryParams = liveResults.queryParams.copy(
259+
filteredPagedRoomSummariesLive?.queryParams = liveResults.queryParams.copy(
253260
spaceFilter = selectedSpace?.roomId.toActiveSpaceOrNoFilter()
254261
)
255262
emitEmptyState()
256263
}
264+
.also { roomsFlow = it }
257265
.launchIn(viewModelScope)
258266

259-
roomsFlowJob?.cancel(CancellationException())
260-
261-
roomsFlowJob = liveResults.livePagedList
262-
.asFlow()
263-
.onEach {
264-
setState { copy(roomsPagedList = it) }
265-
}
266-
.launchIn(viewModelScope)
267+
liveResults.livePagedList.observeForever(internalPagedListObserver)
267268
}
268269

269270
private fun observeOrderPreferences() {
@@ -344,6 +345,11 @@ class HomeRoomListViewModel @AssistedInject constructor(
344345
}
345346
}
346347

348+
override fun onCleared() {
349+
super.onCleared()
350+
filteredPagedRoomSummariesLive?.livePagedList?.removeObserver(internalPagedListObserver)
351+
}
352+
347353
private fun handleChangeRoomFilter(newFilter: HomeRoomFilter) {
348354
if (currentFilter == newFilter) {
349355
return

vector/src/main/java/im/vector/app/features/home/room/list/home/HomeRoomListViewState.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,11 @@
1616

1717
package im.vector.app.features.home.room.list.home
1818

19-
import androidx.paging.PagedList
2019
import com.airbnb.mvrx.MavericksState
2120
import im.vector.app.core.platform.StateView
2221
import im.vector.app.features.home.room.list.home.header.RoomsHeadersData
23-
import org.matrix.android.sdk.api.session.room.model.RoomSummary
2422

2523
data class HomeRoomListViewState(
2624
val state: StateView.State = StateView.State.Content,
2725
val headersData: RoomsHeadersData = RoomsHeadersData(),
28-
val roomsPagedList: PagedList<RoomSummary>? = null,
2926
) : MavericksState

0 commit comments

Comments
 (0)