fix(channel): 탭 전환 자동 스크롤을 제거한다

This commit is contained in:
2026-06-27 04:28:35 +09:00
parent 1e073e85a1
commit 0e07ed0b5a
2 changed files with 14 additions and 25 deletions

View File

@@ -100,7 +100,6 @@ class CreatorChannelActivity :
private var statusBarHeight: Int = 0 private var statusBarHeight: Int = 0
private var tabLayoutMediator: TabLayoutMediator? = null private var tabLayoutMediator: TabLayoutMediator? = null
private var pageChangeCallback: ViewPager2.OnPageChangeCallback? = null private var pageChangeCallback: ViewPager2.OnPageChangeCallback? = null
private var lastSelectedCreatorChannelTabPosition: Int? = null
private var isOwnerFabExpanded: Boolean = false private var isOwnerFabExpanded: Boolean = false
private var isOwnerFabAnimating: Boolean = false private var isOwnerFabAnimating: Boolean = false
private var isDonationFloatingButtonVisible: Boolean = false private var isDonationFloatingButtonVisible: Boolean = false
@@ -343,17 +342,6 @@ class CreatorChannelActivity :
binding.tvTitleNickname.isVisible = shouldUseBlackTitleBar binding.tvTitleNickname.isVisible = shouldUseBlackTitleBar
} }
private fun adjustCreatorChannelStickyAnchorOnTabSelected(position: Int) {
val previousPosition = lastSelectedCreatorChannelTabPosition
lastSelectedCreatorChannelTabPosition = position
if (previousPosition == null || previousPosition == position) return
val stickyScrollY = calculateCreatorChannelStickyScrollY()
if (binding.nestedScrollView.scrollY < stickyScrollY) {
binding.nestedScrollView.scrollTo(0, stickyScrollY)
}
}
private fun calculateCreatorChannelStickyScrollY(): Int { private fun calculateCreatorChannelStickyScrollY(): Int {
val stickyTop = CreatorChannelScrollState.calculateStickyTop(statusBarHeight, baseTitleBarHeight) val stickyTop = CreatorChannelScrollState.calculateStickyTop(statusBarHeight, baseTitleBarHeight)
return (binding.headerContainer.height - stickyTop).coerceAtLeast(0) return (binding.headerContainer.height - stickyTop).coerceAtLeast(0)
@@ -415,10 +403,8 @@ class CreatorChannelActivity :
}.also { }.also {
it.attach() it.attach()
} }
lastSelectedCreatorChannelTabPosition = binding.viewPager.currentItem
val callback = object : ViewPager2.OnPageChangeCallback() { val callback = object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
adjustCreatorChannelStickyAnchorOnTabSelected(position)
if (position != CreatorChannelTab.Home.ordinal) { if (position != CreatorChannelTab.Home.ordinal) {
collapseOwnerFab(animate = false) collapseOwnerFab(animate = false)
} }

View File

@@ -1156,24 +1156,27 @@ class CreatorChannelActivitySourceTest {
} }
@Test @Test
fun `탭 전환은 sticky tabbar anchor 아래로 내려간 scroll 위치를 되돌리지 않고 부족할 때만 보정한다`() { fun `탭 전환은 공통 scroll 위치를 자동 보정하지 않는다`() {
val source = projectFile( val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt" "app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt"
).readText() ).readText()
assertTrue(source.contains("private var lastSelectedCreatorChannelTabPosition: Int? = null")) assertFalse(source.contains("private var lastSelectedCreatorChannelTabPosition: Int? = null"))
assertTrue(source.contains("lastSelectedCreatorChannelTabPosition = binding.viewPager.currentItem")) assertFalse(source.contains("lastSelectedCreatorChannelTabPosition = binding.viewPager.currentItem"))
assertTrue(source.contains("lastSelectedCreatorChannelTabPosition = position")) assertFalse(source.contains("lastSelectedCreatorChannelTabPosition = position"))
assertTrue(source.contains("adjustCreatorChannelStickyAnchorOnTabSelected(position)")) assertFalse(source.contains("adjustCreatorChannelStickyAnchorOnTabSelected(position)"))
assertTrue(source.contains("private fun adjustCreatorChannelStickyAnchorOnTabSelected(position: Int)")) assertFalse(source.contains("private fun adjustCreatorChannelStickyAnchorOnTabSelected(position: Int)"))
assertTrue(source.contains("val previousPosition = lastSelectedCreatorChannelTabPosition")) assertFalse(source.contains("val previousPosition = lastSelectedCreatorChannelTabPosition"))
assertTrue(source.contains("if (previousPosition == null || previousPosition == position)")) assertFalse(source.contains("binding.nestedScrollView.scrollTo(0, stickyScrollY)"))
assertTrue(source.contains("val stickyScrollY = calculateCreatorChannelStickyScrollY()")) assertFalse(source.contains("binding.nestedScrollView.smoothScrollTo(0, stickyScrollY)"))
assertTrue(source.contains("if (binding.nestedScrollView.scrollY < stickyScrollY)"))
assertTrue(source.contains("binding.nestedScrollView.scrollTo(0, stickyScrollY)"))
assertTrue(source.contains("private fun calculateCreatorChannelStickyScrollY(): Int")) assertTrue(source.contains("private fun calculateCreatorChannelStickyScrollY(): Int"))
assertTrue(source.contains("CreatorChannelScrollState.calculateStickyTop(statusBarHeight, baseTitleBarHeight)")) assertTrue(source.contains("CreatorChannelScrollState.calculateStickyTop(statusBarHeight, baseTitleBarHeight)"))
assertTrue(source.contains("return (binding.headerContainer.height - stickyTop).coerceAtLeast(0)")) assertTrue(source.contains("return (binding.headerContainer.height - stickyTop).coerceAtLeast(0)"))
assertTrue(source.contains("updateOwnerFabVisibility()"))
assertTrue(source.contains("updateDonationFloatingButtonVisibility()"))
assertTrue(source.contains("updateOwnerCtaVisibility()"))
assertTrue(source.contains("updateCreatorChannelTabViewportHeight()"))
assertTrue(source.contains("updateViewPagerHeight()"))
} }
@Test @Test