Timeline: set empty item as fallback item

This commit is contained in:
ganfra 2019-02-20 16:14:12 +01:00
parent 28c837a47f
commit 9cc2cf8360
3 changed files with 15 additions and 12 deletions

View File

@ -32,14 +32,14 @@ class RoomHistoryVisibilityItemFactory(private val stringProvider: StringProvide


fun create(event: TimelineEvent): NoticeItem? { fun create(event: TimelineEvent): NoticeItem? {
val roomMember = event.roomMember ?: return null val roomMember = event.roomMember ?: return null
val noticeText = buildRoomMemberNotice(event.root, roomMember) ?: return null val noticeText = buildNoticeText(event.root, roomMember) ?: return null
return NoticeItem_() return NoticeItem_()
.noticeText(noticeText) .noticeText(noticeText)
.avatarUrl(roomMember.avatarUrl) .avatarUrl(roomMember.avatarUrl)
.memberName(roomMember.displayName) .memberName(roomMember.displayName)
} }


private fun buildRoomMemberNotice(event: Event, roomMember: RoomMember): CharSequence? { private fun buildNoticeText(event: Event, roomMember: RoomMember): CharSequence? {
val content = event.content.toModel<RoomHistoryVisibilityContent>() ?: return null val content = event.content.toModel<RoomHistoryVisibilityContent>() ?: return null
val formattedVisibility = when (content.historyVisibility) { val formattedVisibility = when (content.historyVisibility) {
RoomHistoryVisibility.SHARED -> stringProvider.getString(R.string.notice_room_visibility_shared) RoomHistoryVisibility.SHARED -> stringProvider.getString(R.string.notice_room_visibility_shared)

View File

@ -74,7 +74,7 @@ class TimelineEventController(private val roomId: String,
val nextDate = nextEvent?.root?.localDateTime() val nextDate = nextEvent?.root?.localDateTime()
val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate() val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate()


timelineItemFactory.create(event, nextEvent, callback)?.also { timelineItemFactory.create(event, nextEvent, callback).also {
it.id(event.localId) it.id(event.localId)
it.setOnVisibilityStateChanged(TimelineEventVisibilityStateChangedListener(callback, event, currentPosition)) it.setOnVisibilityStateChanged(TimelineEventVisibilityStateChangedListener(callback, event, currentPosition))
epoxyModels.add(it) epoxyModels.add(it)

View File

@ -31,29 +31,32 @@ class TimelineItemFactory(private val messageItemFactory: MessageItemFactory,


fun create(event: TimelineEvent, fun create(event: TimelineEvent,
nextEvent: TimelineEvent?, nextEvent: TimelineEvent?,
callback: TimelineEventController.Callback?): RiotEpoxyModel<*>? { callback: TimelineEventController.Callback?): RiotEpoxyModel<*> {


return try { val computedModel = try {
when (event.root.type) { when (event.root.type) {
EventType.MESSAGE -> messageItemFactory.create(event, nextEvent, callback) EventType.MESSAGE -> messageItemFactory.create(event, nextEvent, callback)
EventType.STATE_ROOM_NAME -> roomNameItemFactory.create(event) EventType.STATE_ROOM_NAME -> roomNameItemFactory.create(event)
EventType.STATE_ROOM_TOPIC -> roomTopicItemFactory.create(event) EventType.STATE_ROOM_TOPIC -> roomTopicItemFactory.create(event)
EventType.STATE_ROOM_MEMBER -> roomMemberItemFactory.create(event) EventType.STATE_ROOM_MEMBER -> roomMemberItemFactory.create(event)
EventType.STATE_HISTORY_VISIBILITY -> roomHistoryVisibilityItemFactory.create(event) EventType.STATE_HISTORY_VISIBILITY -> roomHistoryVisibilityItemFactory.create(event)

EventType.CALL_INVITE, EventType.CALL_INVITE,
EventType.CALL_HANGUP, EventType.CALL_HANGUP,
EventType.CALL_ANSWER -> callItemFactory.create(event) EventType.CALL_ANSWER -> callItemFactory.create(event)
EventType.STATE_ROOM_CREATE,
EventType.STATE_ROOM_POWER_LEVELS, EventType.ENCRYPTED,
EventType.STATE_ROOM_JOIN_RULES, EventType.ENCRYPTION,
EventType.STATE_ROOM_GUEST_ACCESS, EventType.STATE_ROOM_THIRD_PARTY_INVITE,
EventType.CALL_CANDIDATES, EventType.STICKER,
EventType.REDACTION -> EmptyItem_() EventType.STATE_ROOM_CREATE -> defaultItemFactory.create(event)
else -> defaultItemFactory.create(event)
else -> null
} }
} catch (e: Exception) { } catch (e: Exception) {
defaultItemFactory.create(event, e) defaultItemFactory.create(event, e)
} }
return computedModel ?: EmptyItem_()
} }


} }