更新聊天头像逻辑

This commit is contained in:
2024-11-30 08:50:50 +08:00
parent 324e04881e
commit 3a68a51f3c
4 changed files with 32 additions and 20 deletions

View File

@@ -2,6 +2,7 @@ package com.aiosman.ravenow.entity
import android.content.Context
import android.icu.util.Calendar
import com.aiosman.ravenow.ConstVars
import com.aiosman.ravenow.exp.formatChatTime
import com.google.gson.annotations.SerializedName
import com.tencent.imsdk.v2.V2TIMImageElem
@@ -23,21 +24,15 @@ data class ChatItem(
var showTimeDivider: Boolean = false
) {
companion object {
fun convertToChatItem(message: V2TIMMessage, context: Context): ChatItem? {
// val avatar = if (message.sender == userProfile?.trtcUserId) {
// userProfile?.avatar ?: ""
// } else {
// myProfile?.avatar ?: ""
// }
// val nickname = if (message.sender == userProfile?.trtcUserId) {
// userProfile?.nickName ?: ""
// } else {
// myProfile?.nickName ?: ""
// }
fun convertToChatItem(message: V2TIMMessage, context: Context,avatar: String? = null): ChatItem? {
val timestamp = message.timestamp
val calendar = Calendar.getInstance()
calendar.timeInMillis = timestamp * 1000
val imageElm = message.imageElem?.imageList
var faceAvatar = avatar
if (faceAvatar == null) {
faceAvatar = "${ConstVars.BASE_SERVER}${message.faceUrl}"
}
when (message.elemType) {
V2TIMMessage.V2TIM_ELEM_TYPE_IMAGE -> {
val imageElm = message.imageElem?.imageList?.all {
@@ -46,7 +41,7 @@ data class ChatItem(
if (imageElm != true) {
return ChatItem(
message = "Image",
avatar = message.faceUrl,
avatar = faceAvatar,
time = calendar.time.formatChatTime(context),
userId = message.sender,
nickname = message.nickName,
@@ -64,7 +59,7 @@ data class ChatItem(
V2TIMMessage.V2TIM_ELEM_TYPE_TEXT -> {
return ChatItem(
message = message.textElem?.text ?: "Unsupported message type",
avatar = message.faceUrl,
avatar = faceAvatar,
time = calendar.time.formatChatTime(context),
userId = message.sender,
nickname = message.nickName,

View File

@@ -183,6 +183,14 @@ fun ChatScreen(userId: String) {
AppColors.text)
)
Spacer(modifier = Modifier.width(16.dp))
CustomAsyncImage(
imageUrl = viewModel.userProfile?.avatar ?: "",
modifier = Modifier
.size(40.dp)
.clip(RoundedCornerShape(40.dp)),
contentDescription = "avatar"
)
Spacer(modifier = Modifier.width(8.dp))
Text(
text = viewModel.userProfile?.nickName ?: "",
modifier = Modifier.weight(1f),

View File

@@ -66,7 +66,7 @@ class ChatViewModel(
override fun onRecvNewMessage(msg: V2TIMMessage?) {
super.onRecvNewMessage(msg)
msg?.let {
val chatItem = ChatItem.convertToChatItem(msg, context)
val chatItem = ChatItem.convertToChatItem(msg, context, avatar = userProfile?.avatar)
chatItem?.let {
chatData = listOf(it) + chatData
goToNew = true
@@ -109,7 +109,11 @@ class ChatViewModel(
object : V2TIMValueCallback<List<V2TIMMessage>> {
override fun onSuccess(p0: List<V2TIMMessage>?) {
chatData = chatData + (p0 ?: emptyList()).map {
ChatItem.convertToChatItem(it, context)
var avatar = userProfile?.avatar
if (it.isSelf) {
avatar = myProfile?.avatar
}
ChatItem.convertToChatItem(it, context,avatar)
}.filterNotNull()
if ((p0?.size ?: 0) < 20) {
hasMore = false
@@ -143,7 +147,7 @@ class ChatViewModel(
override fun onSuccess(p0: V2TIMMessage?) {
Log.d("ChatViewModel", "send message success")
val chatItem = ChatItem.convertToChatItem(p0!!, context)
val chatItem = ChatItem.convertToChatItem(p0!!, context, avatar = myProfile?.avatar)
chatItem?.let {
chatData = listOf(it) + chatData
goToNew = true
@@ -176,7 +180,7 @@ class ChatViewModel(
override fun onSuccess(p0: V2TIMMessage?) {
Log.d("ChatViewModel", "send image message success")
val chatItem = ChatItem.convertToChatItem(p0!!, context)
val chatItem = ChatItem.convertToChatItem(p0!!, context, avatar = myProfile?.avatar)
chatItem?.let {
chatData = listOf(it) + chatData
goToNew = true
@@ -227,7 +231,11 @@ class ChatViewModel(
object : V2TIMValueCallback<List<V2TIMMessage>> {
override fun onSuccess(p0: List<V2TIMMessage>?) {
chatData = (p0 ?: emptyList()).mapNotNull {
ChatItem.convertToChatItem(it, context)
var avatar = userProfile?.avatar
if (it.isSelf) {
avatar = myProfile?.avatar
}
ChatItem.convertToChatItem(it, context,avatar)
}
if ((p0?.size ?: 0) < 20) {
hasMore = false

View File

@@ -12,12 +12,13 @@ import androidx.navigation.NavHostController
import androidx.paging.PagingData
import androidx.paging.map
import com.aiosman.ravenow.AppState
import com.aiosman.ravenow.ConstVars
import com.aiosman.ravenow.data.AccountNotice
import com.aiosman.ravenow.data.AccountService
import com.aiosman.ravenow.entity.CommentEntity
import com.aiosman.ravenow.data.AccountServiceImpl
import com.aiosman.ravenow.data.UserService
import com.aiosman.ravenow.data.UserServiceImpl
import com.aiosman.ravenow.entity.CommentEntity
import com.aiosman.ravenow.exp.formatChatTime
import com.aiosman.ravenow.ui.NavigationRoute
import com.aiosman.ravenow.ui.navigateToChat
@@ -63,7 +64,7 @@ data class Conversation(
nickname = msg.showName,
lastMessage = msg.lastMessage?.textElem?.text ?: "",
lastMessageTime = lastMessage.time.formatChatTime(context),
avatar = msg.faceUrl,
avatar = "${ConstVars.BASE_SERVER}${msg.faceUrl}",
unreadCount = msg.unreadCount,
trtcUserId = msg.userID,
displayText = displayText,