From 7a705b43550a73c8f1e310cc1d1714c11ce5cef8 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 22 Jun 2026 23:55:43 +0900 Subject: [PATCH] =?UTF-8?q?feat(creator):=20=ED=9B=84=EC=9B=90=20empty=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=EC=9D=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/CreatorChannelDonationAdapter.kt | 40 +++++++++++++- .../item_creator_channel_donation_empty.xml | 54 +++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/item_creator_channel_donation_empty.xml 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 4663ee8a..a07b19e8 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 @@ -5,11 +5,13 @@ import android.graphics.Rect import android.view.LayoutInflater import android.view.View 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 @@ -17,7 +19,8 @@ import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannel import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannelDonationUiModel class CreatorChannelDonationAdapter( - private val onRankingAllClick: () -> Unit = { } + private val onRankingAllClick: () -> Unit = { }, + private val onEmptyDonationClick: () -> Unit = { } ) : RecyclerView.Adapter() { private var items: List = emptyList() @@ -33,8 +36,20 @@ class CreatorChannelDonationAdapter( notifyDataSetChanged() } + fun submitEmpty( + rankings: List, + isOwner: Boolean + ) { + items = buildList { + if (rankings.isNotEmpty()) add(CreatorChannelDonationListItem.Ranking(rankings)) + add(CreatorChannelDonationListItem.Empty(isOwner)) + } + notifyDataSetChanged() + } + override fun getItemViewType(position: Int): Int = when (items[position]) { is CreatorChannelDonationListItem.Ranking -> VIEW_TYPE_RANKING + is CreatorChannelDonationListItem.Empty -> VIEW_TYPE_EMPTY is CreatorChannelDonationListItem.Donation -> VIEW_TYPE_DONATION } @@ -44,6 +59,10 @@ class CreatorChannelDonationAdapter( ItemCreatorChannelDonationRankingBinding.inflate(LayoutInflater.from(parent.context), parent, false), onRankingAllClick ) + VIEW_TYPE_EMPTY -> EmptyViewHolder( + ItemCreatorChannelDonationEmptyBinding.inflate(LayoutInflater.from(parent.context), parent, false), + onEmptyDonationClick + ) else -> DonationViewHolder( ItemCreatorChannelDonationBinding.inflate(LayoutInflater.from(parent.context), parent, false) ) @@ -53,6 +72,7 @@ class CreatorChannelDonationAdapter( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (val item = items[position]) { is CreatorChannelDonationListItem.Ranking -> (holder as RankingViewHolder).bind(item.rankings) + is CreatorChannelDonationListItem.Empty -> (holder as EmptyViewHolder).bind(item.isOwner) is CreatorChannelDonationListItem.Donation -> (holder as DonationViewHolder).bind(item.donation) } } @@ -80,6 +100,20 @@ class CreatorChannelDonationAdapter( } } + class EmptyViewHolder( + private val binding: ItemCreatorChannelDonationEmptyBinding, + private val onEmptyDonationClick: () -> Unit + ) : RecyclerView.ViewHolder(binding.root) { + + init { + binding.btnCreatorChannelDonationEmptyWrite.setOnClickListener { onEmptyDonationClick() } + } + + fun bind(isOwner: Boolean) = with(binding) { + btnCreatorChannelDonationEmptyWrite.isVisible = !isOwner + } + } + class DonationViewHolder( private val binding: ItemCreatorChannelDonationBinding ) : RecyclerView.ViewHolder(binding.root) { @@ -104,12 +138,14 @@ class CreatorChannelDonationAdapter( companion object { private const val VIEW_TYPE_RANKING = 0 - private const val VIEW_TYPE_DONATION = 1 + private const val VIEW_TYPE_EMPTY = 1 + private const val VIEW_TYPE_DONATION = 2 } } private sealed interface CreatorChannelDonationListItem { data class Ranking(val rankings: List) : CreatorChannelDonationListItem + data class Empty(val isOwner: Boolean) : CreatorChannelDonationListItem data class Donation(val donation: CreatorChannelDonationUiModel) : CreatorChannelDonationListItem } diff --git a/app/src/main/res/layout/item_creator_channel_donation_empty.xml b/app/src/main/res/layout/item_creator_channel_donation_empty.xml new file mode 100644 index 00000000..b11c2fce --- /dev/null +++ b/app/src/main/res/layout/item_creator_channel_donation_empty.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + +