fix(content): 전체 탭 grid 간격을 보정한다
This commit is contained in:
@@ -4,6 +4,7 @@ import android.graphics.Rect
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
fun RecyclerView.addContentHorizontalItemSpacing() {
|
fun RecyclerView.addContentHorizontalItemSpacing() {
|
||||||
if (itemDecorationCount == 0) addItemDecoration(ContentHorizontalItemDecoration())
|
if (itemDecorationCount == 0) addItemDecoration(ContentHorizontalItemDecoration())
|
||||||
@@ -28,10 +29,10 @@ private class ContentGridItemDecoration(
|
|||||||
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
|
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
|
||||||
val position = parent.getChildAdapterPosition(view)
|
val position = parent.getChildAdapterPosition(view)
|
||||||
if (position == RecyclerView.NO_POSITION) return
|
if (position == RecyclerView.NO_POSITION) return
|
||||||
val isLeftColumn = position % spanCount == 0
|
val columnIndex = position % spanCount
|
||||||
val halfGap = GRID_ITEM_GAP_DP.dpToPx().toInt() / 2
|
val gap = GRID_ITEM_GAP_DP.dpToPx()
|
||||||
outRect.left = if (isLeftColumn) 0 else halfGap
|
outRect.left = (columnIndex * gap / spanCount).roundToInt()
|
||||||
outRect.right = if (isLeftColumn) halfGap else 0
|
outRect.right = (gap - (columnIndex + 1) * gap / spanCount).roundToInt()
|
||||||
if (position >= spanCount) outRect.top = GRID_ITEM_VERTICAL_GAP_DP.dpToPx().toInt()
|
if (position >= spanCount) outRect.top = GRID_ITEM_VERTICAL_GAP_DP.dpToPx().toInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,6 +219,21 @@ class ContentMainFragmentSourceTest {
|
|||||||
assertSourceContains(source, "binding.tvContentAllTotalCount.text")
|
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
|
@Test
|
||||||
fun `content 추천 source는 오디오와 시리즈 routing extra를 사용한다`() {
|
fun `content 추천 source는 오디오와 시리즈 routing extra를 사용한다`() {
|
||||||
val source = projectFile(
|
val source = projectFile(
|
||||||
|
|||||||
Reference in New Issue
Block a user