更新聊天头像逻辑

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

View File

@@ -183,6 +183,14 @@ fun ChatScreen(userId: String) {
AppColors.text) AppColors.text)
) )
Spacer(modifier = Modifier.width(16.dp)) 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(
text = viewModel.userProfile?.nickName ?: "", text = viewModel.userProfile?.nickName ?: "",
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),

View File

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

View File

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