재생 목록 상세

- 삭제 기능 추가
This commit is contained in:
2024-12-04 18:10:50 +09:00
parent 4012b44344
commit 6fbe7da71e
10 changed files with 176 additions and 8 deletions

View File

@@ -27,7 +27,7 @@ class AudioContentPlaylistListFragment : BaseFragment<FragmentAudioContentPlayli
private lateinit var loadingDialog: LoadingDialog
private lateinit var adapter: AudioContentPlaylistListAdapter
private val createPlaylistResult = registerForActivityResult(
private val createOrUpdatePlaylistResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == RESULT_OK) {
@@ -46,7 +46,7 @@ class AudioContentPlaylistListFragment : BaseFragment<FragmentAudioContentPlayli
private fun setupView() {
loadingDialog = LoadingDialog(requireActivity(), layoutInflater)
adapter = AudioContentPlaylistListAdapter { playlistId ->
startActivity(
createOrUpdatePlaylistResult.launch(
Intent(requireContext(), AudioContentPlaylistDetailActivity::class.java).apply {
putExtra(
Constants.EXTRA_AUDIO_CONTENT_PLAYLIST_ID,
@@ -98,7 +98,7 @@ class AudioContentPlaylistListFragment : BaseFragment<FragmentAudioContentPlayli
recyclerView.adapter = adapter
binding.tvCreatePlaylist.setOnClickListener {
createPlaylistResult.launch(
createOrUpdatePlaylistResult.launch(
Intent(
requireContext(),
AudioContentPlaylistCreateActivity::class.java

View File

@@ -17,4 +17,12 @@ class AudioContentPlaylistRepository(private val api: PlaylistApi) {
request: CreatePlaylistRequest,
token: String
) = api.createPlaylist(request, token)
fun deletePlaylist(
playlistId: Long,
token: String
) = api.deletePlaylist(
id = playlistId,
authHeader = token
)
}

View File

@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.audio_content.playlist.create.CreatePlaylistRequ
import kr.co.vividnext.sodalive.audio_content.playlist.detail.GetPlaylistDetailResponse
import kr.co.vividnext.sodalive.common.ApiResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.POST
@@ -27,4 +28,10 @@ interface PlaylistApi {
@Body request: CreatePlaylistRequest,
@Header("Authorization") authHeader: String
): Single<ApiResponse<Any>>
@DELETE("/audio-content/playlist/{id}")
fun deletePlaylist(
@Path("id") id: Long,
@Header("Authorization") authHeader: String
): Single<ApiResponse<Any>>
}

View File

@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.base.SodaDialog
import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.ActivityAudioContentPlaylistDetailBinding
@@ -85,7 +86,30 @@ class AudioContentPlaylistDetailActivity : BaseActivity<ActivityAudioContentPlay
binding.llPlay.setOnClickListener { }
binding.llShuffle.setOnClickListener { }
binding.toolbar.tvBack.setOnClickListener { finish() }
binding.tvBack.setOnClickListener { finish() }
binding.ivEdit.setOnClickListener { }
binding.ivMore.setOnClickListener {
val notifyFragment = AudioContentPlaylistDetailNotifyFragment {
SodaDialog(
activity = this@AudioContentPlaylistDetailActivity,
layoutInflater = layoutInflater,
title = "재생 목록 삭제",
desc = "'${binding.tvTitle.text}'을 삭제하시겠습니까?",
confirmButtonTitle = "삭제",
confirmButtonClick = {
viewModel.deletePlaylist(playlistId = playlistId) {
setResult(RESULT_OK)
finish()
}
},
cancelButtonTitle = "취소",
cancelButtonClick = {}
).show(screenWidth)
}
if (notifyFragment.isAdded) return@setOnClickListener
notifyFragment.show(supportFragmentManager, notifyFragment.tag)
}
}
@SuppressLint("SetTextI18n")

View File

@@ -0,0 +1,30 @@
package kr.co.vividnext.sodalive.audio_content.playlist.detail
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kr.co.vividnext.sodalive.R
class AudioContentPlaylistDetailNotifyFragment(
private val onClickDelete: () -> Unit
) : BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = inflater.inflate(
R.layout.fragment_audio_content_playlist_detail_notify,
container,
false
)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<TextView>(R.id.tv_delete).setOnClickListener {
onClickDelete()
dialog?.dismiss()
}
}
}

View File

@@ -56,4 +56,38 @@ class AudioContentPlaylistDetailViewModel(
)
)
}
fun deletePlaylist(playlistId: Long, onSuccess: () -> Unit) {
_isLoading.value = true
compositeDisposable.add(
repository.deletePlaylist(
playlistId = playlistId,
token = "Bearer ${SharedPreferenceManager.token}"
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (it.success) {
_toastLiveData.value = "삭제되었습니다."
onSuccess()
} else {
if (it.message != null) {
_toastLiveData.postValue(it.message)
} else {
_toastLiveData.postValue(
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
}
}
_isLoading.value = false
},
{
_isLoading.value = false
it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
}
)
)
}
}