feat(creator): 본인 FAB 액션을 연결한다

This commit is contained in:
2026-06-16 22:24:30 +09:00
parent 6a6b1138a8
commit 5d52787ea9
2 changed files with 184 additions and 7 deletions

View File

@@ -1415,7 +1415,11 @@ class CreatorChannelActivitySourceTest {
assertTrue(strings.contains("name=\"creator_channel_owner_fab_close\">닫기"))
assertTrue(source.contains("private var isOwnerFabExpanded: Boolean = false"))
assertTrue(source.contains("updateOwnerFabVisibility()"))
assertTrue(source.contains("currentHeader?.isOwner == true && binding.viewPager.currentItem == CreatorChannelTab.Home.ordinal"))
assertTrue(
source.contains(
"currentHeader?.isOwner == true && binding.viewPager.currentItem == CreatorChannelTab.Home.ordinal"
)
)
assertTrue(source.contains("binding.ownerFabDim.setOnClickListener { collapseOwnerFab() }"))
assertTrue(source.contains("binding.ownerFabCloseButton.setOnClickListener { collapseOwnerFab() }"))
assertTrue(source.contains("binding.ownerFabButton.setOnClickListener { expandOwnerFab() }"))
@@ -1424,6 +1428,55 @@ class CreatorChannelActivitySourceTest {
assertTrue(source.contains("binding.ownerFabButton.isVisible = shouldShowOwnerFab && !isOwnerFabExpanded"))
}
@Test
fun `Phase 13 owner FAB source는 spring animation과 navigation inset을 적용한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText()
assertTrue(source.contains("private var isOwnerFabAnimating: Boolean = false"))
assertTrue(source.contains("setupOwnerFabInsets()"))
assertTrue(source.contains("WindowInsetsCompat.Type.navigationBars()"))
assertTrue(source.contains("OWNER_FAB_BASE_MARGIN_DP.dpToPx().toInt() + navigationBottomInset"))
assertTrue(source.contains("binding.ownerFabButton.updateLayoutParams<ConstraintLayout.LayoutParams>"))
assertTrue(source.contains("binding.ownerFabExpandedContainer.updateLayoutParams<ConstraintLayout.LayoutParams>"))
assertTrue(
source.contains(
"binding.viewPager.updatePadding(bottom = OWNER_FAB_CONTENT_BOTTOM_PADDING_DP.dpToPx().toInt())"
)
)
assertTrue(source.contains("ValueAnimator.ofFloat"))
assertTrue(source.contains("SpringInterpolator("))
assertTrue(source.contains("mass = OWNER_FAB_SPRING_MASS"))
assertTrue(source.contains("stiffness = OWNER_FAB_SPRING_STIFFNESS"))
assertTrue(source.contains("damping = OWNER_FAB_SPRING_DAMPING"))
assertTrue(source.contains("if (isOwnerFabAnimating) return"))
assertTrue(source.contains("duration = OWNER_FAB_ANIMATION_DURATION_MS"))
}
@Test
fun `Phase 13 owner FAB source는 3개 액션 진입점을 연결하고 클릭 후 닫는다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText()
assertTrue(source.contains("CreatorCommunityWriteActivity"))
assertTrue(source.contains("AudioContentUploadActivity"))
assertTrue(source.contains("LiveRoomCreateActivity"))
assertTrue(
source.contains("binding.ownerFabCommunityButton.setOnClickListener { onOwnerFabCommunityClicked() }")
)
assertTrue(source.contains("binding.ownerFabAudioButton.setOnClickListener { onOwnerFabAudioClicked() }"))
assertTrue(source.contains("binding.ownerFabLiveButton.setOnClickListener { onOwnerFabLiveClicked() }"))
assertTrue(source.contains("private fun onOwnerFabCommunityClicked()"))
assertTrue(source.contains("private fun onOwnerFabAudioClicked()"))
assertTrue(source.contains("private fun onOwnerFabLiveClicked()"))
assertTrue(source.contains("startActivity(Intent(this, CreatorCommunityWriteActivity::class.java))"))
assertTrue(source.contains("startActivity(Intent(this, AudioContentUploadActivity::class.java))"))
assertTrue(source.contains("startActivity(Intent(this, LiveRoomCreateActivity::class.java))"))
assertTrue(source.contains("collapseOwnerFab(animate = false)"))
}
@Test
fun `남은 section item layouts는 legacy generic card id를 제거한다`() {
val layoutNames = listOf(