refactor(home): 추천 라이브 진입을 공통화한다

This commit is contained in:
2026-07-15 21:27:37 +09:00
parent 3a49158243
commit cc23992d2e
2 changed files with 11 additions and 34 deletions

View File

@@ -18,9 +18,9 @@ import kr.co.vividnext.sodalive.live.LiveViewModel
import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
import kr.co.vividnext.sodalive.search.SearchActivity
import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelLiveCoordinator
import kr.co.vividnext.sodalive.v2.creator.channel.community.detail.CreatorChannelCommunityDetailActivity
import kr.co.vividnext.sodalive.v2.live.onair.HomeOnAirLiveActivity
import kr.co.vividnext.sodalive.v2.live.action.LiveActionCoordinator
import kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomActivity
import kr.co.vividnext.sodalive.v2.main.chat.model.ChatRoomListUiItem
import kr.co.vividnext.sodalive.v2.main.chat.model.ChatRoomType
@@ -87,14 +87,15 @@ class HomeMainFragment : BaseFragment<FragmentV2MainHomeBinding>(
private val homeFollowingViewModel: HomeFollowingViewModel by viewModel()
private val liveViewModel: LiveViewModel by inject()
private val loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) }
private val liveCoordinator: CreatorChannelLiveCoordinator by lazy {
CreatorChannelLiveCoordinator(
private val liveActionCoordinator: LiveActionCoordinator by lazy {
LiveActionCoordinator(
activity = requireActivity(),
layoutInflater = layoutInflater,
fragmentManager = requireActivity().supportFragmentManager,
liveViewModel = liveViewModel,
screenWidthProvider = { screenWidth },
refreshHome = { homeRecommendationViewModel.loadRecommendations() }
refreshHome = { homeRecommendationViewModel.loadRecommendations() },
canHandleResult = { isAdded && view != null }
)
}
private val liveAdapter = HomeLiveAdapter()
@@ -536,14 +537,7 @@ class HomeMainFragment : BaseFragment<FragmentV2MainHomeBinding>(
}
private fun onLiveClick(item: HomeRecommendationLiveUiModel) {
ensureV2Access(AccessRequirement.Login) {
liveViewModel.getRoomDetail(item.roomId) { roomDetail ->
if (!isAdded || view == null) return@getRoomDetail
ensureV2Access(AccessRequirement.forAdultContent(roomDetail.isAdult)) {
liveCoordinator.enterLiveRoom(item.roomId, roomDetail)
}
}
}
liveActionCoordinator.enterLiveRoom(item.roomId)
}
private fun openHomeOnAirLive() {

View File

@@ -115,33 +115,16 @@ class HomeMainFragmentLoginGuardSourceTest {
}
@Test
fun `HomeMainFragment 추천 라이브 아이템은 로그인과 성인 가드 후 기존 입장 흐름을 실행한다`() {
fun `HomeMainFragment 추천 라이브 아이템은 공통 Live Action으로 입장한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt"
).readText()
val clickSource = source.substringFrom("private fun onLiveClick(item: HomeRecommendationLiveUiModel)")
assertTrue(clickSource.contains("ensureV2Access"))
assertTrue(clickSource.contains("liveViewModel.getRoomDetail(item.roomId) { roomDetail ->"))
assertBefore(
clickSource,
"if (!isAdded || view == null) return@getRoomDetail",
"AccessRequirement.forAdultContent(roomDetail.isAdult)"
)
assertBefore(
clickSource,
"liveViewModel.getRoomDetail(item.roomId) { roomDetail ->",
"AccessRequirement.forAdultContent(roomDetail.isAdult)"
)
assertBefore(
clickSource,
"AccessRequirement.forAdultContent(roomDetail.isAdult)",
"liveCoordinator.enterLiveRoom(item.roomId, roomDetail)"
)
assertFalse(clickSource.contains("= Unit"))
assertTrue(source.contains("import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelLiveCoordinator"))
assertTrue(source.contains("private val liveCoordinator: CreatorChannelLiveCoordinator by lazy"))
assertTrue(clickSource.contains("liveActionCoordinator.enterLiveRoom(item.roomId)"))
assertFalse(clickSource.contains("liveViewModel.getRoomDetail(item.roomId)"))
assertTrue(source.contains("import kr.co.vividnext.sodalive.v2.live.action.LiveActionCoordinator"))
assertTrue(source.contains("private val liveActionCoordinator: LiveActionCoordinator by lazy"))
}
@Test