diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt index 63b68925d..0ca607167 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt @@ -19,6 +19,9 @@ package org.oxycblt.auxio.music.service import android.content.Context +import android.os.Bundle +import androidx.annotation.StringRes +import androidx.media.utils.MediaConstants import androidx.media3.common.MediaItem import androidx.media3.session.MediaSession.ControllerInfo import dagger.hilt.android.qualifiers.ApplicationContext @@ -29,6 +32,7 @@ import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.async +import org.oxycblt.auxio.R import org.oxycblt.auxio.list.ListSettings import org.oxycblt.auxio.list.sort.Sort import org.oxycblt.auxio.music.Album @@ -213,27 +217,41 @@ constructor( return when (val item = musicRepository.find(uid)) { is Album -> { val songs = listSettings.albumSongSort.songs(item.songs) - songs.map { it.toMediaItem(context, item) } + songs.map { it.toMediaItem(context, item).withHeader(R.string.lbl_songs) } } is Artist -> { val albums = ARTIST_ALBUMS_SORT.albums(item.explicitAlbums + item.implicitAlbums) val songs = listSettings.artistSongSort.songs(item.songs) - albums.map { it.toMediaItem(context) } + songs.map { it.toMediaItem(context, item) } + albums.map { it.toMediaItem(context).withHeader(R.string.lbl_albums) } + + songs.map { it.toMediaItem(context, item).withHeader(R.string.lbl_songs) } } is Genre -> { val artists = GENRE_ARTISTS_SORT.artists(item.artists) val songs = listSettings.genreSongSort.songs(item.songs) - artists.map { it.toMediaItem(context) } + - songs.map { it.toMediaItem(context, null) } + artists.map { it.toMediaItem(context).withHeader(R.string.lbl_artists) } + + songs.map { it.toMediaItem(context, null).withHeader(R.string.lbl_songs) } } is Playlist -> { - item.songs.map { it.toMediaItem(context, item) } + item.songs.map { it.toMediaItem(context, item).withHeader(R.string.lbl_songs) } } is Song, null -> return null } } + private fun MediaItem.withHeader(@StringRes res: Int): MediaItem { + val oldExtras = mediaMetadata.extras ?: Bundle() + val newExtras = + Bundle(oldExtras).apply { + putString( + MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, + context.getString(res)) + } + return buildUpon() + .setMediaMetadata(mediaMetadata.buildUpon().setExtras(newExtras).build()) + .build() + } + private fun getCategorySize( category: MediaSessionUID.Category, musicRepository: MusicRepository diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt index bde25c1b5..13fdb581e 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt @@ -103,7 +103,7 @@ fun Album.toMediaItem(context: Context): MediaItem { .setReleaseMonth(dates?.min?.month) .setReleaseDay(dates?.min?.day) .setMediaType(MediaMetadata.MEDIA_TYPE_ALBUM) - .setIsPlayable(true) + .setIsPlayable(false) .setIsBrowsable(true) .setArtworkUri(cover.single.mediaStoreCoverUri) .setExtras(Bundle().apply { putString("uid", mediaSessionUID.toString()) }) @@ -133,7 +133,7 @@ fun Artist.toMediaItem(context: Context): MediaItem { context.getString(R.string.def_song_count) })) .setMediaType(MediaMetadata.MEDIA_TYPE_ARTIST) - .setIsPlayable(true) + .setIsPlayable(false) .setIsBrowsable(true) .setGenre(genres.resolveNames(context)) .setArtworkUri(cover.single.mediaStoreCoverUri) @@ -157,7 +157,7 @@ fun Genre.toMediaItem(context: Context): MediaItem { context.getString(R.string.def_song_count) }) .setMediaType(MediaMetadata.MEDIA_TYPE_GENRE) - .setIsPlayable(true) + .setIsPlayable(false) .setIsBrowsable(true) .setArtworkUri(cover.single.mediaStoreCoverUri) .setExtras(Bundle().apply { putString("uid", mediaSessionUID.toString()) }) @@ -180,7 +180,7 @@ fun Playlist.toMediaItem(context: Context): MediaItem { context.getString(R.string.def_song_count) }) .setMediaType(MediaMetadata.MEDIA_TYPE_PLAYLIST) - .setIsPlayable(true) + .setIsPlayable(false) .setIsBrowsable(true) .setArtworkUri(cover?.single?.mediaStoreCoverUri) .setExtras(Bundle().apply { putString("uid", mediaSessionUID.toString()) }) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionPlayer.kt b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionPlayer.kt index 493969467..f5ea4215c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionPlayer.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionPlayer.kt @@ -173,12 +173,13 @@ class MediaSessionPlayer( playbackManager.repeatMode(appRepeatMode) } - override fun seekToDefaultPosition() { - playbackManager.seekTo(0) - } - override fun seekToDefaultPosition(mediaItemIndex: Int) { - playbackManager.goto(mediaItemIndex) + val indices = unscrambleQueueIndices() + val fakeIndex = indices.indexOf(mediaItemIndex) + if (fakeIndex < 0) { + return + } + playbackManager.goto(fakeIndex) } override fun seekToNext() = playbackManager.next() @@ -191,18 +192,9 @@ class MediaSessionPlayer( override fun seekTo(positionMs: Long) = playbackManager.seekTo(positionMs) - override fun seekTo(mediaItemIndex: Int, positionMs: Long) { - val indices = unscrambleQueueIndices() - val fakeIndex = indices.indexOf(mediaItemIndex) - if (fakeIndex < 0) { - return - } - playbackManager.goto(fakeIndex) - if (positionMs == C.TIME_UNSET) { - return - } - playbackManager.seekTo(positionMs) - } + override fun seekTo(mediaItemIndex: Int, positionMs: Long) = notAllowed() + + override fun seekToDefaultPosition() = notAllowed() override fun addMediaItems(index: Int, mediaItems: MutableList) { val deviceLibrary = musicRepository.deviceLibrary ?: return diff --git a/media b/media index 00124cbac..9fc2401b8 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 00124cbac493c06a24e19b01893946bdaf8faf58 +Subproject commit 9fc2401b8fdc2b23905402462e775c6db4e1527f