diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt index ada1dc94..006254c5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt @@ -1,22 +1,42 @@ package kr.co.vividnext.sodalive.chat.character +import android.content.Intent import android.graphics.Rect +import android.net.Uri import android.os.Bundle import android.view.View +import android.widget.LinearLayout +import androidx.annotation.OptIn +import androidx.core.content.ContextCompat +import androidx.media3.common.util.UnstableApi import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.zhpan.bannerview.BaseBannerAdapter +import com.zhpan.indicator.enums.IndicatorSlideMode +import com.zhpan.indicator.enums.IndicatorStyle +import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.audio_content.main.AudioContentBannerType +import kr.co.vividnext.sodalive.audio_content.main.banner.AudioContentMainBannerAdapter +import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.chat.character.curation.CurationSection import kr.co.vividnext.sodalive.chat.character.curation.CurationSectionAdapter import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacterAdapter +import kr.co.vividnext.sodalive.common.Constants +import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.FragmentCharacterTabBinding +import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity import kr.co.vividnext.sodalive.extensions.dpToPx +import kr.co.vividnext.sodalive.main.MainActivity +import kr.co.vividnext.sodalive.settings.event.EventDetailActivity // 캐릭터 탭 프래그먼트 +@OptIn(UnstableApi::class) class CharacterTabFragment : BaseFragment( FragmentCharacterTabBinding::inflate ) { + private lateinit var contentBannerAdapter: AudioContentMainBannerAdapter private lateinit var recentCharacterAdapter: RecentCharacterAdapter private lateinit var popularCharacterAdapter: CharacterAdapter private lateinit var newCharacterAdapter: CharacterAdapter @@ -29,12 +49,89 @@ class CharacterTabFragment : BaseFragment( } private fun setupView() { + setupBanner() setupRecentCharactersRecyclerView() setupPopularCharactersRecyclerView() setupNewCharactersRecyclerView() setupCurationSectionsRecyclerView() } + private fun setupBanner() { + val layoutParams = binding + .bannerSlider + .layoutParams as LinearLayout.LayoutParams + + val pagerWidth = screenWidth + val pagerHeight = pagerWidth * 198 / 352 + layoutParams.width = pagerWidth + layoutParams.height = pagerHeight + + contentBannerAdapter = AudioContentMainBannerAdapter( + requireContext(), + pagerWidth, + pagerHeight + ) { + if (SharedPreferenceManager.token.isNotBlank()) { + when (it.type) { + AudioContentBannerType.EVENT -> { + startActivity( + Intent(requireContext(), EventDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_EVENT, it.eventItem!!) + } + ) + } + + AudioContentBannerType.CREATOR -> { + startActivity( + Intent(requireContext(), UserProfileActivity::class.java).apply { + putExtra(Constants.EXTRA_USER_ID, it.creatorId!!) + } + ) + } + + AudioContentBannerType.SERIES -> { + startActivity( + Intent(requireContext(), SeriesDetailActivity::class.java).apply { + putExtra(Constants.EXTRA_SERIES_ID, it.seriesId!!) + } + ) + } + + AudioContentBannerType.LINK -> { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it.link!!))) + } + } + } else { + (requireActivity() as MainActivity).showLoginActivity() + } + } + + binding + .bannerSlider + .layoutParams = layoutParams + + binding.bannerSlider.apply { + adapter = contentBannerAdapter as BaseBannerAdapter + + setLifecycleRegistry(lifecycle) + setScrollDuration(1000) + setInterval(4 * 1000) + }.create() + + binding + .bannerSlider + .setIndicatorView(binding.indicatorBanner) + .setIndicatorStyle(IndicatorStyle.ROUND_RECT) + .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH) + .setIndicatorVisibility(View.GONE) + .setIndicatorSliderColor( + ContextCompat.getColor(requireContext(), R.color.color_909090), + ContextCompat.getColor(requireContext(), R.color.color_3bb9f1) + ) + .setIndicatorSliderWidth(10f.dpToPx().toInt(), 10f.dpToPx().toInt()) + .setIndicatorHeight(10f.dpToPx().toInt()) + } + private fun setupRecentCharactersRecyclerView() { // 최근 대화한 캐릭터 RecyclerView 설정 recentCharacterAdapter = RecentCharacterAdapter {