Skip to content

Commit 085ba07

Browse files
authored
Merge pull request #3547 from element-hq/feature/bma/you
Prefix message sent by the current user by `You` instead of the sender name.
2 parents dcaf764 + 2e7c34b commit 085ba07

File tree

3 files changed

+56
-34
lines changed

3 files changed

+56
-34
lines changed

libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,18 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
6161
val isOutgoing = event.isOwn
6262
val senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender)
6363
return when (val content = event.content) {
64-
is MessageContent -> processMessageContents(content, senderDisambiguatedDisplayName, isDmRoom)
64+
is MessageContent -> content.process(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
6565
RedactedContent -> {
6666
val message = sp.getString(CommonStrings.common_message_removed)
67-
if (!isDmRoom) {
68-
message.prefixWith(senderDisambiguatedDisplayName)
69-
} else {
70-
message
71-
}
67+
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
7268
}
7369
is StickerContent -> {
74-
prefixIfNeeded(sp.getString(CommonStrings.common_sticker) + " (" + content.body + ")", senderDisambiguatedDisplayName, isDmRoom)
70+
val message = sp.getString(CommonStrings.common_sticker) + " (" + content.body + ")"
71+
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
7572
}
7673
is UnableToDecryptContent -> {
7774
val message = sp.getString(CommonStrings.common_waiting_for_decryption_key)
78-
if (!isDmRoom) {
79-
message.prefixWith(senderDisambiguatedDisplayName)
80-
} else {
81-
message
82-
}
75+
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
8376
}
8477
is RoomMembershipContent -> {
8578
roomMembershipContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing)
@@ -92,22 +85,23 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
9285
}
9386
is PollContent -> {
9487
val message = sp.getString(CommonStrings.common_poll_summary, content.question)
95-
prefixIfNeeded(message, senderDisambiguatedDisplayName, isDmRoom)
88+
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
9689
}
9790
is FailedToParseMessageLikeContent, is FailedToParseStateContent, is UnknownContent -> {
98-
prefixIfNeeded(sp.getString(CommonStrings.common_unsupported_event), senderDisambiguatedDisplayName, isDmRoom)
91+
val message = sp.getString(CommonStrings.common_unsupported_event)
92+
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
9993
}
10094
is LegacyCallInviteContent -> sp.getString(CommonStrings.common_call_invite)
10195
is CallNotifyContent -> sp.getString(CommonStrings.common_call_started)
10296
}?.take(MAX_SAFE_LENGTH)
10397
}
10498

