fix(content): 전체 탭 grid 간격을 보정한다

This commit is contained in:
2026-06-25 12:23:12 +09:00
parent 33e137bc22
commit 00aac29d89
2 changed files with 20 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.extensions.dpToPx
import kotlin.math.roundToInt
fun RecyclerView.addContentHorizontalItemSpacing() {
if (itemDecorationCount == 0) addItemDecoration(ContentHorizontalItemDecoration())
@@ -28,10 +29,10 @@ private class ContentGridItemDecoration(
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view)
if (position == RecyclerView.NO_POSITION) return
val isLeftColumn = position % spanCount == 0
val halfGap = GRID_ITEM_GAP_DP.dpToPx().toInt() / 2
outRect.left = if (isLeftColumn) 0 else halfGap
outRect.right = if (isLeftColumn) halfGap else 0
val columnIndex = position % spanCount
val gap = GRID_ITEM_GAP_DP.dpToPx()
outRect.left = (columnIndex * gap / spanCount).roundToInt()
outRect.right = (gap - (columnIndex + 1) * gap / spanCount).roundToInt()
if (position >= spanCount) outRect.top = GRID_ITEM_VERTICAL_GAP_DP.dpToPx().toInt()
}
}

View File

@@ -219,6 +219,21 @@ class ContentMainFragmentSourceTest {
assertSourceContains(source, "binding.tvContentAllTotalCount.text")
}
@Test
fun `content grid item spacing은 span count 기반으로 열 간격을 계산한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ui/ContentRecyclerItemLayoutParams.kt"
).readText()
assertSourceContains(source, "val columnIndex = position % spanCount")
assertSourceContains(source, "outRect.left = (columnIndex * gap / spanCount).roundToInt()")
assertSourceContains(source, "outRect.right = (gap - (columnIndex + 1) * gap / spanCount).roundToInt()")
assertFalse(
"3열 grid spacing은 left column 여부만으로 계산하면 인접 열 간격이 불균형해진다.",
source.contains("isLeftColumn")
)
}
@Test
fun `content 추천 source는 오디오와 시리즈 routing extra를 사용한다`() {
val source = projectFile(