feat(chat-character): 큐레이션 영역 제거
This commit is contained in:
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.chat.character
|
|||||||
|
|
||||||
import androidx.annotation.Keep
|
import androidx.annotation.Keep
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
import kr.co.vividnext.sodalive.chat.character.curation.CurationSection
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
|
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
@@ -11,7 +10,6 @@ data class CharacterHomeResponse(
|
|||||||
@SerializedName("recentCharacters") val recentCharacters: List<RecentCharacter>,
|
@SerializedName("recentCharacters") val recentCharacters: List<RecentCharacter>,
|
||||||
@SerializedName("popularCharacters") val popularCharacters: List<Character>,
|
@SerializedName("popularCharacters") val popularCharacters: List<Character>,
|
||||||
@SerializedName("newCharacters") val newCharacters: List<Character>,
|
@SerializedName("newCharacters") val newCharacters: List<Character>,
|
||||||
@SerializedName("curationSections") val curationSections: List<CurationSection>
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import com.zhpan.indicator.enums.IndicatorStyle
|
|||||||
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.base.SodaDialog
|
import kr.co.vividnext.sodalive.base.SodaDialog
|
||||||
import kr.co.vividnext.sodalive.chat.character.curation.CurationSectionAdapter
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.detail.CharacterDetailActivity
|
import kr.co.vividnext.sodalive.chat.character.detail.CharacterDetailActivity
|
||||||
import kr.co.vividnext.sodalive.chat.character.detail.CharacterDetailActivity.Companion.EXTRA_CHARACTER_ID
|
import kr.co.vividnext.sodalive.chat.character.detail.CharacterDetailActivity.Companion.EXTRA_CHARACTER_ID
|
||||||
import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersAllActivity
|
import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersAllActivity
|
||||||
@@ -47,7 +46,6 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
|
|||||||
private lateinit var recentCharacterAdapter: RecentCharacterAdapter
|
private lateinit var recentCharacterAdapter: RecentCharacterAdapter
|
||||||
private lateinit var popularCharacterAdapter: CharacterAdapter
|
private lateinit var popularCharacterAdapter: CharacterAdapter
|
||||||
private lateinit var newCharacterAdapter: CharacterAdapter
|
private lateinit var newCharacterAdapter: CharacterAdapter
|
||||||
private lateinit var curationSectionAdapter: CurationSectionAdapter
|
|
||||||
private lateinit var loadingDialog: LoadingDialog
|
private lateinit var loadingDialog: LoadingDialog
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -65,7 +63,6 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
|
|||||||
setupRecentCharactersRecyclerView()
|
setupRecentCharactersRecyclerView()
|
||||||
setupPopularCharactersRecyclerView()
|
setupPopularCharactersRecyclerView()
|
||||||
setupNewCharactersRecyclerView()
|
setupNewCharactersRecyclerView()
|
||||||
setupCurationSectionsRecyclerView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupBanner() {
|
private fun setupBanner() {
|
||||||
@@ -311,62 +308,6 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupCurationSectionsRecyclerView() {
|
|
||||||
// 큐레이션 섹션 RecyclerView 설정
|
|
||||||
curationSectionAdapter = CurationSectionAdapter {
|
|
||||||
onCharacterClick(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val recyclerView = binding.rvCurationSections
|
|
||||||
|
|
||||||
recyclerView.layoutManager = LinearLayoutManager(
|
|
||||||
requireContext(),
|
|
||||||
LinearLayoutManager.VERTICAL,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
|
||||||
override fun getItemOffsets(
|
|
||||||
outRect: Rect,
|
|
||||||
view: View,
|
|
||||||
parent: RecyclerView,
|
|
||||||
state: RecyclerView.State
|
|
||||||
) {
|
|
||||||
super.getItemOffsets(outRect, view, parent, state)
|
|
||||||
|
|
||||||
when (parent.getChildAdapterPosition(view)) {
|
|
||||||
0 -> {
|
|
||||||
outRect.top = 0
|
|
||||||
outRect.bottom = 24f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
curationSectionAdapter.itemCount - 1 -> {
|
|
||||||
outRect.top = 24f.dpToPx().toInt()
|
|
||||||
outRect.bottom = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
outRect.top = 24f.dpToPx().toInt()
|
|
||||||
outRect.bottom = 24f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
recyclerView.adapter = curationSectionAdapter
|
|
||||||
|
|
||||||
// 큐레이션 섹션 LiveData 구독
|
|
||||||
viewModel.curationSections.observe(viewLifecycleOwner) {
|
|
||||||
if (it.isNotEmpty()) {
|
|
||||||
recyclerView.visibility = View.VISIBLE
|
|
||||||
curationSectionAdapter.updateSections(it)
|
|
||||||
} else {
|
|
||||||
recyclerView.visibility = View.GONE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun ensureLoginAndAuth(onAuthed: () -> Unit) {
|
private fun ensureLoginAndAuth(onAuthed: () -> Unit) {
|
||||||
if (SharedPreferenceManager.token.isBlank()) {
|
if (SharedPreferenceManager.token.isBlank()) {
|
||||||
(requireActivity() as MainActivity).showLoginActivity()
|
(requireActivity() as MainActivity).showLoginActivity()
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.orhanobut.logger.Logger
|
|||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||||
import kr.co.vividnext.sodalive.chat.character.curation.CurationSection
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
|
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||||
|
|
||||||
@@ -40,11 +39,6 @@ class CharacterTabViewModel(
|
|||||||
val newCharacters: LiveData<List<Character>>
|
val newCharacters: LiveData<List<Character>>
|
||||||
get() = _newCharacters
|
get() = _newCharacters
|
||||||
|
|
||||||
// 큐레이션 섹션 LiveData
|
|
||||||
private val _curationSections = MutableLiveData<List<CurationSection>>(emptyList())
|
|
||||||
val curationSections: LiveData<List<CurationSection>>
|
|
||||||
get() = _curationSections
|
|
||||||
|
|
||||||
fun fetchData() {
|
fun fetchData() {
|
||||||
_isLoading.value = true
|
_isLoading.value = true
|
||||||
|
|
||||||
@@ -60,7 +54,6 @@ class CharacterTabViewModel(
|
|||||||
_recentCharacters.value = data.recentCharacters
|
_recentCharacters.value = data.recentCharacters
|
||||||
_popularCharacters.value = data.popularCharacters
|
_popularCharacters.value = data.popularCharacters
|
||||||
_newCharacters.value = data.newCharacters
|
_newCharacters.value = data.newCharacters
|
||||||
_curationSections.value = data.curationSections
|
|
||||||
} else {
|
} else {
|
||||||
_toastLiveData.value =
|
_toastLiveData.value =
|
||||||
it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
package kr.co.vividnext.sodalive.chat.character.curation
|
|
||||||
|
|
||||||
import androidx.annotation.Keep
|
|
||||||
import com.google.gson.annotations.SerializedName
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.Character
|
|
||||||
|
|
||||||
@Keep
|
|
||||||
data class CurationSection(
|
|
||||||
@SerializedName("characterCurationId") val characterCurationId: Long,
|
|
||||||
@SerializedName("title") val title: String,
|
|
||||||
@SerializedName("characters") val characters: List<Character>
|
|
||||||
)
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
package kr.co.vividnext.sodalive.chat.character.curation
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.Context
|
|
||||||
import android.graphics.Rect
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.CharacterAdapter
|
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemCurationSectionBinding
|
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
|
||||||
|
|
||||||
class CurationSectionAdapter(
|
|
||||||
private var sections: List<CurationSection> = emptyList(),
|
|
||||||
private val onCharacterClick: (Long) -> Unit = {}
|
|
||||||
) : RecyclerView.Adapter<CurationSectionAdapter.ViewHolder>() {
|
|
||||||
|
|
||||||
inner class ViewHolder(
|
|
||||||
private val context: Context,
|
|
||||||
private val binding: ItemCurationSectionBinding
|
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
|
||||||
fun bind(section: CurationSection) {
|
|
||||||
binding.tvSectionTitle.text = section.title
|
|
||||||
|
|
||||||
// 캐릭터 리스트 설정
|
|
||||||
val characterAdapter = CharacterAdapter(
|
|
||||||
characters = section.characters,
|
|
||||||
showRanking = false,
|
|
||||||
onCharacterClick = onCharacterClick
|
|
||||||
)
|
|
||||||
|
|
||||||
val recyclerView = binding.rvCharacters
|
|
||||||
|
|
||||||
recyclerView.layoutManager = LinearLayoutManager(
|
|
||||||
context,
|
|
||||||
LinearLayoutManager.HORIZONTAL,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
|
||||||
override fun getItemOffsets(
|
|
||||||
outRect: Rect,
|
|
||||||
view: View,
|
|
||||||
parent: RecyclerView,
|
|
||||||
state: RecyclerView.State
|
|
||||||
) {
|
|
||||||
super.getItemOffsets(outRect, view, parent, state)
|
|
||||||
|
|
||||||
when (parent.getChildAdapterPosition(view)) {
|
|
||||||
0 -> {
|
|
||||||
outRect.left = 0
|
|
||||||
outRect.right = 8f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
characterAdapter.itemCount - 1 -> {
|
|
||||||
outRect.left = 8f.dpToPx().toInt()
|
|
||||||
outRect.right = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
outRect.left = 8f.dpToPx().toInt()
|
|
||||||
outRect.right = 8f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
recyclerView.adapter = characterAdapter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
|
||||||
parent.context,
|
|
||||||
ItemCurationSectionBinding.inflate(
|
|
||||||
LayoutInflater.from(parent.context),
|
|
||||||
parent,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
|
||||||
holder.bind(sections[position])
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemCount(): Int = sections.size
|
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
|
||||||
fun updateSections(newSections: List<CurationSection>) {
|
|
||||||
sections = newSections
|
|
||||||
notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -174,12 +174,5 @@
|
|||||||
android:paddingHorizontal="24dp" />
|
android:paddingHorizontal="24dp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- 큐레이션 섹션들 -->
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/rv_curation_sections"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:clipToPadding="false" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|||||||
Reference in New Issue
Block a user