diff --git a/changelog.d/2102.misc b/changelog.d/2102.misc new file mode 100644 index 0000000000..87c258ef70 --- /dev/null +++ b/changelog.d/2102.misc @@ -0,0 +1 @@ +Handle `MembershipChange.NONE` rendering in the timeline. diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt index 6a65a9bd1e..926648458f 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt @@ -104,7 +104,20 @@ class RoomMembershipContentFormatter @Inject constructor( } else { sp.getString(R.string.state_event_room_knock_denied, senderDisplayName, userId.value) } - else -> { + MembershipChange.NONE -> if (senderIsYou) { + sp.getString(R.string.state_event_room_none_by_you) + } else { + sp.getString(R.string.state_event_room_none, senderDisplayName) + } + MembershipChange.ERROR -> { + Timber.v("Filtering timeline item for room membership: $membershipContent") + null + } + MembershipChange.NOT_IMPLEMENTED -> { + Timber.v("Filtering timeline item for room membership: $membershipContent") + null + } + null -> { Timber.v("Filtering timeline item for room membership: $membershipContent") null } diff --git a/libraries/eventformatter/impl/src/main/res/values/localazy.xml b/libraries/eventformatter/impl/src/main/res/values/localazy.xml index 03a13bd29b..525a9435fe 100644 --- a/libraries/eventformatter/impl/src/main/res/values/localazy.xml +++ b/libraries/eventformatter/impl/src/main/res/values/localazy.xml @@ -39,6 +39,8 @@ "You changed the room name to: %1$s" "%1$s removed the room name" "You removed the room name" + "%1$s made no changes" + "You made no changes" "%1$s rejected the invitation" "You rejected the invitation" "%1$s removed %2$s" diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt index a6d0f2e776..58c48808a6 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt @@ -469,10 +469,26 @@ class DefaultRoomLastMessageFormatterTest { assertThat(someoneDeniedYourKnock).isEqualTo("$otherName rejected your request to join") } + @Test + @Config(qualifiers = "en") + fun `Membership change - None`() { + val otherName = "Someone" + val youContent = RoomMembershipContent(A_USER_ID, MembershipChange.NONE) + val someoneContent = RoomMembershipContent(UserId("@someone_else:domain"), MembershipChange.NONE) + + val youNoneRoomEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent) + val youNoneRoom = formatter.format(youNoneRoomEvent, false) + assertThat(youNoneRoom).isEqualTo("You made no changes") + + val someoneNoneRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent) + val someoneNoneRoom = formatter.format(someoneNoneRoomEvent, false) + assertThat(someoneNoneRoom).isEqualTo("$otherName made no changes") + } + @Test @Config(qualifiers = "en") fun `Membership change - others`() { - val otherChanges = arrayOf(MembershipChange.NONE, MembershipChange.ERROR, MembershipChange.NOT_IMPLEMENTED) + val otherChanges = arrayOf(MembershipChange.ERROR, MembershipChange.NOT_IMPLEMENTED, null) val results = otherChanges.map { change -> val content = RoomMembershipContent(A_USER_ID, change)