새로운 콘텐츠 전체보기
- 무료 플래그를 추가하여 무료콘텐츠만 조회가 가능하도록 수정
This commit is contained in:
		@@ -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
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user