feat(audio-content-all): 최신순/인기순 정렬 추가

This commit is contained in:
2025-11-20 02:44:27 +09:00
parent a15b478ac6
commit 1dc39cf786
2 changed files with 65 additions and 0 deletions

View File

@@ -4,10 +4,14 @@ import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter
import kr.co.vividnext.sodalive.base.BaseActivity
@@ -58,6 +62,14 @@ class AudioContentAllActivity : BaseActivity<ActivityAudioContentAllBinding>(
}
binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvSortNewest.setOnClickListener {
viewModel.selectSort(AudioContentViewModel.Sort.NEWEST)
}
binding.tvSortPopularity.setOnClickListener {
viewModel.selectSort(AudioContentViewModel.Sort.POPULARITY)
}
setupTheme()
setupRecycler()
}
@@ -170,5 +182,45 @@ class AudioContentAllActivity : BaseActivity<ActivityAudioContentAllBinding>(
}
adapter.appendItems(list)
}
viewModel.sortLiveData.observe(this) {
deselectSort()
selectSort(
when (it) {
AudioContentViewModel.Sort.POPULARITY -> {
binding.tvSortPopularity
}
else -> {
binding.tvSortNewest
}
}
)
}
}
private fun deselectSort() {
val color = ContextCompat.getColor(
applicationContext,
R.color.color_88e2e2e2
)
binding.tvSortNewest.setTextColor(color)
binding.tvSortPopularity.setTextColor(color)
}
private fun selectSort(view: TextView) {
view.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_e2e2e2
)
)
adapter.addItems(emptyList())
viewModel.loadAll(
isFree = if (isFree) true else null,
isPointAvailableOnly = if (isPointOnly) true else null
)
}
}

View File

@@ -6,6 +6,7 @@ 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.AudioContentRepository
import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel
import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.home.AudioContentMainItem
@@ -27,6 +28,10 @@ class AudioContentAllViewModel(
val themeListLiveData: LiveData<List<String>>
get() = _themeListLiveData
private var _sortLiveData = MutableLiveData(AudioContentViewModel.Sort.NEWEST)
val sortLiveData: LiveData<AudioContentViewModel.Sort>
get() = _sortLiveData
private var page = 1
private val size = 20
private var isLast = false
@@ -88,6 +93,7 @@ class AudioContentAllViewModel(
size = size,
isFree = isFree,
isPointAvailableOnly = isPointAvailableOnly,
sortType = _sortLiveData.value!!,
theme = if (selectedTheme == "전체") {
null
} else {
@@ -119,4 +125,11 @@ class AudioContentAllViewModel(
selectedTheme = theme
loadAll(isFree, isPointOnly)
}
fun selectSort(sortType: AudioContentViewModel.Sort) {
if (_sortLiveData.value != sortType) {
reset()
_sortLiveData.value = sortType
}
}
}