From 64fb55db55ea20c2ebc8f78f04aa35869b9ffcd2 Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 9 Jun 2026 15:13:01 +0900 Subject: [PATCH] =?UTF-8?q?fix(widget):=20=EB=9E=AD=ED=82=B9=20=EC=88=9C?= =?UTF-8?q?=EC=9C=84=20=EC=98=81=EC=97=AD=20=EC=9C=84=EC=B9=98=EB=A5=BC=20?= =?UTF-8?q?=EB=B3=B4=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreatorRankingCompactCardView.kt | 10 ++-- .../CreatorRankingHorizontalCardView.kt | 6 +- .../CreatorRankingLargeCardView.kt | 4 +- .../CreatorRankingAdapterLayoutTest.kt | 60 ++++++++++++++++--- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt index 088a317b..672d4d94 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingCompactCardView.kt @@ -125,7 +125,7 @@ class CreatorRankingCompactCardView @JvmOverloads constructor( private fun positionMedium(size: CreatorRankingCardSize) { val scale = size.widthPx / 185f - requireNotNull(rankText).layoutParams = LayoutParams((55 * scale).roundToInt(), (75 * scale).roundToInt()) + requireNotNull(rankText).layoutParams = LayoutParams((56 * scale).roundToInt(), (70 * scale).roundToInt()) findViewById(R.id.ll_creator_ranking_delta).layoutParams = LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT @@ -145,17 +145,17 @@ class CreatorRankingCompactCardView @JvmOverloads constructor( private fun positionSmall(size: CreatorRankingCardSize) { val scale = size.widthPx / 122f requireNotNull(rankText).layoutParams = LayoutParams( - (42 * scale).roundToInt(), - (56 * scale).roundToInt() + (52 * scale).roundToInt(), + (50 * scale).roundToInt() ).apply { - leftMargin = (8 * scale).roundToInt() + leftMargin = 0 } findViewById(R.id.ll_creator_ranking_delta).layoutParams = LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ).apply { leftMargin = (10 * scale).roundToInt() - topMargin = (49 * scale).roundToInt() + topMargin = (50 * scale).roundToInt() } requireNotNull(nameText).layoutParams = LayoutParams( (102 * scale).roundToInt(), diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt index 717a2371..b1196b4f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingHorizontalCardView.kt @@ -110,8 +110,12 @@ class CreatorRankingHorizontalCardView @JvmOverloads constructor( ViewGroup.LayoutParams.WRAP_CONTENT ).apply { leftMargin = (14 * scale).roundToInt() - topMargin = (14 * scale).roundToInt() + topMargin = (12 * scale).roundToInt() } + requireNotNull(rankText).layoutParams = android.widget.LinearLayout.LayoutParams( + (48 * scale).roundToInt(), + (52 * scale).roundToInt() + ) requireNotNull(rankText).applyCreatorRankingRankGradient() imageView().layoutParams = LayoutParams((80 * scale).roundToInt(), (80 * scale).roundToInt()).apply { leftMargin = (77 * scale).roundToInt() diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt index 76135bba..2fa31b8c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingLargeCardView.kt @@ -112,7 +112,7 @@ class CreatorRankingLargeCardView @JvmOverloads constructor( private fun positionViews(size: CreatorRankingCardSize) { val scale = size.widthPx / FIGMA_SIZE.toFloat() - requireNotNull(rankText).layoutParams = LayoutParams((112 * scale).roundToInt(), (124 * scale).roundToInt()).apply { + requireNotNull(rankText).layoutParams = LayoutParams((86 * scale).roundToInt(), (116 * scale).roundToInt()).apply { leftMargin = 0 topMargin = 0 } @@ -129,7 +129,7 @@ class CreatorRankingLargeCardView @JvmOverloads constructor( ViewGroup.LayoutParams.WRAP_CONTENT ).apply { leftMargin = (20 * scale).roundToInt() - topMargin = (122 * scale).roundToInt() + topMargin = (116 * scale).roundToInt() } } diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt index 0cf08969..213cc4ad 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/creatorranking/CreatorRankingAdapterLayoutTest.kt @@ -49,8 +49,8 @@ class CreatorRankingAdapterLayoutTest { assertRankTextBox( view = view.findViewById(R.id.tv_creator_ranking_rank), - expectedWidth = 112, - expectedHeight = 124, + expectedWidth = 86, + expectedHeight = 116, expectedLeft = 0, expectedTop = 0 ) @@ -64,8 +64,8 @@ class CreatorRankingAdapterLayoutTest { assertRankTextBox( view = view.findViewById(R.id.tv_creator_ranking_rank), - expectedWidth = 55, - expectedHeight = 75, + expectedWidth = 56, + expectedHeight = 70, expectedLeft = 0, expectedTop = 0 ) @@ -79,9 +79,9 @@ class CreatorRankingAdapterLayoutTest { assertRankTextBox( view = view.findViewById(R.id.tv_creator_ranking_rank), - expectedWidth = 42, - expectedHeight = 56, - expectedLeft = 8, + expectedWidth = 52, + expectedHeight = 50, + expectedLeft = 0, expectedTop = 0 ) } @@ -97,7 +97,41 @@ class CreatorRankingAdapterLayoutTest { assertEquals(49, params.width) assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, params.height) assertEquals(14, params.leftMargin) - assertEquals(14, params.topMargin) + assertEquals(12, params.topMargin) + + assertRankTextBox( + view = view.findViewById(R.id.tv_creator_ranking_rank), + expectedWidth = 48, + expectedHeight = 52, + expectedLeft = 0, + expectedTop = 0 + ) + } + + @Test + fun `large card 순위 변화 표시는 Figma 위치를 유지한다`() { + val view = inflateView(R.layout.view_creator_ranking_large_card) + + view.setCardSize(CreatorRankingCardSize(widthPx = 374, heightPx = 374)) + + assertViewPosition( + view = view.findViewById(R.id.ll_creator_ranking_delta), + expectedLeft = 20, + expectedTop = 116 + ) + } + + @Test + fun `compact small card 순위 변화 표시는 Figma 위치를 유지한다`() { + val view = inflateView(R.layout.view_creator_ranking_compact_card) + + view.setCardSize(CreatorRankingCardSize(widthPx = 122, heightPx = 122)) + + assertViewPosition( + view = view.findViewById(R.id.ll_creator_ranking_delta), + expectedLeft = 10, + expectedTop = 50 + ) } @Test @@ -154,6 +188,16 @@ class CreatorRankingAdapterLayoutTest { assertEquals(View.VISIBLE, view.findViewById(R.id.ll_creator_ranking_delta).visibility) } + private fun assertViewPosition( + view: View, + expectedLeft: Int, + expectedTop: Int + ) { + val params = view.layoutParams as ViewGroup.MarginLayoutParams + assertEquals(expectedLeft, params.leftMargin) + assertEquals(expectedTop, params.topMargin) + } + private fun assertRankTextBox( view: TextView, expectedWidth: Int,