feat(talk): 톡 탭에 Yandex 배너 헤더를 추가한다
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user