From e77d0a1d5ba00ec04e5b556ca709189355923a75 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 10 Jul 2026 10:16:27 +0900 Subject: [PATCH] =?UTF-8?q?fix(content-ranking):=20=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=81=AC=EA=B8=B0=20=EA=B8=B0=EC=A4=80=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contentranking/ContentRankingTextStyle.kt | 30 +++++++++ .../ContentRankingResponsiveSizeTest.kt | 61 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingTextStyle.kt create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/widget/contentranking/ContentRankingResponsiveSizeTest.kt 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) + } +}