feat(home): 추천 UI 바인딩을 갱신한다
This commit is contained in:
@@ -50,7 +50,7 @@ class HomeMainFragment : BaseFragment<FragmentV2MainHomeBinding>(
|
|||||||
private val homeRecommendationViewModel: HomeRecommendationViewModel by viewModel()
|
private val homeRecommendationViewModel: HomeRecommendationViewModel by viewModel()
|
||||||
private val loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) }
|
private val loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) }
|
||||||
private val liveAdapter = HomeLiveAdapter()
|
private val liveAdapter = HomeLiveAdapter()
|
||||||
private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter { openCreatorProfile(it.creatorId) }
|
private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter()
|
||||||
private val recentDebutCreatorAdapter = HomeRecentDebutCreatorAdapter { openCreatorProfile(it.creatorId) }
|
private val recentDebutCreatorAdapter = HomeRecentDebutCreatorAdapter { openCreatorProfile(it.creatorId) }
|
||||||
private val firstAudioAdapter = HomeFirstAudioAdapter { openAudioContentDetail(it) }
|
private val firstAudioAdapter = HomeFirstAudioAdapter { openAudioContentDetail(it) }
|
||||||
private val aiCharacterAdapter = HomeAiCharacterAdapter { openCharacterDetail(it.characterId) }
|
private val aiCharacterAdapter = HomeAiCharacterAdapter { openCharacterDetail(it.characterId) }
|
||||||
|
|||||||
@@ -9,14 +9,13 @@ import kr.co.vividnext.sodalive.v2.widget.banner.BannerView
|
|||||||
class HomeBannerBinder(
|
class HomeBannerBinder(
|
||||||
private val bannerView: BannerView
|
private val bannerView: BannerView
|
||||||
) {
|
) {
|
||||||
private var sourceItems: List<HomeRecommendationBannerUiModel> = emptyList()
|
|
||||||
private var onBannerClick: ((HomeRecommendationBannerUiModel) -> Unit)? = null
|
private var onBannerClick: ((HomeRecommendationBannerUiModel) -> Unit)? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
bannerView.setOnBindBannerImage { imageView, item -> imageView.loadUrl(item.imageUrl) }
|
bannerView.setOnBindBannerImage { imageView, item ->
|
||||||
bannerView.setOnBannerClickListener { bannerItem ->
|
if (item.imageUrl.isBlank()) imageView.setImageDrawable(null) else imageView.loadUrl(item.imageUrl)
|
||||||
sourceItems.firstOrNull { it.bannerId == bannerItem.bannerId }?.let { onBannerClick?.invoke(it) }
|
|
||||||
}
|
}
|
||||||
|
bannerView.setOnBannerClickListener { item -> onBannerClick?.invoke(item.toHomeBannerUiModel()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setOnBannerClick(listener: ((HomeRecommendationBannerUiModel) -> Unit)?) {
|
fun setOnBannerClick(listener: ((HomeRecommendationBannerUiModel) -> Unit)?) {
|
||||||
@@ -24,14 +23,22 @@ class HomeBannerBinder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bind(section: HomeRecommendationBannerSection) {
|
fun bind(section: HomeRecommendationBannerSection) {
|
||||||
sourceItems = section.items
|
bannerView.setItems(section.items.map { it.toBannerItem() })
|
||||||
bannerView.setItems(
|
|
||||||
section.items.map { item ->
|
|
||||||
BannerItem(
|
|
||||||
bannerId = item.bannerId,
|
|
||||||
imageUrl = item.imageUrl.orEmpty()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun HomeRecommendationBannerUiModel.toBannerItem(): BannerItem = BannerItem(
|
||||||
|
imageUrl = imageUrl,
|
||||||
|
eventItem = eventItem,
|
||||||
|
creatorId = creatorId,
|
||||||
|
seriesId = seriesId,
|
||||||
|
link = link
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun BannerItem.toHomeBannerUiModel(): HomeRecommendationBannerUiModel = HomeRecommendationBannerUiModel(
|
||||||
|
imageUrl = imageUrl,
|
||||||
|
eventItem = eventItem,
|
||||||
|
creatorId = creatorId,
|
||||||
|
seriesId = seriesId,
|
||||||
|
link = link
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class HomeCheerCreatorAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
|
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
|
||||||
if (creator.profileImage == null) {
|
if (creator.profileImage.isBlank()) {
|
||||||
setImageDrawable(null)
|
setImageDrawable(null)
|
||||||
} else {
|
} else {
|
||||||
loadUrl(creator.profileImage)
|
loadUrl(creator.profileImage)
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class HomeFirstAudioAdapter(
|
|||||||
imageView: ImageView,
|
imageView: ImageView,
|
||||||
imageUrl: String?
|
imageUrl: String?
|
||||||
) {
|
) {
|
||||||
if (imageUrl == null) {
|
if (imageUrl.isNullOrBlank()) {
|
||||||
imageView.setImageDrawable(null)
|
imageView.setImageDrawable(null)
|
||||||
} else {
|
} else {
|
||||||
imageView.loadUrl(imageUrl)
|
imageView.loadUrl(imageUrl)
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class HomeGenreCreatorAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
|
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
|
||||||
if (creator.profileImage == null) {
|
if (creator.profileImage.isBlank()) {
|
||||||
setImageDrawable(null)
|
setImageDrawable(null)
|
||||||
} else {
|
} else {
|
||||||
loadUrl(creator.profileImage)
|
loadUrl(creator.profileImage)
|
||||||
|
|||||||
@@ -81,15 +81,15 @@ class HomeLiveAdapter : RecyclerView.Adapter<HomeLiveAdapter.LiveViewHolder>() {
|
|||||||
onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
|
onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
|
||||||
) {
|
) {
|
||||||
val thumbnailItem = LiveThumbnailItem(
|
val thumbnailItem = LiveThumbnailItem(
|
||||||
liveId = item.liveId,
|
liveId = item.roomId,
|
||||||
creatorId = item.creatorId,
|
creatorId = item.roomId,
|
||||||
imageUrl = item.imageUrl.orEmpty(),
|
imageUrl = item.creatorProfileImage,
|
||||||
title = item.title,
|
title = "",
|
||||||
creatorName = item.creatorNickname,
|
creatorName = item.creatorNickname,
|
||||||
liveStartTimeText = item.beginDateTime.orEmpty()
|
liveStartTimeText = ""
|
||||||
)
|
)
|
||||||
view.bind(thumbnailItem)
|
view.bind(thumbnailItem)
|
||||||
view.imageView().loadUrl(item.imageUrl)
|
view.imageView().loadUrl(item.creatorProfileImage)
|
||||||
view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) })
|
view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ class HomeRecentActivityCreatorAdapter(
|
|||||||
} ?: run {
|
} ?: run {
|
||||||
activityTypeText.visibility = View.GONE
|
activityTypeText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
titleText.text = item.activityAt.orEmpty()
|
titleText.text = item.activityAt
|
||||||
titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE
|
titleText.visibility = if (item.activityAt.isBlank()) View.GONE else View.VISIBLE
|
||||||
nicknameText.text = item.nickname
|
nicknameText.text = item.nickname
|
||||||
itemView.setOnClickListener { onClickItem(item) }
|
itemView.setOnClickListener { onClickItem(item) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user