Render kick and ban reason in the timeline when available (#4642)

* Map the reason to RoomMembershipContent

* Create function to create RoomMembershipContent.

* Render reason for kick and ban state event.
This commit is contained in:
Benoit Marty 2025-04-30 18:13:53 +02:00 committed by GitHub
parent b4b93a64d6
commit e502eb1971
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 164 additions and 78 deletions

View file

@ -70,7 +70,8 @@ data class UnableToDecryptContent(
data class RoomMembershipContent(
val userId: UserId,
val userDisplayName: String?,
val change: MembershipChange?
val change: MembershipChange?,
val reason: String?,
) : EventContent
data class ProfileChangeContent(

View file

@ -105,7 +105,8 @@ class TimelineEventContentMapper(
RoomMembershipContent(
userId = UserId(it.userId),
userDisplayName = it.userDisplayName,
change = it.change?.map()
change = it.change?.map(),
reason = it.reason,
)
}
is TimelineItemContent.State -> {

View file

@ -11,13 +11,13 @@ import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.A_USER_ID_2
import io.element.android.libraries.matrix.test.timeline.aMessageContent
import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem
import io.element.android.libraries.matrix.test.timeline.item.event.aRoomMembershipContent
internal val timelineStartEvent = MatrixTimelineItem.Virtual(
uniqueId = UniqueId("timeline_start"),
@ -29,11 +29,11 @@ internal val roomCreateEvent = MatrixTimelineItem.Event(
)
internal val roomCreatorJoinEvent = MatrixTimelineItem.Event(
uniqueId = UniqueId("m.room.member"),
event = anEventTimelineItem(content = RoomMembershipContent(A_USER_ID, null, MembershipChange.JOINED))
event = anEventTimelineItem(content = aRoomMembershipContent(userId = A_USER_ID, change = MembershipChange.JOINED))
)
internal val otherMemberJoinEvent = MatrixTimelineItem.Event(
uniqueId = UniqueId("m.room.member_other"),
event = anEventTimelineItem(content = RoomMembershipContent(A_USER_ID_2, null, MembershipChange.JOINED))
event = anEventTimelineItem(content = aRoomMembershipContent(userId = A_USER_ID_2, change = MembershipChange.JOINED))
)
internal val messageEvent = MatrixTimelineItem.Event(
uniqueId = UniqueId("m.room.message"),

View file

@ -0,0 +1,25 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.test.timeline.item.event
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
import io.element.android.libraries.matrix.test.A_USER_ID
fun aRoomMembershipContent(
userId: UserId = A_USER_ID,
userDisplayName: String? = null,
change: MembershipChange? = null,
reason: String? = null,
) = RoomMembershipContent(
userId = userId,
userDisplayName = userDisplayName,
change = change,
reason = reason,
)