diff --git a/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt index 069c1ea7..dc4ed5cd 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt @@ -67,7 +67,7 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl private lateinit var homeContentAdapter: HomeContentAdapter private lateinit var contentBannerAdapter: AudioContentMainBannerAdapter - private lateinit var seriesAdapter: HomeSeriesAdapter + private lateinit var originalSeriesAdapter: HomeSeriesAdapter private val handler = Handler(Looper.getMainLooper()) @@ -157,6 +157,7 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl setupSectionCreator() setupLatestContent() setupContentBanner() + setupOriginalSeries() } private fun setupLiveView() { @@ -525,6 +526,73 @@ class HomeFragment : BaseFragment(FragmentHomeBinding::infl } } + private fun setupOriginalSeries() { + val spSectionTitle = SpannableString(binding.tvSeriesOriginal.text) + spSectionTitle.setSpan( + ForegroundColorSpan( + ContextCompat.getColor( + requireContext(), + R.color.color_3bb9f1 + ) + ), + 0, + 2, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + binding.tvSeriesOriginal.text = spSectionTitle + + originalSeriesAdapter = HomeSeriesAdapter { + startActivity( + Intent(requireContext(), SeriesDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_SERIES_ID, it) + } + ) + } + + val recyclerView = binding.rvSeriesOriginal + 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() + } + originalSeriesAdapter.itemCount - 1 -> { + outRect.left = 8f.dpToPx().toInt() + outRect.right = 0 + } + else -> { + outRect.left = 8f.dpToPx().toInt() + outRect.right = 8f.dpToPx().toInt() + } + } + } + }) + recyclerView.adapter = originalSeriesAdapter + + viewModel.originalAudioDramaListLiveData.observe(viewLifecycleOwner) { + if (it.isNotEmpty()) { + binding.llSeriesOriginal.visibility = View.VISIBLE + originalSeriesAdapter.addItems(it) + } else { + binding.llSeriesOriginal.visibility = View.GONE + } + } + } + private fun bindData() { viewModel.isLoading.observe(viewLifecycleOwner) { if (it) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/home/HomeSeriesAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeSeriesAdapter.kt new file mode 100644 index 00000000..923e33b8 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/home/HomeSeriesAdapter.kt @@ -0,0 +1,89 @@ +package kr.co.vividnext.sodalive.home + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestOptions +import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse +import kr.co.vividnext.sodalive.databinding.ItemHomeSeriesBinding +import kr.co.vividnext.sodalive.extensions.dpToPx + +class HomeSeriesAdapter( + private val onClickItem: (Long) -> Unit +) : RecyclerView.Adapter() { + + val items = mutableListOf() + + inner class ViewHolder( + private val context: Context, + private val binding: ItemHomeSeriesBinding + ) : RecyclerView.ViewHolder(binding.root) { + @SuppressLint("SetTextI18n") + fun bind(item: GetSeriesListResponse.SeriesListItem) { + Glide + .with(context) + .load(item.coverImage) + .apply( + RequestOptions().transform( + CenterCrop(), + RoundedCorners(16f.dpToPx().toInt()) + ) + ) + .into(binding.ivCover) + + binding.tvTitle.text = item.title + binding.tvNickname.text = item.creator.nickname + binding.tvSeriesContentCount.text = "총 ${item.numberOfContent}화" + binding.tvNew.visibility = if (item.isNew) { + View.VISIBLE + } else { + View.GONE + } + + binding.tvPopular.visibility = if (item.isPopular) { + View.VISIBLE + } else { + View.GONE + } + + if (item.isComplete) { + binding.tvComplete.visibility = View.VISIBLE + } else { + binding.tvComplete.visibility = View.GONE + } + + binding.root.setOnClickListener { onClickItem(item.seriesId) } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( + parent.context, + ItemHomeSeriesBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(items[position]) + } + + override fun getItemCount() = items.count() + + @SuppressLint("NotifyDataSetChanged") + fun addItems(items: List) { + this.items.addAll(items) + notifyDataSetChanged() + } + + fun isVisibleRecyclerView(): Boolean { + return items.isNotEmpty() + } +} diff --git a/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_black_70.xml b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_black_70.xml new file mode 100644 index 00000000..8eaa0e29 --- /dev/null +++ b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_black_70.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_ef5247.xml b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_ef5247.xml new file mode 100644 index 00000000..b7a9c39c --- /dev/null +++ b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_ef5247.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_gradient.xml b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_gradient.xml new file mode 100644 index 00000000..90aa94e9 --- /dev/null +++ b/app/src/main/res/drawable/bg_left_top_right_bottom_round_corner_16_gradient.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_round_corner_39_transparent_white.xml b/app/src/main/res/drawable/bg_round_corner_39_transparent_white.xml new file mode 100644 index 00000000..87941ac3 --- /dev/null +++ b/app/src/main/res/drawable/bg_round_corner_39_transparent_white.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/layout/item_home_series.xml b/app/src/main/res/layout/item_home_series.xml new file mode 100644 index 00000000..93fdc03a --- /dev/null +++ b/app/src/main/res/layout/item_home_series.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + +