Merge pull request #5924 from vector-im/feature/bma/space_fix

Space list crash fix
This commit is contained in:
Benoit Marty 2022-05-04 10:41:40 +02:00 committed by GitHub
commit 12d7cee687
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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)
} }
} }
} }