feat(ui): banner 추가
This commit is contained in:
		@@ -1,22 +1,42 @@
 | 
				
			|||||||
package kr.co.vividnext.sodalive.chat.character
 | 
					package kr.co.vividnext.sodalive.chat.character
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.content.Intent
 | 
				
			||||||
import android.graphics.Rect
 | 
					import android.graphics.Rect
 | 
				
			||||||
 | 
					import android.net.Uri
 | 
				
			||||||
import android.os.Bundle
 | 
					import android.os.Bundle
 | 
				
			||||||
import android.view.View
 | 
					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.LinearLayoutManager
 | 
				
			||||||
import androidx.recyclerview.widget.RecyclerView
 | 
					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.base.BaseFragment
 | 
				
			||||||
import kr.co.vividnext.sodalive.chat.character.curation.CurationSection
 | 
					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.curation.CurationSectionAdapter
 | 
				
			||||||
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
 | 
					import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
 | 
				
			||||||
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacterAdapter
 | 
					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.databinding.FragmentCharacterTabBinding
 | 
				
			||||||
 | 
					import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
 | 
				
			||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
 | 
					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>(
 | 
					class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
 | 
				
			||||||
    FragmentCharacterTabBinding::inflate
 | 
					    FragmentCharacterTabBinding::inflate
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
 | 
					    private lateinit var contentBannerAdapter: AudioContentMainBannerAdapter
 | 
				
			||||||
    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
 | 
				
			||||||
@@ -29,12 +49,89 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun setupView() {
 | 
					    private fun setupView() {
 | 
				
			||||||
 | 
					        setupBanner()
 | 
				
			||||||
        setupRecentCharactersRecyclerView()
 | 
					        setupRecentCharactersRecyclerView()
 | 
				
			||||||
        setupPopularCharactersRecyclerView()
 | 
					        setupPopularCharactersRecyclerView()
 | 
				
			||||||
        setupNewCharactersRecyclerView()
 | 
					        setupNewCharactersRecyclerView()
 | 
				
			||||||
        setupCurationSectionsRecyclerView()
 | 
					        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<Any>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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() {
 | 
					    private fun setupRecentCharactersRecyclerView() {
 | 
				
			||||||
        // 최근 대화한 캐릭터 RecyclerView 설정
 | 
					        // 최근 대화한 캐릭터 RecyclerView 설정
 | 
				
			||||||
        recentCharacterAdapter = RecentCharacterAdapter {
 | 
					        recentCharacterAdapter = RecentCharacterAdapter {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user