From ab2b853737168925104c81ba38083d7328ea6e60 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 4 Jul 2023 11:12:25 -0600 Subject: [PATCH] list: expand item menus Bit of a megapatch that: - Adds dedicated play, shuffle, and view items to all item menus (songs haven't been fully implemented yet) - Adds icons to all item menus - Re-adds enabled/disabled items to menus - Makes menu action naming conventions more consistent with the rest of the app --- .../auxio/detail/AlbumDetailFragment.kt | 4 +- .../auxio/detail/ArtistDetailFragment.kt | 4 +- .../auxio/detail/GenreDetailFragment.kt | 4 +- .../auxio/detail/PlaylistDetailFragment.kt | 2 +- .../auxio/home/list/AlbumListFragment.kt | 2 +- .../auxio/home/list/ArtistListFragment.kt | 2 +- .../auxio/home/list/GenreListFragment.kt | 2 +- .../auxio/home/list/PlaylistListFragment.kt | 2 +- .../auxio/home/list/SongListFragment.kt | 2 +- .../auxio/list/menu/MenuDialogFragment.kt | 39 +++++++---- .../auxio/list/menu/MenuDialogFragmentImpl.kt | 64 ++++++++++++++++--- ...enuOptionAdapter.kt => MenuItemAdapter.kt} | 28 +++++--- .../oxycblt/auxio/list/menu/MenuViewModel.kt | 19 +++--- .../auxio/playback/PlaybackPanelFragment.kt | 6 +- .../oxycblt/auxio/search/SearchFragment.kt | 10 +-- app/src/main/res/drawable/ic_details_24.xml | 11 ++++ app/src/main/res/drawable/ic_play_next.xml | 11 ---- app/src/main/res/drawable/ic_play_next_24.xml | 11 ++++ .../res/drawable/ic_playing_indicator_24.xml | 7 +- .../main/res/drawable/ic_playlist_add_24.xml | 12 ++++ app/src/main/res/drawable/ic_queue_add_24.xml | 11 ++++ app/src/main/res/drawable/ic_share_24.xml | 11 ++++ app/src/main/res/drawable/ic_splash_anim.xml | 2 +- app/src/main/res/layout/item_menu_option.xml | 11 ++-- app/src/main/res/menu/item_album.xml | 31 +++++++-- app/src/main/res/menu/item_album_song.xml | 29 ++++++--- app/src/main/res/menu/item_artist_album.xml | 20 ++++-- app/src/main/res/menu/item_artist_song.xml | 32 +++++++--- app/src/main/res/menu/item_parent.xml | 23 +++++-- app/src/main/res/menu/item_playlist.xml | 25 ++++++-- app/src/main/res/menu/item_playlist_song.xml | 32 +++++++--- app/src/main/res/menu/item_song.xml | 39 +++++++---- app/src/main/res/menu/toolbar_album.xml | 4 +- app/src/main/res/menu/toolbar_playback.xml | 10 +-- app/src/main/res/menu/toolbar_selection.xml | 2 +- app/src/main/res/values-ar-rIQ/strings.xml | 4 +- app/src/main/res/values-be/strings.xml | 4 +- app/src/main/res/values-cs/strings.xml | 4 +- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-el/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-fi/strings.xml | 4 +- app/src/main/res/values-fil/strings.xml | 4 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-gl/strings.xml | 4 +- app/src/main/res/values-hi/strings.xml | 4 +- app/src/main/res/values-hr/strings.xml | 4 +- app/src/main/res/values-hu/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 4 +- app/src/main/res/values-iw/strings.xml | 4 +- app/src/main/res/values-ja/strings.xml | 4 +- app/src/main/res/values-ko/strings.xml | 4 +- app/src/main/res/values-lt/strings.xml | 4 +- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 4 +- app/src/main/res/values-pa/strings.xml | 4 +- app/src/main/res/values-pl/strings.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 4 +- app/src/main/res/values-pt-rPT/strings.xml | 4 +- app/src/main/res/values-ro/strings.xml | 4 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-uk/strings.xml | 4 +- app/src/main/res/values-zh-rCN/strings.xml | 4 +- app/src/main/res/values-zh-rTW/strings.xml | 4 +- app/src/main/res/values/strings.xml | 6 +- 68 files changed, 439 insertions(+), 217 deletions(-) rename app/src/main/java/org/oxycblt/auxio/list/menu/{MenuOptionAdapter.kt => MenuItemAdapter.kt} (70%) create mode 100644 app/src/main/res/drawable/ic_details_24.xml delete mode 100644 app/src/main/res/drawable/ic_play_next.xml create mode 100644 app/src/main/res/drawable/ic_play_next_24.xml create mode 100644 app/src/main/res/drawable/ic_playlist_add_24.xml create mode 100644 app/src/main/res/drawable/ic_queue_add_24.xml create mode 100644 app/src/main/res/drawable/ic_share_24.xml diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index c1e9db6ff..d466e51c8 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -162,7 +162,7 @@ class AlbumDetailFragment : requireContext().showToast(R.string.lng_queue_added) true } - R.id.action_go_artist -> { + R.id.action_artist_details -> { onNavigateToParentArtist() true } @@ -187,7 +187,7 @@ class AlbumDetailFragment : } override fun onOpenMenu(item: Song, anchor: View) { - menuModel.openMenu(R.menu.item_album_song, item) + menuModel.open(R.menu.item_album_song, item) } override fun onPlay() { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 61bc0fc4f..55033234c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -198,8 +198,8 @@ class ArtistDetailFragment : override fun onOpenMenu(item: Music, anchor: View) { when (item) { - is Song -> menuModel.openMenu(R.menu.item_artist_song, item) - is Album -> menuModel.openMenu(R.menu.item_artist_album, item) + is Song -> menuModel.open(R.menu.item_artist_song, item) + is Album -> menuModel.open(R.menu.item_artist_album, item) else -> error("Unexpected datatype: ${item::class.simpleName}") } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 2d393fd01..93705e610 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -196,8 +196,8 @@ class GenreDetailFragment : override fun onOpenMenu(item: Music, anchor: View) { when (item) { - is Artist -> menuModel.openMenu(R.menu.item_parent, item) - is Song -> menuModel.openMenu(R.menu.item_song, item) + is Artist -> menuModel.open(R.menu.item_parent, item) + is Song -> menuModel.open(R.menu.item_song, item) else -> error("Unexpected datatype: ${item::class.simpleName}") } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt index f97a745f9..aeadf1bea 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/PlaylistDetailFragment.kt @@ -239,7 +239,7 @@ class PlaylistDetailFragment : } override fun onOpenMenu(item: Song, anchor: View) { - menuModel.openMenu(R.menu.item_playlist_song, item) + menuModel.open(R.menu.item_playlist_song, item) } override fun onPlay() { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 8c9ea7413..0ef4695b3 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -144,7 +144,7 @@ class AlbumListFragment : } override fun onOpenMenu(item: Album, anchor: View) { - menuModel.openMenu(R.menu.item_album, item) + menuModel.open(R.menu.item_album, item) } private fun updateAlbums(albums: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index f994e4abe..3d020e823 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -120,7 +120,7 @@ class ArtistListFragment : } override fun onOpenMenu(item: Artist, anchor: View) { - menuModel.openMenu(R.menu.item_parent, item) + menuModel.open(R.menu.item_parent, item) } private fun updateArtists(artists: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index f4d3bd31b..efc0656ad 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -119,7 +119,7 @@ class GenreListFragment : } override fun onOpenMenu(item: Genre, anchor: View) { - menuModel.openMenu(R.menu.item_parent, item) + menuModel.open(R.menu.item_parent, item) } private fun updateGenres(genres: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt index edf1c9780..639dafbd9 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt @@ -117,7 +117,7 @@ class PlaylistListFragment : } override fun onOpenMenu(item: Playlist, anchor: View) { - menuModel.openMenu(R.menu.item_playlist, item) + menuModel.open(R.menu.item_playlist, item) } private fun updatePlaylists(playlists: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 52f64f8bb..8dd627c86 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -145,7 +145,7 @@ class SongListFragment : } override fun onOpenMenu(item: Song, anchor: View) { - menuModel.openMenu(R.menu.item_song, item) + menuModel.open(R.menu.item_song, item) } private fun updateSongs(songs: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragment.kt b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragment.kt index 88df9577e..a78065e2c 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragment.kt @@ -40,18 +40,17 @@ import org.oxycblt.auxio.util.logD * options. * * @author Alexander Capehart (OxygenCobalt) - * - * TODO: Handle enabled/disabled states */ abstract class MenuDialogFragment : ViewBindingBottomSheetDialogFragment(), ClickableListListener { protected abstract val menuModel: MenuViewModel - private val menuAdapter = MenuOptionAdapter(@Suppress("LeakingThis") this) + private val menuAdapter = MenuItemAdapter(@Suppress("LeakingThis") this) abstract val menuRes: Int abstract val uid: Music.UID + abstract fun getDisabledItemIds(music: T): Set abstract fun updateMusic(binding: DialogMenuBinding, music: T) - abstract fun onClick(music: T, item: MenuItem) + abstract fun onClick(item: MenuItem, music: T) override fun onCreateBinding(inflater: LayoutInflater) = DialogMenuBinding.inflate(inflater) @@ -66,11 +65,6 @@ abstract class MenuDialogFragment : itemAnimator = null } - // Avoid having to use a dummy view and just rely on what AndroidX Toolbar uses. - @SuppressLint("RestrictedApi") val builder = MenuBuilder(requireContext()) - MenuInflater(requireContext()).inflate(menuRes, builder) - menuAdapter.update(builder.children.toList(), UpdateInstructions.Diff) - // --- VIEWMODEL SETUP --- menuModel.setCurrentMenu(uid) collectImmediately(menuModel.currentMusic, this::updateMusic) @@ -88,11 +82,34 @@ abstract class MenuDialogFragment : logD("No music to show, navigating away") findNavController().navigateUp() } - @Suppress("UNCHECKED_CAST") updateMusic(requireBinding(), music as T) + + @Suppress("UNCHECKED_CAST") val castedMusic = music as T + + // We need to inflate the menu on every music update since it might have changed + // what options are available (ex. if an artist with no songs has had new songs added). + // Since we don't have (and don't want) a dummy view to inflate this menu, just + // depend on the AndroidX Toolbar internal API and hope for the best. + @SuppressLint("RestrictedApi") val builder = MenuBuilder(requireContext()) + MenuInflater(requireContext()).inflate(menuRes, builder) + + // Disable any menu options as specified by the impl + val disabledIds = getDisabledItemIds(castedMusic) + val visible = + builder.children.mapTo(mutableListOf()) { + it.isEnabled = !disabledIds.contains(it.itemId) + it + } + menuAdapter.update(visible, UpdateInstructions.Diff) + + // Delegate to impl how to show music + updateMusic(requireBinding(), castedMusic) } final override fun onClick(item: MenuItem, viewHolder: RecyclerView.ViewHolder) { + // All option selections close the dialog currently. + // TODO: This should change if the app is 100% migrated to menu dialogs findNavController().navigateUp() - @Suppress("UNCHECKED_CAST") onClick(menuModel.currentMusic.value as T, item) + // Delegate to impl on how to handle items + @Suppress("UNCHECKED_CAST") onClick(item, menuModel.currentMusic.value as T) } } diff --git a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragmentImpl.kt b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragmentImpl.kt index 121484753..e735ddcab 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragmentImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuDialogFragmentImpl.kt @@ -51,6 +51,8 @@ class SongMenuDialogFragment : MenuDialogFragment() { override val uid: Music.UID get() = args.songUid + override fun getDisabledItemIds(music: Song) = setOf() + override fun updateMusic(binding: DialogMenuBinding, music: Song) { val context = requireContext() binding.menuCover.bind(music) @@ -59,7 +61,7 @@ class SongMenuDialogFragment : MenuDialogFragment() { binding.menuInfo.text = music.artists.resolveNames(context) } - override fun onClick(music: Song, item: MenuItem) { + override fun onClick(item: MenuItem, music: Song) { when (item.itemId) { R.id.action_play_next -> { playbackModel.playNext(music) @@ -69,11 +71,11 @@ class SongMenuDialogFragment : MenuDialogFragment() { playbackModel.addToQueue(music) requireContext().showToast(R.string.lng_queue_added) } - R.id.action_go_artist -> detailModel.showArtist(music) - R.id.action_go_album -> detailModel.showAlbum(music) + R.id.action_artist_details -> detailModel.showArtist(music) + R.id.action_album_details -> detailModel.showAlbum(music) R.id.action_share -> requireContext().share(music) R.id.action_playlist_add -> musicModel.addToPlaylist(music) - R.id.action_song_detail -> detailModel.showSong(music) + R.id.action_detail -> detailModel.showSong(music) else -> error("Unexpected menu item selected $item") } } @@ -92,6 +94,8 @@ class AlbumMenuDialogFragment : MenuDialogFragment() { override val uid: Music.UID get() = args.albumUid + override fun getDisabledItemIds(music: Album) = setOf() + override fun updateMusic(binding: DialogMenuBinding, music: Album) { val context = requireContext() binding.menuCover.bind(music) @@ -100,10 +104,11 @@ class AlbumMenuDialogFragment : MenuDialogFragment() { binding.menuInfo.text = music.artists.resolveNames(context) } - override fun onClick(music: Album, item: MenuItem) { + override fun onClick(item: MenuItem, music: Album) { when (item.itemId) { R.id.action_play -> playbackModel.play(music) R.id.action_shuffle -> playbackModel.shuffle(music) + R.id.action_detail -> detailModel.showAlbum(music) R.id.action_play_next -> { playbackModel.playNext(music) requireContext().showToast(R.string.lng_queue_added) @@ -112,7 +117,7 @@ class AlbumMenuDialogFragment : MenuDialogFragment() { playbackModel.addToQueue(music) requireContext().showToast(R.string.lng_queue_added) } - R.id.action_go_artist -> detailModel.showArtist(music) + R.id.action_artist_details -> detailModel.showArtist(music) R.id.action_playlist_add -> musicModel.addToPlaylist(music) R.id.action_share -> requireContext().share(music) else -> error("Unexpected menu item selected $item") @@ -123,6 +128,7 @@ class AlbumMenuDialogFragment : MenuDialogFragment() { @AndroidEntryPoint class ArtistMenuDialogFragment : MenuDialogFragment() { override val menuModel: MenuViewModel by activityViewModels() + private val detailModel: DetailViewModel by activityViewModels() private val musicModel: MusicViewModel by activityViewModels() private val playbackModel: PlaybackViewModel by activityViewModels() private val args: ArtistMenuDialogFragmentArgs by navArgs() @@ -132,6 +138,19 @@ class ArtistMenuDialogFragment : MenuDialogFragment() { override val uid: Music.UID get() = args.artistUid + override fun getDisabledItemIds(music: Artist) = + if (music.songs.isEmpty()) { + setOf( + R.id.action_play, + R.id.action_shuffle, + R.id.action_play_next, + R.id.action_queue_add, + R.id.action_playlist_add, + R.id.action_share) + } else { + setOf() + } + override fun updateMusic(binding: DialogMenuBinding, music: Artist) { val context = requireContext() binding.menuCover.bind(music) @@ -148,10 +167,11 @@ class ArtistMenuDialogFragment : MenuDialogFragment() { }) } - override fun onClick(music: Artist, item: MenuItem) { + override fun onClick(item: MenuItem, music: Artist) { when (item.itemId) { R.id.action_play -> playbackModel.play(music) R.id.action_shuffle -> playbackModel.shuffle(music) + R.id.action_detail -> detailModel.showArtist(music) R.id.action_play_next -> { playbackModel.playNext(music) requireContext().showToast(R.string.lng_queue_added) @@ -170,6 +190,7 @@ class ArtistMenuDialogFragment : MenuDialogFragment() { @AndroidEntryPoint class GenreMenuDialogFragment : MenuDialogFragment() { override val menuModel: MenuViewModel by activityViewModels() + private val detailModel: DetailViewModel by activityViewModels() private val musicModel: MusicViewModel by activityViewModels() private val playbackModel: PlaybackViewModel by activityViewModels() private val args: GenreMenuDialogFragmentArgs by navArgs() @@ -179,6 +200,8 @@ class GenreMenuDialogFragment : MenuDialogFragment() { override val uid: Music.UID get() = args.genreUid + override fun getDisabledItemIds(music: Genre) = setOf() + override fun updateMusic(binding: DialogMenuBinding, music: Genre) { val context = requireContext() binding.menuCover.bind(music) @@ -191,10 +214,11 @@ class GenreMenuDialogFragment : MenuDialogFragment() { context.getPlural(R.plurals.fmt_song_count, music.songs.size)) } - override fun onClick(music: Genre, item: MenuItem) { + override fun onClick(item: MenuItem, music: Genre) { when (item.itemId) { R.id.action_play -> playbackModel.play(music) R.id.action_shuffle -> playbackModel.shuffle(music) + R.id.action_detail -> detailModel.showGenre(music) R.id.action_play_next -> { playbackModel.playNext(music) requireContext().showToast(R.string.lng_queue_added) @@ -213,6 +237,7 @@ class GenreMenuDialogFragment : MenuDialogFragment() { @AndroidEntryPoint class PlaylistMenuDialogFragment : MenuDialogFragment() { override val menuModel: MenuViewModel by activityViewModels() + private val detailModel: DetailViewModel by activityViewModels() private val musicModel: MusicViewModel by activityViewModels() private val playbackModel: PlaybackViewModel by activityViewModels() private val args: PlaylistMenuDialogFragmentArgs by navArgs() @@ -222,18 +247,37 @@ class PlaylistMenuDialogFragment : MenuDialogFragment() { override val uid: Music.UID get() = args.playlistUid + override fun getDisabledItemIds(music: Playlist) = + if (music.songs.isEmpty()) { + setOf( + R.id.action_play, + R.id.action_shuffle, + R.id.action_play_next, + R.id.action_queue_add, + R.id.action_playlist_add, + R.id.action_share) + } else { + setOf() + } + override fun updateMusic(binding: DialogMenuBinding, music: Playlist) { val context = requireContext() binding.menuCover.bind(music) binding.menuType.text = getString(R.string.lbl_playlist) binding.menuName.text = music.name.resolve(context) - binding.menuInfo.text = context.getPlural(R.plurals.fmt_song_count, music.songs.size) + binding.menuInfo.text = + if (music.songs.isNotEmpty()) { + context.getPlural(R.plurals.fmt_song_count, music.songs.size) + } else { + getString(R.string.def_song_count) + } } - override fun onClick(music: Playlist, item: MenuItem) { + override fun onClick(item: MenuItem, music: Playlist) { when (item.itemId) { R.id.action_play -> playbackModel.play(music) R.id.action_shuffle -> playbackModel.shuffle(music) + R.id.action_detail -> detailModel.showPlaylist(music) R.id.action_play_next -> { playbackModel.playNext(music) requireContext().showToast(R.string.lng_queue_added) diff --git a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuOptionAdapter.kt b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuItemAdapter.kt similarity index 70% rename from app/src/main/java/org/oxycblt/auxio/list/menu/MenuOptionAdapter.kt rename to app/src/main/java/org/oxycblt/auxio/list/menu/MenuItemAdapter.kt index e8d13279a..1fd336c34 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuOptionAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuItemAdapter.kt @@ -1,6 +1,6 @@ /* * Copyright (c) 2023 Auxio Project - * MenuOptionAdapter.kt is part of Auxio. + * MenuItemAdapter.kt is part of Auxio. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,15 +30,15 @@ import org.oxycblt.auxio.util.inflater /** * Displays a list of [MenuItem]s as custom list items. * - * @param listener A [MenuOptionAdapter] to bind interactions to. + * @param listener A [ClickableListListener] to bind interactions to. * @author Alexander Capehart (OxygenCobalt) */ -class MenuOptionAdapter(private val listener: ClickableListListener) : - FlexibleListAdapter(MenuOptionViewHolder.DIFF_CALLBACK) { +class MenuItemAdapter(private val listener: ClickableListListener) : + FlexibleListAdapter(MenuItemViewHolder.DIFF_CALLBACK) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - MenuOptionViewHolder.from(parent) + MenuItemViewHolder.from(parent) - override fun onBindViewHolder(holder: MenuOptionViewHolder, position: Int) { + override fun onBindViewHolder(holder: MenuItemViewHolder, position: Int) { holder.bind(getItem(position), listener) } } @@ -48,11 +48,21 @@ class MenuOptionAdapter(private val listener: ClickableListListener) : * * @author Alexander Capehart (OxygenCobalt) */ -class MenuOptionViewHolder private constructor(private val binding: ItemMenuOptionBinding) : +class MenuItemViewHolder private constructor(private val binding: ItemMenuOptionBinding) : DialogRecyclerView.ViewHolder(binding.root) { + /** + * Bind new data to this instance. + * + * @param item The new [MenuItem] to bind. + * @param listener An [ClickableListListener] to bind interactions to. + */ fun bind(item: MenuItem, listener: ClickableListListener) { listener.bind(item, this) - binding.title.text = item.title + binding.title.apply { + text = item.title + setCompoundDrawablesRelativeWithIntrinsicBounds(item.icon, null, null, null) + isEnabled = item.isEnabled + } } companion object { @@ -63,7 +73,7 @@ class MenuOptionViewHolder private constructor(private val binding: ItemMenuOpti * @return A new instance. */ fun from(parent: ViewGroup) = - MenuOptionViewHolder(ItemMenuOptionBinding.inflate(parent.context.inflater)) + MenuItemViewHolder(ItemMenuOptionBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = diff --git a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuViewModel.kt b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuViewModel.kt index af27a2e99..b439a6acf 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/menu/MenuViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/menu/MenuViewModel.kt @@ -56,22 +56,19 @@ class MenuViewModel @Inject constructor(private val musicRepository: MusicReposi musicRepository.removeUpdateListener(this) } - fun openMenu(@MenuRes menuRes: Int, song: Song) = - openMenuImpl(PendingMenu.ForSong(menuRes, song)) + fun open(@MenuRes menuRes: Int, song: Song) = openImpl(PendingMenu.ForSong(menuRes, song)) - fun openMenu(@MenuRes menuRes: Int, album: Album) = - openMenuImpl(PendingMenu.ForAlbum(menuRes, album)) + fun open(@MenuRes menuRes: Int, album: Album) = openImpl(PendingMenu.ForAlbum(menuRes, album)) - fun openMenu(@MenuRes menuRes: Int, artist: Artist) = - openMenuImpl(PendingMenu.ForArtist(menuRes, artist)) + fun open(@MenuRes menuRes: Int, artist: Artist) = + openImpl(PendingMenu.ForArtist(menuRes, artist)) - fun openMenu(@MenuRes menuRes: Int, genre: Genre) = - openMenuImpl(PendingMenu.ForGenre(menuRes, genre)) + fun open(@MenuRes menuRes: Int, genre: Genre) = openImpl(PendingMenu.ForGenre(menuRes, genre)) - fun openMenu(@MenuRes menuRes: Int, playlist: Playlist) = - openMenuImpl(PendingMenu.ForPlaylist(menuRes, playlist)) + fun open(@MenuRes menuRes: Int, playlist: Playlist) = + openImpl(PendingMenu.ForPlaylist(menuRes, playlist)) - private fun openMenuImpl(pendingMenu: PendingMenu) { + private fun openImpl(pendingMenu: PendingMenu) { val existing = _pendingMenu.flow.value if (existing != null) { logW("Already opening $existing, ignoring $pendingMenu") diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index 02b59c01e..a12cb389b 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -164,11 +164,11 @@ class PlaybackPanelFragment : } true } - R.id.action_go_artist -> { + R.id.action_artist_details -> { navigateToCurrentArtist() true } - R.id.action_go_album -> { + R.id.action_album_details -> { navigateToCurrentAlbum() true } @@ -176,7 +176,7 @@ class PlaybackPanelFragment : playbackModel.song.value?.let(musicModel::addToPlaylist) true } - R.id.action_song_detail -> { + R.id.action_detail -> { playbackModel.song.value?.let(detailModel::showSong) true } diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index 7d0e8e4e8..e4eda1c42 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -184,11 +184,11 @@ class SearchFragment : ListFragment() { override fun onOpenMenu(item: Music, anchor: View) { when (item) { - is Song -> menuModel.openMenu(R.menu.item_song, item) - is Album -> menuModel.openMenu(R.menu.item_album, item) - is Artist -> menuModel.openMenu(R.menu.item_parent, item) - is Genre -> menuModel.openMenu(R.menu.item_parent, item) - is Playlist -> menuModel.openMenu(R.menu.item_playlist, item) + is Song -> menuModel.open(R.menu.item_song, item) + is Album -> menuModel.open(R.menu.item_album, item) + is Artist -> menuModel.open(R.menu.item_parent, item) + is Genre -> menuModel.open(R.menu.item_parent, item) + is Playlist -> menuModel.open(R.menu.item_playlist, item) } } diff --git a/app/src/main/res/drawable/ic_details_24.xml b/app/src/main/res/drawable/ic_details_24.xml new file mode 100644 index 000000000..525ec5618 --- /dev/null +++ b/app/src/main/res/drawable/ic_details_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_play_next.xml b/app/src/main/res/drawable/ic_play_next.xml deleted file mode 100644 index 6a3d37c13..000000000 --- a/app/src/main/res/drawable/ic_play_next.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_play_next_24.xml b/app/src/main/res/drawable/ic_play_next_24.xml new file mode 100644 index 000000000..df1a8dd79 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_next_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_playing_indicator_24.xml b/app/src/main/res/drawable/ic_playing_indicator_24.xml index 63c270ac1..4a74acba0 100644 --- a/app/src/main/res/drawable/ic_playing_indicator_24.xml +++ b/app/src/main/res/drawable/ic_playing_indicator_24.xml @@ -3,9 +3,10 @@ xmlns:aapt="http://schemas.android.com/aapt"> diff --git a/app/src/main/res/drawable/ic_playlist_add_24.xml b/app/src/main/res/drawable/ic_playlist_add_24.xml new file mode 100644 index 000000000..6d0cfca3f --- /dev/null +++ b/app/src/main/res/drawable/ic_playlist_add_24.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_queue_add_24.xml b/app/src/main/res/drawable/ic_queue_add_24.xml new file mode 100644 index 000000000..a9e7e0ac3 --- /dev/null +++ b/app/src/main/res/drawable/ic_queue_add_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_share_24.xml b/app/src/main/res/drawable/ic_share_24.xml new file mode 100644 index 000000000..17485830b --- /dev/null +++ b/app/src/main/res/drawable/ic_share_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_splash_anim.xml b/app/src/main/res/drawable/ic_splash_anim.xml index 74568da64..d71c04457 100644 --- a/app/src/main/res/drawable/ic_splash_anim.xml +++ b/app/src/main/res/drawable/ic_splash_anim.xml @@ -20,7 +20,7 @@ - \ No newline at end of file diff --git a/app/src/main/res/menu/item_album.xml b/app/src/main/res/menu/item_album.xml index 7cc2b4b79..f560baefc 100644 --- a/app/src/main/res/menu/item_album.xml +++ b/app/src/main/res/menu/item_album.xml @@ -1,18 +1,35 @@ + + + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> - + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24"/> + + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_album_song.xml b/app/src/main/res/menu/item_album_song.xml index 7325144c0..7df67a7c4 100644 --- a/app/src/main/res/menu/item_album_song.xml +++ b/app/src/main/res/menu/item_album_song.xml @@ -1,20 +1,33 @@ + + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> - + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24"/> + android:id="@+id/action_artist_details" + android:title="@string/lbl_artist_details" + android:icon="@drawable/ic_artist_24" /> + diff --git a/app/src/main/res/menu/item_artist_album.xml b/app/src/main/res/menu/item_artist_album.xml index a39b0127e..178ece754 100644 --- a/app/src/main/res/menu/item_artist_album.xml +++ b/app/src/main/res/menu/item_artist_album.xml @@ -4,21 +4,29 @@ + android:icon="@drawable/ic_play_24" /> + android:icon="@drawable/ic_shuffle_off_24"/> + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24"/> + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_artist_song.xml b/app/src/main/res/menu/item_artist_song.xml index 78442df43..803a12785 100644 --- a/app/src/main/res/menu/item_artist_song.xml +++ b/app/src/main/res/menu/item_artist_song.xml @@ -1,21 +1,35 @@ + + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> - + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24"/> + android:id="@+id/action_album_details" + android:title="@string/lbl_album_details" + android:icon="@drawable/ic_album_24" /> + + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_parent.xml b/app/src/main/res/menu/item_parent.xml index 6de2527de..cae1e0c53 100644 --- a/app/src/main/res/menu/item_parent.xml +++ b/app/src/main/res/menu/item_parent.xml @@ -2,20 +2,31 @@ + android:title="@string/lbl_play" + android:icon="@drawable/ic_play_24" /> + android:title="@string/lbl_shuffle" + android:icon="@drawable/ic_shuffle_off_24"/> + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24" /> + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_playlist.xml b/app/src/main/res/menu/item_playlist.xml index 6a165da6a..af3277d8a 100644 --- a/app/src/main/res/menu/item_playlist.xml +++ b/app/src/main/res/menu/item_playlist.xml @@ -2,23 +2,34 @@ + android:title="@string/lbl_play" + android:icon="@drawable/ic_play_24" /> + android:title="@string/lbl_shuffle" + android:icon="@drawable/ic_shuffle_off_24"/> + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24"/> + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24"/> + android:title="@string/lbl_rename" + android:icon="@drawable/ic_edit_24"/> + android:title="@string/lbl_delete" + android:icon="@drawable/ic_delete_24"/> + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_playlist_song.xml b/app/src/main/res/menu/item_playlist_song.xml index e55d8e3f6..c176af351 100644 --- a/app/src/main/res/menu/item_playlist_song.xml +++ b/app/src/main/res/menu/item_playlist_song.xml @@ -1,21 +1,35 @@ + + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_details_24" /> + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24" /> + android:id="@+id/action_artist_details" + android:title="@string/lbl_artist_details" + android:icon="@drawable/ic_artist_24" /> + android:id="@+id/action_album_details" + android:title="@string/lbl_album_details" + android:icon="@drawable/ic_album_24" /> + android:id="@+id/action_detail" + android:title="@string/lbl_song_detail" + android:icon="@drawable/ic_details_24" /> + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24"/> \ No newline at end of file diff --git a/app/src/main/res/menu/item_song.xml b/app/src/main/res/menu/item_song.xml index b892ba7c3..8025e24f0 100644 --- a/app/src/main/res/menu/item_song.xml +++ b/app/src/main/res/menu/item_song.xml @@ -1,24 +1,39 @@ + + + android:title="@string/lbl_play_next" + android:icon="@drawable/ic_play_next_24" /> - - + android:title="@string/lbl_queue_add" + android:icon="@drawable/ic_queue_add_24" /> + android:title="@string/lbl_playlist_add" + android:icon="@drawable/ic_playlist_add_24" /> + android:id="@+id/action_artist_details" + android:title="@string/lbl_artist_details" + android:icon="@drawable/ic_artist_24" /> + + + android:title="@string/lbl_share" + android:icon="@drawable/ic_share_24" /> \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_album.xml b/app/src/main/res/menu/toolbar_album.xml index 7cc2b4b79..870350cc4 100644 --- a/app/src/main/res/menu/toolbar_album.xml +++ b/app/src/main/res/menu/toolbar_album.xml @@ -7,8 +7,8 @@ android:id="@+id/action_queue_add" android:title="@string/lbl_queue_add" /> + android:id="@+id/action_artist_details" + android:title="@string/lbl_artist_details" /> diff --git a/app/src/main/res/menu/toolbar_playback.xml b/app/src/main/res/menu/toolbar_playback.xml index 92264d881..e283a6bc1 100644 --- a/app/src/main/res/menu/toolbar_playback.xml +++ b/app/src/main/res/menu/toolbar_playback.xml @@ -7,18 +7,18 @@ android:title="@string/lbl_equalizer" app:showAsAction="ifRoom" /> شغل الاغنية التالية أضف إلى الطابور تمت الإضافة إلى الطابور - أذهب إلى الفنان - أذهب إلى الالبوم + أذهب إلى الفنان + أذهب إلى الالبوم تم حفظ الحالة أضف حفظ diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index ed22aa75f..1e2662a73 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -83,8 +83,8 @@ Эквалайзер Гуляць выбрана Чарга - Перайсці да альбома - Перайсці да выканаўцы + Перайсці да альбома + Перайсці да выканаўцы Імя файла Праглядзіце ўласцівасці Уласцівасці песні diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 6abd46909..cc71c9561 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -36,8 +36,8 @@ Přehrát další Přidat do fronty Přidáno do fronty - Přejít na umělce - Přejít na album + Přejít na umělce + Přejít na album Stav uložen OK diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2f944921a..61d995e9e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -22,8 +22,8 @@ Als Nächstes abspielen Zur Warteschlange hinzufügen Der Warteschlange hinzugefügt - Zum Künstler gehen - Zum Album gehen + Zum Künstler gehen + Zum Album gehen Wiedergabezustand gespeichert Hinzufügen Speichern diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 66749ed55..0e7da1415 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -19,8 +19,8 @@ Επόμενο Προσθήκη στην ουρά αναπ/γής Προστέθηκε ένας τίτλος στην ουρά αναπαραγωγής - Πήγαινε στον καλλιτέχνη - Πήγαινε στο άλμπουμ + Πήγαινε στον καλλιτέχνη + Πήγαινε στο άλμπουμ Σχετικά με Έκδοση Πηγαίος κώδικας diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 9fd873733..6d14c7cf1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -30,8 +30,8 @@ Reproducir siguiente Agregar a la cola Agregado a la cola - Ir al artista - Ir al álbum + Ir al artista + Ir al álbum Estado guardado Agregar Guardar diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 62053b8a5..b68c76c39 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -41,7 +41,7 @@ Sekoita Jono Lisää jonoon - Siirry albumiin + Siirry albumiin Näytä ominaisuudet Kappaleen ominaisuudet Tiedostonimi @@ -211,7 +211,7 @@ Nousevasti Toista seuraava - Siirry esittäjään + Siirry esittäjään Sisältö Musiikki Kuvat diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 17dfdf605..d7e2bdc59 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -42,8 +42,8 @@ Tugtugin pagkatapos Idagdag sa pila Idiinagdag sa pila - Puntahan ang artista - Puntahan ang album + Puntahan ang artista + Puntahan ang album Tignan ang katangian Katangian ng kanta Pangalan ng file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ce20da39c..43614bc4f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -20,8 +20,8 @@ Jouer ensuite Ajouter à la file d\'attente Ajouté à la file d\'attente - Aller à l\'album - Aller à l\'artiste + Aller à l\'album + Aller à l\'artiste À propos Version Code source diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 022bca385..1ba5cedaf 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -32,7 +32,7 @@ Sinxelo en directo Compilación en directo Mesturas - Ir ao álbum + Ir ao álbum Xéneros Xénero Filtro @@ -53,7 +53,7 @@ Cola Engadir á cola Excluir o que non é música - Ir ao artista + Ir ao artista Nome do arquivo Mesturar Mesturar todo diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 2228fd6eb..a6198633e 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -13,8 +13,8 @@ क्रमबद्ध चलाएं शफ़ल - कलाकार पर जाएं - एल्बम पर जाएं + कलाकार पर जाएं + एल्बम पर जाएं पंक्ति क़तार में जोड़ें कतार में जोड़ा गया diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 4809c780e..6be80a5d0 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -179,8 +179,8 @@ Dodaj u popis pjesama Dodano u popis pjesama Prikaži svojstva - Idi na izvođača - Idi na album + Idi na izvođača + Idi na album Ostavi miješanje omogućeno kada se druga pjesma reproducira Postavke Tema diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8ade1b2d6..67edcda26 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -20,8 +20,8 @@ Következő lejátszása Várósorhoz ad Sorbaállítva - Ugrás előadóhoz - Ugrás albumhoz + Ugrás előadóhoz + Ugrás albumhoz Rólunk Verzió Forráskód diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 4e9be7cdf..fdd5eb194 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -20,8 +20,8 @@ Putar berikutnya Tambahkan ke antrean Ditambahkan ke antrean - Buka artis - Buka album + Buka artis + Buka album Tentang Versi Kode sumber diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index fb003c4c8..904524d28 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -30,8 +30,8 @@ Riproduci successivo Accoda Accodato - Vai all\'artista - Vai all\'album + Vai all\'artista + Vai all\'album Stato salvato Aggiungi Salva diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 1e1db4996..f3b64bdc3 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -45,7 +45,7 @@ ערבוב הנבחרים ניגון הבא הוספה לתור - מעבר לאלבום + מעבר לאלבום הצגת מאפיינים מאפייני שיר תבנית @@ -132,7 +132,7 @@ שם רצועה תור - מעבר לאומן + מעבר לאומן שם קובץ ערבוב המצב שוחזר diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 8117c1f3a..d1f6ea5ef 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -116,8 +116,8 @@ %d 人のアーティスト - アーティストに移動 - アルバムに移動 + アーティストに移動 + アルバムに移動 曲のプロパティ 再生待ちに追加 開発者 アレクサンダー・ケイプハート (Alexander Capehart) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 51108beaa..7460a0012 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -34,8 +34,8 @@ 다음 곡 재생 대기열에 추가 대기열에 추가됨 - 아티스트로 이동 - 앨범으로 이동 + 아티스트로 이동 + 앨범으로 이동 상태 저장됨 확인 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 6f9d600e2..946097b67 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -16,8 +16,8 @@ Groti kitą Pridėti į eilę Eilė - Eiti į atlikėją - Eiti į albumą + Eiti į atlikėją + Eiti į albumą Peržiūrėti ypatybes Dydis Bitų srautas diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index fd2f7d19c..329f2ae1f 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -87,7 +87,7 @@ %d പാട്ട് %d പാട്ടുകൾ - കലാകാരനിലേക്ക് പോകുക + കലാകാരനിലേക്ക് പോകുക സവിശേഷതകൾ കാണുക സ്ഥിതി സംരക്ഷിച്ചു അവരോഹണം diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2c89cd98d..e27184725 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -25,8 +25,8 @@ Afspelen als volgende Toevoegen aan wachtrij Toegevoegd aan de wachtrij - Ga naar artiest - Ga naar album + Ga naar artiest + Ga naar album Staat gered Toevoegen Opslaan diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 592ef9dc7..8d38bdb28 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -53,7 +53,7 @@ ਕਤਾਰ ਅਗਲਾ ਚਲਾਓ ਕਤਾਰ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰੋ - ਐਲਬਮ \'ਤੇ ਜਾਓ + ਐਲਬਮ \'ਤੇ ਜਾਓ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵੇਖੋ ਗੀਤ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਪੇਰੈਂਟ ਮਾਰਗ @@ -77,7 +77,7 @@ ਗੀਤ ਦੀ ਗਿਣਤੀ ਘਟਦੇ ਹੋਏ ਚੁਣਿਆ ਹੋਇਆ ਚਲਾਓ - ਕਲਾਕਾਰ \'ਤੇ ਜਾਓ + ਕਲਾਕਾਰ \'ਤੇ ਜਾਓ ਫਾਈਲ ਦਾ ਨਾਮ ਬਿੱਟ ਰੇਟ ਸੈਂਪਲ ਰੇਟ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d433b61c4..dbce6c061 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -20,8 +20,8 @@ Odtwórz następny Dodaj do kolejki Dodano do kolejki - Przejdź do wykonawcy - Przejdź do albumu + Przejdź do wykonawcy + Przejdź do albumu O aplikacji Wersja Kod źródłowy diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b8e2b2539..845157184 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -19,8 +19,8 @@ Reproduzir próxima Adicionar à fila Adicionada à fila - Ir para o artista - Ir para o álbum + Ir para o artista + Ir para o álbum Sobre Versão Código-fonte diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index ff331f33f..ff1aa5b04 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -20,8 +20,8 @@ Reproduzir a próxima Adicionar à fila Adicionada à fila - Ir para o artista - Ir para o álbum + Ir para o artista + Ir para o álbum Sobre Versão Código fonte diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1ef092e66..35c85858b 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -20,8 +20,8 @@ Redă următoarea Adăugați la lista de așteptare A fost adăugat la lista de așteptare - Mergi la artist - Accesaţi albumul + Mergi la artist + Accesaţi albumul Despre Versiune Cod sursă diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 43daae2e2..ee22234d9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -30,8 +30,8 @@ Играть далее Добавить в очередь Добавлено в очередь - Перейти к исполнителю - Перейти к альбому + Перейти к исполнителю + Перейти к альбому Позиция сохранена Добавить Сохранить diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7acaab1b1..a00ec585d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -48,8 +48,8 @@ Spela nästa Lägg till spellista - Gå till konstnär - Gå till album + Gå till konstnär + Gå till album Visa egenskaper Dela Egenskaper för låt diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 99d462df2..073c463c3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -20,8 +20,8 @@ Sonraki şarkı Kuyruğa ekle Kuyruğa eklendi - Sanatçıya git - Albüme git + Sanatçıya git + Albüme git Hakkında Sürüm Kaynak kodu diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8f7435242..000ccd8a6 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -19,8 +19,8 @@ Відтворити наступним Додати в чергу Додано в чергу - Перейти до виконавця - Перейти до альбому + Перейти до виконавця + Перейти до альбому Про застосунок Версія Вихідний код diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4a5290943..688745d7c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -30,8 +30,8 @@ 作为下一首播放 加入播放队列 已加入播放队列 - 查看艺术家 - 查看专辑 + 查看艺术家 + 查看专辑 已保存播放进度 添加 保存 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 345d98a3e..b46cd1c4a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -20,8 +20,8 @@ 下一首播放 添加到隊列 已加入隊列 - 前往該歌手頁面 - 專輯 + 前往該歌手頁面 + 專輯 關於 版本 在 GitHub 上檢視 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 099d0a9ea..d610c1984 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,9 +120,11 @@ Add to playlist - Go to artist - Go to album + + Go to artist + Go to album View properties + View Share Song properties