새로운 콘텐츠 전체보기

- 무료 플래그를 추가하여 무료콘텐츠만 조회가 가능하도록 수정
This commit is contained in:
klaus 2025-02-14 18:30:26 +09:00
parent b331048dec
commit ef32eb70dd
8 changed files with 88 additions and 8 deletions

View File

@ -161,6 +161,7 @@ interface AudioContentApi {
@GET("/audio-content/main/new/all")
fun getNewContentAllOfTheme(
@Query("isFree") isFree: Boolean,
@Query("theme") theme: String,
@Query("isAdultContentVisible") isAdultContentVisible: Boolean,
@Query("contentType") contentType: ContentType,
@ -333,4 +334,12 @@ interface AudioContentApi {
@Query("size") size: Int,
@Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetAudioContentMainItem>>>
@GET("/v2/audio-content/main/free/new-content-by-theme")
fun getNewFreeContentOfTheme(
@Query("theme") theme: String,
@Query("page") page: Int,
@Query("size") size: Int,
@Header("Authorization") authHeader: String
): Single<ApiResponse<List<GetAudioContentMainItem>>>
}

View File

@ -147,11 +147,13 @@ class AudioContentRepository(
)
fun getNewContentAllOfTheme(
isFree: Boolean,
theme: String,
page: Int,
size: Int,
token: String
) = api.getNewContentAllOfTheme(
isFree = isFree,
theme = theme,
isAdultContentVisible = SharedPreferenceManager.isAdultContentVisible,
contentType = ContentType.values()[SharedPreferenceManager.contentPreference],

View File

@ -5,6 +5,8 @@ import android.graphics.Rect
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -19,6 +21,7 @@ import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject
@OptIn(UnstableApi::class)
class AudioContentNewAllActivity : BaseActivity<ActivityAudioContentNewAllBinding>(
ActivityAudioContentNewAllBinding::inflate
) {
@ -29,12 +32,15 @@ class AudioContentNewAllActivity : BaseActivity<ActivityAudioContentNewAllBindin
private lateinit var newContentThemeAdapter: AudioContentMainNewContentThemeAdapter
private lateinit var newContentAdapter: AudioContentNewAllAdapter
private var isFree: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
isFree = intent.getBooleanExtra(Constants.EXTRA_AUDIO_CONTENT_FREE, false)
bindData()
viewModel.getThemeList()
viewModel.getNewContentList()
viewModel.getNewContentList(isFree = isFree)
}
override fun setupView() {
@ -49,7 +55,7 @@ class AudioContentNewAllActivity : BaseActivity<ActivityAudioContentNewAllBindin
private fun setupNewContentTheme() {
newContentThemeAdapter = AudioContentMainNewContentThemeAdapter {
newContentAdapter.clear()
viewModel.selectTheme(it)
viewModel.selectTheme(it, isFree = isFree)
}
binding.rvNewContentTheme.layoutManager = LinearLayoutManager(
@ -125,7 +131,7 @@ class AudioContentNewAllActivity : BaseActivity<ActivityAudioContentNewAllBindin
if (!recyclerView.canScrollVertically(1) &&
lastVisibleItemPosition == itemTotalCount
) {
viewModel.getNewContentList()
viewModel.getNewContentList(isFree)
}
}
})

View File

@ -38,12 +38,13 @@ class AudioContentNewAllViewModel(
private val size = 10
private var selectedTheme = ""
fun getNewContentList() {
fun getNewContentList(isFree: Boolean = false) {
if (!_isLoading.value!! && !isLast) {
_isLoading.value = true
compositeDisposable.add(
repository.getNewContentAllOfTheme(
isFree = isFree,
theme = if (selectedTheme == "전체") {
""
} else {
@ -118,10 +119,10 @@ class AudioContentNewAllViewModel(
)
}
fun selectTheme(theme: String) {
fun selectTheme(theme: String, isFree: Boolean) {
isLast = false
page = 1
selectedTheme = theme
getNewContentList()
getNewContentList(isFree)
}
}

View File

@ -5,7 +5,9 @@ import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.OptIn
import androidx.core.content.ContextCompat
import androidx.media3.common.util.UnstableApi
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -21,6 +23,7 @@ import kr.co.vividnext.sodalive.databinding.ActivityAudioContentCurationBinding
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
import org.koin.android.ext.android.inject
@OptIn(UnstableApi::class)
class AudioContentCurationActivity : BaseActivity<ActivityAudioContentCurationBinding>(
ActivityAudioContentCurationBinding::inflate
) {

View File

@ -290,7 +290,9 @@ class AudioContentMainTabFreeFragment : BaseFragment<FragmentAudioContentMainTab
}
private fun setupNewContentTheme() {
newContentThemeAdapter = AudioContentMainNewContentThemeAdapter {}
newContentThemeAdapter = AudioContentMainNewContentThemeAdapter {
viewModel.getNewFreeContentOfTheme(theme = it)
}
binding.rvNewContentTheme.layoutManager = LinearLayoutManager(
context,
@ -336,7 +338,14 @@ class AudioContentMainTabFreeFragment : BaseFragment<FragmentAudioContentMainTab
private fun setupNewContent() {
binding.ivNewContentAll.setOnClickListener {
startActivity(Intent(requireContext(), AudioContentNewAllActivity::class.java))
startActivity(
Intent(
requireContext(),
AudioContentNewAllActivity::class.java
).apply {
putExtra(Constants.EXTRA_AUDIO_CONTENT_FREE, true)
}
)
}
newContentAdapter = AudioContentMainContentAdapter(

View File

@ -9,4 +9,16 @@ class AudioContentMainTabFreeRepository(private val api: AudioContentApi) {
size = size,
authHeader = token
)
fun getNewContentOfTheme(
theme: String,
page: Int = 1,
size: Int = 10,
token: String
) = api.getNewFreeContentOfTheme(
theme = theme,
page = page - 1,
size = size,
authHeader = token
)
}

View File

@ -92,4 +92,42 @@ class AudioContentMainTabFreeViewModel(
)
)
}
fun getNewFreeContentOfTheme(theme: String) {
_isLoading.value = true
compositeDisposable.add(
repository.getNewContentOfTheme(
theme = if (theme == "전체") {
""
} else {
theme
},
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success && it.data != null) {
_newContentListLiveData.value = it.data!!
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
}
_isLoading.value = false
},
{
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
_isLoading.value = false
}
)
)
}
}