feat: 메인 홈
- 이벤트 배너 UI 추가
This commit is contained in:
		@@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.home
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.content.SharedPreferences
 | 
			
		||||
import android.graphics.Rect
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.os.Handler
 | 
			
		||||
import android.os.Looper
 | 
			
		||||
@@ -10,6 +11,7 @@ import android.text.SpannableString
 | 
			
		||||
import android.text.Spanned
 | 
			
		||||
import android.text.style.ForegroundColorSpan
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.widget.LinearLayout
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.annotation.OptIn
 | 
			
		||||
import androidx.core.content.ContextCompat
 | 
			
		||||
@@ -17,12 +19,18 @@ import androidx.media3.common.util.UnstableApi
 | 
			
		||||
import androidx.recyclerview.widget.GridLayoutManager
 | 
			
		||||
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.AudioContentPlayService
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.box.AudioContentBoxActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
 | 
			
		||||
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.player.AudioContentPlayerService
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.base.BaseFragment
 | 
			
		||||
import kr.co.vividnext.sodalive.common.Constants
 | 
			
		||||
@@ -38,11 +46,13 @@ import kr.co.vividnext.sodalive.live.room.dialog.LivePaymentDialog
 | 
			
		||||
import kr.co.vividnext.sodalive.live.room.dialog.LiveRoomPasswordDialog
 | 
			
		||||
import kr.co.vividnext.sodalive.main.MainActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.settings.notification.MemberRole
 | 
			
		||||
import org.koin.android.ext.android.inject
 | 
			
		||||
import java.text.SimpleDateFormat
 | 
			
		||||
import java.util.Date
 | 
			
		||||
import java.util.Locale
 | 
			
		||||
import kotlin.math.roundToInt
 | 
			
		||||
 | 
			
		||||
@OptIn(UnstableApi::class)
 | 
			
		||||
class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) {
 | 
			
		||||
@@ -56,6 +66,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
 | 
			
		||||
    private lateinit var latestContentThemeAdapter: HomeContentThemeAdapter
 | 
			
		||||
 | 
			
		||||
    private lateinit var homeContentAdapter: HomeContentAdapter
 | 
			
		||||
    private lateinit var contentBannerAdapter: AudioContentMainBannerAdapter
 | 
			
		||||
 | 
			
		||||
    private val handler = Handler(Looper.getMainLooper())
 | 
			
		||||
 | 
			
		||||
@@ -144,6 +155,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
 | 
			
		||||
        setupLiveView()
 | 
			
		||||
        setupSectionCreator()
 | 
			
		||||
        setupLatestContent()
 | 
			
		||||
        setupContentBanner()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupLiveView() {
 | 
			
		||||
@@ -414,6 +426,90 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupContentBanner() {
 | 
			
		||||
        val layoutParams = binding
 | 
			
		||||
            .eventBannerSlider
 | 
			
		||||
            .layoutParams as LinearLayout.LayoutParams
 | 
			
		||||
 | 
			
		||||
        val pagerWidth = screenWidth.toDouble()
 | 
			
		||||
        val pagerHeight = (pagerWidth * 0.53).roundToInt()
 | 
			
		||||
        layoutParams.width = pagerWidth.roundToInt()
 | 
			
		||||
        layoutParams.height = pagerHeight
 | 
			
		||||
 | 
			
		||||
        contentBannerAdapter = AudioContentMainBannerAdapter(
 | 
			
		||||
            requireContext(),
 | 
			
		||||
            pagerWidth.roundToInt(),
 | 
			
		||||
            pagerHeight
 | 
			
		||||
        ) {
 | 
			
		||||
            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!!)))
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding
 | 
			
		||||
            .eventBannerSlider
 | 
			
		||||
            .layoutParams = layoutParams
 | 
			
		||||
 | 
			
		||||
        binding.eventBannerSlider.apply {
 | 
			
		||||
            adapter = contentBannerAdapter as BaseBannerAdapter<Any>
 | 
			
		||||
 | 
			
		||||
            setLifecycleRegistry(lifecycle)
 | 
			
		||||
            setScrollDuration(1000)
 | 
			
		||||
            setInterval(4 * 1000)
 | 
			
		||||
        }.create()
 | 
			
		||||
 | 
			
		||||
        binding
 | 
			
		||||
            .eventBannerSlider
 | 
			
		||||
            .setIndicatorView(binding.indicatorEventBanner)
 | 
			
		||||
            .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(4f.dpToPx().toInt(), 10f.dpToPx().toInt())
 | 
			
		||||
            .setIndicatorHeight(4f.dpToPx().toInt())
 | 
			
		||||
 | 
			
		||||
        viewModel.eventBannerListLiveData.observe(viewLifecycleOwner) {
 | 
			
		||||
            if (
 | 
			
		||||
                SharedPreferenceManager.token.isBlank() ||
 | 
			
		||||
                (contentBannerAdapter.itemCount <= 0 && it.isEmpty())
 | 
			
		||||
            ) {
 | 
			
		||||
                binding.llBanner.visibility = View.GONE
 | 
			
		||||
            } else {
 | 
			
		||||
                binding.llBanner.visibility = View.VISIBLE
 | 
			
		||||
                binding.eventBannerSlider.refreshData(it)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun bindData() {
 | 
			
		||||
        viewModel.isLoading.observe(viewLifecycleOwner) {
 | 
			
		||||
            if (it) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user