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

@ -26,6 +26,7 @@ class RoomMembershipContentFormatter @Inject constructor(
val userId = membershipContent.userId
val memberIsYou = matrixClient.isMe(userId)
val userDisplayNameOrId = membershipContent.userDisplayName ?: userId.value
val reason = membershipContent.reason?.takeIf { it.isNotBlank() }
return when (membershipContent.change) {
MembershipChange.JOINED -> if (memberIsYou) {
sp.getString(R.string.state_event_room_join_by_you)
@ -38,9 +39,17 @@ class RoomMembershipContentFormatter @Inject constructor(
sp.getString(R.string.state_event_room_leave, senderDisambiguatedDisplayName)
}
MembershipChange.BANNED, MembershipChange.KICKED_AND_BANNED -> if (senderIsYou) {
sp.getString(R.string.state_event_room_ban_by_you, userDisplayNameOrId)
if (reason != null) {
sp.getString(R.string.state_event_room_ban_by_you_with_reason, userDisplayNameOrId, reason)
} else {
sp.getString(R.string.state_event_room_ban_by_you, userDisplayNameOrId)
}
} else {
sp.getString(R.string.state_event_room_ban, senderDisambiguatedDisplayName, userDisplayNameOrId)
if (reason != null) {
sp.getString(R.string.state_event_room_ban_with_reason, senderDisambiguatedDisplayName, userDisplayNameOrId, reason)
} else {
sp.getString(R.string.state_event_room_ban, senderDisambiguatedDisplayName, userDisplayNameOrId)
}
}
MembershipChange.UNBANNED -> if (senderIsYou) {
sp.getString(R.string.state_event_room_unban_by_you, userDisplayNameOrId)
@ -48,9 +57,17 @@ class RoomMembershipContentFormatter @Inject constructor(
sp.getString(R.string.state_event_room_unban, senderDisambiguatedDisplayName, userDisplayNameOrId)
}
MembershipChange.KICKED -> if (senderIsYou) {
sp.getString(R.string.state_event_room_remove_by_you, userDisplayNameOrId)
if (reason != null) {
sp.getString(R.string.state_event_room_remove_by_you_with_reason, userDisplayNameOrId, reason)
} else {
sp.getString(R.string.state_event_room_remove_by_you, userDisplayNameOrId)
}
} else {
sp.getString(R.string.state_event_room_remove, senderDisambiguatedDisplayName, userDisplayNameOrId)
if (reason != null) {
sp.getString(R.string.state_event_room_remove_with_reason, senderDisambiguatedDisplayName, userDisplayNameOrId, reason)
} else {
sp.getString(R.string.state_event_room_remove, senderDisambiguatedDisplayName, userDisplayNameOrId)
}
}
MembershipChange.INVITED -> if (senderIsYou) {
sp.getString(R.string.state_event_room_invite_by_you, userDisplayNameOrId)