feat: 메인 홈

- 오디션 리스트를 보여주지 않고 터치시 오디션 페이지로 이동하도록 수정
This commit is contained in:
2025-07-18 21:06:13 +09:00
parent 2f9bace3de
commit 45fd75ab36
9 changed files with 48 additions and 78 deletions

View File

@@ -175,6 +175,7 @@
<activity android:name=".audio_content.main.v2.series.completed.CompletedSeriesActivity" />
<activity android:name=".search.SearchActivity" />
<activity android:name=".audition.AuditionActivity" />
<activity android:name=".mypage.alarm.AlarmListActivity" />
<activity android:name=".mypage.alarm.AddAlarmActivity" />

View File

@@ -0,0 +1,18 @@
package kr.co.vividnext.sodalive.audition
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.databinding.ActivityAuditionBinding
@OptIn(UnstableApi::class)
class AuditionActivity : BaseActivity<ActivityAuditionBinding>(
ActivityAuditionBinding::inflate
) {
override fun setupView() {
supportFragmentManager.beginTransaction()
.replace(R.id.fl_container, AuditionFragment())
.commit()
}
}

View File

@@ -6,7 +6,6 @@ import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentBannerResponse
import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentRankingItem
import kr.co.vividnext.sodalive.audio_content.main.v2.GetContentCurationResponse
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.audition.GetAuditionListItem
import kr.co.vividnext.sodalive.explorer.GetExplorerSectionCreatorResponse
import kr.co.vividnext.sodalive.live.GetRoomListResponse
import kr.co.vividnext.sodalive.settings.event.GetEventResponse
@@ -20,7 +19,6 @@ data class GetHomeResponse(
@SerializedName("bannerList") val bannerList: List<GetAudioContentBannerResponse>,
@SerializedName("eventBannerList") val eventBannerList: GetEventResponse,
@SerializedName("originalAudioDramaList") val originalAudioDramaList: List<GetSeriesListResponse.SeriesListItem>,
@SerializedName("auditionList") val auditionList: List<GetAuditionListItem>,
@SerializedName("dayOfWeekSeriesList") val dayOfWeekSeriesList: List<GetSeriesListResponse.SeriesListItem>,
@SerializedName("contentRanking") val contentRanking: List<GetAudioContentRankingItem>,
@SerializedName("recommendChannelList") val recommendChannelList: List<RecommendChannelResponse>,

View File

@@ -32,7 +32,7 @@ import kr.co.vividnext.sodalive.audio_content.main.banner.AudioContentMainBanner
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.audition.detail.AuditionDetailActivity
import kr.co.vividnext.sodalive.audition.AuditionActivity
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog
@@ -54,7 +54,6 @@ 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) {
@@ -627,62 +626,23 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
private fun setupAudition() {
val layoutParams = binding
.auditionSlider
.ivAudition
.layoutParams as LinearLayout.LayoutParams
val pagerWidth = screenWidth.toDouble()
val pagerHeight = (pagerWidth * 120 / 352).roundToInt()
layoutParams.width = pagerWidth.roundToInt()
layoutParams.height = pagerHeight
val width = screenWidth
val height = width * 198 / 352
layoutParams.width = width
layoutParams.height = height
auditionAdapter = AuditionBannerAdapter(
requireContext(),
pagerWidth.roundToInt(),
pagerHeight
) {
if (SharedPreferenceManager.token.isNotBlank()) {
binding.ivAudition.layoutParams = layoutParams
binding.ivAudition.setOnClickListener {
startActivity(
Intent(requireContext(), AuditionDetailActivity::class.java).apply {
putExtra(Constants.EXTRA_AUDITION_ID, it)
}
Intent(
requireContext(),
AuditionActivity::class.java
)
} else {
(requireActivity() as MainActivity).showLoginActivity()
}
}
binding
.auditionSlider
.layoutParams = layoutParams
binding.auditionSlider.apply {
adapter = auditionAdapter as BaseBannerAdapter<Any>
setLifecycleRegistry(lifecycle)
setScrollDuration(1000)
setInterval(4 * 1000)
}.create()
binding
.auditionSlider
.setIndicatorView(binding.indicatorAudition)
.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())
viewModel.auditionListLiveData.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.llAudition.visibility = View.VISIBLE
binding.auditionSlider.refreshData(it)
} else {
binding.llAudition.visibility = View.GONE
}
}
}

View File

@@ -50,10 +50,6 @@ class HomeViewModel(private val repository: HomeRepository) : BaseViewModel() {
val originalAudioDramaListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
get() = _originalAudioDramaListLiveData
private var _auditionListLiveData = MutableLiveData<List<GetAuditionListItem>>()
val auditionListLiveData: LiveData<List<GetAuditionListItem>>
get() = _auditionListLiveData
private var _dayOfWeekSeriesListLiveData =
MutableLiveData<List<GetSeriesListResponse.SeriesListItem>>()
val dayOfWeekSeriesListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
@@ -97,7 +93,6 @@ class HomeViewModel(private val repository: HomeRepository) : BaseViewModel() {
_latestContentListLiveData.value = data.latestContentList
_eventBannerListLiveData.value = data.bannerList
_originalAudioDramaListLiveData.value = data.originalAudioDramaList
_auditionListLiveData.value = data.auditionList
_dayOfWeekSeriesListLiveData.value = data.dayOfWeekSeriesList
_contentRankingLiveData.value = data.contentRanking
_freeContentListLiveData.value = data.freeContentList

View File

@@ -12,7 +12,6 @@ import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository
import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse
import kr.co.vividnext.sodalive.home.AudioContentMainItem
import kr.co.vividnext.sodalive.live.recommend.GetRecommendLiveResponse
import kr.co.vividnext.sodalive.live.recommend.LiveRecommendRepository
import kr.co.vividnext.sodalive.live.recommend_channel.GetRecommendChannelResponse

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -218,26 +218,14 @@
android:paddingHorizontal="24dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_audition"
<ImageView
android:id="@+id/iv_audition"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp"
android:orientation="vertical"
android:visibility="gone">
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/audition_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.zhpan.indicator.IndicatorView
android:id="@+id/indicator_audition"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="28dp" />
</LinearLayout>
android:contentDescription="@null"
android:scaleType="centerCrop"
android:src="@drawable/img_banner_audition" />
<LinearLayout
android:id="@+id/ll_series_day_of_week"