콘텐츠 메인

- 탭 구성
This commit is contained in:
2025-02-12 01:54:17 +09:00
parent 5469d288ba
commit 42e4c4649b
18 changed files with 458 additions and 1 deletions

View File

@@ -0,0 +1,131 @@
package kr.co.vividnext.sodalive.audio_content.main.v2
import android.content.Intent
import android.graphics.Typeface
import android.widget.TextView
import androidx.core.content.res.ResourcesCompat
import com.google.android.material.tabs.TabLayout
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.box.AudioContentBoxActivity
import kr.co.vividnext.sodalive.audio_content.main.v2.alarm.AudioContentMainTabAlarmFragment
import kr.co.vividnext.sodalive.audio_content.main.v2.asmr.AudioContentMainTabAsmrFragment
import kr.co.vividnext.sodalive.audio_content.main.v2.content.AudioContentMainTabContentFragment
import kr.co.vividnext.sodalive.audio_content.main.v2.free.AudioContentMainTabFreeFragment
import kr.co.vividnext.sodalive.audio_content.main.v2.replay.AudioContentMainTabReplayFragment
import kr.co.vividnext.sodalive.audio_content.main.v2.series.AudioContentMainTabSeriesFragment
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.databinding.ActivityAudioContentMainBinding
import kr.co.vividnext.sodalive.mypage.alarm.AlarmListActivity
enum class AudioContentMainTab {
HOME, SERIES, CONTENT, ALARM, ASMR, REPLAY, FREE;
companion object {
fun fromOrdinal(ordinal: Int): AudioContentMainTab? {
return values().getOrNull(ordinal)
}
}
}
class AudioContentMainActivity : BaseActivity<ActivityAudioContentMainBinding>(
ActivityAudioContentMainBinding::inflate
) {
private var fontBold: Typeface? = null
private var fontMedium: Typeface? = null
private var startTabPosition: AudioContentMainTab = AudioContentMainTab.SERIES
override fun setupView() {
startTabPosition = AudioContentMainTab.fromOrdinal(
intent.getIntExtra(
Constants.EXTRA_START_TAB_POSITION,
AudioContentMainTab.SERIES.ordinal
)
) ?: AudioContentMainTab.SERIES
setupToolbar()
loadFont()
setupTabs()
}
private fun setupToolbar() {
val toolbar = binding.toolbar
toolbar.ivContentKeep.setOnClickListener {
startActivity(
Intent(
applicationContext,
AudioContentBoxActivity::class.java
)
)
}
toolbar.ivAlarm.setOnClickListener {
startActivity(
Intent(
applicationContext,
AlarmListActivity::class.java
)
)
}
}
private fun loadFont() {
fontBold = ResourcesCompat.getFont(this, R.font.gmarket_sans_bold)
fontMedium = ResourcesCompat.getFont(this, R.font.gmarket_sans_medium)
}
private fun setupTabs() {
val tabs = binding.tabs
val tabTitles = listOf("", "시리즈", "단편", "모닝콜", "ASMR", "다시듣기", "무료")
for (title in tabTitles) {
tabs.addTab(tabs.newTab().setText(title))
}
tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
val selectedTab = AudioContentMainTab.fromOrdinal(tab.position)
if (selectedTab == null || selectedTab == AudioContentMainTab.HOME) finish()
replaceFragment(selectedTab = selectedTab!!)
tab.view.isSelected = true
setTabFont(tab, fontBold)
}
override fun onTabUnselected(tab: TabLayout.Tab) {
tab.view.isSelected = false
setTabFont(tab, fontMedium)
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
tabs.getTabAt(startTabPosition.ordinal)?.select()
replaceFragment(selectedTab = startTabPosition)
}
private fun replaceFragment(selectedTab: AudioContentMainTab) {
val startFragment = when (selectedTab) {
AudioContentMainTab.CONTENT -> AudioContentMainTabContentFragment()
AudioContentMainTab.ALARM -> AudioContentMainTabAlarmFragment()
AudioContentMainTab.ASMR -> AudioContentMainTabAsmrFragment()
AudioContentMainTab.REPLAY -> AudioContentMainTabReplayFragment()
AudioContentMainTab.FREE -> AudioContentMainTabFreeFragment()
else -> AudioContentMainTabSeriesFragment()
}
supportFragmentManager.beginTransaction()
.replace(
R.id.fl_container,
startFragment
)
.commit()
}
private fun setTabFont(tab: TabLayout.Tab, font: Typeface?) {
(tab.view.getChildAt(1) as? TextView)?.typeface = font
}
}

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.alarm
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabAlarmBinding
class AudioContentMainTabAlarmFragment : BaseFragment<FragmentAudioContentMainTabAlarmBinding>(
FragmentAudioContentMainTabAlarmBinding::inflate
) {
}

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.asmr
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabAsmrBinding
class AudioContentMainTabAsmrFragment : BaseFragment<FragmentAudioContentMainTabAsmrBinding>(
FragmentAudioContentMainTabAsmrBinding::inflate
) {
}

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.content
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabContentBinding
class AudioContentMainTabContentFragment : BaseFragment<FragmentAudioContentMainTabContentBinding>(
FragmentAudioContentMainTabContentBinding::inflate
) {
}

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.free
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabFreeBinding
class AudioContentMainTabFreeFragment : BaseFragment<FragmentAudioContentMainTabFreeBinding>(
FragmentAudioContentMainTabFreeBinding::inflate
) {
}

