feat(creator-channel): FanTalk 상세 진입점을 연결한다

This commit is contained in:
2026-07-09 07:44:21 +09:00
parent 1ba7846f4c
commit f993d343a9
2 changed files with 56 additions and 0 deletions

View File

@@ -65,6 +65,9 @@ import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelLiveRespon
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelScheduleResponse 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.data.CreatorChannelSeriesResponse
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.CreatorChannelFanTalkFragment import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.CreatorChannelFanTalkFragment
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.detail.CreatorChannelFanTalkDetailActivity
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.detail.toFanTalkDetailPayload
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.model.CreatorChannelFanTalkUiModel
import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.write.CreatorChannelFanTalkWriteActivity import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.write.CreatorChannelFanTalkWriteActivity
import kr.co.vividnext.sodalive.v2.creator.channel.donation.CreatorChannelDonationFragment import kr.co.vividnext.sodalive.v2.creator.channel.donation.CreatorChannelDonationFragment
import kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragment import kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragment
@@ -145,6 +148,14 @@ class CreatorChannelActivity :
homeActionDelegate?.refreshHome() homeActionDelegate?.refreshHome()
} }
} }
private val fanTalkDetailLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == RESULT_OK) {
refreshCreatorChannelFanTalk()
homeActionDelegate?.refreshHome()
}
}
private val liveRoomCreateLauncher = registerForActivityResult( private val liveRoomCreateLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult() ActivityResultContracts.StartActivityForResult()
) { result -> ) { result ->
@@ -596,6 +607,19 @@ class CreatorChannelActivity :
openFanTalkWrite() openFanTalkWrite()
} }
override fun onCreatorChannelFanTalkItemClicked(item: CreatorChannelFanTalkUiModel) {
if (currentHeader?.isOwner != true) return
if (creatorId <= 0L || item.fanTalkId <= 0L) return
if (SharedPreferenceManager.token.isBlank()) {
showLoginActivity()
return
}
fanTalkDetailLauncher.launch(
CreatorChannelFanTalkDetailActivity.newIntent(this, creatorId, item.toFanTalkDetailPayload())
)
}
override fun onCreatorChannelFanTalkFloatingButtonVisibilityChanged(isVisible: Boolean) { override fun onCreatorChannelFanTalkFloatingButtonVisibilityChanged(isVisible: Boolean) {
isFanTalkFixedPlusVisible = isVisible isFanTalkFixedPlusVisible = isVisible
updateFanTalkFixedPlusVisibility() updateFanTalkFixedPlusVisibility()

View File

@@ -2106,6 +2106,38 @@ class CreatorChannelActivitySourceTest {
assertTrue(dmRoom.contains("putExtra(EXTRA_CREATOR_ID, creatorId)")) assertTrue(dmRoom.contains("putExtra(EXTRA_CREATOR_ID, creatorId)"))
} }
@Test
fun `FanTalk item click source는 owner gate와 상세 ActivityResult refresh를 연결한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText()
assertTrue(
source.contains(
"import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.detail.CreatorChannelFanTalkDetailActivity"
)
)
assertTrue(
source.contains(
"import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.detail.toFanTalkDetailPayload"
)
)
assertTrue(source.contains("private val fanTalkDetailLauncher = registerForActivityResult"))
assertTrue(source.contains("override fun onCreatorChannelFanTalkItemClicked(item: CreatorChannelFanTalkUiModel)"))
assertTrue(source.contains("if (currentHeader?.isOwner != true) return"))
assertTrue(source.contains("if (creatorId <= 0L || item.fanTalkId <= 0L) return"))
assertTrue(source.contains("if (SharedPreferenceManager.token.isBlank())"))
assertTrue(source.contains("showLoginActivity()"))
assertTrue(source.contains("fanTalkDetailLauncher.launch("))
assertTrue(
source.contains(
"CreatorChannelFanTalkDetailActivity.newIntent(this, creatorId, item.toFanTalkDetailPayload())"
)
)
assertTrue(source.contains("refreshCreatorChannelFanTalk()"))
assertTrue(source.contains("homeActionDelegate?.refreshHome()"))
}
private fun projectFile(relativePath: String): File { private fun projectFile(relativePath: String): File {
val candidates = listOf(File(relativePath), File("../$relativePath")) val candidates = listOf(File(relativePath), File("../$relativePath"))
return candidates.firstOrNull { it.exists() } return candidates.firstOrNull { it.exists() }