From 73dc939cd389340f261db9fc2ea4316dfcace2f9 Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 27 Jun 2026 06:02:38 +0900 Subject: [PATCH] =?UTF-8?q?feat(content):=20=EC=B6=94=EC=B2=9C=20=EC=84=B9?= =?UTF-8?q?=EC=85=98=20chevron=20=ED=91=9C=EC=8B=9C=EB=A5=BC=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/main/content/ContentMainFragment.kt | 32 +++++++++--- .../content/ContentMainFragmentSourceTest.kt | 52 +++++++++++++++++++ 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt index 562aa6ca..ce1b5214 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt @@ -507,18 +507,36 @@ class ContentMainFragment : BaseFragment( } private fun setUpSectionTitles() { - binding.viewContentOriginalSeriesTitle.setTitle(R.string.content_recommendation_section_original_series) - binding.viewContentLatestAudioTitle.setTitle(R.string.content_recommendation_section_latest_audio) - binding.viewContentNewAndHotTitle.setTitle(R.string.content_recommendation_section_new_and_hot) - binding.viewContentFreeAudioTitle.setTitle(R.string.content_recommendation_section_free_audio) - binding.viewContentPointAudioTitle.setTitle(R.string.content_recommendation_section_point_audio) + binding.viewContentOriginalSeriesTitle.setTitle( + R.string.content_recommendation_section_original_series, + showMore = true + ) + binding.viewContentLatestAudioTitle.setTitle( + R.string.content_recommendation_section_latest_audio, + showMore = true + ) + binding.viewContentNewAndHotTitle.setTitle( + R.string.content_recommendation_section_new_and_hot, + showMore = true + ) + binding.viewContentFreeAudioTitle.setTitle( + R.string.content_recommendation_section_free_audio, + showMore = true + ) + binding.viewContentPointAudioTitle.setTitle( + R.string.content_recommendation_section_point_audio, + showMore = true + ) binding.viewContentMostCommentedAudioTitle.setTitle(R.string.content_recommendation_section_most_commented_audio) binding.viewContentRecommendedAudioTitle.setTitle(R.string.content_recommendation_section_recommended_audio) } - private fun ViewSectionTitleBinding.setTitle(titleResId: Int) { + private fun ViewSectionTitleBinding.setTitle( + titleResId: Int, + showMore: Boolean = false + ) { tvSectionTitle.setText(titleResId) - ivSectionTitleChevron.visibility = View.GONE + ivSectionTitleChevron.visibility = if (showMore) View.VISIBLE else View.GONE } private fun onBannerClick(item: ContentBannerUiModel) { diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt index f9606f53..3503097e 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt @@ -283,6 +283,58 @@ class ContentMainFragmentSourceTest { assertTrue(audioCardLayout.contains("android:visibility=\"gone\"")) } + @Test + fun `콘텐츠 추천 섹션 타이틀은 Phase 2 대상에만 chevron을 표시한다`() { + val source = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt" + ).readText() + + assertSourceContains(source, "private fun ViewSectionTitleBinding.setTitle(") + assertSourceContains(source, "showMore: Boolean = false") + assertSourceContains(source, "ivSectionTitleChevron.visibility = if (showMore) View.VISIBLE else View.GONE") + assertSourceContains( + source, + "binding.viewContentOriginalSeriesTitle.setTitle(\n" + + " R.string.content_recommendation_section_original_series,\n" + + " showMore = true" + ) + assertSourceContains( + source, + "binding.viewContentLatestAudioTitle.setTitle(\n" + + " R.string.content_recommendation_section_latest_audio,\n" + + " showMore = true" + ) + assertSourceContains( + source, + "binding.viewContentNewAndHotTitle.setTitle(\n" + + " R.string.content_recommendation_section_new_and_hot,\n" + + " showMore = true" + ) + assertSourceContains( + source, + "binding.viewContentFreeAudioTitle.setTitle(\n" + + " R.string.content_recommendation_section_free_audio,\n" + + " showMore = true" + ) + assertSourceContains( + source, + "binding.viewContentPointAudioTitle.setTitle(\n" + + " R.string.content_recommendation_section_point_audio,\n" + + " showMore = true" + ) + assertSourceContains( + source, + "binding.viewContentMostCommentedAudioTitle.setTitle(" + + "R.string.content_recommendation_section_most_commented_audio)" + ) + assertSourceContains( + source, + "binding.viewContentRecommendedAudioTitle.setTitle(" + + "R.string.content_recommendation_section_recommended_audio)" + ) + assertFalse(source.contains("viewContentNewAndHotTitle.ivSectionTitleChevron.setOnClickListener")) + } + @Test fun `Phase 4~5 adapter source는 grouping과 badge comment 정책을 포함한다`() { val cardView = projectFile(