fix(home): 홈에 포인트 대여 콘텐츠 섹션 추가 및 데이터 연동
- 무료 콘텐츠 아래 동일 UI로 섹션 추가 - 제목 ‘포인트’ 컬러 강조(무료 섹션과 동일) - GetHomeResponse.pointAvailableContentList 사용해 데이터 바인딩 - 섹션 우측 ‘전체보기’ 텍스트 추가(클릭 액션 TODO)
This commit is contained in:
@@ -25,5 +25,6 @@ data class GetHomeResponse(
|
||||
@SerializedName("contentRanking") val contentRanking: List<GetAudioContentRankingItem>,
|
||||
@SerializedName("recommendChannelList") val recommendChannelList: List<RecommendChannelResponse>,
|
||||
@SerializedName("freeContentList") val freeContentList: List<AudioContentMainItem>,
|
||||
@SerializedName("pointAvailableContentList") val pointAvailableContentList: List<AudioContentMainItem>,
|
||||
@SerializedName("curationList") val curationList: List<GetContentCurationResponse>
|
||||
)
|
||||
|
||||
@@ -86,6 +86,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
|
||||
private lateinit var weelyChartAdapter: HomeWeeklyChartAdapter
|
||||
private lateinit var recommendChannelAdapter: HomeRecommendChannelAdapter
|
||||
private lateinit var homeFreeContentAdapter: HomeContentAdapter
|
||||
private lateinit var homePointContentAdapter: HomeContentAdapter
|
||||
private lateinit var curationAdapter: HomeCurationAdapter
|
||||
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
@@ -190,6 +191,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
|
||||
setupWeelyChart()
|
||||
setupRecommendChannel()
|
||||
setupFreeContent()
|
||||
setupPointContent()
|
||||
setupCuration()
|
||||
}
|
||||
|
||||
@@ -1089,6 +1091,73 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupPointContent() {
|
||||
val spSectionTitle = SpannableString(binding.tvPointContent.text)
|
||||
spSectionTitle.setSpan(
|
||||
ForegroundColorSpan(
|
||||
ContextCompat.getColor(
|
||||
requireContext(),
|
||||
R.color.color_3bb9f1
|
||||
)
|
||||
),
|
||||
0,
|
||||
3,
|
||||
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
|
||||
)
|
||||
binding.tvPointContent.text = spSectionTitle
|
||||
|
||||
homePointContentAdapter = HomeContentAdapter {
|
||||
if (SharedPreferenceManager.token.isNotBlank()) {
|
||||
startActivity(
|
||||
Intent(requireContext(), AudioContentDetailActivity::class.java).apply {
|
||||
putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, it)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
(requireActivity() as MainActivity).showLoginActivity()
|
||||
}
|
||||
}
|
||||
|
||||
val rvContent = binding.rvPointContent
|
||||
rvContent.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
|
||||
rvContent.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
||||
override fun getItemOffsets(
|
||||
outRect: Rect,
|
||||
view: View,
|
||||
parent: RecyclerView,
|
||||
state: RecyclerView.State
|
||||
) {
|
||||
super.getItemOffsets(outRect, view, parent, state)
|
||||
outRect.top = 8f.dpToPx().toInt()
|
||||
outRect.bottom = 8f.dpToPx().toInt()
|
||||
|
||||
val position = parent.getChildAdapterPosition(view)
|
||||
|
||||
if (position == 0) {
|
||||
outRect.left = 0f.dpToPx().toInt()
|
||||
} else {
|
||||
outRect.left = 8f.dpToPx().toInt()
|
||||
}
|
||||
|
||||
outRect.right = 8f.dpToPx().toInt()
|
||||
}
|
||||
})
|
||||
rvContent.adapter = homePointContentAdapter
|
||||
|
||||
viewModel.pointAvailableContentListLiveData.observe(viewLifecycleOwner) {
|
||||
if (it.isNotEmpty()) {
|
||||
binding.llPointContent.visibility = View.VISIBLE
|
||||
homePointContentAdapter.addItems(it)
|
||||
} else {
|
||||
binding.llPointContent.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
binding.tvPointContentAll.setOnClickListener {
|
||||
// TODO: 전체보기 클릭 액션은 추후에 추가 예정
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCuration() {
|
||||
curationAdapter = HomeCurationAdapter(
|
||||
onClickItem = {
|
||||
|
||||
@@ -80,6 +80,10 @@ class HomeViewModel(
|
||||
val curationListLiveData: LiveData<List<GetContentCurationResponse>>
|
||||
get() = _curationListLiveData
|
||||
|
||||
private var _pointAvailableContentListLiveData = MutableLiveData<List<AudioContentMainItem>>()
|
||||
val pointAvailableContentListLiveData: LiveData<List<AudioContentMainItem>>
|
||||
get() = _pointAvailableContentListLiveData
|
||||
|
||||
fun fetchData() {
|
||||
_isLoading.value = true
|
||||
|
||||
@@ -106,6 +110,7 @@ class HomeViewModel(
|
||||
_popularCharacters.value = data.popularCharacters
|
||||
_contentRankingLiveData.value = data.contentRanking
|
||||
_freeContentListLiveData.value = data.freeContentList
|
||||
_pointAvailableContentListLiveData.value = data.pointAvailableContentList
|
||||
_curationListLiveData.value = data.curationList
|
||||
_recommendChannelListLiveData.value = data.recommendChannelList
|
||||
} else {
|
||||
|
||||
@@ -389,6 +389,51 @@
|
||||
android:paddingHorizontal="24dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 포인트 대여 콘텐츠 섹션 -->
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_point_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="48dp"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingHorizontal="24dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_point_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="@font/pretendard_bold"
|
||||
android:text="포인트 대여 콘텐츠"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="24sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_point_content_all"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/pretendard_regular"
|
||||
android:text="전체보기"
|
||||
android:textColor="#90A4AE"
|
||||
android:textSize="14sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rv_point_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:clipToPadding="false"
|
||||
android:paddingHorizontal="24dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rv_curation"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
Reference in New Issue
Block a user