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.graphics.Rect
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView 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.detail.AudioContentDetailActivity
import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter import kr.co.vividnext.sodalive.audio_content.main.new_content.AudioContentMainNewContentThemeAdapter
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
@@ -58,6 +62,14 @@ class AudioContentAllActivity : BaseActivity<ActivityAudioContentAllBinding>(
} }
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvSortNewest.setOnClickListener {
viewModel.selectSort(AudioContentViewModel.Sort.NEWEST)
}
binding.tvSortPopularity.setOnClickListener {
viewModel.selectSort(AudioContentViewModel.Sort.POPULARITY)
}
setupTheme() setupTheme()
setupRecycler() setupRecycler()
} }
@@ -170,5 +182,45 @@ class AudioContentAllActivity : BaseActivity<ActivityAudioContentAllBinding>(
} }
adapter.appendItems(list) 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.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.audio_content.AudioContentRepository 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.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.home.AudioContentMainItem import kr.co.vividnext.sodalive.home.AudioContentMainItem
@@ -27,6 +28,10 @@ class AudioContentAllViewModel(
val themeListLiveData: LiveData<List<String>> val themeListLiveData: LiveData<List<String>>
get() = _themeListLiveData get() = _themeListLiveData
private var _sortLiveData = MutableLiveData(AudioContentViewModel.Sort.NEWEST)
val sortLiveData: LiveData<AudioContentViewModel.Sort>
get() = _sortLiveData
private var page = 1 private var page = 1
private val size = 20 private val size = 20
private var isLast = false private var isLast = false
@@ -88,6 +93,7 @@ class AudioContentAllViewModel(
size = size, size = size,
isFree = isFree, isFree = isFree,
isPointAvailableOnly = isPointAvailableOnly, isPointAvailableOnly = isPointAvailableOnly,
sortType = _sortLiveData.value!!,
theme = if (selectedTheme == "전체") { theme = if (selectedTheme == "전체") {
null null
} else { } else {
@@ -119,4 +125,11 @@ class AudioContentAllViewModel(
selectedTheme = theme selectedTheme = theme
loadAll(isFree, isPointOnly) loadAll(isFree, isPointOnly)
} }
fun selectSort(sortType: AudioContentViewModel.Sort) {
if (_sortLiveData.value != sortType) {
reset()
_sortLiveData.value = sortType
}
}
} }