From 9d042ff75f7fa3468e65fc56942d52ba7ad361c4 Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 25 Feb 2025 21:25:06 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=20-=20=EC=9E=AC=EC=83=9D=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20-=20=ED=98=84=EC=9E=AC=20=EC=9E=AC?= =?UTF-8?q?=EC=83=9D=20=EC=A4=91=EC=9D=B4=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=ED=84=B0=EC=B9=98=EC=8B=9C=20?= =?UTF-8?q?=ED=84=B0=EC=B9=98=ED=95=9C=20=EC=BD=98=ED=85=90=EC=B8=A0?= =?UTF-8?q?=EB=A5=BC=20=EC=9E=AC=EC=83=9D=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../player/AudioContentPlayerFragment.kt | 11 ++++++++++- .../player/AudioContentPlayerService.kt | 19 +++++++++++++++++++ .../player/AudioContentPlaylistManager.kt | 7 +++++++ .../AudioContentPlaylistDetailActivity.kt | 2 +- .../AudioContentPlaylistDetailAdapter.kt | 11 +++++++++-- 5 files changed, 46 insertions(+), 4 deletions(-) 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) + } + } } }