feat(creator): 후원 empty 아이템을 추가한다
This commit is contained in:
@@ -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<RecyclerView.ViewHolder>() {
|
||||
|
||||
private var items: List<CreatorChannelDonationListItem> = emptyList()
|
||||
@@ -33,8 +36,20 @@ class CreatorChannelDonationAdapter(
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun submitEmpty(
|
||||
rankings: List<CreatorChannelDonationRankingUiModel>,
|
||||
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<CreatorChannelDonationRankingUiModel>) : CreatorChannelDonationListItem
|
||||
data class Empty(val isOwner: Boolean) : CreatorChannelDonationListItem
|
||||
data class Donation(val donation: CreatorChannelDonationUiModel) : CreatorChannelDonationListItem
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/layout_creator_channel_donation_empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="top|center_horizontal"
|
||||
android:orientation="vertical"
|
||||
android:paddingHorizontal="@dimen/spacing_14"
|
||||
android:paddingTop="@dimen/spacing_48"
|
||||
android:paddingBottom="@dimen/spacing_32">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_creator_channel_donation_empty_message"
|
||||
style="@style/Typography.Body3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:lineSpacingMultiplier="1.45"
|
||||
android:text="@string/creator_channel_donation_empty_title"
|
||||
android:textColor="@color/gray_500" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/btn_creator_channel_donation_empty_write"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="44dp"
|
||||
android:layout_marginTop="@dimen/spacing_14"
|
||||
android:background="@drawable/bg_creator_channel_donation_empty_button"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:paddingHorizontal="@dimen/spacing_12"
|
||||
tools:visibility="visible">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_creator_channel_donation_empty_write"
|
||||
android:layout_width="@dimen/spacing_20"
|
||||
android:layout_height="@dimen/spacing_20"
|
||||
android:contentDescription="@null"
|
||||
android:src="@drawable/ic_new_donation"
|
||||
app:tint="@color/white" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_creator_channel_donation_empty_write"
|
||||
style="@style/Typography.Body2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/spacing_6"
|
||||
android:gravity="center"
|
||||
android:text="@string/creator_channel_donation_action"
|
||||
android:textColor="@color/white" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user