From 1dc39cf78687428513c40a68462472a46225c3f3 Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 20 Nov 2025 02:44:27 +0900 Subject: [PATCH] =?UTF-8?q?feat(audio-content-all):=20=EC=B5=9C=EC=8B=A0?= =?UTF-8?q?=EC=88=9C/=EC=9D=B8=EA=B8=B0=EC=88=9C=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../all/AudioContentAllActivity.kt | 52 +++++++++++++++++++ .../all/AudioContentAllViewModel.kt | 13 +++++ 2 files changed, 65 insertions(+) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllActivity.kt index d19d3f2a..de43ef7f 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllActivity.kt @@ -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( } 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( } 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 + ) } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllViewModel.kt index 2063e945..c0dc13bd 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/all/AudioContentAllViewModel.kt @@ -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> get() = _themeListLiveData + private var _sortLiveData = MutableLiveData(AudioContentViewModel.Sort.NEWEST) + val sortLiveData: LiveData + 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 + } + } }