Makes space list work inside spaces
This commit is contained in:
parent
79e6dd074a
commit
ff71e69b0e
@ -19,11 +19,9 @@ package im.vector.app.features.spaces
|
|||||||
import com.airbnb.epoxy.EpoxyController
|
import com.airbnb.epoxy.EpoxyController
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.features.grouplist.homeSpaceSummaryItem
|
|
||||||
import im.vector.app.features.grouplist.newHomeSpaceSummaryItem
|
import im.vector.app.features.grouplist.newHomeSpaceSummaryItem
|
||||||
import im.vector.app.features.home.AvatarRenderer
|
import im.vector.app.features.home.AvatarRenderer
|
||||||
import im.vector.app.features.home.room.list.UnreadCounterBadgeView
|
import im.vector.app.features.home.room.list.UnreadCounterBadgeView
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
|
||||||
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.SpaceChildInfo
|
import org.matrix.android.sdk.api.session.room.model.SpaceChildInfo
|
||||||
@ -49,6 +47,7 @@ class NewSpaceSummaryController @Inject constructor(
|
|||||||
override fun buildModels() {
|
override fun buildModels() {
|
||||||
val nonNullViewState = viewState ?: return
|
val nonNullViewState = viewState ?: return
|
||||||
buildGroupModels(
|
buildGroupModels(
|
||||||
|
nonNullViewState.asyncSpaces(),
|
||||||
nonNullViewState.selectedSpace,
|
nonNullViewState.selectedSpace,
|
||||||
nonNullViewState.rootSpacesOrdered,
|
nonNullViewState.rootSpacesOrdered,
|
||||||
nonNullViewState.homeAggregateCount
|
nonNullViewState.homeAggregateCount
|
||||||
@ -56,52 +55,94 @@ class NewSpaceSummaryController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun buildGroupModels(
|
private fun buildGroupModels(
|
||||||
|
spaceSummaries: List<RoomSummary>?,
|
||||||
selectedSpace: RoomSummary?,
|
selectedSpace: RoomSummary?,
|
||||||
rootSpaces: List<RoomSummary>?,
|
rootSpaces: List<RoomSummary>?,
|
||||||
homeCount: RoomAggregateNotificationCount
|
homeCount: RoomAggregateNotificationCount
|
||||||
) {
|
) {
|
||||||
val host = this
|
val host = this
|
||||||
|
|
||||||
newSpaceListHeaderItem {
|
newSpaceListHeaderItem {
|
||||||
id("space_list_header")
|
id("space_list_header")
|
||||||
}
|
}
|
||||||
|
|
||||||
newHomeSpaceSummaryItem {
|
if (selectedSpace != null) {
|
||||||
id("space_home")
|
addSubSpaces(selectedSpace, spaceSummaries, homeCount)
|
||||||
text(this@NewSpaceSummaryController.stringProvider.getString(R.string.all_chats))
|
} else {
|
||||||
selected(selectedSpace == null)
|
addHomeItem(true, homeCount)
|
||||||
countState(UnreadCounterBadgeView.State(homeCount.totalCount, homeCount.isHighlight))
|
addRootSpaces(rootSpaces)
|
||||||
listener { host.callback?.onSpaceSelected(null) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rootSpaces
|
|
||||||
?.filter { it.membership != Membership.INVITE }
|
|
||||||
?.forEach { roomSummary ->
|
|
||||||
val isSelected = roomSummary.roomId == selectedSpace?.roomId
|
|
||||||
|
|
||||||
newSpaceSummaryItem {
|
|
||||||
avatarRenderer(host.avatarRenderer)
|
|
||||||
id(roomSummary.roomId)
|
|
||||||
matrixItem(roomSummary.toMatrixItem())
|
|
||||||
selected(isSelected)
|
|
||||||
canDrag(true)
|
|
||||||
onMore { host.callback?.onSpaceSettings(roomSummary) }
|
|
||||||
listener { host.callback?.onSpaceSelected(roomSummary) }
|
|
||||||
countState(
|
|
||||||
UnreadCounterBadgeView.State(
|
|
||||||
roomSummary.notificationCount,
|
|
||||||
roomSummary.highlightCount > 0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newSpaceAddItem {
|
newSpaceAddItem {
|
||||||
id("create")
|
id("create")
|
||||||
listener { host.callback?.onAddSpaceSelected() }
|
listener { host.callback?.onAddSpaceSelected() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addHomeItem(selected: Boolean, homeCount: RoomAggregateNotificationCount) {
|
||||||
|
val host = this
|
||||||
|
newHomeSpaceSummaryItem {
|
||||||
|
id("space_home")
|
||||||
|
text(host.stringProvider.getString(R.string.all_chats))
|
||||||
|
selected(selected)
|
||||||
|
countState(UnreadCounterBadgeView.State(homeCount.totalCount, homeCount.isHighlight))
|
||||||
|
listener { host.callback?.onSpaceSelected(null) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addSubSpaces(
|
||||||
|
selectedSpace: RoomSummary,
|
||||||
|
spaceSummaries: List<RoomSummary>?,
|
||||||
|
homeCount: RoomAggregateNotificationCount,
|
||||||
|
) {
|
||||||
|
val host = this
|
||||||
|
val spaceChildren = selectedSpace.spaceChildren
|
||||||
|
var subSpacesAdded = false
|
||||||
|
|
||||||
|
spaceChildren?.sortedWith(subSpaceComparator)?.forEach { spaceChild ->
|
||||||
|
val subSpaceSummary = spaceSummaries?.firstOrNull { it.roomId == spaceChild.childRoomId } ?: return@forEach
|
||||||
|
|
||||||
|
if (subSpaceSummary.membership != Membership.INVITE) {
|
||||||
|
subSpacesAdded = true
|
||||||
|
newSpaceSummaryItem {
|
||||||
|
avatarRenderer(host.avatarRenderer)
|
||||||
|
id(subSpaceSummary.roomId)
|
||||||
|
matrixItem(subSpaceSummary.toMatrixItem())
|
||||||
|
selected(false)
|
||||||
|
canDrag(true)
|
||||||
|
onMore { host.callback?.onSpaceSettings(subSpaceSummary) }
|
||||||
|
listener { host.callback?.onSpaceSelected(subSpaceSummary) }
|
||||||
|
countState(
|
||||||
|
UnreadCounterBadgeView.State(
|
||||||
|
subSpaceSummary.notificationCount,
|
||||||
|
subSpaceSummary.highlightCount > 0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!subSpacesAdded) {
|
||||||
|
addHomeItem(false, homeCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addRootSpaces(rootSpaces: List<RoomSummary>?) {
|
||||||
|
val host = this
|
||||||
|
rootSpaces
|
||||||
|
?.filter { it.membership != Membership.INVITE }
|
||||||
|
?.forEach { roomSummary ->
|
||||||
|
newSpaceSummaryItem {
|
||||||
|
avatarRenderer(host.avatarRenderer)
|
||||||
|
id(roomSummary.roomId)
|
||||||
|
matrixItem(roomSummary.toMatrixItem())
|
||||||
|
canDrag(true)
|
||||||
|
onMore { host.callback?.onSpaceSettings(roomSummary) }
|
||||||
|
listener { host.callback?.onSpaceSelected(roomSummary) }
|
||||||
|
countState(UnreadCounterBadgeView.State(roomSummary.notificationCount, roomSummary.highlightCount > 0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
fun onSpaceSelected(spaceSummary: RoomSummary?)
|
fun onSpaceSelected(spaceSummary: RoomSummary?)
|
||||||
fun onSpaceInviteSelected(spaceSummary: RoomSummary)
|
fun onSpaceInviteSelected(spaceSummary: RoomSummary)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user