feat(creator): FanTalk 탭 화면 연결을 추가한다

This commit is contained in:
2026-06-22 17:46:25 +09:00
parent 790e08f1b5
commit 40ef5710fb
5 changed files with 285 additions and 5 deletions

View File

@@ -63,6 +63,7 @@ import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelAudioConte
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelLiveResponse
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelScheduleResponse
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelSeriesResponse
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.CreatorChannelFanTalkFragment
import kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragment
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelHeaderUiModel
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelScrollState
@@ -83,7 +84,8 @@ class CreatorChannelActivity :
CreatorChannelLiveFragment.Host,
CreatorChannelAudioFragment.Host,
CreatorChannelSeriesFragment.Host,
CreatorChannelCommunityFragment.Host {
CreatorChannelCommunityFragment.Host,
CreatorChannelFanTalkFragment.Host {
private val liveViewModel: LiveViewModel by inject()
private val myPageViewModel: MyPageViewModel by inject()
@@ -430,6 +432,9 @@ class CreatorChannelActivity :
CreatorChannelTab.Community.ordinal -> binding.viewPager.post {
findCommunityFragment()?.onCreatorChannelCommunityTabSelected()
}
CreatorChannelTab.FanTalk.ordinal -> binding.viewPager.post {
findFanTalkFragment()?.onCreatorChannelFanTalkTabSelected()
}
}
}
}
@@ -458,6 +463,11 @@ class CreatorChannelActivity :
findCommunityFragment()?.onCreatorChannelCommunityTabSelected()
}
}
if (binding.viewPager.currentItem == CreatorChannelTab.FanTalk.ordinal) {
binding.viewPager.post {
findFanTalkFragment()?.onCreatorChannelFanTalkTabSelected()
}
}
}
override fun onCreatorChannelFollowProgressChanged(inProgress: Boolean) {
@@ -532,6 +542,27 @@ class CreatorChannelActivity :
}
}
override fun onCreatorChannelFanTalkContentChanged() {
updateViewPagerHeight {
postCheckCreatorChannelCurrentTabNeedsMore()
}
}
override fun onCreatorChannelFanTalkDeleteClicked(fanTalkId: Long) {
SodaDialog(
activity = this,
layoutInflater = layoutInflater,
title = getString(R.string.screen_user_profile_cheer_delete_title),
desc = getString(R.string.screen_user_profile_cheer_delete_desc),
confirmButtonTitle = getString(R.string.confirm_delete_title),
confirmButtonClick = {
findFanTalkFragment()?.onCreatorChannelFanTalkDeleteConfirmed(fanTalkId)
},
cancelButtonTitle = getString(R.string.cancel),
cancelButtonClick = {}
).show(screenWidth)
}
override fun onCreatorChannelCommunityOwnerMoreClicked(item: CreatorChannelCommunityPostUiModel) {
CreatorCommunityPostMenuBottomSheetDialog(
isFixed = item.isPinned,
@@ -623,6 +654,10 @@ class CreatorChannelActivity :
findCommunityFragment()?.onCreatorChannelCommunityRefreshRequested()
}
private fun refreshCreatorChannelFanTalk() {
findFanTalkFragment()?.onCreatorChannelFanTalkRefreshRequested()
}
private fun setupOwnerFabInsets() {
binding.viewPager.updatePadding(bottom = OWNER_FAB_CONTENT_BOTTOM_PADDING_DP.dpToPx().toInt())
}
@@ -817,12 +852,18 @@ class CreatorChannelActivity :
return supportFragmentManager.findFragmentByTag(fragmentTag) as? CreatorChannelCommunityFragment
}
private fun findFanTalkFragment(): CreatorChannelFanTalkFragment? {
val fragmentTag = "f${CreatorChannelTab.FanTalk.ordinal}"
return supportFragmentManager.findFragmentByTag(fragmentTag) as? CreatorChannelFanTalkFragment
}
private fun notifyCurrentCreatorChannelTabScrolledToBottom() {
when (binding.viewPager.currentItem) {
CreatorChannelTab.Live.ordinal -> findLiveFragment()?.onCreatorChannelLiveScrolledToBottom()
CreatorChannelTab.Audio.ordinal -> findAudioFragment()?.onCreatorChannelAudioScrolledToBottom()
CreatorChannelTab.Series.ordinal -> findSeriesFragment()?.onCreatorChannelSeriesScrolledToBottom()
CreatorChannelTab.Community.ordinal -> findCommunityFragment()?.onCreatorChannelCommunityScrolledToBottom()
CreatorChannelTab.FanTalk.ordinal -> findFanTalkFragment()?.onCreatorChannelFanTalkScrolledToBottom()
}
}
@@ -830,7 +871,8 @@ class CreatorChannelActivity :
return position == CreatorChannelTab.Live.ordinal ||
position == CreatorChannelTab.Audio.ordinal ||
position == CreatorChannelTab.Series.ordinal ||
position == CreatorChannelTab.Community.ordinal
position == CreatorChannelTab.Community.ordinal ||
position == CreatorChannelTab.FanTalk.ordinal
}
private fun ensureLoginAndAdultAuth(isAdult: Boolean, onAuthed: () -> Unit) {
@@ -928,6 +970,7 @@ class CreatorChannelActivity :
CreatorChannelTab.Live.ordinal -> findLiveFragment()?.onCreatorChannelLiveViewportHeightChanged(minHeight)
CreatorChannelTab.Audio.ordinal -> findAudioFragment()?.onCreatorChannelAudioViewportHeightChanged(minHeight)
CreatorChannelTab.Series.ordinal -> findSeriesFragment()?.onCreatorChannelSeriesViewportHeightChanged(minHeight)
CreatorChannelTab.FanTalk.ordinal -> findFanTalkFragment()?.onCreatorChannelFanTalkViewportHeightChanged(minHeight)
}
}

View File

@@ -5,6 +5,7 @@ import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioFragment
import kr.co.vividnext.sodalive.v2.creator.channel.community.CreatorChannelCommunityFragment
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.CreatorChannelFanTalkFragment
import kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragment
import kr.co.vividnext.sodalive.v2.creator.channel.model.CreatorChannelTab
import kr.co.vividnext.sodalive.v2.creator.channel.series.CreatorChannelSeriesFragment
@@ -25,6 +26,7 @@ class CreatorChannelPagerAdapter(
CreatorChannelTab.Audio -> CreatorChannelAudioFragment.newInstance(creatorId)
CreatorChannelTab.Series -> CreatorChannelSeriesFragment.newInstance(creatorId)
CreatorChannelTab.Community -> CreatorChannelCommunityFragment.newInstance(creatorId)
CreatorChannelTab.FanTalk -> CreatorChannelFanTalkFragment.newInstance(creatorId)
else -> CreatorChannelPlaceholderFragment.newInstance(tab)
}
}