105-
private fun processMessageContents(
106-
messageContent: MessageContent,
99+
private fun MessageContent.process(
107100
senderDisambiguatedDisplayName: String,
108101
isDmRoom: Boolean,
102+
isOutgoing: Boolean
109103
): CharSequence {
110-
val internalMessage = when (val messageType: MessageType = messageContent.type) {
104+
val message = when (val messageType: MessageType = type) {
111105
// Doesn't need a prefix
112106
is EmoteMessageType -> {
113107
return "* $senderDisambiguatedDisplayName ${messageType.body}"
@@ -143,16 +137,22 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
143137
messageType.body
144138
}
145139
}
146-
return prefixIfNeeded(internalMessage, senderDisambiguatedDisplayName, isDmRoom)
140+
return message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
147141
}
148142

149-
private fun prefixIfNeeded(
150-
message: String,
143+
private fun String.prefixIfNeeded(
151144
senderDisambiguatedDisplayName: String,
152145
isDmRoom: Boolean,
146+
isOutgoing: Boolean,
153147
): CharSequence = if (isDmRoom) {
154-
message
148+
this
155149
} else {
156-
message.prefixWith(senderDisambiguatedDisplayName)
150+
prefixWith(
151+
if (isOutgoing) {
152+
sp.getString(CommonStrings.common_you)
153+
} else {
154+
senderDisambiguatedDisplayName
155+
}
156+
)
157157
}
158158
}

libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,29 @@ class DefaultRoomLastMessageFormatterTest {
148148

149149
@Test
150150
@Config(qualifiers = "en")
151-
fun `Message contents`() {
151+
fun `Message contents sent by other user`() {
152+
testMessageContents(
153+
sentByYou = false,
154+
senderName = "Alice",
155+
expectedPrefix = "Alice",
156+
)
157+
}
158+
159+
@Test
160+
@Config(qualifiers = "en")
161+
fun `Message contents sent by current user`() {
162+
testMessageContents(
163+
sentByYou = true,
164+
senderName = "Bob",
165+
expectedPrefix = "You",
166+
)
167+
}
168+
169+
private fun testMessageContents(
170+
sentByYou: Boolean,
171+
senderName: String,
172+
expectedPrefix: String,
173+
) {
152174
val body = "Shared body"
153175
fun createMessageContent(type: MessageType): MessageContent {
154176
return MessageContent(body, null, false, false, type)
@@ -167,15 +189,14 @@ class DefaultRoomLastMessageFormatterTest {
167189
EmoteMessageType(body, null),
168190
OtherMessageType(msgType = "a_type", body = body),
169191
)
170-
val senderName = "Someone"
171192
val resultsInRoom = mutableListOf<Pair<MessageType, CharSequence?>>()
172193
val resultsInDm = mutableListOf<Pair<MessageType, CharSequence?>>()
173194

174195
// Create messages for all types in DM and Room mode
175196
sequenceOf(false, true).forEach { isDm ->
176197
sharedContentMessagesTypes.forEach { type ->
177198
val content = createMessageContent(type)
178-
val message = createRoomEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
199+
val message = createRoomEvent(sentByYou = sentByYou, senderDisplayName = senderName, content = content)
179200
val result = formatter.format(message, isDmRoom = isDm)
180201
if (isDm) {
181202
resultsInDm.add(type to result)
@@ -207,16 +228,16 @@ class DefaultRoomLastMessageFormatterTest {
207228
for ((type, result) in resultsInRoom) {
208229
val string = result.toString()
209230
val expectedResult = when (type) {
210-
is VideoMessageType -> "$senderName: Video"
211-
is AudioMessageType -> "$senderName: Audio"
212-
is VoiceMessageType -> "$senderName: Voice message"
213-
is ImageMessageType -> "$senderName: Image"
214-
is StickerMessageType -> "$senderName: Sticker"
215-
is FileMessageType -> "$senderName: File"
216-
is LocationMessageType -> "$senderName: Shared location"
231+
is VideoMessageType -> "$expectedPrefix: Video"
232+
is AudioMessageType -> "$expectedPrefix: Audio"
233+
is VoiceMessageType -> "$expectedPrefix: Voice message"
234+
is ImageMessageType -> "$expectedPrefix: Image"
235+
is StickerMessageType -> "$expectedPrefix: Sticker"
236+
is FileMessageType -> "$expectedPrefix: File"
237+
is LocationMessageType -> "$expectedPrefix: Shared location"
217238
is TextMessageType,
218239
is NoticeMessageType,
219-
is OtherMessageType -> "$senderName: $body"
240+
is OtherMessageType -> "$expectedPrefix: $body"
220241
is EmoteMessageType -> "* $senderName ${type.body}"
221242
}
222243
val shouldCreateAnnotatedString = when (type) {
@@ -821,7 +842,7 @@ class DefaultRoomLastMessageFormatterTest {
821842
val pollContent = aPollContent()
822843

823844
val mineContentEvent = createRoomEvent(sentByYou = true, senderDisplayName = "Alice", content = pollContent)
824-
assertThat(formatter.format(mineContentEvent, false).toString()).isEqualTo("Alice: Poll: Do you like polls?")
845+
assertThat(formatter.format(mineContentEvent, false).toString()).isEqualTo("You: Poll: Do you like polls?")
825846

826847
val contentEvent = createRoomEvent(sentByYou = false, senderDisplayName = "Bob", content = pollContent)
827848
assertThat(formatter.format(contentEvent, false).toString()).isEqualTo("Bob: Poll: Do you like polls?")

libraries/ui-strings/src/main/res/values/localazy.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ Reason: %1$s."</string>
248248
<string name="common_voice_message">"Voice message"</string>
249249
<string name="common_waiting">"Waiting…"</string>
250250
<string name="common_waiting_for_decryption_key">"Waiting for this message"</string>
251+
<string name="common_you">"You"</string>
251252
<string name="dialog_title_confirmation">"Confirmation"</string>
252253
<string name="dialog_title_error">"Error"</string>
253254
<string name="dialog_title_success">"Success"</string>

0 commit comments

Comments
 (0)