Improve last message formatter: add caption (or filename)

This commit is contained in:
Benoit Marty 2024-11-04 16:04:38 +01:00 committed by Benoit Marty
parent 3958edb816
commit 7bcbd2181a
2 changed files with 41 additions and 19 deletions

View file

@ -110,25 +110,27 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
messageType.toPlainText(permalinkParser) messageType.toPlainText(permalinkParser)
} }
is VideoMessageType -> { is VideoMessageType -> {
sp.getString(CommonStrings.common_video) messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_video))
} }
is ImageMessageType -> { is ImageMessageType -> {
sp.getString(CommonStrings.common_image) messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_image))
} }
is StickerMessageType -> { is StickerMessageType -> {
sp.getString(CommonStrings.common_sticker) messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_sticker))
} }
is LocationMessageType -> { is LocationMessageType -> {
sp.getString(CommonStrings.common_shared_location) sp.getString(CommonStrings.common_shared_location)
} }
is FileMessageType -> { is FileMessageType -> {
sp.getString(CommonStrings.common_file) messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_file))
} }
is AudioMessageType -> { is AudioMessageType -> {
sp.getString(CommonStrings.common_audio) messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_audio))
} }
is VoiceMessageType -> { is VoiceMessageType -> {
sp.getString(CommonStrings.common_voice_message) // In this case, do not use bestDescription, because the filename is useless, only use the caption if available.
messageType.caption?.prefixWith(sp.getString(CommonStrings.common_voice_message))
?: sp.getString(CommonStrings.common_voice_message)
} }
is OtherMessageType -> { is OtherMessageType -> {
messageType.body messageType.body
@ -140,7 +142,7 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
return message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing) return message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
} }
private fun String.prefixIfNeeded( private fun CharSequence.prefixIfNeeded(
senderDisambiguatedDisplayName: String, senderDisambiguatedDisplayName: String,
isDmRoom: Boolean, isDmRoom: Boolean,
isOutgoing: Boolean, isOutgoing: Boolean,

View file

@ -208,32 +208,51 @@ class DefaultRoomLastMessageFormatterTest {
// Verify results of DM mode // Verify results of DM mode
for ((type, result) in resultsInDm) { for ((type, result) in resultsInDm) {
val string = result.toString()
val expectedResult = when (type) { val expectedResult = when (type) {
is VideoMessageType -> "Video" is VideoMessageType -> "Video: Shared body"
is AudioMessageType -> "Audio" is AudioMessageType -> "Audio: Shared body"
is VoiceMessageType -> "Voice message" is VoiceMessageType -> "Voice message"
is ImageMessageType -> "Image" is ImageMessageType -> "Image: Shared body"
is StickerMessageType -> "Sticker" is StickerMessageType -> "Sticker: Shared body"
is FileMessageType -> "File" is FileMessageType -> "File: Shared body"
is LocationMessageType -> "Shared location" is LocationMessageType -> "Shared location"
is EmoteMessageType -> "* $senderName ${type.body}" is EmoteMessageType -> "* $senderName ${type.body}"
is TextMessageType, is TextMessageType,
is NoticeMessageType, is NoticeMessageType,
is OtherMessageType -> body is OtherMessageType -> body
} }
assertWithMessage("$type was not properly handled for DM").that(result).isEqualTo(expectedResult) val shouldCreateAnnotatedString = when (type) {
is VideoMessageType -> true
is AudioMessageType -> true
is VoiceMessageType -> false
is ImageMessageType -> true
is StickerMessageType -> true
is FileMessageType -> true
is LocationMessageType -> false
is EmoteMessageType -> false
is TextMessageType -> false
is NoticeMessageType -> false
is OtherMessageType -> false
}
if (shouldCreateAnnotatedString) {
assertWithMessage("$type doesn't produce an AnnotatedString")
.that(result)
.isInstanceOf(AnnotatedString::class.java)
}
assertWithMessage("$type was not properly handled for DM").that(string).isEqualTo(expectedResult)
} }
// Verify results of Room mode // Verify results of Room mode
for ((type, result) in resultsInRoom) { for ((type, result) in resultsInRoom) {
val string = result.toString() val string = result.toString()
val expectedResult = when (type) { val expectedResult = when (type) {
is VideoMessageType -> "$expectedPrefix: Video" is VideoMessageType -> "$expectedPrefix: Video: Shared body"
is AudioMessageType -> "$expectedPrefix: Audio" is AudioMessageType -> "$expectedPrefix: Audio: Shared body"
is VoiceMessageType -> "$expectedPrefix: Voice message" is VoiceMessageType -> "$expectedPrefix: Voice message"
is ImageMessageType -> "$expectedPrefix: Image" is ImageMessageType -> "$expectedPrefix: Image: Shared body"
is StickerMessageType -> "$expectedPrefix: Sticker" is StickerMessageType -> "$expectedPrefix: Sticker: Shared body"
is FileMessageType -> "$expectedPrefix: File" is FileMessageType -> "$expectedPrefix: File: Shared body"
is LocationMessageType -> "$expectedPrefix: Shared location" is LocationMessageType -> "$expectedPrefix: Shared location"
is TextMessageType, is TextMessageType,
is NoticeMessageType, is NoticeMessageType,
@ -249,7 +268,8 @@ class DefaultRoomLastMessageFormatterTest {
is FileMessageType -> true is FileMessageType -> true
is LocationMessageType -> false is LocationMessageType -> false
is EmoteMessageType -> false is EmoteMessageType -> false
is TextMessageType, is NoticeMessageType -> true is TextMessageType -> true
is NoticeMessageType -> true
is OtherMessageType -> true is OtherMessageType -> true
} }
if (shouldCreateAnnotatedString) { if (shouldCreateAnnotatedString) {