diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingTextStyle.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingTextStyle.kt new file mode 100644 index 00000000..8440e79b --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingTextStyle.kt @@ -0,0 +1,30 @@ +package kr.co.vividnext.sodalive.v2.widget.contentranking + +data class ContentRankingTextStyle( + val rankTextSizeSp: Float, + val titleTextSizeSp: Float, + val creatorTextSizeSp: Float, + val deltaTextSizeSp: Float +) { + companion object { + fun large(scale: Float): ContentRankingTextStyle = baseline(96f, 22f, 12f, scale) + + fun mediumGrid(scale: Float): ContentRankingTextStyle = baseline(54f, 22f, 12f, scale) + + fun smallGrid(scale: Float): ContentRankingTextStyle = baseline(36f, 14f, 12f, scale) + + fun horizontal(scale: Float): ContentRankingTextStyle = baseline(40f, 18f, 14f, scale) + + private fun baseline( + rankTextSizeSp: Float, + titleTextSizeSp: Float, + creatorTextSizeSp: Float, + scale: Float + ) = ContentRankingTextStyle( + rankTextSizeSp = rankTextSizeSp * scale, + titleTextSizeSp = titleTextSizeSp * scale, + creatorTextSizeSp = creatorTextSizeSp * scale, + deltaTextSizeSp = 16f * scale + ) + } +} diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingResponsiveSizeTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingResponsiveSizeTest.kt new file mode 100644 index 00000000..8fed9992 --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingResponsiveSizeTest.kt @@ -0,0 +1,61 @@ +package kr.co.vividnext.sodalive.v2.widget.contentranking + +import org.junit.Assert.assertEquals +import org.junit.Test + +class ContentRankingResponsiveSizeTest { + + @Test + fun `402dp 이상 scale에서는 large baseline text size를 유지한다`() { + val size = ContentRankingTextStyle.large(scale = 1f) + + assertEquals(96f, size.rankTextSizeSp, 0.0001f) + assertEquals(22f, size.titleTextSizeSp, 0.0001f) + assertEquals(12f, size.creatorTextSizeSp, 0.0001f) + assertEquals(16f, size.deltaTextSizeSp, 0.0001f) + } + + @Test + fun `402dp 이상 scale에서는 medium grid baseline text size를 유지한다`() { + val size = ContentRankingTextStyle.mediumGrid(scale = 1f) + + assertEquals(54f, size.rankTextSizeSp, 0.0001f) + assertEquals(22f, size.titleTextSizeSp, 0.0001f) + assertEquals(12f, size.creatorTextSizeSp, 0.0001f) + assertEquals(16f, size.deltaTextSizeSp, 0.0001f) + } + + @Test + fun `402dp 이상 scale에서는 small grid baseline text size를 유지한다`() { + val size = ContentRankingTextStyle.smallGrid(scale = 1f) + + assertEquals(36f, size.rankTextSizeSp, 0.0001f) + assertEquals(14f, size.titleTextSizeSp, 0.0001f) + assertEquals(12f, size.creatorTextSizeSp, 0.0001f) + assertEquals(16f, size.deltaTextSizeSp, 0.0001f) + } + + @Test + fun `402dp 이상 scale에서는 horizontal baseline text size를 유지한다`() { + val size = ContentRankingTextStyle.horizontal(scale = 1f) + + assertEquals(40f, size.rankTextSizeSp, 0.0001f) + assertEquals(18f, size.titleTextSizeSp, 0.0001f) + assertEquals(14f, size.creatorTextSizeSp, 0.0001f) + assertEquals(16f, size.deltaTextSizeSp, 0.0001f) + } + + @Test + fun `402dp 미만 scale에서는 baseline text size에 scale을 곱한다`() { + val scale = 360f / 402f + val large = ContentRankingTextStyle.large(scale) + val small = ContentRankingTextStyle.smallGrid(scale) + + assertEquals(96f * scale, large.rankTextSizeSp, 0.0001f) + assertEquals(22f * scale, large.titleTextSizeSp, 0.0001f) + assertEquals(12f * scale, large.creatorTextSizeSp, 0.0001f) + assertEquals(36f * scale, small.rankTextSizeSp, 0.0001f) + assertEquals(14f * scale, small.titleTextSizeSp, 0.0001f) + assertEquals(12f * scale, small.creatorTextSizeSp, 0.0001f) + } +}