feat(creator-channel): FanTalk 목록 상세 클릭을 추가한다

This commit is contained in:
2026-07-09 07:44:15 +09:00
parent da26b65a73
commit 1ba7846f4c
3 changed files with 17 additions and 5 deletions

View File

@@ -23,7 +23,8 @@ class CreatorChannelFanTalkFragment : BaseFragment<FragmentCreatorChannelFantalk
private val viewModel: CreatorChannelFanTalkViewModel by viewModel() private val viewModel: CreatorChannelFanTalkViewModel by viewModel()
private val fanTalkAdapter = CreatorChannelFanTalkAdapter( private val fanTalkAdapter = CreatorChannelFanTalkAdapter(
onOwnerMoreClick = ::showOwnerMorePopup, onOwnerMoreClick = ::showOwnerMorePopup,
onReportClick = ::showReportDialog onReportClick = ::showReportDialog,
onItemClick = { host.onCreatorChannelFanTalkItemClicked(it) }
) )
private var morePopup: CreatorChannelFanTalkMorePopup? = null private var morePopup: CreatorChannelFanTalkMorePopup? = null
private var lastContentLayoutKey: CreatorChannelFanTalkContentLayoutKey? = null private var lastContentLayoutKey: CreatorChannelFanTalkContentLayoutKey? = null
@@ -186,6 +187,7 @@ class CreatorChannelFanTalkFragment : BaseFragment<FragmentCreatorChannelFantalk
fun onCreatorChannelFanTalkWriteClicked() fun onCreatorChannelFanTalkWriteClicked()
fun onCreatorChannelFanTalkFloatingButtonVisibilityChanged(isVisible: Boolean) fun onCreatorChannelFanTalkFloatingButtonVisibilityChanged(isVisible: Boolean)
fun onCreatorChannelFanTalkDeleteClicked(fanTalkId: Long) fun onCreatorChannelFanTalkDeleteClicked(fanTalkId: Long)
fun onCreatorChannelFanTalkItemClicked(item: CreatorChannelFanTalkUiModel) = Unit
} }
companion object { companion object {

View File

@@ -15,7 +15,8 @@ import kr.co.vividnext.sodalive.v2.creator.channel.fantalk.model.CreatorChannelF
class CreatorChannelFanTalkAdapter( class CreatorChannelFanTalkAdapter(
private val onOwnerMoreClick: (View, CreatorChannelFanTalkUiModel) -> Unit = { _, _ -> }, private val onOwnerMoreClick: (View, CreatorChannelFanTalkUiModel) -> Unit = { _, _ -> },
private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit = { } private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit = { },
private val onItemClick: (CreatorChannelFanTalkUiModel) -> Unit = { }
) : RecyclerView.Adapter<CreatorChannelFanTalkAdapter.ViewHolder>() { ) : RecyclerView.Adapter<CreatorChannelFanTalkAdapter.ViewHolder>() {
private var items: List<CreatorChannelFanTalkUiModel> = emptyList() private var items: List<CreatorChannelFanTalkUiModel> = emptyList()
@@ -29,7 +30,8 @@ class CreatorChannelFanTalkAdapter(
return ViewHolder( return ViewHolder(
ItemCreatorChannelFantalkBinding.inflate(LayoutInflater.from(parent.context), parent, false), ItemCreatorChannelFantalkBinding.inflate(LayoutInflater.from(parent.context), parent, false),
onOwnerMoreClick, onOwnerMoreClick,
onReportClick onReportClick,
onItemClick
) )
} }
@@ -42,7 +44,8 @@ class CreatorChannelFanTalkAdapter(
class ViewHolder( class ViewHolder(
private val binding: ItemCreatorChannelFantalkBinding, private val binding: ItemCreatorChannelFantalkBinding,
private val onOwnerMoreClick: (View, CreatorChannelFanTalkUiModel) -> Unit, private val onOwnerMoreClick: (View, CreatorChannelFanTalkUiModel) -> Unit,
private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit,
private val onItemClick: (CreatorChannelFanTalkUiModel) -> Unit
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: CreatorChannelFanTalkUiModel) = with(binding) { fun bind(item: CreatorChannelFanTalkUiModel) = with(binding) {
@@ -50,6 +53,8 @@ class CreatorChannelFanTalkAdapter(
tvCreatorChannelFantalkNickname.text = item.writerNickname tvCreatorChannelFantalkNickname.text = item.writerNickname
tvCreatorChannelFantalkTime.text = item.createdAtText tvCreatorChannelFantalkTime.text = item.createdAtText
tvCreatorChannelFantalkContent.text = item.content tvCreatorChannelFantalkContent.text = item.content
root.setOnClickListener { onItemClick(item) }
tvCreatorChannelFantalkContent.setOnClickListener { onItemClick(item) }
bindRightAction(item) bindRightAction(item)
bindReply(item.reply) bindReply(item.reply)
} }

View File

@@ -153,7 +153,9 @@ class CreatorChannelFanTalkFragmentLayoutTest {
assertTrue(adapter.contains("R.drawable.ic_placeholder_profile")) assertTrue(adapter.contains("R.drawable.ic_placeholder_profile"))
assertTrue(adapter.contains("CreatorChannelFanTalkRightAction.Report")) assertTrue(adapter.contains("CreatorChannelFanTalkRightAction.Report"))
assertTrue(adapter.contains("CreatorChannelFanTalkRightAction.OwnerMore")) assertTrue(adapter.contains("CreatorChannelFanTalkRightAction.OwnerMore"))
assertFalse(adapter.contains("root.setOnClickListener")) assertTrue(adapter.contains("private val onItemClick: (CreatorChannelFanTalkUiModel) -> Unit"))
assertTrue(adapter.contains("root.setOnClickListener { onItemClick(item) }"))
assertTrue(adapter.contains("tvCreatorChannelFantalkContent.setOnClickListener { onItemClick(item) }"))
assertTrue(popup.contains("PopupWindow(anchor.context)")) assertTrue(popup.contains("PopupWindow(anchor.context)"))
assertTrue(popup.contains("tvCreatorChannelFantalkMoreEdit.isVisible = showEdit")) assertTrue(popup.contains("tvCreatorChannelFantalkMoreEdit.isVisible = showEdit"))
assertTrue(popup.contains("tvCreatorChannelFantalkMoreDelete.isVisible = showDelete")) assertTrue(popup.contains("tvCreatorChannelFantalkMoreDelete.isVisible = showDelete"))
@@ -192,6 +194,9 @@ class CreatorChannelFanTalkFragmentLayoutTest {
assertTrue(fragment.contains("fun onCreatorChannelFanTalkDeleteClicked(fanTalkId: Long)")) assertTrue(fragment.contains("fun onCreatorChannelFanTalkDeleteClicked(fanTalkId: Long)"))
assertTrue(adapter.contains("private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit")) assertTrue(adapter.contains("private val onReportClick: (CreatorChannelFanTalkUiModel) -> Unit"))
assertTrue(adapter.contains("tvCreatorChannelFantalkReport.setOnClickListener { onReportClick(item) }")) assertTrue(adapter.contains("tvCreatorChannelFantalkReport.setOnClickListener { onReportClick(item) }"))
assertTrue(adapter.contains("ivCreatorChannelFantalkMore.setOnClickListener { onOwnerMoreClick(it, item) }"))
assertTrue(fragment.contains("onItemClick = { host.onCreatorChannelFanTalkItemClicked(it) }"))
assertTrue(fragment.contains("fun onCreatorChannelFanTalkItemClicked(item: CreatorChannelFanTalkUiModel)"))
} }
@Test @Test