From 29e64188c90e0b27cd4b0a7677f0e62d30ef4c1c Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 2 Jun 2026 19:20:57 +0900 Subject: [PATCH] =?UTF-8?q?feat(home):=20AI=20=EC=BA=90=EB=A6=AD=ED=84=B0?= =?UTF-8?q?=20=EC=84=B9=EC=85=98=20=EA=B0=84=EA=B2=A9=EC=9D=84=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/main/home/ui/HomeAiCharacterAdapter.kt | 3 +- .../main/res/layout/fragment_v2_main_home.xml | 2 +- .../main/home/HomeMainFragmentLayoutTest.kt | 36 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeAiCharacterAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeAiCharacterAdapter.kt index cad31d71..13b85505 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeAiCharacterAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeAiCharacterAdapter.kt @@ -23,7 +23,8 @@ class HomeAiCharacterAdapter : RecyclerView.Adapter diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt index d62492fd..ec02121a 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt @@ -17,6 +17,7 @@ import androidx.test.core.app.ApplicationProvider import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationFirstAudioContentUiModel import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationLiveUiModel +import kr.co.vividnext.sodalive.v2.main.home.ui.HomeAiCharacterAdapter import kr.co.vividnext.sodalive.v2.main.home.ui.HomeFirstAudioAdapter import kr.co.vividnext.sodalive.v2.main.home.ui.HomeLiveAdapter import kr.co.vividnext.sodalive.v2.main.home.ui.HomeRecentDebutCreatorAdapter @@ -183,6 +184,41 @@ class HomeMainFragmentLayoutTest { assertEquals(4.dpToPx(), layoutParams.marginEnd) } + @Test + fun `character chat thumbnail preserves figma root dimensions`() { + val thumbnail = inflateViewWithParent(R.layout.view_character_chat_thumbnail) + + assertEquals(185.dpToPx(), thumbnail.layoutParams.width) + assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, thumbnail.layoutParams.height) + } + + @Test + fun `home ai character section matches figma list spacing`() { + val root = inflateView(R.layout.fragment_v2_main_home) + val characterList = root.findViewById(R.id.rv_home_ai_characters) + val context = ApplicationProvider.getApplicationContext() + val parent = RecyclerView(context) + parent.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false) + val viewHolder = HomeAiCharacterAdapter().onCreateViewHolder(parent, 0) + val layoutParams = viewHolder.itemView.layoutParams as ViewGroup.MarginLayoutParams + + assertEquals(14.dpToPx(), characterList.paddingStart) + assertEquals(14.dpToPx(), characterList.paddingEnd) + assertEquals(14.dpToPx(), (characterList.layoutParams as ViewGroup.MarginLayoutParams).topMargin) + assertEquals(4.dpToPx(), layoutParams.marginEnd) + } + + @Test + fun `home ai character adapter preserves layout defined item dimensions`() { + val context = ApplicationProvider.getApplicationContext() + val parent = RecyclerView(context) + parent.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false) + val viewHolder = HomeAiCharacterAdapter().onCreateViewHolder(parent, 0) + + assertEquals(185.dpToPx(), viewHolder.itemView.layoutParams.width) + assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, viewHolder.itemView.layoutParams.height) + } + @Test fun `first audio adapter clips thumbnail container`() { val context = ApplicationProvider.getApplicationContext()