diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerFragment.kt index ad6a9e4..2e24868 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerFragment.kt @@ -116,7 +116,16 @@ class AudioContentPlayerFragment( viewModel.toggleShowPlayList() } - adapter = AudioContentPlaylistDetailAdapter() + adapter = AudioContentPlaylistDetailAdapter { contentId -> + val extras = Bundle().apply { + putLong( + Constants.EXTRA_AUDIO_CONTENT_ID, + contentId + ) + } + val sessionCommand = SessionCommand("PLAY_SELECTED_CONTENT", Bundle.EMPTY) + mediaController!!.sendCustomCommand(sessionCommand, extras) + } val recyclerView = binding.rvPlaylistContent recyclerView.setHasFixedSize(true) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerService.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerService.kt index 88fd59a..d5b3299 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerService.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlayerService.kt @@ -128,6 +128,7 @@ class AudioContentPlayerService : MediaSessionService() { .add(SessionCommand("UPDATE_PLAYLIST", Bundle.EMPTY)) .add(SessionCommand("PLAY_NEXT_CONTENT", Bundle.EMPTY)) .add(SessionCommand("PLAY_PREVIOUS_CONTENT", Bundle.EMPTY)) + .add(SessionCommand("PLAY_SELECTED_CONTENT", Bundle.EMPTY)) .add(SessionCommand("GET_PLAYLIST", Bundle.EMPTY)) .build() @@ -169,6 +170,12 @@ class AudioContentPlayerService : MediaSessionService() { Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS)) } + "PLAY_SELECTED_CONTENT" -> { + val selectedContentId = args.getLong(Constants.EXTRA_AUDIO_CONTENT_ID) + playSelectedContent(contentId = selectedContentId) + Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS)) + } + "GET_PLAYLIST" -> { val extras = Bundle().apply { putParcelableArrayList( @@ -272,6 +279,18 @@ class AudioContentPlayerService : MediaSessionService() { } } + private fun playSelectedContent(contentId: Long) { + val content = playlistManager?.findByContentId(contentId = contentId) + + if (content != null) { + generateUrl( + content.id, + onSuccess = { urlGenerateSuccess(content, it) }, + onFailure = { playPreviousContent() } + ) + } + } + private fun generateUrl(contentId: Long, onSuccess: (String) -> Unit, onFailure: () -> Unit) { if (contentId <= 0) { onFailure() diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlaylistManager.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlaylistManager.kt index cd1c373..65818df 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlaylistManager.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/player/AudioContentPlaylistManager.kt @@ -21,6 +21,13 @@ class AudioContentPlaylistManager(private val playlist: List() { +class AudioContentPlaylistDetailAdapter( + private val onClickContent: (Long) -> Unit +) : RecyclerView.Adapter() { private val items = mutableListOf() private var currentPlayingContentId = 0L @@ -36,6 +37,12 @@ class AudioContentPlaylistDetailAdapter : } else { binding.root.setBackgroundResource(0) } + + binding.root.setOnClickListener { + if (currentPlayingContentId != item.id) { + onClickContent(item.id) + } + } } }