From 1cbf989577055deea77b26db6deae4973214a910 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 5 Jun 2026 13:16:53 +0900 Subject: [PATCH] =?UTF-8?q?feat(home):=20=EC=9D=B8=EA=B8=B0=20=EC=BB=A4?= =?UTF-8?q?=EB=AE=A4=EB=8B=88=ED=8B=B0=20adapter=EB=A5=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/model/HomeRecommendationMappers.kt | 7 +- .../home/model/HomeRecommendationUiModels.kt | 6 ++ .../home/ui/HomePopularCommunityAdapter.kt | 64 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomePopularCommunityAdapter.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt index 9e902cce..75cc0e9b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt @@ -112,7 +112,12 @@ fun HomePopularCommunityPostItem.toUiModel(): HomeRecommendationPopularCommunity keywordText = "", createdAtText = createdAt, commentCount = commentCount.toInt(), - likeCount = likeCount.toInt() + likeCount = likeCount.toInt(), + imageUrl = imageUrl, + audioUrl = audioUrl, + price = price, + existOrdered = existOrdered, + showKeyword = false ), paidStatus = toPaidStatus() ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationUiModels.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationUiModels.kt index 82a81e9d..ed1625b5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationUiModels.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationUiModels.kt @@ -45,6 +45,11 @@ data class HomeRecommendationPopularCommunityPostSection( val items: List ) +fun HomeRecommendationPopularCommunityPostSection.visibleHomePopularCommunityPosts(): + List { + return items.take(HOME_POPULAR_COMMUNITY_MAX_POST_COUNT) +} + data class HomeRecommendationLiveUiModel( val liveId: Long, val creatorId: Long, @@ -116,3 +121,4 @@ sealed interface HomeRecommendationPaidStatus { } private const val HOME_GENRE_CREATOR_MAX_GROUP_COUNT = 5 +private const val HOME_POPULAR_COMMUNITY_MAX_POST_COUNT = 10 diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomePopularCommunityAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomePopularCommunityAdapter.kt new file mode 100644 index 00000000..a0890fb4 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomePopularCommunityAdapter.kt @@ -0,0 +1,64 @@ +package kr.co.vividnext.sodalive.v2.main.home.ui + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import coil.dispose +import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.extensions.loadUrl +import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationPopularCommunityPostSection +import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationPopularCommunityPostUiModel +import kr.co.vividnext.sodalive.v2.main.home.model.visibleHomePopularCommunityPosts +import kr.co.vividnext.sodalive.v2.widget.feed.FeedCommunityView +import kr.co.vividnext.sodalive.v2.widget.feed.FeedItem + +class HomePopularCommunityAdapter( + private val onClickItem: (FeedItem.Community) -> Unit +) : RecyclerView.Adapter() { + private var items: List = emptyList() + + fun submitSection(section: HomeRecommendationPopularCommunityPostSection) { + items = section.visibleHomePopularCommunityPosts() + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CommunityViewHolder { + val view = LayoutInflater.from(parent.context).inflate( + R.layout.view_feed_community, + parent, + false + ) as FeedCommunityView + view.layoutParams = RecyclerView.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ).apply { bottomMargin = parent.resources.getDimensionPixelSize(R.dimen.spacing_8) } + return CommunityViewHolder(view, onClickItem) + } + + override fun onBindViewHolder(holder: CommunityViewHolder, position: Int) { + holder.bind(items[position]) + } + + override fun getItemCount(): Int = items.size + + class CommunityViewHolder( + private val view: FeedCommunityView, + private val onClickItem: (FeedItem.Community) -> Unit + ) : RecyclerView.ViewHolder(view) { + fun bind(item: HomeRecommendationPopularCommunityPostUiModel) { + view.bind(item.item) + view.setOnFeedClick { feedItem -> onClickItem(feedItem as FeedItem.Community) } + bindImage(item.item.creatorImageUrl, view.profileImageView()) + bindImage(item.item.imageUrl.takeIf { item.item.price <= 0 || item.item.existOrdered }, view.communityImageView()) + } + + private fun bindImage(imageUrl: String?, imageView: android.widget.ImageView) { + if (imageUrl.isNullOrBlank()) { + imageView.dispose() + imageView.setImageDrawable(null) + } else { + imageView.loadUrl(imageUrl) + } + } + } +}