in azure-communication-ui/chat/src/main/java/com/azure/android/communication/ui/chat/presentation/ui/viewmodel/MessageViewModel.kt [66:107]
override fun get(index: Int): MessageViewModel {
// Generate Message View Model here
val lastMessage = try {
messages[index - 1]
} catch (e: IndexOutOfBoundsException) {
EMPTY_MESSAGE_INFO_MODEL
}
val thisMessage = messages[index]
val isLocalUser =
thisMessage.senderCommunicationIdentifier?.id == localUserIdentifier || thisMessage.isCurrentUser
val showReadReceipt =
thisMessage.sendStatus == MessageSendStatus.SENT && lastMessageIdReadByRemoteParticipants != 0L &&
lastMessageIdReadByRemoteParticipants == thisMessage.normalizedID
return MessageViewModel(
thisMessage,
includeDebugInfo = includeDebugInfo,
showUsername = !isLocalUser &&
(lastMessage.senderCommunicationIdentifier?.id ?: "")
!= (thisMessage.senderCommunicationIdentifier?.id ?: ""),
showTime =
(
(lastMessage.senderCommunicationIdentifier?.id ?: "")
!= (thisMessage.senderCommunicationIdentifier?.id ?: "") &&
!thisMessage.isCurrentUser
) ||
(thisMessage.isCurrentUser && !lastMessage.isCurrentUser),
dateHeaderText = buildDateHeader(
lastMessage.createdOn!!,
thisMessage.createdOn ?: OffsetDateTime.now()
),
isLocalUser = isLocalUser,
messageStatus = thisMessage.sendStatus,
showReadReceipt = showReadReceipt,
showSentStatusIcon = shouldShowMessageStatusIcon(thisMessage, showReadReceipt),
isHiddenUser = messages[index].messageType == ChatMessageType.PARTICIPANT_ADDED &&
messages[index].participants.size == 1 &&
hiddenParticipant.contains(messages[index].participants.first().userIdentifier.id),
)
}