fix(creator): 커뮤니티 썸네일 그리드를 보정한다

This commit is contained in:
2026-06-22 14:28:02 +09:00
parent 4288e7284b
commit 8f5c55e0d1
4 changed files with 115 additions and 57 deletions

View File

@@ -9,6 +9,7 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.v2.creator.channel.community.ui.calculateCreatorChannelCommunityGridItemSize
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertSame
@@ -80,13 +81,14 @@ class CreatorChannelCommunityFragmentLayoutTest {
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_list_comment_count))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_list_like_count))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_community_list_top_actions))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_community_list_top_price))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_community_list_owner_more))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_list_top_price))
assertSame(imageContainer, (lockIcon.parent as View).parent)
assertSame(imageContainer, (lockedPrice.parent as View).parent)
assertSame(
item.findViewById<View>(R.id.layout_creator_channel_community_list_top_actions),
item.findViewById<TextView>(R.id.tv_creator_channel_community_list_top_price).parent
item.findViewById<View>(R.id.layout_creator_channel_community_list_top_price).parent
)
assertTrue(itemLayout.contains("android:id=\"@+id/layout_creator_channel_community_list_locked_overlay\""))
assertTrue(itemLayout.contains("android:id=\"@+id/tv_creator_channel_community_list_locked_price\""))
@@ -103,9 +105,16 @@ class CreatorChannelCommunityFragmentLayoutTest {
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_community_grid_image))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_grid_text_preview))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_grid_lock_price))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_community_grid_notice))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_community_grid_notice))
assertTrue(itemLayout.contains("android:id=\"@+id/layout_creator_channel_community_grid_root\""))
assertTrue(itemLayout.contains("app:layout_constraintDimensionRatio=\"1:1\"") || itemLayout.contains("Square"))
assertTrue(itemLayout.contains("android:layout_width=\"wrap_content\""))
assertTrue(itemLayout.contains("android:layout_height=\"wrap_content\""))
assertTrue(!itemLayout.contains("android:layout_margin=\"@dimen/spacing_4\""))
assertTrue(!itemLayout.contains("android:background=\"@drawable/bg_feed_card\""))
assertTrue(!itemLayout.contains("android:background=\"@drawable/bg_feed_community_image\""))
assertTrue(itemLayout.contains("android:id=\"@+id/iv_creator_channel_community_grid_notice\""))
assertTrue(itemLayout.contains("android:src=\"@drawable/ic_pin\""))
assertTrue(itemLayout.contains("android:layout_gravity=\"top|end\""))
}
@Test
@@ -142,6 +151,10 @@ class CreatorChannelCommunityFragmentLayoutTest {
fragment.contains("GridLayoutManager(requireContext(), 3") ||
fragment.contains("GridLayoutManager(context, 3")
)
assertTrue(fragment.contains("applyCommunityGridPadding"))
assertTrue(fragment.contains("updateGridItemSize()"))
assertTrue(fragment.contains("doOnLayout"))
assertTrue(fragment.contains("calculateCreatorChannelCommunityGridItemSize("))
assertTrue(fragment.contains("viewModel.consumePaginationErrorMessage()"))
assertTrue(fragment.contains("applyOwnerCtaPadding"))
assertTrue(fragment.contains("pauseContent"))
@@ -171,8 +184,14 @@ class CreatorChannelCommunityFragmentLayoutTest {
assertTrue(listAdapter.contains("R.drawable.ic_new_player_play"))
assertTrue(listAdapter.contains("onOwnerMoreClick(item)"))
assertTrue(listAdapter.contains("tvCreatorChannelCommunityListLockedPrice.isVisible = item.isLocked"))
assertTrue(listAdapter.contains("tvCreatorChannelCommunityListTopPrice.isVisible = item.showOwnerTopPrice"))
assertTrue(listAdapter.contains("layoutCreatorChannelCommunityListTopPrice.isVisible = item.showOwnerTopPrice"))
assertTrue(!listAdapter.contains("item.isLocked || item.showOwnerTopPrice"))
assertTrue(gridAdapter.contains(".asBitmap()"))
assertTrue(gridAdapter.contains("CenterCrop()"))
assertTrue(!gridAdapter.contains("RoundedCorners"))
assertTrue(!gridAdapter.contains("14f.dpToPx()"))
assertTrue(!gridAdapter.contains("root.clipToOutline = true"))
assertTrue(!listAdapter.contains(".asBitmap()"))
assertTrue(!listAdapter.contains("root.setOnClickListener"))
assertTrue(!gridAdapter.contains("root.setOnClickListener"))
}
@@ -205,18 +224,26 @@ class CreatorChannelCommunityFragmentLayoutTest {
assertTrue(listAdapter.contains("ivCreatorChannelCommunityListImage.setImageDrawable(null)"))
assertTrue(gridAdapter.contains("val visibleImageUrl = item.imageUrl.takeIf"))
assertTrue(gridAdapter.contains("item.imageMode == CreatorChannelCommunityImageMode.Image"))
assertTrue(gridAdapter.contains("!item.isLocked && item.imageMode != CreatorChannelCommunityImageMode.Image"))
assertTrue(gridAdapter.contains("ivCreatorChannelCommunityGridImage.setImageDrawable(null)"))
}
@Test
fun `커뮤니티 grid adapter source는 margin을 제외한 3열 정사각 크기를 계산한다`() {
fun `커뮤니티 grid adapter source는 레거시처럼 itemSize로 root 정사각 크기를 고정한다`() {
val gridAdapter = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/community/ui/CreatorChannelCommunityGridAdapter.kt"
).readText()
assertTrue(gridAdapter.contains("leftMargin + rightMargin"))
assertTrue(gridAdapter.contains("availableWidth - totalHorizontalMargins"))
assertTrue(gridAdapter.contains("coerceAtLeast(0)"))
assertEquals(120, calculateCreatorChannelCommunityGridItemSize(360))
assertEquals(134, calculateCreatorChannelCommunityGridItemSize(402))
assertEquals(0, calculateCreatorChannelCommunityGridItemSize(-1))
assertTrue(gridAdapter.contains("setItemSizePx"))
assertTrue(gridAdapter.contains("private var itemSizePx: Int = 0"))
assertTrue(gridAdapter.contains("calculateCreatorChannelCommunityGridItemSize("))
assertTrue(gridAdapter.contains("width = itemSizePx"))
assertTrue(gridAdapter.contains("height = itemSizePx"))
assertTrue(!gridAdapter.contains("itemHorizontalMargins"))
assertTrue(!gridAdapter.contains("totalHorizontalMargins"))
}
private fun inflateView(layoutResId: Int): View {