diff --git a/sample-app/src/main/java/com/xuqm/sdk/sample/ui/conversation/ConversationScreen.kt b/sample-app/src/main/java/com/xuqm/sdk/sample/ui/conversation/ConversationScreen.kt index 70defc6..03a557b 100644 --- a/sample-app/src/main/java/com/xuqm/sdk/sample/ui/conversation/ConversationScreen.kt +++ b/sample-app/src/main/java/com/xuqm/sdk/sample/ui/conversation/ConversationScreen.kt @@ -36,6 +36,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import coil3.compose.AsyncImage import com.xuqm.sdk.im.model.ConversationData +import com.xuqm.sdk.sample.di.AppDependencies import com.xuqm.sdk.ui.InitialAvatar import com.xuqm.sdk.ui.SearchBarField import com.xuqm.sdk.utils.TimeFormatters @@ -201,7 +202,11 @@ private fun conversationTitle( return if (conversation.chatType.equals("GROUP", ignoreCase = true)) { titles[conversation.targetId].orEmpty().ifBlank { conversation.targetId } } else { - conversation.targetId + AppDependencies.localContactCache.loadProfiles() + .firstOrNull { it.userId == conversation.targetId } + ?.nickname + ?.takeIf { it.isNotBlank() } + ?: conversation.targetId } } diff --git a/sdk-im/src/main/java/com/xuqm/sdk/im/ImSDK.kt b/sdk-im/src/main/java/com/xuqm/sdk/im/ImSDK.kt index d918e35..37223d6 100644 --- a/sdk-im/src/main/java/com/xuqm/sdk/im/ImSDK.kt +++ b/sdk-im/src/main/java/com/xuqm/sdk/im/ImSDK.kt @@ -510,6 +510,18 @@ object ImSDK { suspend fun removeFromBlacklist(blockedUserId: String) = withContext(Dispatchers.IO) { api.removeFromBlacklist(XuqmSDK.appId, blockedUserId) } + suspend fun getProfile(userId: String) = + withContext(Dispatchers.IO) { api.getProfile(userId, XuqmSDK.appId).data } + + suspend fun updateProfile( + userId: String, + nickname: String? = null, + avatar: String? = null, + gender: String? = null, + ) = withContext(Dispatchers.IO) { + api.updateProfile(userId, XuqmSDK.appId, nickname, avatar, gender).data + } + suspend fun listConversations(): List = withContext(Dispatchers.IO) { api.listConversations(XuqmSDK.appId).data ?: emptyList() } diff --git a/sdk-im/src/main/java/com/xuqm/sdk/im/api/ImApi.kt b/sdk-im/src/main/java/com/xuqm/sdk/im/api/ImApi.kt index 00f4780..567ce10 100644 --- a/sdk-im/src/main/java/com/xuqm/sdk/im/api/ImApi.kt +++ b/sdk-im/src/main/java/com/xuqm/sdk/im/api/ImApi.kt @@ -6,6 +6,7 @@ import com.xuqm.sdk.im.model.FriendRequest import com.xuqm.sdk.im.model.ImGroup import com.xuqm.sdk.im.model.GroupJoinRequest import com.xuqm.sdk.im.model.ImMessage +import com.xuqm.sdk.im.model.UserProfile import retrofit2.http.Body import retrofit2.http.DELETE import retrofit2.http.GET @@ -209,6 +210,21 @@ interface ImApi { @Query("blockedUserId") blockedUserId: String, ): ApiResponse + @GET("api/im/accounts/{userId}") + suspend fun getProfile( + @Path("userId") userId: String, + @Query("appId") appId: String, + ): ApiResponse + + @PUT("api/im/accounts/{userId}") + suspend fun updateProfile( + @Path("userId") userId: String, + @Query("appId") appId: String, + @Query("nickname") nickname: String? = null, + @Query("avatar") avatar: String? = null, + @Query("gender") gender: String? = null, + ): ApiResponse + @GET("api/im/conversations") suspend fun listConversations(@Query("appId") appId: String): ApiResponse>