mirror of
https://github.com/vector-im/riotX-android
synced 2025-10-06 00:02:48 +02:00
RoomList: Extract PagedList from ViewState to ViewModel
This commit is contained in:
@@ -157,17 +157,12 @@ class HomeRoomListFragment :
|
||||
headersController.submitData(it)
|
||||
}
|
||||
|
||||
roomListViewModel.onEach(HomeRoomListViewState::roomsLivePagedList, deliveryMode = UniqueOnly(UUID.randomUUID().toString())) { roomsListLive ->
|
||||
this.roomsListLive?.removeObservers(viewLifecycleOwner)
|
||||
this.roomsListLive = roomsListLive
|
||||
roomsListLive?.observeForever { }
|
||||
roomsListLive?.observe(viewLifecycleOwner) { roomsList ->
|
||||
roomListViewModel.roomsLivePagedList.observe(viewLifecycleOwner) { roomsList ->
|
||||
roomsController.submitList(roomsList)
|
||||
if (roomsList.isEmpty()) {
|
||||
roomsController.requestForcedModelBuild()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
roomListViewModel.emptyStateFlow.onEach { emptyStateOptional ->
|
||||
roomsController.submitEmptyStateData(emptyStateOptional.getOrNull())
|
||||
|
@@ -17,6 +17,9 @@
|
||||
package im.vector.app.features.home.room.list.home
|
||||
|
||||
import android.widget.ImageView
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.paging.PagedList
|
||||
import arrow.core.Option
|
||||
import arrow.core.toOption
|
||||
@@ -93,6 +96,14 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||
.setPrefetchDistance(10)
|
||||
.build()
|
||||
|
||||
private val roomListRelay = MutableLiveData<PagedList<RoomSummary>>()
|
||||
// PagedList doesn't work well with State, so extract in a variable for now
|
||||
val roomsLivePagedList: LiveData<PagedList<RoomSummary>> = roomListRelay
|
||||
|
||||
private val roomListRelayObserver = Observer<PagedList<RoomSummary>> {
|
||||
roomListRelay.postValue(it)
|
||||
}
|
||||
|
||||
private var currentFilter: HomeRoomFilter = HomeRoomFilter.ALL
|
||||
private val _emptyStateFlow = MutableSharedFlow<Optional<StateView.State.Empty>>(replay = 1)
|
||||
val emptyStateFlow = _emptyStateFlow.asSharedFlow()
|
||||
@@ -220,6 +231,8 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||
}
|
||||
|
||||
private fun observeRooms() = viewModelScope.launch {
|
||||
filteredPagedRoomSummariesLive?.livePagedList?.removeObserver(roomListRelayObserver)
|
||||
|
||||
val builder = RoomSummaryQueryParams.Builder().also {
|
||||
it.memberships = listOf(Membership.JOIN)
|
||||
}
|
||||
@@ -230,7 +243,6 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||
} else {
|
||||
RoomSortOrder.ACTIVITY
|
||||
}
|
||||
|
||||
val liveResults = session.roomService().getFilteredPagedRoomSummariesLive(
|
||||
params,
|
||||
pagedListConfig,
|
||||
@@ -246,7 +258,7 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||
}
|
||||
.onEach { selectedSpaceOption ->
|
||||
val selectedSpace = selectedSpaceOption.orNull()
|
||||
liveResults.queryParams = liveResults.queryParams.copy(
|
||||
filteredPagedRoomSummariesLive?.queryParams = liveResults.queryParams.copy(
|
||||
spaceFilter = selectedSpace?.roomId.toActiveSpaceOrNoFilter()
|
||||
)
|
||||
emitEmptyState()
|
||||
@@ -254,7 +266,7 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||
.also { roomsFlow = it }
|
||||
.launchIn(viewModelScope)
|
||||
|
||||
setState { copy(roomsLivePagedList = liveResults.livePagedList) }
|
||||
liveResults.livePagedList.observeForever(roomListRelayObserver)
|
||||
}
|
||||
|
||||
private fun observeOrderPreferences() {
|
||||
|
@@ -16,15 +16,11 @@
|
||||
|
||||
package im.vector.app.features.home.room.list.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.paging.PagedList
|
||||
import com.airbnb.mvrx.MavericksState
|
||||
import im.vector.app.core.platform.StateView
|
||||
import im.vector.app.features.home.room.list.home.header.RoomsHeadersData
|
||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||
|
||||
data class HomeRoomListViewState(
|
||||
val state: StateView.State = StateView.State.Content,
|
||||
val headersData: RoomsHeadersData = RoomsHeadersData(),
|
||||
val roomsLivePagedList: LiveData<PagedList<RoomSummary>>? = null,
|
||||
) : MavericksState
|
||||
|
Reference in New Issue
Block a user