From 6a6aa271efd0e8fb2085500fec92f95ec537d6b4 Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 14 Aug 2025 14:46:12 +0900 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=ED=86=A1=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=B0=98=EC=98=81=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=A7=84=EC=9E=85=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TalkRoom 필드 변경 및 신규 스키마 적용 - 어댑터 바인딩/DiffUtil 수정, 프로필 이미지 28dp 라운드 처리 - 아이템 클릭 시 ChatRoomActivity로 이동(roomId 전달) - item_talk 배경 제거, 최근 캐릭터 썸네일 모서리 28dp로 통일 --- .../recent/RecentCharacterAdapter.kt | 2 +- .../vividnext/sodalive/chat/talk/TalkRoom.kt | 12 ++++----- .../sodalive/chat/talk/TalkTabAdapter.kt | 26 ++++++++++++++----- .../sodalive/chat/talk/TalkTabFragment.kt | 16 ++++++------ app/src/main/res/layout/item_talk.xml | 1 - 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/recent/RecentCharacterAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/recent/RecentCharacterAdapter.kt index 13f0db43..609d9cab 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/recent/RecentCharacterAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/recent/RecentCharacterAdapter.kt @@ -27,7 +27,7 @@ class RecentCharacterAdapter( .apply( RequestOptions().transform( RoundedCorners( - 16f.dpToPx().toInt() + 28f.dpToPx().toInt() ) ) ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkRoom.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkRoom.kt index c160de09..08583fc1 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkRoom.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkRoom.kt @@ -5,10 +5,10 @@ import com.google.gson.annotations.SerializedName @Keep data class TalkRoom( - @SerializedName("id") val id: Long, - @SerializedName("profileImageUrl") val profileImageUrl: String, - @SerializedName("characterName") val characterName: String, - @SerializedName("characterType") val characterType: String, - @SerializedName("lastMessageTime") val lastMessageTime: String, - @SerializedName("lastMessage") val lastMessage: String + @SerializedName("chatRoomId") val chatRoomId: Long, + @SerializedName("title") val title: String, + @SerializedName("imageUrl") val imageUrl: String, + @SerializedName("opponentType") val opponentType: String, + @SerializedName("lastMessagePreview") val lastMessagePreview: String?, + @SerializedName("lastMessageTimeLabel") val lastMessageTimeLabel: String ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabAdapter.kt index ef9c4199..48248561 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabAdapter.kt @@ -6,7 +6,11 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.orhanobut.logger.Logger import kr.co.vividnext.sodalive.databinding.ItemTalkBinding +import kr.co.vividnext.sodalive.extensions.dpToPx class TalkTabAdapter( private val onItemClick: (TalkRoom) -> Unit @@ -36,19 +40,27 @@ class TalkTabAdapter( fun bind(talkRoom: TalkRoom) { binding.apply { + Logger.d("bind talkRoom: $talkRoom") // 프로필 이미지 로드 Glide.with(ivProfile.context) - .load(talkRoom.profileImageUrl) + .load(talkRoom.imageUrl) + .apply( + RequestOptions().transform( + RoundedCorners( + 28f.dpToPx().toInt() + ) + ) + ) .into(ivProfile) // 텍스트 설정 - tvCharacterName.text = talkRoom.characterName - tvCharacterType.text = talkRoom.characterType - tvLastTime.text = talkRoom.lastMessageTime - tvLastMessage.text = talkRoom.lastMessage + tvCharacterName.text = talkRoom.title + tvCharacterType.text = talkRoom.opponentType + tvLastTime.text = talkRoom.lastMessageTimeLabel + tvLastMessage.text = talkRoom.lastMessagePreview ?: "" // 캐릭터 유형에 따른 배경 설정 - val backgroundResId = when (talkRoom.characterType.lowercase()) { + val backgroundResId = when (talkRoom.opponentType.lowercase()) { "character" -> kr.co.vividnext.sodalive.R.drawable.bg_character_type_badge_character "clone" -> kr.co.vividnext.sodalive.R.drawable.bg_character_type_badge_clone "creator" -> kr.co.vividnext.sodalive.R.drawable.bg_character_type_badge_creator @@ -61,7 +73,7 @@ class TalkTabAdapter( private class TalkDiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: TalkRoom, newItem: TalkRoom): Boolean { - return oldItem.id == newItem.id + return oldItem.chatRoomId == newItem.chatRoomId } override fun areContentsTheSame(oldItem: TalkRoom, newItem: TalkRoom): Boolean { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt index 9d91b135..24687742 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt @@ -5,6 +5,7 @@ import android.view.View import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomActivity import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.databinding.FragmentTalkTabBinding import org.koin.android.ext.android.inject @@ -30,14 +31,13 @@ class TalkTabFragment : BaseFragment( } private fun setupRecyclerView() { - adapter = TalkTabAdapter { talkRoom -> - // 대화방 클릭 이벤트 처리 - // TODO: 대화방 상세 화면으로 이동 - Toast.makeText( - requireContext(), - "대화방 ${talkRoom.characterName} 클릭됨", - Toast.LENGTH_SHORT - ).show() + adapter = TalkTabAdapter { + startActivity( + ChatRoomActivity.newIntent( + context = requireContext(), + roomId = it.chatRoomId + ) + ) } binding.rvTalk.apply { diff --git a/app/src/main/res/layout/item_talk.xml b/app/src/main/res/layout/item_talk.xml index 42887dfb..21e22f8d 100644 --- a/app/src/main/res/layout/item_talk.xml +++ b/app/src/main/res/layout/item_talk.xml @@ -12,7 +12,6 @@ android:id="@+id/iv_profile" android:layout_width="76dp" android:layout_height="76dp" - android:background="@color/color_777777" android:contentDescription="@null" android:scaleType="centerCrop" />