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