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) + } +}