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
9 changes: 8 additions & 1 deletion app/src/main/kotlin/com/wire/android/mapper/MessageMapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.wire.android.ui.home.conversations.model.MessageEditStatus
import com.wire.android.ui.home.conversations.model.MessageFlowStatus
import com.wire.android.ui.home.conversations.model.MessageFooter
import com.wire.android.ui.home.conversations.model.MessageHeader
import com.wire.android.ui.home.conversations.model.MessageSenderId
import com.wire.android.ui.home.conversations.model.MessageSource
import com.wire.android.ui.home.conversations.model.MessageStatus
import com.wire.android.ui.home.conversations.model.MessageTime
Expand All @@ -46,6 +47,7 @@ import com.wire.kalium.logic.data.user.SelfUser
import com.wire.kalium.logic.data.user.User
import com.wire.kalium.logic.data.user.UserAvailabilityStatus
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.data.user.type.UserTypeInfo
import javax.inject.Inject

class MessageMapper @Inject constructor(
Expand Down Expand Up @@ -165,7 +167,12 @@ class MessageMapper @Inject constructor(
},
clientId = (message as? Message.Sendable)?.senderClientId,
accent = Accent.fromAccentId(sender?.accentId),
guestExpiresAt = sender?.expiresAt
guestExpiresAt = sender?.expiresAt,
senderId = when {
(sender as? OtherUser)?.botService != null -> MessageSenderId.Bot(sender.botService!!)
sender?.userType == UserTypeInfo.App -> MessageSenderId.App(sender.id)
else -> MessageSenderId.User(sender?.id?.toString())
}
)

