diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragment.kt index 4d9a7cbc..8d5332b4 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragment.kt @@ -32,7 +32,6 @@ class CreatorChannelAudioFragment : BaseFragment= length) return spannable + + spannable.setSpan( + ForegroundColorSpan(ContextCompat.getColor(requireContext(), R.color.gray_500)), + start, + length, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + return spannable + } + interface Host { fun isCreatorChannelOwner(): Boolean fun onCreatorChannelAudioContentClicked(audioContentId: Long) diff --git a/app/src/main/res/layout/fragment_creator_channel_audio.xml b/app/src/main/res/layout/fragment_creator_channel_audio.xml index 71d01c53..55cb2757 100644 --- a/app/src/main/res/layout/fragment_creator_channel_audio.xml +++ b/app/src/main/res/layout/fragment_creator_channel_audio.xml @@ -149,9 +149,9 @@ android:id="@+id/layout_creator_channel_audio_empty" android:layout_width="0dp" android:layout_height="wrap_content" - android:gravity="center" + android:paddingTop="@dimen/spacing_48" + android:paddingBottom="@dimen/spacing_32" android:visibility="gone" - app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -162,7 +162,7 @@ style="@style/Typography.Body3" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_gravity="top|center_horizontal" android:gravity="center" android:text="@string/creator_channel_audio_empty_message" android:textColor="@color/gray_500" /> diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragmentLayoutTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragmentLayoutTest.kt index abbb65ce..f79b95ca 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragmentLayoutTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioFragmentLayoutTest.kt @@ -68,6 +68,25 @@ class CreatorChannelAudioFragmentLayoutTest { assertNotNull(sortBar.findViewById(R.id.iv_creator_channel_audio_sort)) } + @Test + fun `오디오 empty 문구는 스크롤 없이 보이도록 상단 가시 영역에 배치한다`() { + val layout = projectFile("app/src/main/res/layout/fragment_creator_channel_audio.xml").readText() + + assertTrue(layout.contains("android:id=\"@+id/layout_creator_channel_audio_empty\"")) + assertTrue(layout.contains("android:paddingTop=\"@dimen/spacing_48\"")) + assertTrue(layout.contains("android:layout_gravity=\"top|center_horizontal\"")) + assertTrue(layout.contains("app:layout_constraintTop_toTopOf=\"parent\"")) + assertTrue(!layout.contains("app:layout_constraintBottom_toBottomOf=\"parent\"")) + assertTrue( + !layout.contains( + "android:id=\"@+id/layout_creator_channel_audio_empty\"" + + "\n android:layout_width=\"0dp\"" + + "\n android:layout_height=\"wrap_content\"" + + "\n android:gravity=\"center\"" + ) + ) + } + @Test fun `오디오 소장률 카드는 percent count track fill 영역을 제공한다`() { val root = inflateView(R.layout.fragment_creator_channel_audio) @@ -123,7 +142,10 @@ class CreatorChannelAudioFragmentLayoutTest { assertTrue(fragment.contains("fun onCreatorChannelAudioTabSelected()")) assertTrue(fragment.contains("viewModel.loadAudio(creatorId, isOwner = host.isCreatorChannelOwner())")) assertTrue(fragment.contains("fun onCreatorChannelAudioViewportHeightChanged(minHeight: Int)")) - assertTrue(fragment.contains("layoutCreatorChannelAudioEmpty.minimumHeight = emptyMinHeight")) + assertTrue(fragment.contains("@Suppress(\"UNUSED_PARAMETER\")")) + assertTrue(!fragment.contains("private var emptyMinHeight: Int = 0")) + assertTrue(!fragment.contains("layoutCreatorChannelAudioEmpty.minimumHeight")) + assertTrue(!fragment.contains("applyEmptyMinHeight()")) assertTrue(fragment.contains("notifyContentChangedIfLayoutChanged(state)")) assertTrue(fragment.contains("if (contentLayoutKey == lastContentLayoutKey) return")) assertTrue(fragment.contains("viewModel.audioStateLiveData.observe(viewLifecycleOwner)")) @@ -147,6 +169,10 @@ class CreatorChannelAudioFragmentLayoutTest { assertTrue(fragment.contains("tvCreatorChannelAudioRateMessage.text")) assertTrue(fragment.contains("ForegroundColorSpan")) assertTrue(fragment.contains("R.string.creator_channel_audio_owned_rate_count")) + assertTrue(fragment.contains("tvCreatorChannelAudioRateCount.text = rateCount.highlightPaidCount(purchasedCountText)")) + assertTrue(fragment.contains("private fun String.highlightPaidCount(purchasedCountText: String): SpannableString")) + assertTrue(fragment.contains("val start = purchasedCountText.length")) + assertTrue(fragment.contains("R.color.gray_500")) assertTrue(fragment.contains("viewCreatorChannelAudioRateFill.pivotX = 0f")) }