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

View File

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