private fun getMessageStatus(message: Message.Standalone): MessageStatus {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ import com.ramcosta.composedestinations.generated.app.destinations.MediaGalleryS
import com.ramcosta.composedestinations.generated.app.destinations.MessageDetailsScreenDestination
import com.ramcosta.composedestinations.generated.app.destinations.OtherUserProfileScreenDestination
import com.ramcosta.composedestinations.generated.app.destinations.SelfUserProfileScreenDestination
import com.ramcosta.composedestinations.generated.app.destinations.ServiceDetailsScreenDestination
import com.ramcosta.composedestinations.generated.sketch.destinations.DrawingCanvasScreenDestination
import com.ramcosta.composedestinations.result.NavResult.Canceled
import com.ramcosta.composedestinations.result.NavResult.Value
Expand Down Expand Up @@ -171,6 +172,7 @@ import com.wire.android.ui.home.conversations.messages.item.MessageContainerItem
import com.wire.android.ui.home.conversations.messages.item.SwipeableMessageConfiguration
import com.wire.android.ui.home.conversations.migration.ConversationMigrationViewModel
import com.wire.android.ui.home.conversations.model.ExpirationStatus
import com.wire.android.ui.home.conversations.model.MessageSenderId
import com.wire.android.ui.home.conversations.model.UIMessage
import com.wire.android.ui.home.conversations.model.UIMessageContent
import com.wire.android.ui.home.conversations.model.UIQuotedMessage
Expand All @@ -191,6 +193,7 @@ import com.wire.android.ui.legalhold.dialog.subject.LegalHoldSubjectMessageDialo
import com.wire.android.ui.theme.WireTheme
import com.wire.android.ui.theme.wireColorScheme
import com.wire.android.ui.theme.wireTypography
import com.wire.android.ui.userprofile.service.ServiceDetailsNavArgs
import com.wire.android.util.DateAndTimeParsers
import com.wire.android.util.normalizeLink
import com.wire.android.util.openDownloadFolder
Expand All @@ -206,6 +209,7 @@ import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.message.MessageAssetStatus
import com.wire.kalium.logic.data.message.SelfDeletionTimer
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.data.user.type.UserTypeInfo
import com.wire.kalium.logic.data.user.type.isInternal
import com.wire.kalium.logic.data.user.type.isTeamAdmin
import com.wire.kalium.logic.feature.call.usecase.ConferenceCallingResult
Expand Down Expand Up @@ -497,16 +501,38 @@ fun ConversationScreen(
conversationInfoViewState = conversationInfoViewModel.conversationInfoViewState,
conversationMessagesViewState = conversationMessagesViewModel.conversationViewState,
attachments = messageAttachmentsViewModel.attachments,
onOpenProfile = {
onOpenProfile = { senderId: MessageSenderId ->
with(conversationInfoViewModel) {
val (mentionUserId: UserId, isSelfUser: Boolean) = mentionedUserData(it)
if (isSelfUser) {
navigator.navigate(NavigationCommand(SelfUserProfileScreenDestination))
} else {
(conversationInfoViewState.conversationDetailsData as? ConversationDetailsData.Group)?.conversationId.let {
navigator.navigate(NavigationCommand(OtherUserProfileScreenDestination(mentionUserId, it)))
val route = when (senderId) {
is MessageSenderId.Bot -> ServiceDetailsScreenDestination(
null,
ServiceDetailsNavArgs.Id.BotServiceId(senderId.botService)
)

is MessageSenderId.App -> ServiceDetailsScreenDestination(
null,
ServiceDetailsNavArgs.Id.AppId(senderId.appId)
)

is MessageSenderId.User -> {
val (mentionUserId: UserId, isSelfUser: Boolean) = mentionedUserData(senderId.id.toString())
if (isSelfUser) {
SelfUserProfileScreenDestination
} else {
(conversationInfoViewState.conversationDetailsData as? ConversationDetailsData.Group)
?.conversationId?.let { conversationId ->
OtherUserProfileScreenDestination(
mentionUserId,
conversationId
)
}
}
}
}

route?.let {
navigator.navigate(NavigationCommand(it))
}
}
},
onMessageDetailsClick = { messageId: String, isSelfMessage: Boolean ->
Expand Down Expand Up @@ -601,17 +627,38 @@ fun ConversationScreen(
onUpdateConversationReadDate = messageComposerViewModel::updateConversationReadDate,
onDropDownClick = {
with(conversationInfoViewModel) {
when (val data = conversationInfoViewState.conversationDetailsData) {
is ConversationDetailsData.OneOne ->
navigator.navigate(NavigationCommand(OtherUserProfileScreenDestination(data.otherUserId)))
val route = when (val data = conversationInfoViewState.conversationDetailsData) {
is ConversationDetailsData.OneOne -> {
val botService = data.botService
when {
botService != null ->
ServiceDetailsScreenDestination(
null,
ServiceDetailsNavArgs.Id.BotServiceId(botService)
)

data.userType == UserTypeInfo.App ->
ServiceDetailsScreenDestination(
null,
ServiceDetailsNavArgs.Id.AppId(data.otherUserId)
)

else -> OtherUserProfileScreenDestination(data.otherUserId)
}
}

is ConversationDetailsData.Group ->
navigator.navigate(NavigationCommand(GroupConversationDetailsScreenDestination(conversationId)))
GroupConversationDetailsScreenDestination(conversationId)

is ConversationDetailsData.None -> {
/* do nothing */
null
}
}

route?.let {
navigator.navigate(NavigationCommand(it))
}
}
},
onBackButtonClick = {
Expand Down Expand Up @@ -915,7 +962,7 @@ private fun ConversationScreen(
conversationMessagesViewState: ConversationMessagesViewState,
attachments: List<AttachmentDraftUi>,
bottomSheetVisible: Boolean,
onOpenProfile: (String) -> Unit,
onOpenProfile: (senderId: MessageSenderId) -> Unit,
onMessageDetailsClick: (messageId: String, isSelfMessage: Boolean) -> Unit,
onSendMessage: (MessageBundle) -> Unit,
onPingOptionClicked: () -> Unit,
Expand Down Expand Up @@ -1123,7 +1170,7 @@ private fun ConversationScreenContent(
onImageFullScreenMode: (UIMessage.Regular, Boolean, String?) -> Unit,
onReactionClicked: (String, String) -> Unit,
onResetSessionClicked: (senderUserId: UserId, clientId: String?) -> Unit,
onOpenProfile: (String) -> Unit,
onOpenProfile: (senderId: MessageSenderId) -> Unit,
onUpdateConversationReadDate: (String) -> Unit,
onShowEditingOptions: (UIMessage.Regular) -> Unit,
onSwipedToReply: (UIMessage.Regular) -> Unit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ class ConversationInfoViewModel @Inject constructor(
connectionState = conversationDetails.otherUser.connectionStatus,
isBlocked = conversationDetails.otherUser.connectionStatus == ConnectionState.BLOCKED,
isDeleted = conversationDetails.otherUser.deleted,
botService = conversationDetails.otherUser.botService,
userType = conversationDetails.otherUser.userType
)

else -> ConversationDetailsData.None(conversationDetails.conversation.protocol)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ import com.wire.android.model.ImageAsset
import com.wire.android.util.ui.UIText
import com.wire.kalium.logic.data.conversation.Conversation
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.user.BotService
import com.wire.kalium.logic.data.user.ConnectionState
import com.wire.kalium.logic.data.user.UserAvailabilityStatus
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.data.user.type.UserTypeInfo

data class ConversationInfoViewState(
val conversationId: QualifiedID,
Expand Down Expand Up @@ -52,7 +54,9 @@ sealed class ConversationDetailsData(open val conversationProtocol: Conversation
val otherUserName: String?,
val connectionState: ConnectionState,
val isBlocked: Boolean,
val isDeleted: Boolean
val isDeleted: Boolean,
val botService: BotService?,
val userType: UserTypeInfo
) : ConversationDetailsData(conversationProtocol)

data class Group(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@
*/
package com.wire.android.ui.home.conversations.messages.item

import com.wire.android.ui.home.conversations.model.MessageSenderId
import com.wire.android.ui.home.conversations.model.UIMessage
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.user.UserId

sealed class MessageClickActions {
open val onFullMessageClicked: ((messageId: String) -> Unit)? = null
open val onFullMessageLongClicked: ((UIMessage.Regular) -> Unit)? = null
open val onProfileClicked: (String) -> Unit = {}
open val onProfileClicked: (senderId: MessageSenderId) -> Unit = {}

Check warning on line 28 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L28

Added line #L28 was not covered by tests
open val onReactionClicked: (String, String) -> Unit = { _, _ -> }
open val onAssetClicked: (String) -> Unit = {}
open val onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit = { _, _, _ -> }
Expand All @@ -41,7 +42,7 @@

data class Content(
override val onFullMessageLongClicked: ((UIMessage.Regular) -> Unit)? = null,
override val onProfileClicked: (String) -> Unit = {},
override val onProfileClicked: (senderId: MessageSenderId) -> Unit = {},

Check warning on line 45 in app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/conversations/messages/item/MessageClickActions.kt#L45

Added line #L45 was not covered by tests
override val onReactionClicked: (String, String) -> Unit = { _, _ -> },
override val onAssetClicked: (String) -> Unit = {},
override val onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit = { _, _, _ -> },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import com.wire.android.ui.home.conversations.messages.QuotedUnavailable
import com.wire.android.ui.home.conversations.model.DeliveryStatusContent
import com.wire.android.ui.home.conversations.model.MessageBody
import com.wire.android.ui.home.conversations.model.MessageImage
import com.wire.android.ui.home.conversations.model.MessageSenderId
import com.wire.android.ui.home.conversations.model.MessageSource
import com.wire.android.ui.home.conversations.model.UIMessage
import com.wire.android.ui.home.conversations.model.UIMessageContent
Expand All @@ -70,7 +71,7 @@ internal fun UIMessage.Regular.MessageContentAndStatus(
messageStyle: MessageStyle,
onAssetClicked: (String) -> Unit,
onImageClicked: (UIMessage.Regular, Boolean, String?) -> Unit,
onProfileClicked: (String) -> Unit,
onProfileClicked: (senderId: MessageSenderId) -> Unit,
onLinkClicked: (String) -> Unit,
onReplyClicked: (UIMessage.Regular) -> Unit,
shouldDisplayMessageStatus: Boolean,
Expand Down Expand Up @@ -163,7 +164,7 @@ private fun MessageContent(
onAssetClick: Clickable,
onImageClick: Clickable,
onMultipartImageClick: (String) -> Unit,
onOpenProfile: (String) -> Unit,
onOpenProfile: (senderId: MessageSenderId) -> Unit,
onLinkClick: (String) -> Unit,
onReplyClick: Clickable,
accent: Accent,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ import com.wire.android.model.UserAvatarData
import com.wire.android.ui.common.avatar.UserProfileAvatar
import com.wire.android.ui.common.avatar.UserProfileAvatarType.WithIndicators
import com.wire.android.ui.home.conversations.model.MessageHeader
import com.wire.android.ui.home.conversations.model.MessageSenderId
import com.wire.android.ui.common.R as commonR

@Composable
fun RegularMessageItemLeading(
header: MessageHeader,
showAuthor: Boolean,
userAvatarData: UserAvatarData,
onOpenProfile: (String) -> Unit
onOpenProfile: (MessageSenderId) -> Unit
) {
val isProfileRedirectEnabled =
header.userId != null && !(header.isSenderDeleted || header.isSenderUnavailable)
Comment on lines 39 to 40
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably should not check if header.userId != null because it will disable opening profile for old bots, right? Maybe use header.senderId instead.
You could make header.senderId nullable so that it could be easier here (if not null then enabled) and it would make MessageSenderId.User to have non-nullable field which is also better in my opinion, as we won't default to User(null) when some data is missing.

Expand All @@ -44,7 +45,7 @@ fun RegularMessageItemLeading(
enabled = isProfileRedirectEnabled,
onClickDescription = openProfileDescription
) {
onOpenProfile(header.userId!!.toString())
onOpenProfile(header.senderId)
}
}
val avatarContentDescription = listOfNotNull(
Expand Down
Loading
Loading