diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesApi.kt index 77c582d..cdff15b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesApi.kt @@ -30,6 +30,7 @@ interface SeriesApi { @Path("id") seriesId: Long, @Query("page") page: Int, @Query("size") size: Int, + @Query("sortType") sortType: SeriesListAllViewModel.SeriesSortType, @Header("Authorization") authHeader: String ): Single> diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesListAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesListAllViewModel.kt index 1f5473e..d267374 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesListAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesListAllViewModel.kt @@ -13,7 +13,7 @@ class SeriesListAllViewModel(private val repository: SeriesRepository) : BaseVie enum class SeriesSortType { @SerializedName("NEWEST") NEWEST, - @SerializedName("POPULAR") POPULAR + @SerializedName("OLDEST") OLDEST } private val _toastLiveData = MutableLiveData() diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesRepository.kt index a3de4b2..fdc5f7a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/SeriesRepository.kt @@ -24,11 +24,13 @@ class SeriesRepository(private val api: SeriesApi) { seriesId: Long, page: Int, size: Int, + sortType: SeriesListAllViewModel.SeriesSortType, token: String ) = api.getSeriesContentList( seriesId = seriesId, page = page - 1, size = size, + sortType = sortType, authHeader = token ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllActivity.kt index 8aa5c5c..46af87d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllActivity.kt @@ -2,11 +2,15 @@ package kr.co.vividnext.sodalive.audio_content.series.content import android.content.Intent import android.os.Bundle +import android.widget.TextView import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity +import kr.co.vividnext.sodalive.audio_content.series.SeriesListAllViewModel import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog @@ -86,6 +90,14 @@ class SeriesContentAllActivity : BaseActivity( }) binding.rvSeriesContentAll.adapter = adapter + + binding.tvSortNewest.setOnClickListener { + viewModel.changeSort(SeriesListAllViewModel.SeriesSortType.NEWEST) + } + + binding.tvSortOldest.setOnClickListener { + viewModel.changeSort(SeriesListAllViewModel.SeriesSortType.OLDEST) + } } fun bindData() { @@ -104,5 +116,42 @@ class SeriesContentAllActivity : BaseActivity( viewModel.seriesContentListLiveData.observe(this) { adapter.addItems(it) } + + viewModel.sortLiveData.observe(this) { + deselectSort() + selectSort( + when (it) { + SeriesListAllViewModel.SeriesSortType.OLDEST -> { + binding.tvSortOldest + } + + else -> { + binding.tvSortNewest + } + } + ) + } + } + + private fun deselectSort() { + val color = ContextCompat.getColor( + applicationContext, + R.color.color_88e2e2e2 + ) + + binding.tvSortNewest.setTextColor(color) + binding.tvSortOldest.setTextColor(color) + } + + private fun selectSort(view: TextView) { + view.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.color_e2e2e2 + ) + ) + + adapter.clear() + viewModel.getSeriesContentList() } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllViewModel.kt index 98ae18c..2b6af75 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/content/SeriesContentAllViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers +import kr.co.vividnext.sodalive.audio_content.series.SeriesListAllViewModel import kr.co.vividnext.sodalive.audio_content.series.SeriesRepository import kr.co.vividnext.sodalive.audio_content.series.detail.GetSeriesContentListItem import kr.co.vividnext.sodalive.base.BaseViewModel @@ -23,6 +24,10 @@ class SeriesContentAllViewModel(private val repository: SeriesRepository) : Base val seriesContentListLiveData: LiveData> get() = _seriesContentListLiveData + private var _sortLiveData = MutableLiveData(SeriesListAllViewModel.SeriesSortType.NEWEST) + val sortLiveData: LiveData + get() = _sortLiveData + var seriesId = 0L var page = 1 @@ -38,6 +43,7 @@ class SeriesContentAllViewModel(private val repository: SeriesRepository) : Base seriesId = seriesId, page = page, size = pageSize, + sortType = _sortLiveData.value!!, token = "Bearer ${SharedPreferenceManager.token}" ) .subscribeOn(Schedulers.io()) @@ -70,4 +76,12 @@ class SeriesContentAllViewModel(private val repository: SeriesRepository) : Base ) } } + + fun changeSort(sortType: SeriesListAllViewModel.SeriesSortType) { + if (_sortLiveData.value != sortType) { + page = 1 + isLast = false + _sortLiveData.value = sortType + } + } } diff --git a/app/src/main/res/layout/activity_series_content_all.xml b/app/src/main/res/layout/activity_series_content_all.xml index 0e91873..473148c 100644 --- a/app/src/main/res/layout/activity_series_content_all.xml +++ b/app/src/main/res/layout/activity_series_content_all.xml @@ -10,6 +10,41 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/ll_sort" />