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) + } + } + } +}