From ff4c0104c5dd50f0de040712f4e8edaee24248e4 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 8 Jul 2026 18:43:47 +0900 Subject: [PATCH] =?UTF-8?q?refactor(creator-channel):=20=ED=9B=84=EC=9B=90?= =?UTF-8?q?=20=EC=B9=B4=EB=93=9C=20=EB=B0=94=EC=9D=B8=EB=94=A9=EC=9D=84=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=ED=99=94=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/CreatorChannelDonationAdapter.kt | 38 ++++++---------- .../ui/CreatorChannelDonationCardBinder.kt | 45 +++++++++++++++++++ .../ui/CreatorChannelHomeSectionAdapter.kt | 40 +++++++---------- 3 files changed, 75 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelDonationCardBinder.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/donation/ui/CreatorChannelDonationAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/donation/ui/CreatorChannelDonationAdapter.kt index 60a67583..d5b8d29a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/donation/ui/CreatorChannelDonationAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/donation/ui/CreatorChannelDonationAdapter.kt @@ -8,15 +8,12 @@ import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import coil.transform.CircleCropTransformation -import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationBinding import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationEmptyBinding import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationRankingBinding -import kr.co.vividnext.sodalive.extensions.loadUrl -import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannelDonationRankingUiModel import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannelDonationUiModel +import kr.co.vividnext.sodalive.v2.creator.channel.ui.bindCreatorChannelDonationCard class CreatorChannelDonationAdapter( private val onRankingAllClick: () -> Unit = { }, @@ -119,27 +116,20 @@ class CreatorChannelDonationAdapter( ) : RecyclerView.ViewHolder(binding.root) { fun bind(item: CreatorChannelDonationUiModel) = with(binding) { - layoutCreatorChannelDonationHeader.setBackgroundColor(root.context.getColor(item.headerColorResId)) - ivCreatorChannelDonationProfile.loadUrl(item.profileImageUrl) { - crossfade(true) - placeholder(R.drawable.ic_placeholder_profile) - error(R.drawable.ic_placeholder_profile) - transformations(CircleCropTransformation()) - } - tvCreatorChannelDonationNickname.text = item.nickname - tvCreatorChannelDonationCreatedAt.text = item.createdAtText - tvCreatorChannelDonationCan.text = root.context.getString( - R.string.creator_channel_donation_can_format, - item.can.moneyFormat() + bindCreatorChannelDonationCard( + headerView = layoutCreatorChannelDonationHeader, + profileView = ivCreatorChannelDonationProfile, + nicknameView = tvCreatorChannelDonationNickname, + createdAtView = tvCreatorChannelDonationCreatedAt, + canView = tvCreatorChannelDonationCan, + messageView = tvCreatorChannelDonationMessage, + headerColorResId = item.headerColorResId, + profileImageUrl = item.profileImageUrl, + nickname = item.nickname, + createdAtText = item.createdAtText, + can = item.can, + message = item.message ) - tvCreatorChannelDonationMessage.text = item.message - if (item.headerColorResId == R.color.red_400) { - tvCreatorChannelDonationNickname.setTextColor(root.context.getColor(R.color.white)) - tvCreatorChannelDonationCreatedAt.setTextColor(root.context.getColor(R.color.gray_100)) - } else { - tvCreatorChannelDonationNickname.setTextColor(root.context.getColor(R.color.black)) - tvCreatorChannelDonationCreatedAt.setTextColor(root.context.getColor(R.color.gray_700)) - } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelDonationCardBinder.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelDonationCardBinder.kt new file mode 100644 index 00000000..b2ab092f --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelDonationCardBinder.kt @@ -0,0 +1,45 @@ +package kr.co.vividnext.sodalive.v2.creator.channel.ui + +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.ColorRes +import coil.transform.CircleCropTransformation +import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.extensions.loadUrl +import kr.co.vividnext.sodalive.extensions.moneyFormat + +internal fun bindCreatorChannelDonationCard( + headerView: View, + profileView: ImageView, + nicknameView: TextView, + createdAtView: TextView, + canView: TextView, + messageView: TextView, + @ColorRes headerColorResId: Int, + profileImageUrl: String, + nickname: String, + createdAtText: String, + can: Int, + message: String +) { + val context = headerView.context + headerView.setBackgroundColor(context.getColor(headerColorResId)) + profileView.loadUrl(profileImageUrl) { + crossfade(true) + placeholder(R.drawable.ic_placeholder_profile) + error(R.drawable.ic_placeholder_profile) + transformations(CircleCropTransformation()) + } + nicknameView.text = nickname + createdAtView.text = createdAtText + canView.text = context.getString(R.string.creator_channel_donation_can_format, can.moneyFormat()) + messageView.text = message + if (headerColorResId == R.color.red_400) { + nicknameView.setTextColor(context.getColor(R.color.white)) + createdAtView.setTextColor(context.getColor(R.color.gray_100)) + } else { + nicknameView.setTextColor(context.getColor(R.color.black)) + createdAtView.setTextColor(context.getColor(R.color.gray_700)) + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt index 9b542d14..5baad1c3 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelHomeSectionAdapter.kt @@ -15,12 +15,11 @@ import androidx.core.net.toUri import androidx.core.view.isVisible import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import kr.co.vividnext.sodalive.R import coil.transform.CircleCropTransformation +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.common.formatUtcRelativeTimeText import kr.co.vividnext.sodalive.common.image.BlurTransformation import kr.co.vividnext.sodalive.extensions.loadUrl -import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelAudioContentResponse import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelCommunityPostResponse import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelLiveResponse @@ -196,30 +195,23 @@ class CreatorChannelHomeSectionAdapter( marginEnd = if (index == visibleDonations.lastIndex) 0 else 4.dp() } val headerColorResId = calculateCreatorChannelDonationHeaderColorRes(donation.can) - row.findViewById(R.id.layout_donation_header) - .setBackgroundColor(itemView.context.getColor(headerColorResId)) - row.findViewById(R.id.iv_donation_profile).loadUrl(donation.profileImageUrl) { - placeholder(R.drawable.ic_placeholder_profile) - transformations(CircleCropTransformation()) - } - val donationNickname = row.findViewById(R.id.tv_donation_nickname) - val donationCreatedAt = row.findViewById(R.id.tv_donation_created_at) - donationNickname.text = donation.nickname - donationCreatedAt.text = formatUtcRelativeTimeText(itemView.context, donation.createdAtUtc) - if (headerColorResId == R.color.red_400) { - donationNickname.setTextColor(itemView.context.getColor(R.color.white)) - donationCreatedAt.setTextColor(itemView.context.getColor(R.color.gray_100)) - } else { - donationNickname.setTextColor(itemView.context.getColor(R.color.black)) - donationCreatedAt.setTextColor(itemView.context.getColor(R.color.gray_700)) - } - row.findViewById(R.id.tv_donation_can).text = itemView.context.getString( - R.string.creator_channel_donation_can_format, - donation.can.moneyFormat() - ) - row.findViewById(R.id.tv_donation_message).text = donation.message.ifBlank { + val donationMessage = donation.message.ifBlank { itemView.context.getString(R.string.creator_channel_donation_fallback_message, donation.can) } + bindCreatorChannelDonationCard( + headerView = row.findViewById(R.id.layout_donation_header), + profileView = row.findViewById(R.id.iv_donation_profile), + nicknameView = row.findViewById(R.id.tv_donation_nickname), + createdAtView = row.findViewById(R.id.tv_donation_created_at), + canView = row.findViewById(R.id.tv_donation_can), + messageView = row.findViewById(R.id.tv_donation_message), + headerColorResId = headerColorResId, + profileImageUrl = donation.profileImageUrl, + nickname = donation.nickname, + createdAtText = formatUtcRelativeTimeText(itemView.context, donation.createdAtUtc), + can = donation.can, + message = donationMessage + ) donationItems?.addView(row) } }