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 f38d3b37..81d11fcf 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 @@ -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::inflate) { @@ -56,6 +66,7 @@ class HomeFragment : BaseFragment(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::infl setupLiveView() setupSectionCreator() setupLatestContent() + setupContentBanner() } private fun setupLiveView() { @@ -414,6 +426,90 @@ class HomeFragment : BaseFragment(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 + + 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) {