diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacement.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacement.kt index 54522fad..20706573 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacement.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacement.kt @@ -1,17 +1,17 @@ package kr.co.vividnext.sodalive.v2.widget.creatorranking data class CreatorRankingPlacement( - val variant: CreatorRankingCardVariant, + val viewType: CreatorRankingViewType, val itemsPerRow: Int ) { companion object { fun fromRank(rank: Int): CreatorRankingPlacement { require(rank >= 1) { "rank must be greater than or equal to 1." } return when (rank) { - 1 -> CreatorRankingPlacement(CreatorRankingCardVariant.Large, itemsPerRow = 1) - in 2..7 -> CreatorRankingPlacement(CreatorRankingCardVariant.Compact, itemsPerRow = 2) - in 8..10 -> CreatorRankingPlacement(CreatorRankingCardVariant.Compact, itemsPerRow = 3) - else -> CreatorRankingPlacement(CreatorRankingCardVariant.Horizontal, itemsPerRow = 1) + 1 -> CreatorRankingPlacement(CreatorRankingViewType.TopTen, itemsPerRow = 1) + in 2..7 -> CreatorRankingPlacement(CreatorRankingViewType.TopTen, itemsPerRow = 2) + in 8..10 -> CreatorRankingPlacement(CreatorRankingViewType.TopTen, itemsPerRow = 3) + else -> CreatorRankingPlacement(CreatorRankingViewType.Lower, itemsPerRow = 1) } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyle.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyle.kt new file mode 100644 index 00000000..b0481825 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyle.kt @@ -0,0 +1,27 @@ +package kr.co.vividnext.sodalive.v2.widget.creatorranking + +data class CreatorRankingTextStyle( + val rankTextSizeSp: Int, + val nameTextSizeSp: Int, + val deltaTextSizeSp: Int +) { + companion object { + fun fromPlacement(placement: CreatorRankingPlacement): CreatorRankingTextStyle { + return when (placement.viewType) { + CreatorRankingViewType.TopTen -> when (placement.itemsPerRow) { + 1 -> CreatorRankingTextStyle(rankTextSizeSp = 96, nameTextSizeSp = 32, deltaTextSizeSp = 16) + 2 -> CreatorRankingTextStyle(rankTextSizeSp = 54, nameTextSizeSp = 22, deltaTextSizeSp = 16) + 3 -> CreatorRankingTextStyle(rankTextSizeSp = 36, nameTextSizeSp = 14, deltaTextSizeSp = 14) + else -> error("Unsupported top-ten row size: ${placement.itemsPerRow}") + } + CreatorRankingViewType.Lower -> CreatorRankingTextStyle( + rankTextSizeSp = 40, + nameTextSizeSp = 18, + deltaTextSizeSp = 16 + ) + } + } + + fun fromRank(rank: Int): CreatorRankingTextStyle = fromPlacement(CreatorRankingPlacement.fromRank(rank)) + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingViewType.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingViewType.kt new file mode 100644 index 00000000..4608f6c1 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingViewType.kt @@ -0,0 +1,6 @@ +package kr.co.vividnext.sodalive.v2.widget.creatorranking + +enum class CreatorRankingViewType { + TopTen, + Lower +} diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacementTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacementTest.kt index f47b5526..de4a9995 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacementTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingPlacementTest.kt @@ -6,45 +6,45 @@ import org.junit.Test class CreatorRankingPlacementTest { @Test - fun `rank 1 uses large variant and one item row`() { + fun `rank 1은 top ten view type과 1 item row를 사용한다`() { val placement = CreatorRankingPlacement.fromRank(1) - assertEquals(CreatorRankingCardVariant.Large, placement.variant) + assertEquals(CreatorRankingViewType.TopTen, placement.viewType) assertEquals(1, placement.itemsPerRow) } @Test - fun `rank 2 to 7 uses compact variant and two item row`() { + fun `rank 2부터 7은 top ten view type과 2 item row를 사용한다`() { (2..7).forEach { rank -> val placement = CreatorRankingPlacement.fromRank(rank) - assertEquals(CreatorRankingCardVariant.Compact, placement.variant) + assertEquals(CreatorRankingViewType.TopTen, placement.viewType) assertEquals(2, placement.itemsPerRow) } } @Test - fun `rank 8 to 10 uses compact variant and three item row`() { + fun `rank 8부터 10은 top ten view type과 3 item row를 사용한다`() { (8..10).forEach { rank -> val placement = CreatorRankingPlacement.fromRank(rank) - assertEquals(CreatorRankingCardVariant.Compact, placement.variant) + assertEquals(CreatorRankingViewType.TopTen, placement.viewType) assertEquals(3, placement.itemsPerRow) } } @Test - fun `rank 11 or greater uses horizontal variant and one item row`() { - listOf(11, 12, 100).forEach { rank -> + fun `rank 11부터 20과 20 초과는 lower view type과 1 item row를 사용한다`() { + listOf(11, 12, 20, 21, 100).forEach { rank -> val placement = CreatorRankingPlacement.fromRank(rank) - assertEquals(CreatorRankingCardVariant.Horizontal, placement.variant) + assertEquals(CreatorRankingViewType.Lower, placement.viewType) assertEquals(1, placement.itemsPerRow) } } @Test(expected = IllegalArgumentException::class) - fun `rank less than 1 is invalid`() { + fun `rank 1 미만은 유효하지 않다`() { CreatorRankingPlacement.fromRank(0) } } diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyleTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyleTest.kt new file mode 100644 index 00000000..c37e6543 --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingTextStyleTest.kt @@ -0,0 +1,49 @@ +package kr.co.vividnext.sodalive.v2.widget.creatorranking + +import org.junit.Assert.assertEquals +import org.junit.Test + +class CreatorRankingTextStyleTest { + + @Test + fun `top 1 item row는 가장 큰 rank name delta text size를 사용한다`() { + val style = CreatorRankingTextStyle.fromRank(1) + + assertEquals(96, style.rankTextSizeSp) + assertEquals(32, style.nameTextSizeSp) + assertEquals(16, style.deltaTextSizeSp) + } + + @Test + fun `top 2 item row는 중간 rank name delta text size를 사용한다`() { + listOf(2, 7).forEach { rank -> + val style = CreatorRankingTextStyle.fromRank(rank) + + assertEquals(54, style.rankTextSizeSp) + assertEquals(22, style.nameTextSizeSp) + assertEquals(16, style.deltaTextSizeSp) + } + } + + @Test + fun `top 3 item row는 작은 rank name delta text size를 사용한다`() { + listOf(8, 10).forEach { rank -> + val style = CreatorRankingTextStyle.fromRank(rank) + + assertEquals(36, style.rankTextSizeSp) + assertEquals(14, style.nameTextSizeSp) + assertEquals(14, style.deltaTextSizeSp) + } + } + + @Test + fun `lower row는 lower 전용 rank name과 기존 delta amount text size를 사용한다`() { + listOf(11, 20, 21).forEach { rank -> + val style = CreatorRankingTextStyle.fromRank(rank) + + assertEquals(40, style.rankTextSizeSp) + assertEquals(18, style.nameTextSizeSp) + assertEquals(16, style.deltaTextSizeSp) + } + } +}