diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt index 0278eec..c44078a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentApi.kt @@ -170,6 +170,11 @@ interface AudioContentApi { @Header("Authorization") authHeader: String ): Single<ApiResponse<List<String>>> + @GET("/audio-content/ranking-sort-type") + fun getContentRankingSortType( + @Header("Authorization") authHeader: String + ): Single<ApiResponse<List<String>>> + @GET("/audio-content/ranking") fun getContentRanking( @Query("page") page: Int, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentRepository.kt index ac5bc7d..4db1c5d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/AudioContentRepository.kt @@ -164,6 +164,8 @@ class AudioContentRepository( authHeader = token ) + fun getContentRankingSortType(token: String) = api.getContentRankingSortType(authHeader = token) + fun getContentRanking( page: Int, size: Int, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllActivity.kt index c7bce6e..5d41f61 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllActivity.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity +import kr.co.vividnext.sodalive.audio_content.main.AudioContentMainNewContentThemeAdapter import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog @@ -23,11 +24,13 @@ class AudioContentRankingAllActivity : BaseActivity<ActivityAudioContentRankingA private lateinit var loadingDialog: LoadingDialog private lateinit var adapter: AudioContentRankingAllAdapter + private lateinit var sortAdapter: AudioContentMainNewContentThemeAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) bindData() + viewModel.getAudioContentRankingSortType() viewModel.getAudioContentRanking() } @@ -99,6 +102,53 @@ class AudioContentRankingAllActivity : BaseActivity<ActivityAudioContentRankingA }) binding.rvContentRanking.adapter = adapter + + setupContentRankingSortType() + } + + @SuppressLint("NotifyDataSetChanged") + private fun setupContentRankingSortType() { + sortAdapter = AudioContentMainNewContentThemeAdapter { + adapter.items.clear() + adapter.notifyDataSetChanged() + viewModel.selectSort(sort = it) + } + + binding.rvContentRankingSort.layoutManager = LinearLayoutManager( + this, + LinearLayoutManager.HORIZONTAL, + false + ) + + binding.rvContentRankingSort.addItemDecoration(object : RecyclerView.ItemDecoration() { + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + + when (parent.getChildAdapterPosition(view)) { + 0 -> { + outRect.left = 0 + outRect.right = 4f.dpToPx().toInt() + } + + sortAdapter.itemCount - 1 -> { + outRect.left = 4f.dpToPx().toInt() + outRect.right = 0 + } + + else -> { + outRect.left = 4f.dpToPx().toInt() + outRect.right = 4f.dpToPx().toInt() + } + } + } + }) + + binding.rvContentRankingSort.adapter = sortAdapter } @SuppressLint("NotifyDataSetChanged") @@ -120,12 +170,16 @@ class AudioContentRankingAllActivity : BaseActivity<ActivityAudioContentRankingA } viewModel.contentRankingItemsLiveData.observe(this) { - if (viewModel.page == 0) { + if (viewModel.page == 2) { adapter.items.clear() } adapter.items.addAll(it) adapter.notifyDataSetChanged() } + + viewModel.contentRankingSortListLiveData.observe(this) { + sortAdapter.addItems(it) + } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllViewModel.kt index 0ec8e6d..af250a5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentRankingAllViewModel.kt @@ -25,6 +25,10 @@ class AudioContentRankingAllViewModel( val dateStringLiveData: LiveData<String> get() = _dateStringLiveData + private var _contentRankingSortListLiveData = MutableLiveData<List<String>>() + val contentRankingSortListLiveData: LiveData<List<String>> + get() = _contentRankingSortListLiveData + private var _contentRankingItemsLiveData = MutableLiveData<List<GetAudioContentRankingItem>>() val contentRankingItemsLiveData: LiveData<List<GetAudioContentRankingItem>> get() = _contentRankingItemsLiveData @@ -33,6 +37,8 @@ class AudioContentRankingAllViewModel( private var pageSize = 10 private var isLast = false + private var selectedSort = "매출" + fun getAudioContentRanking() { if (!_isLoading.value!! && !isLast && page <= 5) { _isLoading.value = true @@ -40,6 +46,7 @@ class AudioContentRankingAllViewModel( repository.getContentRanking( page = page, size = pageSize, + sortType = selectedSort, token = "Bearer ${SharedPreferenceManager.token}" ) .subscribeOn(Schedulers.io()) @@ -56,7 +63,6 @@ class AudioContentRankingAllViewModel( _contentRankingItemsLiveData.value = it.data.items } else { isLast = true - _contentRankingItemsLiveData.value = listOf() } } else { _isLoading.value = false @@ -77,4 +83,38 @@ class AudioContentRankingAllViewModel( ) } } + + fun getAudioContentRankingSortType() { + compositeDisposable.add( + repository.getContentRankingSortType(token = "Bearer ${SharedPreferenceManager.token}") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success && it.data != null) { + _contentRankingSortListLiveData.value = it.data!! + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + } + }, + { + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + } + ) + ) + } + + fun selectSort(sort: String) { + page = 1 + isLast = false + selectedSort = sort + getAudioContentRanking() + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/AudioContentMainFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/AudioContentMainFragment.kt index 087e379..85500b9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/AudioContentMainFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/main/AudioContentMainFragment.kt @@ -395,7 +395,7 @@ class AudioContentMainFragment : BaseFragment<FragmentAudioContentMainBinding>( outRect.right = 4f.dpToPx().toInt() } - newContentThemeAdapter.itemCount - 1 -> { + contentRankingSortAdapter.itemCount - 1 -> { outRect.left = 4f.dpToPx().toInt() outRect.right = 0 } diff --git a/app/src/main/res/layout/activity_audio_content_ranking_all.xml b/app/src/main/res/layout/activity_audio_content_ranking_all.xml index 0ad77b6..04ca078 100644 --- a/app/src/main/res/layout/activity_audio_content_ranking_all.xml +++ b/app/src/main/res/layout/activity_audio_content_ranking_all.xml @@ -36,11 +36,19 @@ android:textSize="13.3sp" /> </LinearLayout> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/rv_content_ranking_sort" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="13.3dp" + android:clipToPadding="false" + android:paddingHorizontal="13.3dp" /> + <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_content_ranking" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="13.3dp" android:clipToPadding="false" - android:paddingHorizontal="6.7dp" - android:paddingVertical="13.3dp" /> + android:paddingHorizontal="6.7dp" /> </LinearLayout>