Start DM - Handle the local rooms within the new AppLayout
This commit is contained in:
parent
3c68222fd7
commit
14d2aec506
|
@ -40,6 +40,7 @@ import im.vector.app.databinding.FragmentRoomListBinding
|
||||||
import im.vector.app.features.analytics.plan.ViewRoom
|
import im.vector.app.features.analytics.plan.ViewRoom
|
||||||
import im.vector.app.features.home.room.list.RoomListAnimator
|
import im.vector.app.features.home.room.list.RoomListAnimator
|
||||||
import im.vector.app.features.home.room.list.RoomListListener
|
import im.vector.app.features.home.room.list.RoomListListener
|
||||||
|
import im.vector.app.features.home.room.list.RoomListViewState
|
||||||
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsBottomSheet
|
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsBottomSheet
|
||||||
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedAction
|
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedAction
|
||||||
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
|
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
|
||||||
|
@ -98,6 +99,11 @@ class HomeRoomListFragment :
|
||||||
is HomeRoomListViewEvents.Done -> Unit
|
is HomeRoomListViewEvents.Done -> Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
roomListViewModel.onEach(HomeRoomListViewState::localRoomIds) {
|
||||||
|
// Local rooms should not exist anymore when the room list is shown
|
||||||
|
roomListViewModel.deleteLocalRooms(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleQuickActions(quickAction: RoomListQuickActionsSharedAction) {
|
private fun handleQuickActions(quickAction: RoomListQuickActionsSharedAction) {
|
||||||
|
|
|
@ -49,6 +49,7 @@ import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.flow.onStart
|
import kotlinx.coroutines.flow.onStart
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||||
import org.matrix.android.sdk.api.query.RoomCategoryFilter
|
import org.matrix.android.sdk.api.query.RoomCategoryFilter
|
||||||
import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
||||||
import org.matrix.android.sdk.api.query.toActiveSpaceOrNoFilter
|
import org.matrix.android.sdk.api.query.toActiveSpaceOrNoFilter
|
||||||
|
@ -60,6 +61,7 @@ import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
|
||||||
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.localecho.RoomLocalEcho
|
||||||
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
||||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||||
import org.matrix.android.sdk.api.session.room.state.isPublic
|
import org.matrix.android.sdk.api.session.room.state.isPublic
|
||||||
|
@ -103,6 +105,7 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||||
observeRecents()
|
observeRecents()
|
||||||
observeFilterTabs()
|
observeFilterTabs()
|
||||||
observeRooms()
|
observeRooms()
|
||||||
|
observeLocalRooms()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun observeInvites() {
|
private fun observeInvites() {
|
||||||
|
@ -261,6 +264,16 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||||
}.launchIn(viewModelScope)
|
}.launchIn(viewModelScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun observeLocalRooms() {
|
||||||
|
session
|
||||||
|
.flow()
|
||||||
|
.liveRoomSummaries(roomSummaryQueryParams {
|
||||||
|
roomId = QueryStringValue.Contains(RoomLocalEcho.PREFIX)
|
||||||
|
})
|
||||||
|
.map { page -> page.map { it.roomId } }
|
||||||
|
.setOnEach { copy(localRoomIds = it) }
|
||||||
|
}
|
||||||
|
|
||||||
private fun emitEmptyState() {
|
private fun emitEmptyState() {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
val emptyState = getEmptyStateData(currentFilter, spaceStateHandler.getCurrentSpace())
|
val emptyState = getEmptyStateData(currentFilter, spaceStateHandler.getCurrentSpace())
|
||||||
|
@ -349,6 +362,14 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
||||||
return session.getRoom(roomId)?.stateService()?.isPublic().orFalse()
|
return session.getRoom(roomId)?.stateService()?.isPublic().orFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun deleteLocalRooms(roomsIds: Iterable<String>) {
|
||||||
|
viewModelScope.launch {
|
||||||
|
roomsIds.forEach {
|
||||||
|
session.roomService().deleteLocalRoom(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleSelectRoom(action: HomeRoomListAction.SelectRoom) = withState {
|
private fun handleSelectRoom(action: HomeRoomListAction.SelectRoom) = withState {
|
||||||
_viewEvents.post(HomeRoomListViewEvents.SelectRoom(action.roomSummary, false))
|
_viewEvents.post(HomeRoomListViewEvents.SelectRoom(action.roomSummary, false))
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,5 +26,6 @@ import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
data class HomeRoomListViewState(
|
data class HomeRoomListViewState(
|
||||||
val state: StateView.State = StateView.State.Content,
|
val state: StateView.State = StateView.State.Content,
|
||||||
val headersData: RoomsHeadersData = RoomsHeadersData(),
|
val headersData: RoomsHeadersData = RoomsHeadersData(),
|
||||||
val roomsLivePagedList: LiveData<PagedList<RoomSummary>>? = null
|
val roomsLivePagedList: LiveData<PagedList<RoomSummary>>? = null,
|
||||||
|
val localRoomIds: List<String> = emptyList()
|
||||||
) : MavericksState
|
) : MavericksState
|
||||||
|
|
Loading…
Reference in New Issue