refactor(mypage): 기능 버튼 렌더링 책임을 분리한다
This commit is contained in:
@@ -4,12 +4,9 @@ import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Rect
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.webkit.URLUtil
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.core.net.toUri
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
@@ -23,13 +20,11 @@ import kr.co.vividnext.sodalive.audio_content.box.AudioContentBoxActivity
|
||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
|
||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
import kr.co.vividnext.sodalive.common.FunctionButtonHelper
|
||||
import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentMyBinding
|
||||
import kr.co.vividnext.sodalive.databinding.ItemFunctionButtonBinding
|
||||
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
@@ -42,6 +37,8 @@ import kr.co.vividnext.sodalive.mypage.block.BlockMemberActivity
|
||||
import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
|
||||
import kr.co.vividnext.sodalive.mypage.can.coupon.CanCouponActivity
|
||||
import kr.co.vividnext.sodalive.mypage.can.status.CanStatusActivity
|
||||
import kr.co.vividnext.sodalive.mypage.function_button.FunctionButtonAdapter
|
||||
import kr.co.vividnext.sodalive.mypage.function_button.FunctionButtonItem
|
||||
import kr.co.vividnext.sodalive.mypage.point.PointStatusActivity
|
||||
import kr.co.vividnext.sodalive.mypage.profile.ProfileUpdateActivity
|
||||
import kr.co.vividnext.sodalive.mypage.recent.RecentContentAdapter
|
||||
@@ -350,7 +347,12 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
|
||||
}
|
||||
|
||||
private fun updateFunctionButtons(isAuth: Boolean? = null) {
|
||||
functionButtonAdapter.submitList(buildFunctionButtonItems(isAuth))
|
||||
}
|
||||
|
||||
private fun buildFunctionButtonItems(isAuth: Boolean?): List<FunctionButtonItem> {
|
||||
val isKoreanUser = SharedPreferenceManager.countryCode.ifBlank { "KR" } == "KR"
|
||||
|
||||
val items = mutableListOf(
|
||||
FunctionButtonItem(
|
||||
iconRes = R.drawable.ic_my_storage,
|
||||
@@ -468,7 +470,7 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
|
||||
}
|
||||
}
|
||||
|
||||
functionButtonAdapter.submitList(items)
|
||||
return items
|
||||
}
|
||||
|
||||
private fun showAuthDialog() {
|
||||
@@ -497,47 +499,3 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private data class FunctionButtonItem(
|
||||
@field:DrawableRes val iconRes: Int,
|
||||
val title: String,
|
||||
val onClick: () -> Unit
|
||||
)
|
||||
|
||||
private class FunctionButtonAdapter : RecyclerView.Adapter<FunctionButtonAdapter.ViewHolder>() {
|
||||
private val items = mutableListOf<FunctionButtonItem>()
|
||||
|
||||
inner class ViewHolder(
|
||||
private val binding: ItemFunctionButtonBinding
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
fun bind(item: FunctionButtonItem) {
|
||||
FunctionButtonHelper.setupFunctionButton(
|
||||
buttonView = binding.root,
|
||||
iconRes = item.iconRes,
|
||||
title = item.title,
|
||||
clickListener = View.OnClickListener { item.onClick() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
||||
ItemFunctionButtonBinding.inflate(
|
||||
LayoutInflater.from(parent.context),
|
||||
parent,
|
||||
false
|
||||
)
|
||||
)
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount() = items.size
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
fun submitList(newItems: List<FunctionButtonItem>) {
|
||||
items.clear()
|
||||
items.addAll(newItems)
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package kr.co.vividnext.sodalive.mypage.function_button
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.common.FunctionButtonHelper
|
||||
import kr.co.vividnext.sodalive.databinding.ItemFunctionButtonBinding
|
||||
|
||||
class FunctionButtonAdapter : RecyclerView.Adapter<FunctionButtonAdapter.ViewHolder>() {
|
||||
private val items = mutableListOf<FunctionButtonItem>()
|
||||
|
||||
inner class ViewHolder(
|
||||
private val binding: ItemFunctionButtonBinding
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
fun bind(item: FunctionButtonItem) {
|
||||
FunctionButtonHelper.setupFunctionButton(
|
||||
buttonView = binding.root,
|
||||
iconRes = item.iconRes,
|
||||
title = item.title,
|
||||
clickListener = View.OnClickListener { item.onClick() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
|
||||
ItemFunctionButtonBinding.inflate(
|
||||
LayoutInflater.from(parent.context),
|
||||
parent,
|
||||
false
|
||||
)
|
||||
)
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
holder.bind(items[position])
|
||||
}
|
||||
|
||||
override fun getItemCount() = items.size
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
fun submitList(newItems: List<FunctionButtonItem>) {
|
||||
items.clear()
|
||||
items.addAll(newItems)
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package kr.co.vividnext.sodalive.mypage.function_button
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
|
||||
data class FunctionButtonItem(
|
||||
@param:DrawableRes val iconRes: Int,
|
||||
val title: String,
|
||||
val onClick: () -> Unit
|
||||
)
|
||||
Reference in New Issue
Block a user