diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt index ae7e4bb2..ca377e60 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt @@ -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::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) } } diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt index 362cc6b9..2c9c9ddf 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt @@ -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(