From 63a7c28e9685b9e7dc616ccce13dd9df2543a5da Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 10 Jul 2026 10:16:01 +0900 Subject: [PATCH] =?UTF-8?q?feat(ranking):=20=EB=B0=98=EC=9D=91=ED=98=95=20?= =?UTF-8?q?=ED=8F=AD=20=EC=8A=A4=EC=BC=80=EC=9D=BC=EC=9D=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/ranking/RankingResponsiveScale.kt | 17 +++++++++++++ .../ranking/RankingResponsiveScaleTest.kt | 25 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScale.kt create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScaleTest.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScale.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScale.kt new file mode 100644 index 00000000..5307f1ef --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScale.kt @@ -0,0 +1,17 @@ +package kr.co.vividnext.sodalive.v2.widget.ranking + +import android.content.res.Resources + +object RankingResponsiveScale { + private const val BASE_WIDTH_DP = 402 + + fun fromResources(resources: Resources): Float = fromScreenWidthDp(resources.configuration.screenWidthDp) + + fun fromScreenWidthDp(screenWidthDp: Int): Float { + return when { + screenWidthDp <= 0 -> 1f + screenWidthDp >= BASE_WIDTH_DP -> 1f + else -> screenWidthDp / BASE_WIDTH_DP.toFloat() + } + } +} diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScaleTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScaleTest.kt new file mode 100644 index 00000000..bcba3d8b --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/ranking/RankingResponsiveScaleTest.kt @@ -0,0 +1,25 @@ +package kr.co.vividnext.sodalive.v2.widget.ranking + +import org.junit.Assert.assertEquals +import org.junit.Test + +class RankingResponsiveScaleTest { + + @Test + fun `402dp 이상이면 scale 1을 반환한다`() { + assertEquals(1f, RankingResponsiveScale.fromScreenWidthDp(402), 0.0001f) + assertEquals(1f, RankingResponsiveScale.fromScreenWidthDp(430), 0.0001f) + } + + @Test + fun `402dp 미만이면 device width와 기준 폭 비율을 반환한다`() { + assertEquals(360f / 402f, RankingResponsiveScale.fromScreenWidthDp(360), 0.0001f) + assertEquals(401f / 402f, RankingResponsiveScale.fromScreenWidthDp(401), 0.0001f) + } + + @Test + fun `screen width를 확인할 수 없으면 scale 1을 반환한다`() { + assertEquals(1f, RankingResponsiveScale.fromScreenWidthDp(0), 0.0001f) + assertEquals(1f, RankingResponsiveScale.fromScreenWidthDp(-1), 0.0001f) + } +}