Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 14 additions & 41 deletions app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
*/
package com.wire.android.mapper

import com.wire.android.media.audiomessage.AudioMediaPlayingState
import com.wire.android.media.audiomessage.PlayingAudioMessage
import com.wire.android.model.ImageAsset.UserAvatarAsset
import com.wire.android.model.NameBasedAvatar
import com.wire.android.model.UserAvatarData
Expand All @@ -27,7 +25,10 @@
import com.wire.android.ui.home.conversationslist.model.BlockState
import com.wire.android.ui.home.conversationslist.model.ConversationInfo
import com.wire.android.ui.home.conversationslist.model.ConversationItem
import com.wire.android.ui.home.conversationslist.model.PlayingAudioInConversation
import com.wire.android.ui.home.conversationslist.model.ConversationItem.ConnectionConversation
import com.wire.android.ui.home.conversationslist.model.ConversationItem.Group.Channel
import com.wire.android.ui.home.conversationslist.model.ConversationItem.Group.Regular
import com.wire.android.ui.home.conversationslist.model.ConversationItem.PrivateConversation
import com.wire.android.ui.home.conversationslist.showLegalHoldIndicator
import com.wire.android.util.ui.UiTextResolver
import com.wire.kalium.logic.data.conversation.ConversationDetails
Expand All @@ -47,12 +48,10 @@
fun ConversationDetailsWithEvents.toConversationItem(
userTypeMapper: UserTypeMapper,
uiTextResolver: UiTextResolver,
searchQuery: String,
selfUserTeamId: TeamId?,
playingAudioMessage: PlayingAudioMessage
selfUserTeamId: TeamId?
): ConversationItem = when (val conversationDetails = this.conversationDetails) {
is Group.Regular -> {
ConversationItem.Group.Regular(
Regular(
groupName = conversationDetails.conversation.name.orEmpty(),
conversationId = conversationDetails.conversation.id,
mutedStatus = conversationDetails.conversation.mutedStatus,
Expand All @@ -71,15 +70,13 @@
mlsVerificationStatus = conversationDetails.conversation.mlsVerificationStatus,
proteusVerificationStatus = conversationDetails.conversation.proteusVerificationStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
searchQuery = searchQuery,
isFavorite = conversationDetails.isFavorite,
folder = conversationDetails.folder,
playingAudio = getPlayingAudioInConversation(playingAudioMessage, conversationDetails)
folder = conversationDetails.folder
)
}

is Group.Channel -> {
ConversationItem.Group.Channel(
Channel(

Check warning on line 79 in app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt#L79

Added line #L79 was not covered by tests
groupName = conversationDetails.conversation.name.orEmpty(),
conversationId = conversationDetails.conversation.id,
mutedStatus = conversationDetails.conversation.mutedStatus,
Expand All @@ -98,16 +95,14 @@
mlsVerificationStatus = conversationDetails.conversation.mlsVerificationStatus,
proteusVerificationStatus = conversationDetails.conversation.proteusVerificationStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
searchQuery = searchQuery,
isFavorite = conversationDetails.isFavorite,
folder = conversationDetails.folder,
playingAudio = getPlayingAudioInConversation(playingAudioMessage, conversationDetails),
isPrivate = conversationDetails.access == Group.Channel.ChannelAccess.PRIVATE
)
}

is OneOne -> {
ConversationItem.PrivateConversation(
PrivateConversation(
userAvatarData = UserAvatarData(
asset = conversationDetails.otherUser.previewPicture?.let { UserAvatarAsset(it) },
availabilityStatus = conversationDetails.otherUser.availabilityStatus,
Expand Down Expand Up @@ -139,15 +134,13 @@
mlsVerificationStatus = conversationDetails.conversation.mlsVerificationStatus,
proteusVerificationStatus = conversationDetails.conversation.proteusVerificationStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
searchQuery = searchQuery,
isFavorite = conversationDetails.isFavorite,
folder = conversationDetails.folder,
playingAudio = getPlayingAudioInConversation(playingAudioMessage, conversationDetails)
folder = conversationDetails.folder
)
}

is Connection -> {
ConversationItem.ConnectionConversation(
ConnectionConversation(
userAvatarData = UserAvatarData(
asset = conversationDetails.otherUser?.previewPicture?.let { UserAvatarAsset(it) },
availabilityStatus = conversationDetails.otherUser?.availabilityStatus ?: UserAvailabilityStatus.NONE,
Expand All @@ -165,39 +158,19 @@
badgeEventType = parseConnectionEventType(conversationDetails.connection.status),
conversationId = conversationDetails.conversation.id,
mutedStatus = conversationDetails.conversation.mutedStatus,
hasNewActivitiesToShow = hasNewActivitiesToShow,
searchQuery = searchQuery,
hasNewActivitiesToShow = hasNewActivitiesToShow
)
}

is Self -> {
throw IllegalArgumentException("Self conversations should not be visible to the user.")
}

else -> {
throw IllegalArgumentException("$this conversations should not be visible to the user.")
is ConversationDetails.Team -> {
throw IllegalArgumentException("Team conversations should not be visible to the user.")

Check warning on line 170 in app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/ConversationMapper.kt#L170

Added line #L170 was not covered by tests
}
}

private fun getPlayingAudioInConversation(
playingAudioMessage: PlayingAudioMessage,
conversationDetails: ConversationDetails
): PlayingAudioInConversation? =
if (playingAudioMessage is PlayingAudioMessage.Some
&& playingAudioMessage.conversationId == conversationDetails.conversation.id
) {
if (playingAudioMessage.state.isPlaying()) {
PlayingAudioInConversation(playingAudioMessage.messageId, false)
} else if (playingAudioMessage.state.audioMediaPlayingState is AudioMediaPlayingState.Paused) {
PlayingAudioInConversation(playingAudioMessage.messageId, true)
} else {
// states Fetching, Completed, Stopped, etc. should not be shown in ConversationItem
null
}
} else {
null
}

private fun parseConnectionEventType(connectionState: ConnectionState) =
if (connectionState == ConnectionState.SENT) {
BadgeEventType.SentConnectRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@
import com.wire.android.ui.home.conversations.model.MessageBody
import com.wire.android.ui.home.conversations.model.UILastMessageContent
import com.wire.android.ui.markdown.MarkdownConstants
import com.wire.android.ui.markdown.MarkdownPreview
import com.wire.android.ui.markdown.getFirstInlines
import com.wire.android.ui.markdown.toMarkdownDocument
import com.wire.android.util.ui.UIText
import com.wire.android.util.ui.UiTextResolver
import com.wire.android.util.ui.toUIText
Expand Down Expand Up @@ -55,11 +52,11 @@
unreadEventCount.size == 1 && unreadEventCount.values.first() == 1 ->
uiLastMessageContent(uiTextResolver)
// for the rest take 1 or 2 most prioritized events with count to last message
else -> multipleUnreadEventsToLastMessage(unreadEventCount, uiTextResolver)
else -> multipleUnreadEventsToLastMessage(unreadEventCount)
}
}

private fun multipleUnreadEventsToLastMessage(unreadEventCount: UnreadEventCount, uiTextResolver: UiTextResolver): UILastMessageContent {
private fun multipleUnreadEventsToLastMessage(unreadEventCount: UnreadEventCount): UILastMessageContent {
val unreadContentTexts = unreadEventCount
.toSortedMap()
.mapNotNull { type ->
Expand Down Expand Up @@ -106,11 +103,8 @@
} else {
UILastMessageContent.TextMessage(
MessageBody(
message = first,
markdownDocument = (first as? UIText.DynamicString)?.value?.toMarkdownDocument()
message = first
),
markdownPreview = first.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}
}
Expand All @@ -121,7 +115,7 @@
else -> UIText.StringResource(R.string.username_unavailable_label)
}

@Suppress("LongMethod", "ComplexMethod", "NestedBlockDepth")
@Suppress("LongMethod", "ComplexMethod", "NestedBlockDepth", "UNUSED_PARAMETER")
fun MessagePreview.uiLastMessageContent(uiTextResolver: UiTextResolver): UILastMessageContent {
return when (content) {
is WithUser -> {
Expand All @@ -134,8 +128,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -150,8 +142,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -166,8 +156,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -182,8 +170,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}
}
Expand All @@ -198,8 +184,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -213,8 +197,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -228,8 +210,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -243,26 +223,20 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

is WithUser.MentionedSelf -> UIText.StringResource(R.string.last_message_mentioned).let { message ->
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

is WithUser.QuotedSelf -> UIText.StringResource(R.string.last_message_replied).let { message ->
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand Down Expand Up @@ -291,11 +265,8 @@

UILastMessageContent.TextMessage(
MessageBody(
message = previewMessageContent,
markdownDocument = (previewMessageContent as? UIText.DynamicString)?.value?.toMarkdownDocument()
),
previewMessageContent.toMarkdownPreviewOrNull(uiTextResolver),
uiTextResolver.localeTag()
message = previewMessageContent
)
)
}

Expand Down Expand Up @@ -328,11 +299,8 @@

UILastMessageContent.TextMessage(
MessageBody(
message = previewMessageContent,
markdownDocument = (previewMessageContent as? UIText.DynamicString)?.value?.toMarkdownDocument()
),
previewMessageContent.toMarkdownPreviewOrNull(uiTextResolver),
uiTextResolver.localeTag()
message = previewMessageContent
)
)
}

Expand All @@ -343,22 +311,16 @@

UILastMessageContent.TextMessage(
MessageBody(
message = previewMessageContent,
markdownDocument = (previewMessageContent as? UIText.DynamicString)?.value?.toMarkdownDocument()
),
previewMessageContent.toMarkdownPreviewOrNull(uiTextResolver),
uiTextResolver.localeTag()
message = previewMessageContent

Check warning on line 314 in app/src/main/kotlin/com/wire/android/mapper/MessagePreviewContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/MessagePreviewContentMapper.kt#L314

Added line #L314 was not covered by tests
)
)
}

is WithUser.TeamMemberRemoved -> UILastMessageContent.None
is WithUser.Text -> UILastMessageContent.SenderWithMessage(
sender = userUIText,
message = (content as WithUser.Text).messageBody.let { UIText.DynamicString(it) },
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}",
markdownPreview = UIText.DynamicString((content as WithUser.Text).messageBody)
.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}"
)

is WithUser.Composite -> {
Expand All @@ -368,8 +330,6 @@
sender = userUIText,
message = text,
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}",
markdownPreview = text.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -396,8 +356,6 @@
UILastMessageContent.SenderWithMessage(
userUIText,
message,
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}

Expand All @@ -406,8 +364,6 @@
userUIText,
message,
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}",
markdownPreview = message.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
)
}
}
Expand Down Expand Up @@ -438,11 +394,8 @@

