parent
b331048dec
commit
ef32eb70dd
|
@ -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>>>
|
||||
}
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
) {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue