feat(creator): 시리즈 탭 activity 연동을 추가한다

This commit is contained in:
2026-06-20 04:50:43 +09:00
parent fcf35e2513
commit 015a6ac865
2 changed files with 55 additions and 3 deletions

View File

@@ -60,6 +60,7 @@ import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelHeaderUiM
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelScrollState
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelTab
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelTitleBarState
import kr.co.vividnext.sodalive.v2.creator.channel.series.CreatorChannelSeriesFragment
import kr.co.vividnext.sodalive.v2.main.MainV2Activity
import kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomActivity
import kr.co.vividnext.sodalive.splash.SplashActivity
@@ -70,7 +71,8 @@ class CreatorChannelActivity :
BaseActivity<ActivityCreatorChannelBinding>(ActivityCreatorChannelBinding::inflate),
CreatorChannelHomeFragment.Host,
CreatorChannelLiveFragment.Host,
CreatorChannelAudioFragment.Host {
CreatorChannelAudioFragment.Host,
CreatorChannelSeriesFragment.Host {
private val liveViewModel: LiveViewModel by inject()
private val myPageViewModel: MyPageViewModel by inject()
@@ -402,6 +404,9 @@ class CreatorChannelActivity :
CreatorChannelTab.Audio.ordinal -> binding.viewPager.post {
findAudioFragment()?.onCreatorChannelAudioTabSelected()
}
CreatorChannelTab.Series.ordinal -> binding.viewPager.post {
findSeriesFragment()?.onCreatorChannelSeriesTabSelected()
}
}
}
}
@@ -420,6 +425,11 @@ class CreatorChannelActivity :
findAudioFragment()?.onCreatorChannelAudioTabSelected()
}
}
if (binding.viewPager.currentItem == CreatorChannelTab.Series.ordinal) {
binding.viewPager.post {
findSeriesFragment()?.onCreatorChannelSeriesTabSelected()
}
}
}
override fun onCreatorChannelFollowProgressChanged(inProgress: Boolean) {
@@ -471,6 +481,20 @@ class CreatorChannelActivity :
postCheckCreatorChannelCurrentTabNeedsMore()
}
override fun onCreatorChannelSeriesClicked(seriesId: Long) {
startActivity(
Intent(this, SeriesDetailActivity::class.java).apply {
putExtra(Constants.EXTRA_SERIES_ID, seriesId)
}
)
}
override fun onCreatorChannelSeriesContentChanged() {
updateCreatorChannelTabViewportHeight()
updateViewPagerHeight()
postCheckCreatorChannelCurrentTabNeedsMore()
}
private fun setupOwnerFabInsets() {
binding.viewPager.updatePadding(bottom = OWNER_FAB_CONTENT_BOTTOM_PADDING_DP.dpToPx().toInt())
}
@@ -646,15 +670,23 @@ class CreatorChannelActivity :
return supportFragmentManager.findFragmentByTag(fragmentTag) as? CreatorChannelAudioFragment
}
private fun findSeriesFragment(): CreatorChannelSeriesFragment? {
val fragmentTag = "f${CreatorChannelTab.Series.ordinal}"
return supportFragmentManager.findFragmentByTag(fragmentTag) as? CreatorChannelSeriesFragment
}
private fun notifyCurrentCreatorChannelTabScrolledToBottom() {
when (binding.viewPager.currentItem) {
CreatorChannelTab.Live.ordinal -> findLiveFragment()?.onCreatorChannelLiveScrolledToBottom()
CreatorChannelTab.Audio.ordinal -> findAudioFragment()?.onCreatorChannelAudioScrolledToBottom()
CreatorChannelTab.Series.ordinal -> findSeriesFragment()?.onCreatorChannelSeriesScrolledToBottom()
}
}
private fun isCreatorChannelLoadMoreTab(position: Int): Boolean {
return position == CreatorChannelTab.Live.ordinal || position == CreatorChannelTab.Audio.ordinal
return position == CreatorChannelTab.Live.ordinal ||
position == CreatorChannelTab.Audio.ordinal ||
position == CreatorChannelTab.Series.ordinal
}
private fun ensureLoginAndAdultAuth(isAdult: Boolean, onAuthed: () -> Unit) {
@@ -746,6 +778,7 @@ class CreatorChannelActivity :
when (binding.viewPager.currentItem) {
CreatorChannelTab.Live.ordinal -> findLiveFragment()?.onCreatorChannelLiveViewportHeightChanged(minHeight)
CreatorChannelTab.Audio.ordinal -> findAudioFragment()?.onCreatorChannelAudioViewportHeightChanged(minHeight)
CreatorChannelTab.Series.ordinal -> findSeriesFragment()?.onCreatorChannelSeriesViewportHeightChanged(minHeight)
}
}

View File

@@ -415,12 +415,31 @@ class CreatorChannelActivitySourceTest {
assertFalse(source.contains("if (tab != CreatorChannelTab.Home) return"))
assertTrue(pagerAdapter.contains("CreatorChannelTab.Audio -> CreatorChannelAudioFragment.newInstance(creatorId)"))
assertFalse(source.contains("CreatorChannelTab.Series ->"))
assertTrue(pagerAdapter.contains("CreatorChannelTab.Series -> CreatorChannelSeriesFragment.newInstance(creatorId)"))
assertFalse(source.contains("CreatorChannelTab.Community ->"))
assertFalse(source.contains("CreatorChannelTab.FanTalk ->"))
assertFalse(source.contains("CreatorChannelTab.Donation ->"))
}
@Test
fun `Series tab source는 Fragment Host pagination height navigation을 Activity에 연결한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText()
assertTrue(source.contains("CreatorChannelSeriesFragment.Host"))
assertTrue(source.contains("import kr.co.vividnext.sodalive.v2.creator.channel.series.CreatorChannelSeriesFragment"))
assertTrue(source.contains("findSeriesFragment()?.onCreatorChannelSeriesTabSelected()"))
assertTrue(source.contains("if (binding.viewPager.currentItem == CreatorChannelTab.Series.ordinal)"))
assertTrue(source.contains("private fun findSeriesFragment(): CreatorChannelSeriesFragment?"))
assertTrue(source.contains("findSeriesFragment()?.onCreatorChannelSeriesScrolledToBottom()"))
assertTrue(source.contains("position == CreatorChannelTab.Series.ordinal"))
assertTrue(source.contains("findSeriesFragment()?.onCreatorChannelSeriesViewportHeightChanged(minHeight)"))
assertTrue(source.contains("override fun onCreatorChannelSeriesContentChanged()"))
assertTrue(source.contains("override fun onCreatorChannelSeriesClicked(seriesId: Long)"))
assertTrue(source.contains("putExtra(Constants.EXTRA_SERIES_ID, seriesId)"))
}
@Test
fun `section adapter source는 활동 지표를 행 단위 resource label로 표시한다`() {
val adapter = projectFile(