music: tear down menus
Only works on automotive OS, which I am not targeting right now.
This commit is contained in:
parent
cbdad3fe39
commit
14035956e6
2 changed files with 6 additions and 70 deletions
|
@ -83,46 +83,6 @@ sealed interface MediaSessionUID {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class BrowserOption(val actionId: String, val labelRes: Int, val iconRes: Int) {
|
|
||||||
PLAY(BuildConfig.APPLICATION_ID + ".menu.PLAY", R.string.lbl_play, R.drawable.ic_play_24),
|
|
||||||
SHUFFLE(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.SHUFFLE",
|
|
||||||
R.string.lbl_shuffle,
|
|
||||||
R.drawable.ic_shuffle_off_24),
|
|
||||||
PLAY_NEXT(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.PLAY_NEXT",
|
|
||||||
R.string.lbl_play_next,
|
|
||||||
R.drawable.ic_play_next_24),
|
|
||||||
ADD_TO_QUEUE(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.ADD_TO_QUEUE",
|
|
||||||
R.string.lbl_queue_add,
|
|
||||||
R.drawable.ic_queue_add_24),
|
|
||||||
DETAILS(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.DETAILS",
|
|
||||||
R.string.lbl_parent_detail,
|
|
||||||
R.drawable.ic_details_24),
|
|
||||||
ALBUM_DETAILS(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.ALBUM_DETAILS",
|
|
||||||
R.string.lbl_album_details,
|
|
||||||
R.drawable.ic_album_24),
|
|
||||||
ARTIST_DETAILS(
|
|
||||||
BuildConfig.APPLICATION_ID + ".menu.ARTIST_DETAILS",
|
|
||||||
R.string.lbl_artist_details,
|
|
||||||
R.drawable.ic_artist_24);
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val ITEM_ID_MAP =
|
|
||||||
mapOf(
|
|
||||||
R.id.action_play to PLAY,
|
|
||||||
R.id.action_shuffle to SHUFFLE,
|
|
||||||
R.id.action_play_next to PLAY_NEXT,
|
|
||||||
R.id.action_queue_add to ADD_TO_QUEUE,
|
|
||||||
R.id.action_detail to DETAILS,
|
|
||||||
R.id.action_album_details to ALBUM_DETAILS,
|
|
||||||
R.id.action_artist_details to ARTIST_DETAILS)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
typealias Sugar = Bundle.(Context) -> Unit
|
typealias Sugar = Bundle.(Context) -> Unit
|
||||||
|
|
||||||
fun header(@StringRes nameRes: Int): Sugar = {
|
fun header(@StringRes nameRes: Int): Sugar = {
|
||||||
|
@ -138,16 +98,6 @@ private fun style(style: Int): Sugar = {
|
||||||
putInt(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM, style)
|
putInt(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM, style)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun menu(@MenuRes res: Int): Sugar = { context ->
|
|
||||||
@SuppressLint("RestrictedApi") val builder = MenuBuilder(context)
|
|
||||||
MenuInflater(context).inflate(res, builder)
|
|
||||||
val menuIds =
|
|
||||||
builder.children.mapNotNullTo(ArrayList()) {
|
|
||||||
BrowserOption.ITEM_ID_MAP[it.itemId]?.actionId
|
|
||||||
}
|
|
||||||
putStringArrayList(MediaConstants.DESCRIPTION_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID_LIST, menuIds)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun makeExtras(context: Context, vararg sugars: Sugar): Bundle {
|
private fun makeExtras(context: Context, vararg sugars: Sugar): Bundle {
|
||||||
return Bundle().apply { sugars.forEach { this.it(context) } }
|
return Bundle().apply { sugars.forEach { this.it(context) } }
|
||||||
}
|
}
|
||||||
|
@ -181,7 +131,7 @@ fun Song.toMediaDescription(
|
||||||
} else {
|
} else {
|
||||||
MediaSessionUID.ChildItem(parent.uid, uid)
|
MediaSessionUID.ChildItem(parent.uid, uid)
|
||||||
}
|
}
|
||||||
val extras = makeExtras(context, *sugar, menu(R.menu.song))
|
val extras = makeExtras(context, *sugar)
|
||||||
return MediaDescriptionCompat.Builder()
|
return MediaDescriptionCompat.Builder()
|
||||||
.setMediaId(mediaSessionUID.toString())
|
.setMediaId(mediaSessionUID.toString())
|
||||||
.setTitle(name.resolve(context))
|
.setTitle(name.resolve(context))
|
||||||
|
@ -212,7 +162,7 @@ fun Album.toMediaItem(
|
||||||
} else {
|
} else {
|
||||||
MediaSessionUID.ChildItem(parent.uid, uid)
|
MediaSessionUID.ChildItem(parent.uid, uid)
|
||||||
}
|
}
|
||||||
val extras = makeExtras(context, *sugar, menu(R.menu.album))
|
val extras = makeExtras(context, *sugar)
|
||||||
val counts = context.getPlural(R.plurals.fmt_song_count, songs.size)
|
val counts = context.getPlural(R.plurals.fmt_song_count, songs.size)
|
||||||
val description =
|
val description =
|
||||||
MediaDescriptionCompat.Builder()
|
MediaDescriptionCompat.Builder()
|
||||||
|
@ -241,7 +191,7 @@ fun Artist.toMediaItem(context: Context, vararg sugar: Sugar): MediaItem {
|
||||||
} else {
|
} else {
|
||||||
context.getString(R.string.def_song_count)
|
context.getString(R.string.def_song_count)
|
||||||
})
|
})
|
||||||
val extras = makeExtras(context, *sugar, menu(R.menu.parent))
|
val extras = makeExtras(context, *sugar)
|
||||||
val description =
|
val description =
|
||||||
MediaDescriptionCompat.Builder()
|
MediaDescriptionCompat.Builder()
|
||||||
.setMediaId(mediaSessionUID.toString())
|
.setMediaId(mediaSessionUID.toString())
|
||||||
|
@ -262,7 +212,7 @@ fun Genre.toMediaItem(context: Context, vararg sugar: Sugar): MediaItem {
|
||||||
} else {
|
} else {
|
||||||
context.getString(R.string.def_song_count)
|
context.getString(R.string.def_song_count)
|
||||||
}
|
}
|
||||||
val extras = makeExtras(context, *sugar, menu(R.menu.parent))
|
val extras = makeExtras(context, *sugar)
|
||||||
val description =
|
val description =
|
||||||
MediaDescriptionCompat.Builder()
|
MediaDescriptionCompat.Builder()
|
||||||
.setMediaId(mediaSessionUID.toString())
|
.setMediaId(mediaSessionUID.toString())
|
||||||
|
@ -282,7 +232,7 @@ fun Playlist.toMediaItem(context: Context, vararg sugar: Sugar): MediaItem {
|
||||||
} else {
|
} else {
|
||||||
context.getString(R.string.def_song_count)
|
context.getString(R.string.def_song_count)
|
||||||
}
|
}
|
||||||
val extras = makeExtras(context, *sugar, menu(R.menu.playlist))
|
val extras = makeExtras(context, *sugar)
|
||||||
val description =
|
val description =
|
||||||
MediaDescriptionCompat.Builder()
|
MediaDescriptionCompat.Builder()
|
||||||
.setMediaId(mediaSessionUID.toString())
|
.setMediaId(mediaSessionUID.toString())
|
||||||
|
|
|
@ -98,21 +98,7 @@ constructor(
|
||||||
fun getRoot(maxItems: Int) =
|
fun getRoot(maxItems: Int) =
|
||||||
BrowserRoot(
|
BrowserRoot(
|
||||||
MediaSessionUID.Tab(TabNode.Root(maxItems)).toString(),
|
MediaSessionUID.Tab(TabNode.Root(maxItems)).toString(),
|
||||||
Bundle().apply {
|
Bundle())
|
||||||
val actions =
|
|
||||||
BrowserOption.entries.mapTo(ArrayList()) {
|
|
||||||
Bundle().apply {
|
|
||||||
putString(
|
|
||||||
MediaConstants.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ID, it.actionId)
|
|
||||||
putString(
|
|
||||||
MediaConstants.EXTRAS_KEY_CUSTOM_BROWSER_ACTION_LABEL,
|
|
||||||
context.getString(it.labelRes))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
putParcelableArrayList(
|
|
||||||
MediaConstants.BROWSER_SERVICE_EXTRAS_KEY_CUSTOM_BROWSER_ACTION_ROOT_LIST,
|
|
||||||
actions)
|
|
||||||
})
|
|
||||||
|
|
||||||
fun getItem(mediaId: String, result: Result<MediaItem>) =
|
fun getItem(mediaId: String, result: Result<MediaItem>) =
|
||||||
result.dispatch { musicBrowser.getItem(mediaId) }
|
result.dispatch { musicBrowser.getItem(mediaId) }
|
||||||
|
|
Loading…
Reference in a new issue