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

View File

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