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 70432663..e17d7843 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 @@ -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.CreatorChannelSeriesResponse 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.donation.CreatorChannelDonationFragment import kr.co.vividnext.sodalive.v2.creator.channel.live.CreatorChannelLiveFragment @@ -145,6 +148,14 @@ class CreatorChannelActivity : homeActionDelegate?.refreshHome() } } + private val fanTalkDetailLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + if (result.resultCode == RESULT_OK) { + refreshCreatorChannelFanTalk() + homeActionDelegate?.refreshHome() + } + } private val liveRoomCreateLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> @@ -596,6 +607,19 @@ class CreatorChannelActivity : 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) { isFanTalkFixedPlusVisible = isVisible updateFanTalkFixedPlusVisibility() 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 e740f272..27c0e3e3 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 @@ -2106,6 +2106,38 @@ class CreatorChannelActivitySourceTest { 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 { val candidates = listOf(File(relativePath), File("../$relativePath")) return candidates.firstOrNull { it.exists() }