feat(talk): 톡 탭에 Yandex 배너 헤더를 추가한다

This commit is contained in:
2026-04-27 15:22:48 +09:00
parent 4ef880c350
commit 7fe25f474a
2 changed files with 33 additions and 7 deletions

View File

@@ -4,12 +4,15 @@ import android.graphics.Rect
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.BuildConfig
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomActivity
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.YandexInlineBannerHeaderAdapter
import kr.co.vividnext.sodalive.databinding.FragmentTalkTabBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject
@@ -20,6 +23,7 @@ class TalkTabFragment : BaseFragment<FragmentTalkTabBinding>(
private val viewModel: TalkTabViewModel by inject()
private lateinit var adapter: TalkTabAdapter
private lateinit var bannerAdapter: YandexInlineBannerHeaderAdapter
private lateinit var loadingDialog: LoadingDialog
@@ -34,7 +38,17 @@ class TalkTabFragment : BaseFragment<FragmentTalkTabBinding>(
viewModel.refreshTalkRooms()
}
override fun onDestroyView() {
bannerAdapter.destroy()
super.onDestroyView()
}
private fun setupRecyclerView() {
val headerCount = 1
bannerAdapter = YandexInlineBannerHeaderAdapter(
adUnitId = BuildConfig.YANDEX_INLINE_BANNER_TALK_TAB_AD_UNIT_ID,
screenWidth = screenWidth
)
adapter = TalkTabAdapter {
startActivity(
ChatRoomActivity.newIntent(
@@ -56,16 +70,28 @@ class TalkTabFragment : BaseFragment<FragmentTalkTabBinding>(
) {
super.getItemOffsets(outRect, view, parent, state)
val position = parent.getChildAdapterPosition(view)
if (position < headerCount) {
outRect.set(0, 0, 0, 0)
return
}
val adjustedPosition = position - headerCount
val lastItemPosition = adapter.itemCount - 1
outRect.left = 24f.dpToPx().toInt()
outRect.right = 24f.dpToPx().toInt()
when (parent.getChildAdapterPosition(view)) {
when (adjustedPosition) {
0 -> {
outRect.top = 24f.dpToPx().toInt()
outRect.bottom = 12f.dpToPx().toInt()
outRect.bottom = if (adjustedPosition == lastItemPosition) {
24f.dpToPx().toInt()
} else {
12f.dpToPx().toInt()
}
}
adapter.itemCount - 1 -> {
lastItemPosition -> {
outRect.top = 12f.dpToPx().toInt()
outRect.bottom = 24f.dpToPx().toInt()
}
@@ -81,7 +107,7 @@ class TalkTabFragment : BaseFragment<FragmentTalkTabBinding>(
recyclerView.apply {
val lm = LinearLayoutManager(requireContext())
layoutManager = lm
adapter = this@TalkTabFragment.adapter
adapter = ConcatAdapter(bannerAdapter, this@TalkTabFragment.adapter)
// 스크롤 로딩 리스너: 끝에 도달하면 다음 페이지 로드
addOnScrollListener(object : RecyclerView.OnScrollListener() {
@@ -109,7 +135,7 @@ class TalkTabFragment : BaseFragment<FragmentTalkTabBinding>(
adapter.submitList(it)
} else {
adapter.submitList(emptyList())
binding.rvTalk.visibility = View.GONE
binding.rvTalk.visibility = View.VISIBLE
binding.tvEmpty.visibility = View.VISIBLE
binding.tvEmpty.setText(R.string.screen_chat_talk_empty)
}

View File

@@ -24,8 +24,8 @@
android:textSize="20sp"
android:fontFamily="@font/regular"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>