Skip to content

Commit 240ce68

Browse files
committed
cleaning rendering of state event in timeline
1 parent ca58a04 commit 240ce68

File tree

5 files changed

+92
-76
lines changed

5 files changed

+92
-76
lines changed

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/EncryptionItemFactory.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class EncryptionItemFactory @Inject constructor(
4444
if (!event.root.isStateEvent()) {
4545
return null
4646
}
47-
val algorithm = event.root.getClearContent().toModel<EncryptionEventContent>()?.algorithm
47+
val algorithm = event.root.content.toModel<EncryptionEventContent>()?.algorithm
4848
val informationData = informationDataFactory.create(params)
4949
val attributes = messageItemAttributesFactory.create(null, informationData, params.callback)
5050

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/RoomCreateItemFactory.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class RoomCreateItemFactory @Inject constructor(private val stringProvider: Stri
3434

3535
fun create(params: TimelineItemFactoryParams): VectorEpoxyModel<*>? {
3636
val event = params.event
37-
val createRoomContent = event.root.getClearContent().toModel<RoomCreateContent>() ?: return null
37+
val createRoomContent = event.root.content.toModel<RoomCreateContent>() ?: return null
3838
val predecessorId = createRoomContent.predecessor?.roomId ?: return defaultRendering(params)
3939
val roomLink = session.permalinkService().createRoomPermalink(predecessorId) ?: return null
4040
val text = span {

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt

Lines changed: 75 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -45,67 +45,83 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me
4545
if (!timelineEventVisibilityHelper.shouldShowEvent(event, params.highlightedEventId)) {
4646
return buildEmptyItem(event, params.prevEvent, params.highlightedEventId)
4747
}
48-
when (event.root.getClearType()) {
49-
// Message itemsX
50-
EventType.STICKER,
51-
EventType.POLL_START,
52-
EventType.MESSAGE -> messageItemFactory.create(params)
53-
EventType.STATE_ROOM_TOMBSTONE,
54-
EventType.STATE_ROOM_NAME,
55-
EventType.STATE_ROOM_TOPIC,
56-
EventType.STATE_ROOM_AVATAR,
57-
EventType.STATE_ROOM_MEMBER,
58-
EventType.STATE_ROOM_THIRD_PARTY_INVITE,
59-
EventType.STATE_ROOM_CANONICAL_ALIAS,
60-
EventType.STATE_ROOM_JOIN_RULES,
61-
EventType.STATE_ROOM_HISTORY_VISIBILITY,
62-
EventType.STATE_ROOM_SERVER_ACL,
63-
EventType.STATE_ROOM_GUEST_ACCESS,
64-
EventType.REDACTION,
65-
EventType.STATE_ROOM_ALIASES,
66-
EventType.KEY_VERIFICATION_ACCEPT,
67-
EventType.KEY_VERIFICATION_START,
68-
EventType.KEY_VERIFICATION_KEY,
69-
EventType.KEY_VERIFICATION_READY,
70-
EventType.KEY_VERIFICATION_MAC,
71-
EventType.CALL_CANDIDATES,
72-
EventType.CALL_REPLACES,
73-
EventType.CALL_SELECT_ANSWER,
74-
EventType.CALL_NEGOTIATE,
75-
EventType.REACTION,
76-
EventType.STATE_SPACE_CHILD,
77-
EventType.STATE_SPACE_PARENT,
78-
EventType.STATE_ROOM_POWER_LEVELS,
79-
EventType.POLL_RESPONSE,
80-
EventType.POLL_END -> noticeItemFactory.create(params)
81-
EventType.STATE_ROOM_WIDGET_LEGACY,
82-
EventType.STATE_ROOM_WIDGET -> widgetItemFactory.create(params)
83-
EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(params)
84-
// State room create
85-
EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(params)
86-
// Calls
87-
EventType.CALL_INVITE,
88-
EventType.CALL_HANGUP,
89-
EventType.CALL_REJECT,
90-
EventType.CALL_ANSWER -> callItemFactory.create(params)
91-
// Crypto
92-
EventType.ENCRYPTED -> {
93-
if (event.root.isRedacted()) {
94-
// Redacted event, let the MessageItemFactory handle it
95-
messageItemFactory.create(params)
96-
} else {
97-
encryptedItemFactory.create(params)
48+
49+
// Manage state event differently, to check validity
50+
if (event.root.isStateEvent()) {
51+
// state event are not e2e
52+
when (event.root.type) {
53+
EventType.STATE_ROOM_TOMBSTONE,
54+
EventType.STATE_ROOM_NAME,
55+
EventType.STATE_ROOM_TOPIC,
56+
EventType.STATE_ROOM_AVATAR,
57+
EventType.STATE_ROOM_MEMBER,
58+
EventType.STATE_ROOM_THIRD_PARTY_INVITE,
59+
EventType.STATE_ROOM_CANONICAL_ALIAS,
60+
EventType.STATE_ROOM_JOIN_RULES,
61+
EventType.STATE_ROOM_HISTORY_VISIBILITY,
62+
EventType.STATE_ROOM_SERVER_ACL,
63+
EventType.STATE_ROOM_GUEST_ACCESS,
64+
EventType.STATE_ROOM_ALIASES,
65+
EventType.STATE_SPACE_CHILD,
66+
EventType.STATE_SPACE_PARENT,
67+
EventType.STATE_ROOM_POWER_LEVELS -> {
68+
noticeItemFactory.create(params)
69+
}
70+
EventType.STATE_ROOM_WIDGET_LEGACY,
71+
EventType.STATE_ROOM_WIDGET -> widgetItemFactory.create(params)
72+
EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(params)
73+
// State room create
74+
EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(params)
75+
// Unhandled state event types
76+
else -> {
77+
// Should only happen when shouldShowHiddenEvents() settings is ON
78+
Timber.v("State event type ${event.root.type} not handled")
79+
defaultItemFactory.create(params)
9880
}
9981
}
100-
EventType.KEY_VERIFICATION_CANCEL,
101-
EventType.KEY_VERIFICATION_DONE -> {
102-
verificationConclusionItemFactory.create(params)
103-
}
104-
// Unhandled event types
105-
else -> {
106-
// Should only happen when shouldShowHiddenEvents() settings is ON
107-
Timber.v("Type ${event.root.getClearType()} not handled")
108-
defaultItemFactory.create(params)
82+
} else {
83+
when (event.root.getClearType()) {
84+
// Message itemsX
85+
EventType.STICKER,
86+
EventType.POLL_START,
87+
EventType.MESSAGE -> messageItemFactory.create(params)
88+
EventType.REDACTION,
89+
EventType.KEY_VERIFICATION_ACCEPT,
90+
EventType.KEY_VERIFICATION_START,
91+
EventType.KEY_VERIFICATION_KEY,
92+
EventType.KEY_VERIFICATION_READY,
93+
EventType.KEY_VERIFICATION_MAC,
94+
EventType.CALL_CANDIDATES,
95+
EventType.CALL_REPLACES,
96+
EventType.CALL_SELECT_ANSWER,
97+
EventType.CALL_NEGOTIATE,
98+
EventType.REACTION,
99+
EventType.POLL_RESPONSE,
100+
EventType.POLL_END -> noticeItemFactory.create(params)
101+
// Calls
102+
EventType.CALL_INVITE,
103+
EventType.CALL_HANGUP,
104+
EventType.CALL_REJECT,
105+
EventType.CALL_ANSWER -> callItemFactory.create(params)
106+
// Crypto
107+
EventType.ENCRYPTED -> {
108+
if (event.root.isRedacted()) {
109+
// Redacted event, let the MessageItemFactory handle it
110+
messageItemFactory.create(params)
111+
} else {
112+
encryptedItemFactory.create(params)
113+
}
114+
}
115+
EventType.KEY_VERIFICATION_CANCEL,
116+
EventType.KEY_VERIFICATION_DONE -> {
117+
verificationConclusionItemFactory.create(params)
118+
}
119+
// Unhandled event types
120+
else -> {
121+
// Should only happen when shouldShowHiddenEvents() settings is ON
122+
Timber.v("Type ${event.root.getClearType()} not handled")
123+
defaultItemFactory.create(params)
124+
}
109125
}
110126
}
111127
} catch (throwable: Throwable) {

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/WidgetItemFactory.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class WidgetItemFactory @Inject constructor(
4141

4242
fun create(params: TimelineItemFactoryParams): VectorEpoxyModel<*>? {
4343
val event = params.event
44-
val widgetContent: WidgetContent = event.root.getClearContent().toModel() ?: return null
44+
val widgetContent: WidgetContent = event.root.content.toModel() ?: return null
4545
val previousWidgetContent: WidgetContent? = event.root.resolvedPrevContent().toModel()
4646

4747
return when (WidgetType.fromString(widgetContent.type ?: previousWidgetContent?.type ?: "")) {

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class NoticeEventFormatter @Inject constructor(
114114
}
115115

116116
private fun formatRoomPowerLevels(event: Event, disambiguatedDisplayName: String): CharSequence? {
117-
val powerLevelsContent: PowerLevelsContent = event.getClearContent().toModel() ?: return null
117+
val powerLevelsContent: PowerLevelsContent = event.content.toModel() ?: return null
118118
val previousPowerLevelsContent: PowerLevelsContent = event.resolvedPrevContent().toModel() ?: return null
119119
val userIds = HashSet<String>()
120120
userIds.addAll(powerLevelsContent.users.orEmpty().keys)
@@ -142,7 +142,7 @@ class NoticeEventFormatter @Inject constructor(
142142
}
143143

144144
private fun formatWidgetEvent(event: Event, disambiguatedDisplayName: String): CharSequence? {
145-
val widgetContent: WidgetContent = event.getClearContent().toModel() ?: return null
145+
val widgetContent: WidgetContent = event.content.toModel() ?: return null
146146
val previousWidgetContent: WidgetContent? = event.resolvedPrevContent().toModel()
147147
return if (widgetContent.isActive()) {
148148
val widgetName = widgetContent.getHumanName()
@@ -198,7 +198,7 @@ class NoticeEventFormatter @Inject constructor(
198198
}
199199

200200
private fun formatRoomCreateEvent(event: Event, isDm: Boolean): CharSequence? {
201-
return event.getClearContent().toModel<RoomCreateContent>()
201+
return event.content.toModel<RoomCreateContent>()
202202
?.takeIf { it.creator.isNullOrBlank().not() }
203203
?.let {
204204
if (event.isSentByCurrentUser()) {
@@ -210,7 +210,7 @@ class NoticeEventFormatter @Inject constructor(
210210
}
211211

212212
private fun formatRoomNameEvent(event: Event, senderName: String?): CharSequence? {
213-
val content = event.getClearContent().toModel<RoomNameContent>() ?: return null
213+
val content = event.content.toModel<RoomNameContent>() ?: return null
214214
return if (content.name.isNullOrBlank()) {
215215
if (event.isSentByCurrentUser()) {
216216
sp.getString(R.string.notice_room_name_removed_by_you)
@@ -235,7 +235,7 @@ class NoticeEventFormatter @Inject constructor(
235235
}
236236

237237
private fun formatRoomTopicEvent(event: Event, senderName: String?): CharSequence? {
238-
val content = event.getClearContent().toModel<RoomTopicContent>() ?: return null
238+
val content = event.content.toModel<RoomTopicContent>() ?: return null
239239
return if (content.topic.isNullOrEmpty()) {
240240
if (event.isSentByCurrentUser()) {
241241
sp.getString(R.string.notice_room_topic_removed_by_you)
@@ -252,7 +252,7 @@ class NoticeEventFormatter @Inject constructor(
252252
}
253253

254254
private fun formatRoomAvatarEvent(event: Event, senderName: String?): CharSequence? {
255-
val content = event.getClearContent().toModel<RoomAvatarContent>() ?: return null
255+
val content = event.content.toModel<RoomAvatarContent>() ?: return null
256256
return if (content.avatarUrl.isNullOrEmpty()) {
257257
if (event.isSentByCurrentUser()) {
258258
sp.getString(R.string.notice_room_avatar_removed_by_you)
@@ -269,7 +269,7 @@ class NoticeEventFormatter @Inject constructor(
269269
}
270270

271271
private fun formatRoomHistoryVisibilityEvent(event: Event, senderName: String?, isDm: Boolean): CharSequence? {
272-
val historyVisibility = event.getClearContent().toModel<RoomHistoryVisibilityContent>()?.historyVisibility ?: return null
272+
val historyVisibility = event.content.toModel<RoomHistoryVisibilityContent>()?.historyVisibility ?: return null
273273

274274
val historyVisibilitySuffix = roomHistoryVisibilityFormatter.getNoticeSuffix(historyVisibility)
275275
return if (event.isSentByCurrentUser()) {
@@ -282,7 +282,7 @@ class NoticeEventFormatter @Inject constructor(
282282
}
283283

284284
private fun formatRoomThirdPartyInvite(event: Event, senderName: String?, isDm: Boolean): CharSequence? {
285-
val content = event.getClearContent().toModel<RoomThirdPartyInviteContent>()
285+
val content = event.content.toModel<RoomThirdPartyInviteContent>()
286286
val prevContent = event.resolvedPrevContent()?.toModel<RoomThirdPartyInviteContent>()
287287

288288
return when {
@@ -363,7 +363,7 @@ class NoticeEventFormatter @Inject constructor(
363363
}
364364

365365
private fun formatRoomMemberEvent(event: Event, senderName: String?, isDm: Boolean): String? {
366-
val eventContent: RoomMemberContent? = event.getClearContent().toModel()
366+
val eventContent: RoomMemberContent? = event.content.toModel()
367367
val prevEventContent: RoomMemberContent? = event.resolvedPrevContent().toModel()
368368
val isMembershipEvent = prevEventContent?.membership != eventContent?.membership ||
369369
eventContent?.membership == Membership.LEAVE
@@ -375,7 +375,7 @@ class NoticeEventFormatter @Inject constructor(
375375
}
376376

377377
private fun formatRoomAliasesEvent(event: Event, senderName: String?): String? {
378-
val eventContent: RoomAliasesContent? = event.getClearContent().toModel()
378+
val eventContent: RoomAliasesContent? = event.content.toModel()
379379
val prevEventContent: RoomAliasesContent? = event.resolvedPrevContent()?.toModel()
380380

381381
val addedAliases = eventContent?.aliases.orEmpty() - prevEventContent?.aliases.orEmpty()
@@ -408,7 +408,7 @@ class NoticeEventFormatter @Inject constructor(
408408
}
409409

410410
private fun formatRoomServerAclEvent(event: Event, senderName: String?): String? {
411-
val eventContent = event.getClearContent().toModel<RoomServerAclContent>() ?: return null
411+
val eventContent = event.content.toModel<RoomServerAclContent>() ?: return null
412412
val prevEventContent = event.resolvedPrevContent()?.toModel<RoomServerAclContent>()
413413

414414
return buildString {
@@ -481,7 +481,7 @@ class NoticeEventFormatter @Inject constructor(
481481
}
482482

483483
private fun formatRoomCanonicalAliasEvent(event: Event, senderName: String?): String? {
484-
val eventContent: RoomCanonicalAliasContent? = event.getClearContent().toModel()
484+
val eventContent: RoomCanonicalAliasContent? = event.content.toModel()
485485
val prevContent: RoomCanonicalAliasContent? = event.resolvedPrevContent().toModel()
486486
val canonicalAlias = eventContent?.canonicalAlias?.takeIf { it.isNotEmpty() }
487487
val prevCanonicalAlias = prevContent?.canonicalAlias?.takeIf { it.isNotEmpty() }
@@ -551,7 +551,7 @@ class NoticeEventFormatter @Inject constructor(
551551
}
552552

553553
private fun formatRoomGuestAccessEvent(event: Event, senderName: String?, isDm: Boolean): String? {
554-
val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel()
554+
val eventContent: RoomGuestAccessContent? = event.content.toModel()
555555
return when (eventContent?.guestAccess) {
556556
GuestAccess.CanJoin ->
557557
if (event.isSentByCurrentUser()) {
@@ -815,7 +815,7 @@ class NoticeEventFormatter @Inject constructor(
815815
}
816816

817817
private fun formatJoinRulesEvent(event: Event, senderName: String?, isDm: Boolean): CharSequence? {
818-
val content = event.getClearContent().toModel<RoomJoinRulesContent>() ?: return null
818+
val content = event.content.toModel<RoomJoinRulesContent>() ?: return null
819819
return when (content.joinRules) {
820820
RoomJoinRules.INVITE ->
821821
if (event.isSentByCurrentUser()) {

0 commit comments

Comments
 (0)