feat(creator): 후원 empty 아이템을 추가한다
This commit is contained in:
@@ -5,11 +5,13 @@ import android.graphics.Rect
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import coil.transform.CircleCropTransformation
|
import coil.transform.CircleCropTransformation
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemCreatorChannelDonationBinding
|
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.databinding.ItemCreatorChannelDonationRankingBinding
|
||||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
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
|
import kr.co.vividnext.sodalive.v2.creator.channel.donation.model.CreatorChannelDonationUiModel
|
||||||
|
|
||||||
class CreatorChannelDonationAdapter(
|
class CreatorChannelDonationAdapter(
|
||||||
private val onRankingAllClick: () -> Unit = { }
|
private val onRankingAllClick: () -> Unit = { },
|
||||||
|
private val onEmptyDonationClick: () -> Unit = { }
|
||||||
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||||
|
|
||||||
private var items: List<CreatorChannelDonationListItem> = emptyList()
|
private var items: List<CreatorChannelDonationListItem> = emptyList()
|
||||||
@@ -33,8 +36,20 @@ class CreatorChannelDonationAdapter(
|
|||||||
notifyDataSetChanged()
|
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]) {
|
override fun getItemViewType(position: Int): Int = when (items[position]) {
|
||||||
is CreatorChannelDonationListItem.Ranking -> VIEW_TYPE_RANKING
|
is CreatorChannelDonationListItem.Ranking -> VIEW_TYPE_RANKING
|
||||||
|
is CreatorChannelDonationListItem.Empty -> VIEW_TYPE_EMPTY
|
||||||
is CreatorChannelDonationListItem.Donation -> VIEW_TYPE_DONATION
|
is CreatorChannelDonationListItem.Donation -> VIEW_TYPE_DONATION
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,6 +59,10 @@ class CreatorChannelDonationAdapter(
|
|||||||
ItemCreatorChannelDonationRankingBinding.inflate(LayoutInflater.from(parent.context), parent, false),
|
ItemCreatorChannelDonationRankingBinding.inflate(LayoutInflater.from(parent.context), parent, false),
|
||||||
onRankingAllClick
|
onRankingAllClick
|
||||||
)
|
)
|
||||||
|
VIEW_TYPE_EMPTY -> EmptyViewHolder(
|
||||||
|
ItemCreatorChannelDonationEmptyBinding.inflate(LayoutInflater.from(parent.context), parent, false),
|
||||||
|
onEmptyDonationClick
|
||||||
|
)
|
||||||
else -> DonationViewHolder(
|
else -> DonationViewHolder(
|
||||||
ItemCreatorChannelDonationBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
ItemCreatorChannelDonationBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
)
|
)
|
||||||
@@ -53,6 +72,7 @@ class CreatorChannelDonationAdapter(
|
|||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
when (val item = items[position]) {
|
when (val item = items[position]) {
|
||||||
is CreatorChannelDonationListItem.Ranking -> (holder as RankingViewHolder).bind(item.rankings)
|
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)
|
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(
|
class DonationViewHolder(
|
||||||
private val binding: ItemCreatorChannelDonationBinding
|
private val binding: ItemCreatorChannelDonationBinding
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
@@ -104,12 +138,14 @@ class CreatorChannelDonationAdapter(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val VIEW_TYPE_RANKING = 0
|
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 {
|
private sealed interface CreatorChannelDonationListItem {
|
||||||
data class Ranking(val rankings: List<CreatorChannelDonationRankingUiModel>) : CreatorChannelDonationListItem
|
data class Ranking(val rankings: List<CreatorChannelDonationRankingUiModel>) : CreatorChannelDonationListItem
|
||||||
|
data class Empty(val isOwner: Boolean) : CreatorChannelDonationListItem
|
||||||
data class Donation(val donation: CreatorChannelDonationUiModel) : 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