UILastMessageContent.TextMessage(
MessageBody(
message = previewMessageContent,
markdownDocument = (previewMessageContent as? UIText.DynamicString)?.value?.toMarkdownDocument()
),
previewMessageContent.toMarkdownPreviewOrNull(uiTextResolver),
uiTextResolver.localeTag()
message = previewMessageContent
)
)
}

Expand Down Expand Up @@ -475,17 +428,9 @@
is MessagePreviewContent.Draft -> UILastMessageContent.SenderWithMessage(
UIText.StringResource(R.string.label_draft),
(content as MessagePreviewContent.Draft).message.toUIText(),
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}",
markdownPreview = (content as MessagePreviewContent.Draft).message.toUIText()
.toMarkdownPreviewOrNull(uiTextResolver),
markdownLocaleTag = uiTextResolver.localeTag()
separator = ":${MarkdownConstants.NON_BREAKING_SPACE}"

Check warning on line 431 in app/src/main/kotlin/com/wire/android/mapper/MessagePreviewContentMapper.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/mapper/MessagePreviewContentMapper.kt#L431

Added line #L431 was not covered by tests
)

Unknown -> UILastMessageContent.None
}
}

private fun UIText.toMarkdownPreviewOrNull(uiTextResolver: UiTextResolver): MarkdownPreview? {
val resolved = uiTextResolver.resolve(this)
return resolved.toMarkdownDocument().getFirstInlines()
}
Loading
Loading