feat: 메인 홈
- 오디션 리스트를 보여주지 않고 터치시 오디션 페이지로 이동하도록 수정
This commit is contained in:
@@ -175,6 +175,7 @@
|
|||||||
<activity android:name=".audio_content.main.v2.series.completed.CompletedSeriesActivity" />
|
<activity android:name=".audio_content.main.v2.series.completed.CompletedSeriesActivity" />
|
||||||
|
|
||||||
<activity android:name=".search.SearchActivity" />
|
<activity android:name=".search.SearchActivity" />
|
||||||
|
<activity android:name=".audition.AuditionActivity" />
|
||||||
|
|
||||||
<activity android:name=".mypage.alarm.AlarmListActivity" />
|
<activity android:name=".mypage.alarm.AlarmListActivity" />
|
||||||
<activity android:name=".mypage.alarm.AddAlarmActivity" />
|
<activity android:name=".mypage.alarm.AddAlarmActivity" />
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.GetAudioContentRankingItem
|
||||||
import kr.co.vividnext.sodalive.audio_content.main.v2.GetContentCurationResponse
|
import kr.co.vividnext.sodalive.audio_content.main.v2.GetContentCurationResponse
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
|
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.explorer.GetExplorerSectionCreatorResponse
|
||||||
import kr.co.vividnext.sodalive.live.GetRoomListResponse
|
import kr.co.vividnext.sodalive.live.GetRoomListResponse
|
||||||
import kr.co.vividnext.sodalive.settings.event.GetEventResponse
|
import kr.co.vividnext.sodalive.settings.event.GetEventResponse
|
||||||
@@ -20,7 +19,6 @@ data class GetHomeResponse(
|
|||||||
@SerializedName("bannerList") val bannerList: List<GetAudioContentBannerResponse>,
|
@SerializedName("bannerList") val bannerList: List<GetAudioContentBannerResponse>,
|
||||||
@SerializedName("eventBannerList") val eventBannerList: GetEventResponse,
|
@SerializedName("eventBannerList") val eventBannerList: GetEventResponse,
|
||||||
@SerializedName("originalAudioDramaList") val originalAudioDramaList: List<GetSeriesListResponse.SeriesListItem>,
|
@SerializedName("originalAudioDramaList") val originalAudioDramaList: List<GetSeriesListResponse.SeriesListItem>,
|
||||||
@SerializedName("auditionList") val auditionList: List<GetAuditionListItem>,
|
|
||||||
@SerializedName("dayOfWeekSeriesList") val dayOfWeekSeriesList: List<GetSeriesListResponse.SeriesListItem>,
|
@SerializedName("dayOfWeekSeriesList") val dayOfWeekSeriesList: List<GetSeriesListResponse.SeriesListItem>,
|
||||||
@SerializedName("contentRanking") val contentRanking: List<GetAudioContentRankingItem>,
|
@SerializedName("contentRanking") val contentRanking: List<GetAudioContentRankingItem>,
|
||||||
@SerializedName("recommendChannelList") val recommendChannelList: List<RecommendChannelResponse>,
|
@SerializedName("recommendChannelList") val recommendChannelList: List<RecommendChannelResponse>,
|
||||||
|
|||||||
@@ -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.player.AudioContentPlayerService
|
||||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
||||||
import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity
|
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.base.BaseFragment
|
||||||
import kr.co.vividnext.sodalive.common.Constants
|
import kr.co.vividnext.sodalive.common.Constants
|
||||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||||
@@ -54,7 +54,6 @@ import org.koin.android.ext.android.inject
|
|||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.math.roundToInt
|
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) {
|
class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) {
|
||||||
@@ -627,62 +626,23 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
|
|||||||
|
|
||||||
private fun setupAudition() {
|
private fun setupAudition() {
|
||||||
val layoutParams = binding
|
val layoutParams = binding
|
||||||
.auditionSlider
|
.ivAudition
|
||||||
.layoutParams as LinearLayout.LayoutParams
|
.layoutParams as LinearLayout.LayoutParams
|
||||||
|
|
||||||
val pagerWidth = screenWidth.toDouble()
|
val width = screenWidth
|
||||||
val pagerHeight = (pagerWidth * 120 / 352).roundToInt()
|
val height = width * 198 / 352
|
||||||
layoutParams.width = pagerWidth.roundToInt()
|
layoutParams.width = width
|
||||||
layoutParams.height = pagerHeight
|
layoutParams.height = height
|
||||||
|
|
||||||
auditionAdapter = AuditionBannerAdapter(
|
binding.ivAudition.layoutParams = layoutParams
|
||||||
requireContext(),
|
|
||||||
pagerWidth.roundToInt(),
|
binding.ivAudition.setOnClickListener {
|
||||||
pagerHeight
|
|
||||||
) {
|
|
||||||
if (SharedPreferenceManager.token.isNotBlank()) {
|
|
||||||
startActivity(
|
startActivity(
|
||||||
Intent(requireContext(), AuditionDetailActivity::class.java).apply {
|
Intent(
|
||||||
putExtra(Constants.EXTRA_AUDITION_ID, it)
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,10 +50,6 @@ class HomeViewModel(private val repository: HomeRepository) : BaseViewModel() {
|
|||||||
val originalAudioDramaListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
|
val originalAudioDramaListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
|
||||||
get() = _originalAudioDramaListLiveData
|
get() = _originalAudioDramaListLiveData
|
||||||
|
|
||||||
private var _auditionListLiveData = MutableLiveData<List<GetAuditionListItem>>()
|
|
||||||
val auditionListLiveData: LiveData<List<GetAuditionListItem>>
|
|
||||||
get() = _auditionListLiveData
|
|
||||||
|
|
||||||
private var _dayOfWeekSeriesListLiveData =
|
private var _dayOfWeekSeriesListLiveData =
|
||||||
MutableLiveData<List<GetSeriesListResponse.SeriesListItem>>()
|
MutableLiveData<List<GetSeriesListResponse.SeriesListItem>>()
|
||||||
val dayOfWeekSeriesListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
|
val dayOfWeekSeriesListLiveData: LiveData<List<GetSeriesListResponse.SeriesListItem>>
|
||||||
@@ -97,7 +93,6 @@ class HomeViewModel(private val repository: HomeRepository) : BaseViewModel() {
|
|||||||
_latestContentListLiveData.value = data.latestContentList
|
_latestContentListLiveData.value = data.latestContentList
|
||||||
_eventBannerListLiveData.value = data.bannerList
|
_eventBannerListLiveData.value = data.bannerList
|
||||||
_originalAudioDramaListLiveData.value = data.originalAudioDramaList
|
_originalAudioDramaListLiveData.value = data.originalAudioDramaList
|
||||||
_auditionListLiveData.value = data.auditionList
|
|
||||||
_dayOfWeekSeriesListLiveData.value = data.dayOfWeekSeriesList
|
_dayOfWeekSeriesListLiveData.value = data.dayOfWeekSeriesList
|
||||||
_contentRankingLiveData.value = data.contentRanking
|
_contentRankingLiveData.value = data.contentRanking
|
||||||
_freeContentListLiveData.value = data.freeContentList
|
_freeContentListLiveData.value = data.freeContentList
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import kr.co.vividnext.sodalive.base.BaseViewModel
|
|||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
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.CreatorCommunityRepository
|
||||||
import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse
|
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.GetRecommendLiveResponse
|
||||||
import kr.co.vividnext.sodalive.live.recommend.LiveRecommendRepository
|
import kr.co.vividnext.sodalive.live.recommend.LiveRecommendRepository
|
||||||
import kr.co.vividnext.sodalive.live.recommend_channel.GetRecommendChannelResponse
|
import kr.co.vividnext.sodalive.live.recommend_channel.GetRecommendChannelResponse
|
||||||
|
|||||||
BIN
app/src/main/res/drawable-mdpi/img_banner_audition.png
Normal file
BIN
app/src/main/res/drawable-mdpi/img_banner_audition.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
11
app/src/main/res/layout/activity_audition.xml
Normal file
11
app/src/main/res/layout/activity_audition.xml
Normal 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>
|
||||||
@@ -218,26 +218,14 @@
|
|||||||
android:paddingHorizontal="24dp" />
|
android:paddingHorizontal="24dp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<ImageView
|
||||||
android:id="@+id/ll_audition"
|
android:id="@+id/iv_audition"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="48dp"
|
android:layout_marginBottom="48dp"
|
||||||
android:orientation="vertical"
|
android:contentDescription="@null"
|
||||||
android:visibility="gone">
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@drawable/img_banner_audition" />
|
||||||
<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>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/ll_series_day_of_week"
|
android:id="@+id/ll_series_day_of_week"
|
||||||
|
|||||||
Reference in New Issue
Block a user