From 91a7eb3f4c0a6cd9e9f4d60a11f12e2aee561e8d Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 27 May 2026 22:26:50 +0900 Subject: [PATCH] =?UTF-8?q?feat(banner):=20=EB=B0=B0=EB=84=88=20=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=95=84=EC=9B=83=20=EA=B3=84=EC=82=B0=20=EA=B3=84?= =?UTF-8?q?=EC=95=BD=EC=9D=84=20=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 --- .../widget/banner/BannerLayoutCalculator.kt | 23 +++++++++++ .../banner/BannerLayoutCalculatorTest.kt | 40 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculator.kt create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculatorTest.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculator.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculator.kt new file mode 100644 index 00000000..cebcb394 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculator.kt @@ -0,0 +1,23 @@ +package kr.co.vividnext.sodalive.v2.widget.banner + +object BannerLayoutCalculator { + private const val SIDE_INSET_DP = 20 + private const val ITEM_SPACING_DP = 8 + + fun calculate(screenWidthDp: Int, density: Float): BannerLayoutSize { + val itemSizeDp = screenWidthDp - (SIDE_INSET_DP * 2) + return BannerLayoutSize( + itemWidthDp = itemSizeDp, + itemHeightDp = itemSizeDp, + sideInsetDp = SIDE_INSET_DP, + itemSpacingDp = ITEM_SPACING_DP + ) + } +} + +data class BannerLayoutSize( + val itemWidthDp: Int, + val itemHeightDp: Int, + val sideInsetDp: Int, + val itemSpacingDp: Int +) diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculatorTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculatorTest.kt new file mode 100644 index 00000000..02552473 --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/widget/banner/BannerLayoutCalculatorTest.kt @@ -0,0 +1,40 @@ +package kr.co.vividnext.sodalive.v2.widget.banner + +import org.junit.Assert.assertEquals +import org.junit.Test + +class BannerLayoutCalculatorTest { + + @Test + fun `화면 폭 402dp이면 배너 아이템 크기는 362dp다`() { + val size = BannerLayoutCalculator.calculate( + screenWidthDp = 402, + density = 1f + ) + + assertEquals(362, size.itemWidthDp) + assertEquals(362, size.itemHeightDp) + } + + @Test + fun `화면 폭 360dp이면 배너 아이템 크기는 320dp다`() { + val size = BannerLayoutCalculator.calculate( + screenWidthDp = 360, + density = 1f + ) + + assertEquals(320, size.itemWidthDp) + assertEquals(320, size.itemHeightDp) + } + + @Test + fun `배너 레이아웃은 고정 좌우 여백과 아이템 간격을 사용한다`() { + val size = BannerLayoutCalculator.calculate( + screenWidthDp = 402, + density = 1f + ) + + assertEquals(20, size.sideInsetDp) + assertEquals(8, size.itemSpacingDp) + } +}