View File

@@ -21,7 +21,6 @@ import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation
import com.orhanobut.logger.Logger
import com.zhpan.bannerview.BaseBannerAdapter
import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
@@ -34,6 +33,8 @@ import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem
import kr.co.vividnext.sodalive.audio_content.main.banner.AudioContentMainBannerAdapter
import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter
import kr.co.vividnext.sodalive.audio_content.main.ranking.AudioContentMainRankingAdapter
import kr.co.vividnext.sodalive.audio_content.main.v2.AudioContentMainActivity
import kr.co.vividnext.sodalive.audio_content.main.v2.AudioContentMainTab
import kr.co.vividnext.sodalive.audio_content.main.v2.ContentRankCreatorAdapter
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity
@@ -334,6 +335,44 @@ class AudioContentMainTabHomeFragment : BaseFragment<FragmentAudioContentMainTab
binding.rlCategoryAudioToon.setOnClickListener {
showToast("준비중 입니다.")
}
binding.rlCategorySeries.setOnClickListener {
// startAudioContentMainActivity(AudioContentMainTab.SERIES)
requireContext().startActivity(
Intent(requireContext(), AudioContentMainActivity::class.java)
)
}
binding.rlCategoryContent.setOnClickListener {
startAudioContentMainActivity(AudioContentMainTab.CONTENT)
}
binding.rlCategoryAlarm.setOnClickListener {
startAudioContentMainActivity(AudioContentMainTab.ALARM)
}
binding.rlCategoryAsmr.setOnClickListener {
startAudioContentMainActivity(AudioContentMainTab.ASMR)
}
binding.rlCategoryReplay.setOnClickListener {
startAudioContentMainActivity(AudioContentMainTab.REPLAY)
}
binding.rlCategoryFree.setOnClickListener {
startAudioContentMainActivity(AudioContentMainTab.FREE)
}
}
private fun startAudioContentMainActivity(tab: AudioContentMainTab) {
startActivity(
Intent(requireContext(), AudioContentMainActivity::class.java).apply {
putExtra(
Constants.EXTRA_START_TAB_POSITION,
tab.ordinal
)
}
)
}
private fun setupRankCreator() {

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.replay
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabReplayBinding
class AudioContentMainTabReplayFragment : BaseFragment<FragmentAudioContentMainTabReplayBinding>(
FragmentAudioContentMainTabReplayBinding::inflate
) {
}

View File

@@ -0,0 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.main.v2.series
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentMainTabSeriesBinding
class AudioContentMainTabSeriesFragment : BaseFragment<FragmentAudioContentMainTabSeriesBinding>(
FragmentAudioContentMainTabSeriesBinding::inflate
) {
}