Merge pull request #5924 from vector-im/feature/bma/space_fix
Space list crash fix
This commit is contained in:
commit
12d7cee687
@ -42,7 +42,8 @@ import javax.inject.Inject
|
|||||||
class SpaceSummaryController @Inject constructor(
|
class SpaceSummaryController @Inject constructor(
|
||||||
private val avatarRenderer: AvatarRenderer,
|
private val avatarRenderer: AvatarRenderer,
|
||||||
private val colorProvider: ColorProvider,
|
private val colorProvider: ColorProvider,
|
||||||
private val stringProvider: StringProvider) : EpoxyController() {
|
private val stringProvider: StringProvider,
|
||||||
|
) : EpoxyController() {
|
||||||
|
|
||||||
var callback: Callback? = null
|
var callback: Callback? = null
|
||||||
private var viewState: SpaceListViewState? = null
|
private var viewState: SpaceListViewState? = null
|
||||||
@ -62,7 +63,8 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
nonNullViewState.selectedGroupingMethod,
|
nonNullViewState.selectedGroupingMethod,
|
||||||
nonNullViewState.rootSpacesOrdered,
|
nonNullViewState.rootSpacesOrdered,
|
||||||
nonNullViewState.expandedStates,
|
nonNullViewState.expandedStates,
|
||||||
nonNullViewState.homeAggregateCount)
|
nonNullViewState.homeAggregateCount
|
||||||
|
)
|
||||||
|
|
||||||
if (!nonNullViewState.legacyGroups.isNullOrEmpty()) {
|
if (!nonNullViewState.legacyGroups.isNullOrEmpty()) {
|
||||||
genericFooterItem {
|
genericFooterItem {
|
||||||
@ -82,8 +84,10 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
avatarRenderer(host.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
id("all_communities")
|
id("all_communities")
|
||||||
matrixItem(mxItem.copy(displayName = host.stringProvider.getString(R.string.group_all_communities)))
|
matrixItem(mxItem.copy(displayName = host.stringProvider.getString(R.string.group_all_communities)))
|
||||||
selected(nonNullViewState.selectedGroupingMethod is RoomGroupingMethod.ByLegacyGroup &&
|
selected(
|
||||||
nonNullViewState.selectedGroupingMethod.group() == null)
|
nonNullViewState.selectedGroupingMethod is RoomGroupingMethod.ByLegacyGroup &&
|
||||||
|
nonNullViewState.selectedGroupingMethod.group() == null
|
||||||
|
)
|
||||||
listener { host.callback?.onGroupSelected(null) }
|
listener { host.callback?.onGroupSelected(null) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,8 +97,10 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
avatarRenderer(host.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
id(groupSummary.groupId)
|
id(groupSummary.groupId)
|
||||||
matrixItem(groupSummary.toMatrixItem())
|
matrixItem(groupSummary.toMatrixItem())
|
||||||
selected(nonNullViewState.selectedGroupingMethod is RoomGroupingMethod.ByLegacyGroup &&
|
selected(
|
||||||
nonNullViewState.selectedGroupingMethod.group()?.groupId == groupSummary.groupId)
|
nonNullViewState.selectedGroupingMethod is RoomGroupingMethod.ByLegacyGroup &&
|
||||||
|
nonNullViewState.selectedGroupingMethod.group()?.groupId == groupSummary.groupId
|
||||||
|
)
|
||||||
listener { host.callback?.onGroupSelected(groupSummary) }
|
listener { host.callback?.onGroupSelected(groupSummary) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,12 +118,12 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// show invites on top
|
// show invites on top
|
||||||
|
summaries
|
||||||
summaries?.filter { it.membership == Membership.INVITE }
|
?.filter { it.membership == Membership.INVITE }
|
||||||
?.forEach { roomSummary ->
|
?.forEach { roomSummary ->
|
||||||
spaceSummaryItem {
|
spaceSummaryItem {
|
||||||
avatarRenderer(host.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
id(roomSummary.roomId)
|
id("invite_${roomSummary.roomId}")
|
||||||
matrixItem(roomSummary.toMatrixItem())
|
matrixItem(roomSummary.toMatrixItem())
|
||||||
countState(UnreadCounterBadgeView.State(1, true))
|
countState(UnreadCounterBadgeView.State(1, true))
|
||||||
selected(false)
|
selected(false)
|
||||||
@ -135,33 +141,34 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rootSpaces
|
rootSpaces
|
||||||
?.forEach { groupSummary ->
|
?.filter { it.membership != Membership.INVITE }
|
||||||
val isSelected = selected is RoomGroupingMethod.BySpace && groupSummary.roomId == selected.space()?.roomId
|
?.forEach { roomSummary ->
|
||||||
|
val isSelected = selected is RoomGroupingMethod.BySpace && roomSummary.roomId == selected.space()?.roomId
|
||||||
// does it have children?
|
// does it have children?
|
||||||
val subSpaces = groupSummary.spaceChildren?.filter { childInfo ->
|
val subSpaces = roomSummary.spaceChildren?.filter { childInfo ->
|
||||||
summaries?.any { it.roomId == childInfo.childRoomId }.orFalse()
|
summaries?.any { it.roomId == childInfo.childRoomId }.orFalse()
|
||||||
}?.sortedWith(subSpaceComparator)
|
}?.sortedWith(subSpaceComparator)
|
||||||
val hasChildren = (subSpaces?.size ?: 0) > 0
|
val hasChildren = (subSpaces?.size ?: 0) > 0
|
||||||
val expanded = expandedStates[groupSummary.roomId] == true
|
val expanded = expandedStates[roomSummary.roomId] == true
|
||||||
|
|
||||||
spaceSummaryItem {
|
spaceSummaryItem {
|
||||||
avatarRenderer(host.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
id(groupSummary.roomId)
|
id(roomSummary.roomId)
|
||||||
hasChildren(hasChildren)
|
hasChildren(hasChildren)
|
||||||
expanded(expanded)
|
expanded(expanded)
|
||||||
// to debug order
|
// to debug order
|
||||||
// matrixItem(groupSummary.copy(displayName = "${groupSummary.displayName} / ${spaceOrderInfo?.get(groupSummary.roomId)}")
|
// matrixItem(groupSummary.copy(displayName = "${groupSummary.displayName} / ${spaceOrderInfo?.get(groupSummary.roomId)}")
|
||||||
// .toMatrixItem())
|
// .toMatrixItem())
|
||||||
matrixItem(groupSummary.toMatrixItem())
|
matrixItem(roomSummary.toMatrixItem())
|
||||||
selected(isSelected)
|
selected(isSelected)
|
||||||
canDrag(true)
|
canDrag(true)
|
||||||
onMore { host.callback?.onSpaceSettings(groupSummary) }
|
onMore { host.callback?.onSpaceSettings(roomSummary) }
|
||||||
listener { host.callback?.onSpaceSelected(groupSummary) }
|
listener { host.callback?.onSpaceSelected(roomSummary) }
|
||||||
toggleExpand { host.callback?.onToggleExpand(groupSummary) }
|
toggleExpand { host.callback?.onToggleExpand(roomSummary) }
|
||||||
countState(
|
countState(
|
||||||
UnreadCounterBadgeView.State(
|
UnreadCounterBadgeView.State(
|
||||||
groupSummary.notificationCount,
|
roomSummary.notificationCount,
|
||||||
groupSummary.highlightCount > 0
|
roomSummary.highlightCount > 0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -169,7 +176,7 @@ class SpaceSummaryController @Inject constructor(
|
|||||||
if (hasChildren && expanded) {
|
if (hasChildren && expanded) {
|
||||||
// it's expanded
|
// it's expanded
|
||||||
subSpaces?.forEach { child ->
|
subSpaces?.forEach { child ->
|
||||||
buildSubSpace(groupSummary.roomId, summaries, expandedStates, selected, child, 1, 3)
|
buildSubSpace(roomSummary.roomId, summaries, expandedStates, selected, child, 1, 3)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user