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 13fdb581e..9a5bb53c2 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 @@ -19,10 +19,15 @@ package org.oxycblt.auxio.music.service import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.os.Bundle +import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.media.utils.MediaConstants import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata +import java.io.ByteArrayOutputStream import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.R import org.oxycblt.auxio.music.Album @@ -37,14 +42,27 @@ import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.util.getPlural fun MediaSessionUID.Category.toMediaItem(context: Context): MediaItem { + // TODO: Make custom overflow menu for compat + val style = + Bundle().apply { + putInt( + MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM, + MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM) + } val metadata = MediaMetadata.Builder() .setTitle(context.getString(nameRes)) .setIsPlayable(false) .setIsBrowsable(true) .setMediaType(mediaType) - .build() - return MediaItem.Builder().setMediaId(toString()).setMediaMetadata(metadata).build() + .setExtras(style) + if (bitmapRes != null) { + val data = ByteArrayOutputStream() + BitmapFactory.decodeResource(context.resources, bitmapRes) + .compress(Bitmap.CompressFormat.PNG, 100, data) + metadata.setArtworkData(data.toByteArray(), MediaMetadata.PICTURE_TYPE_FILE_ICON) + } + return MediaItem.Builder().setMediaId(toString()).setMediaMetadata(metadata.build()).build() } fun Song.toMediaItem(context: Context, parent: MusicParent?): MediaItem { @@ -205,14 +223,38 @@ fun MediaItem.toSong(deviceLibrary: DeviceLibrary): Song? { } sealed interface MediaSessionUID { - enum class Category(val id: String, @StringRes val nameRes: Int, val mediaType: Int?) : - MediaSessionUID { - ROOT("root", R.string.info_app_name, null), - SONGS("songs", R.string.lbl_songs, MediaMetadata.MEDIA_TYPE_MUSIC), - ALBUMS("albums", R.string.lbl_albums, MediaMetadata.MEDIA_TYPE_FOLDER_ALBUMS), - ARTISTS("artists", R.string.lbl_artists, MediaMetadata.MEDIA_TYPE_FOLDER_ARTISTS), - GENRES("genres", R.string.lbl_genres, MediaMetadata.MEDIA_TYPE_FOLDER_GENRES), - PLAYLISTS("playlists", R.string.lbl_playlists, MediaMetadata.MEDIA_TYPE_FOLDER_PLAYLISTS); + enum class Category( + val id: String, + @StringRes val nameRes: Int, + @DrawableRes val bitmapRes: Int?, + val mediaType: Int? + ) : MediaSessionUID { + ROOT("root", R.string.info_app_name, null, null), + SONGS( + "songs", + R.string.lbl_songs, + R.drawable.ic_song_bitmap_24, + MediaMetadata.MEDIA_TYPE_MUSIC), + ALBUMS( + "albums", + R.string.lbl_albums, + R.drawable.ic_album_bitmap_24, + MediaMetadata.MEDIA_TYPE_FOLDER_ALBUMS), + ARTISTS( + "artists", + R.string.lbl_artists, + R.drawable.ic_artist_bitmap_24, + MediaMetadata.MEDIA_TYPE_FOLDER_ARTISTS), + GENRES( + "genres", + R.string.lbl_genres, + R.drawable.ic_genre_bitmap_24, + MediaMetadata.MEDIA_TYPE_FOLDER_GENRES), + PLAYLISTS( + "playlists", + R.string.lbl_playlists, + R.drawable.ic_playlist_bitmap_24, + MediaMetadata.MEDIA_TYPE_FOLDER_PLAYLISTS); override fun toString() = "$ID_CATEGORY:$id" diff --git a/app/src/main/res/drawable-hdpi/ic_album_bitmap_24.png b/app/src/main/res/drawable-hdpi/ic_album_bitmap_24.png new file mode 100644 index 000000000..c25d1465b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_album_bitmap_24.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_artist_bitmap_24.png b/app/src/main/res/drawable-hdpi/ic_artist_bitmap_24.png new file mode 100644 index 000000000..7a4ec1d24 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_artist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_genre_bitmap_24.png b/app/src/main/res/drawable-hdpi/ic_genre_bitmap_24.png new file mode 100644 index 000000000..0002c9c87 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_genre_bitmap_24.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_playlist_bitmap_24.png b/app/src/main/res/drawable-hdpi/ic_playlist_bitmap_24.png new file mode 100644 index 000000000..844eabebf Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_playlist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_song_bitmap_24.png b/app/src/main/res/drawable-hdpi/ic_song_bitmap_24.png new file mode 100644 index 000000000..9eb67934b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_song_bitmap_24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_album_bitmap_24.png b/app/src/main/res/drawable-mdpi/ic_album_bitmap_24.png new file mode 100644 index 000000000..1047e230c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_album_bitmap_24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_artist_bitmap_24.png b/app/src/main/res/drawable-mdpi/ic_artist_bitmap_24.png new file mode 100644 index 000000000..3f3936e36 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_artist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_genre_bitmap_24.png b/app/src/main/res/drawable-mdpi/ic_genre_bitmap_24.png new file mode 100644 index 000000000..d5034c0d8 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_genre_bitmap_24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_playlist_bitmap_24.png b/app/src/main/res/drawable-mdpi/ic_playlist_bitmap_24.png new file mode 100644 index 000000000..931d33f30 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_playlist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_song_bitmap_24.png b/app/src/main/res/drawable-mdpi/ic_song_bitmap_24.png new file mode 100644 index 000000000..cbaa75491 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_song_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_album_bitmap_24.png b/app/src/main/res/drawable-xhdpi/ic_album_bitmap_24.png new file mode 100644 index 000000000..f1ea82745 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_album_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_artist_bitmap_24.png b/app/src/main/res/drawable-xhdpi/ic_artist_bitmap_24.png new file mode 100644 index 000000000..880afde64 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_artist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_genre_bitmap_24.png b/app/src/main/res/drawable-xhdpi/ic_genre_bitmap_24.png new file mode 100644 index 000000000..7ac11d34d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_genre_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_playlist_bitmap_24.png b/app/src/main/res/drawable-xhdpi/ic_playlist_bitmap_24.png new file mode 100644 index 000000000..d88b412c9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_playlist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_song_bitmap_24.png b/app/src/main/res/drawable-xhdpi/ic_song_bitmap_24.png new file mode 100644 index 000000000..5a4c995f6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_song_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_album_bitmap_24.png b/app/src/main/res/drawable-xxhdpi/ic_album_bitmap_24.png new file mode 100644 index 000000000..68d136f59 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_album_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_artist_bitmap_24.png b/app/src/main/res/drawable-xxhdpi/ic_artist_bitmap_24.png new file mode 100644 index 000000000..5481634b0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_artist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_genre_bitmap_24.png b/app/src/main/res/drawable-xxhdpi/ic_genre_bitmap_24.png new file mode 100644 index 000000000..e7b7ff04c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_genre_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_playlist_bitmap_24.png b/app/src/main/res/drawable-xxhdpi/ic_playlist_bitmap_24.png new file mode 100644 index 000000000..1ac463441 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_playlist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_song_bitmap_24.png b/app/src/main/res/drawable-xxhdpi/ic_song_bitmap_24.png new file mode 100644 index 000000000..55709e1e2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_song_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_album_bitmap_24.png b/app/src/main/res/drawable-xxxhdpi/ic_album_bitmap_24.png new file mode 100644 index 000000000..08f1eae7c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_album_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_artist_bitmap_24.png b/app/src/main/res/drawable-xxxhdpi/ic_artist_bitmap_24.png new file mode 100644 index 000000000..e515a4134 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_artist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_genre_bitmap_24.png b/app/src/main/res/drawable-xxxhdpi/ic_genre_bitmap_24.png new file mode 100644 index 000000000..f211f6b60 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_genre_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_playlist_bitmap_24.png b/app/src/main/res/drawable-xxxhdpi/ic_playlist_bitmap_24.png new file mode 100644 index 000000000..b0a08a8b3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_playlist_bitmap_24.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_song_bitmap_24.png b/app/src/main/res/drawable-xxxhdpi/ic_song_bitmap_24.png new file mode 100644 index 000000000..c0869bc1d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_song_bitmap_24.png differ