refactor(home): 홈 추천 adapter 파일을 분리한다
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationAiCharacterUiModel
|
||||
import kr.co.vividnext.sodalive.v2.widget.characterchatthumbnail.CharacterChatThumbnailItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.characterchatthumbnail.CharacterChatThumbnailView
|
||||
|
||||
class HomeAiCharacterAdapter : RecyclerView.Adapter<HomeAiCharacterAdapter.CharacterViewHolder>() {
|
||||
private var items: List<HomeRecommendationAiCharacterUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationAiCharacterUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CharacterViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(
|
||||
R.layout.view_character_chat_thumbnail,
|
||||
parent,
|
||||
false
|
||||
) as CharacterChatThumbnailView
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CharacterViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CharacterViewHolder, position: Int) {
|
||||
holder.bind(items[position].item)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CharacterViewHolder(
|
||||
private val view: CharacterChatThumbnailView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(item: CharacterChatThumbnailItem) {
|
||||
view.bind(item)
|
||||
view.imageView().loadUrl(item.imageUrl)
|
||||
view.setOnCharacterClick(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerSection
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerUiModel
|
||||
import kr.co.vividnext.sodalive.v2.widget.banner.BannerItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.banner.BannerView
|
||||
|
||||
class HomeBannerBinder(
|
||||
private val bannerView: BannerView
|
||||
) {
|
||||
private var sourceItems: List<HomeRecommendationBannerUiModel> = emptyList()
|
||||
private var onBannerClick: ((HomeRecommendationBannerUiModel) -> Unit)? = null
|
||||
|
||||
init {
|
||||
bannerView.setOnBindBannerImage { imageView, item -> imageView.loadUrl(item.imageUrl) }
|
||||
bannerView.setOnBannerClickListener { bannerItem ->
|
||||
sourceItems.firstOrNull { it.bannerId == bannerItem.bannerId }?.let { onBannerClick?.invoke(it) }
|
||||
}
|
||||
}
|
||||
|
||||
fun setOnBannerClick(listener: ((HomeRecommendationBannerUiModel) -> Unit)?) {
|
||||
onBannerClick = listener
|
||||
}
|
||||
|
||||
fun bind(section: HomeRecommendationBannerSection) {
|
||||
sourceItems = section.items
|
||||
bannerView.setItems(
|
||||
section.items.map { item ->
|
||||
BannerItem(
|
||||
bannerId = item.bannerId,
|
||||
imageUrl = item.imageUrl.orEmpty()
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
class HomeCheerCreatorAdapter : HomeCreatorProfileAdapter()
|
||||
@@ -0,0 +1,42 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
|
||||
|
||||
open class HomeCreatorProfileAdapter : RecyclerView.Adapter<HomeCreatorProfileAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_creator_profile, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_creator_profile)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_creator_profile_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationFirstAudioContentUiModel
|
||||
import kr.co.vividnext.sodalive.v2.widget.AudioContentCardSize
|
||||
import kr.co.vividnext.sodalive.v2.widget.AudioContentCardView
|
||||
|
||||
class HomeFirstAudioAdapter : RecyclerView.Adapter<HomeFirstAudioAdapter.AudioViewHolder>() {
|
||||
private var items: List<HomeRecommendationFirstAudioContentUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationFirstAudioContentUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AudioViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(
|
||||
R.layout.view_audio_content_card,
|
||||
parent,
|
||||
false
|
||||
) as AudioContentCardView
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return AudioViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: AudioViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class AudioViewHolder(
|
||||
private val view: AudioContentCardView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(item: HomeRecommendationFirstAudioContentUiModel) {
|
||||
view.setSize(AudioContentCardSize.Medium)
|
||||
view.setContent(item.title, item.creatorNickname)
|
||||
view.thumbnailView().loadUrl(item.coverImage)
|
||||
view.setTags(item.tags)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
|
||||
object HomeFollowAllButtonBinder {
|
||||
fun bind(
|
||||
view: View,
|
||||
creatorIds: List<Long>,
|
||||
isFollowCompleted: Boolean,
|
||||
onClick: (List<Long>) -> Unit
|
||||
) {
|
||||
val icon = view.findViewById<ImageView>(R.id.iv_home_follow_all_icon)
|
||||
val text = view.findViewById<TextView>(R.id.tv_home_follow_all)
|
||||
icon.setImageResource(if (isFollowCompleted) R.drawable.ic_new_following else R.drawable.ic_new_follow)
|
||||
text.setText(
|
||||
if (isFollowCompleted) {
|
||||
R.string.home_recommendation_follow_all_done
|
||||
} else {
|
||||
R.string.home_recommendation_follow_all
|
||||
}
|
||||
)
|
||||
view.isEnabled = !isFollowCompleted
|
||||
view.setOnClickListener {
|
||||
if (creatorIds.isNotEmpty()) onClick(creatorIds)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
class HomeGenreCreatorAdapter : HomeCreatorProfileAdapter()
|
||||
@@ -0,0 +1,57 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationLiveUiModel
|
||||
import kr.co.vividnext.sodalive.v2.widget.livethumbnail.LiveThumbnailItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.livethumbnail.LiveThumbnailSimpleView
|
||||
|
||||
class HomeLiveAdapter : RecyclerView.Adapter<HomeLiveAdapter.LiveViewHolder>() {
|
||||
private var items: List<HomeRecommendationLiveUiModel> = emptyList()
|
||||
private var onClick: ((HomeRecommendationLiveUiModel) -> Unit)? = null
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationLiveUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun setOnLiveClick(listener: ((HomeRecommendationLiveUiModel) -> Unit)?) {
|
||||
onClick = listener
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LiveViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.view_live_thumbnail_simple, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return LiveViewHolder(view as LiveThumbnailSimpleView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: LiveViewHolder, position: Int) {
|
||||
holder.bind(items[position], onClick)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class LiveViewHolder(
|
||||
private val view: LiveThumbnailSimpleView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(
|
||||
item: HomeRecommendationLiveUiModel,
|
||||
onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
|
||||
) {
|
||||
val thumbnailItem = LiveThumbnailItem(
|
||||
liveId = item.liveId,
|
||||
creatorId = item.creatorId,
|
||||
imageUrl = item.imageUrl.orEmpty(),
|
||||
title = item.title,
|
||||
creatorName = item.creatorNickname,
|
||||
liveStartTimeText = item.beginDateTime.orEmpty()
|
||||
)
|
||||
view.bind(thumbnailItem)
|
||||
view.imageView().loadUrl(item.imageUrl)
|
||||
view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,313 +0,0 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationAiCharacterUiModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerSection
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationFirstAudioContentUiModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationLiveUiModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyActiveCreatorUiModel
|
||||
import kr.co.vividnext.sodalive.v2.widget.AudioContentCardSize
|
||||
import kr.co.vividnext.sodalive.v2.widget.AudioContentCardView
|
||||
import kr.co.vividnext.sodalive.v2.widget.banner.BannerItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.banner.BannerView
|
||||
import kr.co.vividnext.sodalive.v2.widget.characterchatthumbnail.CharacterChatThumbnailItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.characterchatthumbnail.CharacterChatThumbnailView
|
||||
import kr.co.vividnext.sodalive.v2.widget.livethumbnail.LiveThumbnailItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.livethumbnail.LiveThumbnailSimpleView
|
||||
|
||||
class HomeLiveAdapter : RecyclerView.Adapter<HomeLiveAdapter.LiveViewHolder>() {
|
||||
private var items: List<HomeRecommendationLiveUiModel> = emptyList()
|
||||
private var onClick: ((HomeRecommendationLiveUiModel) -> Unit)? = null
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationLiveUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun setOnLiveClick(listener: ((HomeRecommendationLiveUiModel) -> Unit)?) {
|
||||
onClick = listener
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LiveViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.view_live_thumbnail_simple, parent, false)
|
||||
view.layoutParams = RecyclerView.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
).apply { marginEnd = parent.resources.getDimensionPixelSize(R.dimen.spacing_12) }
|
||||
return LiveViewHolder(view as LiveThumbnailSimpleView)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: LiveViewHolder, position: Int) {
|
||||
holder.bind(items[position], onClick)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class LiveViewHolder(
|
||||
private val view: LiveThumbnailSimpleView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(
|
||||
item: HomeRecommendationLiveUiModel,
|
||||
onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
|
||||
) {
|
||||
val thumbnailItem = LiveThumbnailItem(
|
||||
liveId = item.liveId,
|
||||
creatorId = item.creatorId,
|
||||
imageUrl = item.imageUrl.orEmpty(),
|
||||
title = item.title,
|
||||
creatorName = item.creatorNickname,
|
||||
liveStartTimeText = item.beginDateTime.orEmpty()
|
||||
)
|
||||
view.bind(thumbnailItem)
|
||||
view.imageView().loadUrl(item.imageUrl)
|
||||
view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HomeBannerBinder(
|
||||
private val bannerView: BannerView
|
||||
) {
|
||||
private var sourceItems: List<kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerUiModel> = emptyList()
|
||||
private var onBannerClick: ((kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerUiModel) -> Unit)? = null
|
||||
|
||||
init {
|
||||
bannerView.setOnBindBannerImage { imageView, item -> imageView.loadUrl(item.imageUrl) }
|
||||
bannerView.setOnBannerClickListener { bannerItem ->
|
||||
sourceItems.firstOrNull { it.bannerId == bannerItem.bannerId }?.let { onBannerClick?.invoke(it) }
|
||||
}
|
||||
}
|
||||
|
||||
fun setOnBannerClick(listener: ((kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerUiModel) -> Unit)?) {
|
||||
onBannerClick = listener
|
||||
}
|
||||
|
||||
fun bind(section: HomeRecommendationBannerSection) {
|
||||
sourceItems = section.items
|
||||
bannerView.setItems(
|
||||
section.items.map { item ->
|
||||
BannerItem(
|
||||
bannerId = item.bannerId,
|
||||
imageUrl = item.imageUrl.orEmpty()
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivityCreatorAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationRecentlyActiveCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationRecentlyActiveCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_activity_creator, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile)
|
||||
private val activityTypeText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_type)
|
||||
private val titleText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_title)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationRecentlyActiveCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
item.activityLabelResId?.let { labelResId ->
|
||||
activityTypeText.setText(labelResId)
|
||||
activityTypeText.visibility = View.VISIBLE
|
||||
} ?: run {
|
||||
activityTypeText.visibility = View.GONE
|
||||
}
|
||||
titleText.text = item.activityAt.orEmpty()
|
||||
titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HomeRecentDebutCreatorAdapter : RecyclerView.Adapter<HomeRecentDebutCreatorAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_debut_creator, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_debut_creator_profile)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_debut_creator_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HomeFirstAudioAdapter : RecyclerView.Adapter<HomeFirstAudioAdapter.AudioViewHolder>() {
|
||||
private var items: List<HomeRecommendationFirstAudioContentUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationFirstAudioContentUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AudioViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(
|
||||
R.layout.view_audio_content_card,
|
||||
parent,
|
||||
false
|
||||
) as AudioContentCardView
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return AudioViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: AudioViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class AudioViewHolder(
|
||||
private val view: AudioContentCardView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(item: HomeRecommendationFirstAudioContentUiModel) {
|
||||
view.setSize(AudioContentCardSize.Medium)
|
||||
view.setContent(item.title, item.creatorNickname)
|
||||
view.thumbnailView().loadUrl(item.coverImage)
|
||||
view.setTags(item.tags)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HomeAiCharacterAdapter : RecyclerView.Adapter<HomeAiCharacterAdapter.CharacterViewHolder>() {
|
||||
private var items: List<HomeRecommendationAiCharacterUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationAiCharacterUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CharacterViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(
|
||||
R.layout.view_character_chat_thumbnail,
|
||||
parent,
|
||||
false
|
||||
) as CharacterChatThumbnailView
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CharacterViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CharacterViewHolder, position: Int) {
|
||||
holder.bind(items[position].item)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CharacterViewHolder(
|
||||
private val view: CharacterChatThumbnailView
|
||||
) : RecyclerView.ViewHolder(view) {
|
||||
fun bind(item: CharacterChatThumbnailItem) {
|
||||
view.bind(item)
|
||||
view.imageView().loadUrl(item.imageUrl)
|
||||
view.setOnCharacterClick(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HomeGenreCreatorAdapter : HomeCreatorProfileAdapter()
|
||||
|
||||
class HomeCheerCreatorAdapter : HomeCreatorProfileAdapter()
|
||||
|
||||
open class HomeCreatorProfileAdapter : RecyclerView.Adapter<HomeCreatorProfileAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_creator_profile, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_creator_profile)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_creator_profile_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object HomeFollowAllButtonBinder {
|
||||
fun bind(
|
||||
view: View,
|
||||
creatorIds: List<Long>,
|
||||
isFollowCompleted: Boolean,
|
||||
onClick: (List<Long>) -> Unit
|
||||
) {
|
||||
val icon = view.findViewById<ImageView>(R.id.iv_home_follow_all_icon)
|
||||
val text = view.findViewById<TextView>(R.id.tv_home_follow_all)
|
||||
icon.setImageResource(if (isFollowCompleted) R.drawable.ic_new_following else R.drawable.ic_new_follow)
|
||||
text.setText(
|
||||
if (isFollowCompleted) {
|
||||
R.string.home_recommendation_follow_all_done
|
||||
} else {
|
||||
R.string.home_recommendation_follow_all
|
||||
}
|
||||
)
|
||||
view.isEnabled = !isFollowCompleted
|
||||
view.setOnClickListener {
|
||||
if (creatorIds.isNotEmpty()) onClick(creatorIds)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun recyclerItemLayoutParams(parent: ViewGroup): RecyclerView.LayoutParams {
|
||||
return RecyclerView.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
).apply { marginEnd = parent.resources.getDimensionPixelSize(R.dimen.spacing_12) }
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyActiveCreatorUiModel
|
||||
|
||||
class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivityCreatorAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationRecentlyActiveCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationRecentlyActiveCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_activity_creator, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile)
|
||||
private val activityTypeText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_type)
|
||||
private val titleText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_title)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationRecentlyActiveCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
item.activityLabelResId?.let { labelResId ->
|
||||
activityTypeText.setText(labelResId)
|
||||
activityTypeText.visibility = View.VISIBLE
|
||||
} ?: run {
|
||||
activityTypeText.visibility = View.GONE
|
||||
}
|
||||
titleText.text = item.activityAt.orEmpty()
|
||||
titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.extensions.loadUrl
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
|
||||
|
||||
class HomeRecentDebutCreatorAdapter : RecyclerView.Adapter<HomeRecentDebutCreatorAdapter.CreatorViewHolder>() {
|
||||
private var items: List<HomeRecommendationCreatorUiModel> = emptyList()
|
||||
|
||||
fun submitItems(items: List<HomeRecommendationCreatorUiModel>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
|
||||
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_debut_creator, parent, false)
|
||||
view.layoutParams = recyclerItemLayoutParams(parent)
|
||||
return CreatorViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.size
|
||||
|
||||
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_debut_creator_profile)
|
||||
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_debut_creator_nickname)
|
||||
|
||||
fun bind(item: HomeRecommendationCreatorUiModel) {
|
||||
profileImage.loadUrl(item.profileImage)
|
||||
nicknameText.text = item.nickname
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.ui
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
|
||||
internal fun recyclerItemLayoutParams(parent: ViewGroup): RecyclerView.LayoutParams {
|
||||
return RecyclerView.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
).apply { marginEnd = parent.resources.getDimensionPixelSize(R.dimen.spacing_12) }
|
||||
}
|
||||
Reference in New Issue
Block a user