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
This commit is contained in:
parent
f84b6f68b3
commit
ab2b853737
68 changed files with 439 additions and 217 deletions
|
|
@ -162,7 +162,7 @@ class AlbumDetailFragment :
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
requireContext().showToast(R.string.lng_queue_added)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_go_artist -> {
|
R.id.action_artist_details -> {
|
||||||
onNavigateToParentArtist()
|
onNavigateToParentArtist()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -187,7 +187,7 @@ class AlbumDetailFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Song, anchor: View) {
|
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() {
|
override fun onPlay() {
|
||||||
|
|
|
||||||
|
|
@ -198,8 +198,8 @@ class ArtistDetailFragment :
|
||||||
|
|
||||||
override fun onOpenMenu(item: Music, anchor: View) {
|
override fun onOpenMenu(item: Music, anchor: View) {
|
||||||
when (item) {
|
when (item) {
|
||||||
is Song -> menuModel.openMenu(R.menu.item_artist_song, item)
|
is Song -> menuModel.open(R.menu.item_artist_song, item)
|
||||||
is Album -> menuModel.openMenu(R.menu.item_artist_album, item)
|
is Album -> menuModel.open(R.menu.item_artist_album, item)
|
||||||
else -> error("Unexpected datatype: ${item::class.simpleName}")
|
else -> error("Unexpected datatype: ${item::class.simpleName}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -196,8 +196,8 @@ class GenreDetailFragment :
|
||||||
|
|
||||||
override fun onOpenMenu(item: Music, anchor: View) {
|
override fun onOpenMenu(item: Music, anchor: View) {
|
||||||
when (item) {
|
when (item) {
|
||||||
is Artist -> menuModel.openMenu(R.menu.item_parent, item)
|
is Artist -> menuModel.open(R.menu.item_parent, item)
|
||||||
is Song -> menuModel.openMenu(R.menu.item_song, item)
|
is Song -> menuModel.open(R.menu.item_song, item)
|
||||||
else -> error("Unexpected datatype: ${item::class.simpleName}")
|
else -> error("Unexpected datatype: ${item::class.simpleName}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,7 @@ class PlaylistDetailFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Song, anchor: View) {
|
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() {
|
override fun onPlay() {
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@ class AlbumListFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Album, anchor: View) {
|
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<Album>) {
|
private fun updateAlbums(albums: List<Album>) {
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ class ArtistListFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Artist, anchor: View) {
|
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<Artist>) {
|
private fun updateArtists(artists: List<Artist>) {
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ class GenreListFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Genre, anchor: View) {
|
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<Genre>) {
|
private fun updateGenres(genres: List<Genre>) {
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ class PlaylistListFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Playlist, anchor: View) {
|
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<Playlist>) {
|
private fun updatePlaylists(playlists: List<Playlist>) {
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ class SongListFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenMenu(item: Song, anchor: View) {
|
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<Song>) {
|
private fun updateSongs(songs: List<Song>) {
|
||||||
|
|
|
||||||
|
|
@ -40,18 +40,17 @@ import org.oxycblt.auxio.util.logD
|
||||||
* options.
|
* options.
|
||||||
*
|
*
|
||||||
* @author Alexander Capehart (OxygenCobalt)
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
*
|
|
||||||
* TODO: Handle enabled/disabled states
|
|
||||||
*/
|
*/
|
||||||
abstract class MenuDialogFragment<T : Music> :
|
abstract class MenuDialogFragment<T : Music> :
|
||||||
ViewBindingBottomSheetDialogFragment<DialogMenuBinding>(), ClickableListListener<MenuItem> {
|
ViewBindingBottomSheetDialogFragment<DialogMenuBinding>(), ClickableListListener<MenuItem> {
|
||||||
protected abstract val menuModel: MenuViewModel
|
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 menuRes: Int
|
||||||
abstract val uid: Music.UID
|
abstract val uid: Music.UID
|
||||||
|
abstract fun getDisabledItemIds(music: T): Set<Int>
|
||||||
abstract fun updateMusic(binding: DialogMenuBinding, music: T)
|
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)
|
override fun onCreateBinding(inflater: LayoutInflater) = DialogMenuBinding.inflate(inflater)
|
||||||
|
|
||||||
|
|
@ -66,11 +65,6 @@ abstract class MenuDialogFragment<T : Music> :
|
||||||
itemAnimator = null
|
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 ---
|
// --- VIEWMODEL SETUP ---
|
||||||
menuModel.setCurrentMenu(uid)
|
menuModel.setCurrentMenu(uid)
|
||||||
collectImmediately(menuModel.currentMusic, this::updateMusic)
|
collectImmediately(menuModel.currentMusic, this::updateMusic)
|
||||||
|
|
@ -88,11 +82,34 @@ abstract class MenuDialogFragment<T : Music> :
|
||||||
logD("No music to show, navigating away")
|
logD("No music to show, navigating away")
|
||||||
findNavController().navigateUp()
|
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) {
|
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()
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@ class SongMenuDialogFragment : MenuDialogFragment<Song>() {
|
||||||
override val uid: Music.UID
|
override val uid: Music.UID
|
||||||
get() = args.songUid
|
get() = args.songUid
|
||||||
|
|
||||||
|
override fun getDisabledItemIds(music: Song) = setOf<Int>()
|
||||||
|
|
||||||
override fun updateMusic(binding: DialogMenuBinding, music: Song) {
|
override fun updateMusic(binding: DialogMenuBinding, music: Song) {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.menuCover.bind(music)
|
binding.menuCover.bind(music)
|
||||||
|
|
@ -59,7 +61,7 @@ class SongMenuDialogFragment : MenuDialogFragment<Song>() {
|
||||||
binding.menuInfo.text = music.artists.resolveNames(context)
|
binding.menuInfo.text = music.artists.resolveNames(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(music: Song, item: MenuItem) {
|
override fun onClick(item: MenuItem, music: Song) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_play_next -> {
|
R.id.action_play_next -> {
|
||||||
playbackModel.playNext(music)
|
playbackModel.playNext(music)
|
||||||
|
|
@ -69,11 +71,11 @@ class SongMenuDialogFragment : MenuDialogFragment<Song>() {
|
||||||
playbackModel.addToQueue(music)
|
playbackModel.addToQueue(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
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_go_album -> detailModel.showAlbum(music)
|
R.id.action_album_details -> detailModel.showAlbum(music)
|
||||||
R.id.action_share -> requireContext().share(music)
|
R.id.action_share -> requireContext().share(music)
|
||||||
R.id.action_playlist_add -> musicModel.addToPlaylist(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")
|
else -> error("Unexpected menu item selected $item")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -92,6 +94,8 @@ class AlbumMenuDialogFragment : MenuDialogFragment<Album>() {
|
||||||
override val uid: Music.UID
|
override val uid: Music.UID
|
||||||
get() = args.albumUid
|
get() = args.albumUid
|
||||||
|
|
||||||
|
override fun getDisabledItemIds(music: Album) = setOf<Int>()
|
||||||
|
|
||||||
override fun updateMusic(binding: DialogMenuBinding, music: Album) {
|
override fun updateMusic(binding: DialogMenuBinding, music: Album) {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.menuCover.bind(music)
|
binding.menuCover.bind(music)
|
||||||
|
|
@ -100,10 +104,11 @@ class AlbumMenuDialogFragment : MenuDialogFragment<Album>() {
|
||||||
binding.menuInfo.text = music.artists.resolveNames(context)
|
binding.menuInfo.text = music.artists.resolveNames(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(music: Album, item: MenuItem) {
|
override fun onClick(item: MenuItem, music: Album) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_play -> playbackModel.play(music)
|
R.id.action_play -> playbackModel.play(music)
|
||||||
R.id.action_shuffle -> playbackModel.shuffle(music)
|
R.id.action_shuffle -> playbackModel.shuffle(music)
|
||||||
|
R.id.action_detail -> detailModel.showAlbum(music)
|
||||||
R.id.action_play_next -> {
|
R.id.action_play_next -> {
|
||||||
playbackModel.playNext(music)
|
playbackModel.playNext(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
requireContext().showToast(R.string.lng_queue_added)
|
||||||
|
|
@ -112,7 +117,7 @@ class AlbumMenuDialogFragment : MenuDialogFragment<Album>() {
|
||||||
playbackModel.addToQueue(music)
|
playbackModel.addToQueue(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
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_playlist_add -> musicModel.addToPlaylist(music)
|
||||||
R.id.action_share -> requireContext().share(music)
|
R.id.action_share -> requireContext().share(music)
|
||||||
else -> error("Unexpected menu item selected $item")
|
else -> error("Unexpected menu item selected $item")
|
||||||
|
|
@ -123,6 +128,7 @@ class AlbumMenuDialogFragment : MenuDialogFragment<Album>() {
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class ArtistMenuDialogFragment : MenuDialogFragment<Artist>() {
|
class ArtistMenuDialogFragment : MenuDialogFragment<Artist>() {
|
||||||
override val menuModel: MenuViewModel by activityViewModels()
|
override val menuModel: MenuViewModel by activityViewModels()
|
||||||
|
private val detailModel: DetailViewModel by activityViewModels()
|
||||||
private val musicModel: MusicViewModel by activityViewModels()
|
private val musicModel: MusicViewModel by activityViewModels()
|
||||||
private val playbackModel: PlaybackViewModel by activityViewModels()
|
private val playbackModel: PlaybackViewModel by activityViewModels()
|
||||||
private val args: ArtistMenuDialogFragmentArgs by navArgs()
|
private val args: ArtistMenuDialogFragmentArgs by navArgs()
|
||||||
|
|
@ -132,6 +138,19 @@ class ArtistMenuDialogFragment : MenuDialogFragment<Artist>() {
|
||||||
override val uid: Music.UID
|
override val uid: Music.UID
|
||||||
get() = args.artistUid
|
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) {
|
override fun updateMusic(binding: DialogMenuBinding, music: Artist) {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.menuCover.bind(music)
|
binding.menuCover.bind(music)
|
||||||
|
|
@ -148,10 +167,11 @@ class ArtistMenuDialogFragment : MenuDialogFragment<Artist>() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(music: Artist, item: MenuItem) {
|
override fun onClick(item: MenuItem, music: Artist) {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_play -> playbackModel.play(music)
|
R.id.action_play -> playbackModel.play(music)
|
||||||
R.id.action_shuffle -> playbackModel.shuffle(music)
|
R.id.action_shuffle -> playbackModel.shuffle(music)
|
||||||
|
R.id.action_detail -> detailModel.showArtist(music)
|
||||||
R.id.action_play_next -> {
|
R.id.action_play_next -> {
|
||||||
playbackModel.playNext(music)
|
playbackModel.playNext(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
requireContext().showToast(R.string.lng_queue_added)
|
||||||
|
|
@ -170,6 +190,7 @@ class ArtistMenuDialogFragment : MenuDialogFragment<Artist>() {
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class GenreMenuDialogFragment : MenuDialogFragment<Genre>() {
|
class GenreMenuDialogFragment : MenuDialogFragment<Genre>() {
|
||||||
override val menuModel: MenuViewModel by activityViewModels()
|
override val menuModel: MenuViewModel by activityViewModels()
|
||||||
|
private val detailModel: DetailViewModel by activityViewModels()
|
||||||
private val musicModel: MusicViewModel by activityViewModels()
|
private val musicModel: MusicViewModel by activityViewModels()
|
||||||
private val playbackModel: PlaybackViewModel by activityViewModels()
|
private val playbackModel: PlaybackViewModel by activityViewModels()
|
||||||
private val args: GenreMenuDialogFragmentArgs by navArgs()
|
private val args: GenreMenuDialogFragmentArgs by navArgs()
|
||||||
|
|
@ -179,6 +200,8 @@ class GenreMenuDialogFragment : MenuDialogFragment<Genre>() {
|
||||||
override val uid: Music.UID
|
override val uid: Music.UID
|
||||||
get() = args.genreUid
|
get() = args.genreUid
|
||||||
|
|
||||||
|
override fun getDisabledItemIds(music: Genre) = setOf<Int>()
|
||||||
|
|
||||||
override fun updateMusic(binding: DialogMenuBinding, music: Genre) {
|
override fun updateMusic(binding: DialogMenuBinding, music: Genre) {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.menuCover.bind(music)
|
binding.menuCover.bind(music)
|
||||||
|
|
@ -191,10 +214,11 @@ class GenreMenuDialogFragment : MenuDialogFragment<Genre>() {
|
||||||
context.getPlural(R.plurals.fmt_song_count, music.songs.size))
|
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) {
|
when (item.itemId) {
|
||||||
R.id.action_play -> playbackModel.play(music)
|
R.id.action_play -> playbackModel.play(music)
|
||||||
R.id.action_shuffle -> playbackModel.shuffle(music)
|
R.id.action_shuffle -> playbackModel.shuffle(music)
|
||||||
|
R.id.action_detail -> detailModel.showGenre(music)
|
||||||
R.id.action_play_next -> {
|
R.id.action_play_next -> {
|
||||||
playbackModel.playNext(music)
|
playbackModel.playNext(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
requireContext().showToast(R.string.lng_queue_added)
|
||||||
|
|
@ -213,6 +237,7 @@ class GenreMenuDialogFragment : MenuDialogFragment<Genre>() {
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class PlaylistMenuDialogFragment : MenuDialogFragment<Playlist>() {
|
class PlaylistMenuDialogFragment : MenuDialogFragment<Playlist>() {
|
||||||
override val menuModel: MenuViewModel by activityViewModels()
|
override val menuModel: MenuViewModel by activityViewModels()
|
||||||
|
private val detailModel: DetailViewModel by activityViewModels()
|
||||||
private val musicModel: MusicViewModel by activityViewModels()
|
private val musicModel: MusicViewModel by activityViewModels()
|
||||||
private val playbackModel: PlaybackViewModel by activityViewModels()
|
private val playbackModel: PlaybackViewModel by activityViewModels()
|
||||||
private val args: PlaylistMenuDialogFragmentArgs by navArgs()
|
private val args: PlaylistMenuDialogFragmentArgs by navArgs()
|
||||||
|
|
@ -222,18 +247,37 @@ class PlaylistMenuDialogFragment : MenuDialogFragment<Playlist>() {
|
||||||
override val uid: Music.UID
|
override val uid: Music.UID
|
||||||
get() = args.playlistUid
|
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) {
|
override fun updateMusic(binding: DialogMenuBinding, music: Playlist) {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
binding.menuCover.bind(music)
|
binding.menuCover.bind(music)
|
||||||
binding.menuType.text = getString(R.string.lbl_playlist)
|
binding.menuType.text = getString(R.string.lbl_playlist)
|
||||||
binding.menuName.text = music.name.resolve(context)
|
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) {
|
when (item.itemId) {
|
||||||
R.id.action_play -> playbackModel.play(music)
|
R.id.action_play -> playbackModel.play(music)
|
||||||
R.id.action_shuffle -> playbackModel.shuffle(music)
|
R.id.action_shuffle -> playbackModel.shuffle(music)
|
||||||
|
R.id.action_detail -> detailModel.showPlaylist(music)
|
||||||
R.id.action_play_next -> {
|
R.id.action_play_next -> {
|
||||||
playbackModel.playNext(music)
|
playbackModel.playNext(music)
|
||||||
requireContext().showToast(R.string.lng_queue_added)
|
requireContext().showToast(R.string.lng_queue_added)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023 Auxio Project
|
* 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
|
* 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
|
* 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.
|
* 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)
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
*/
|
*/
|
||||||
class MenuOptionAdapter(private val listener: ClickableListListener<MenuItem>) :
|
class MenuItemAdapter(private val listener: ClickableListListener<MenuItem>) :
|
||||||
FlexibleListAdapter<MenuItem, MenuOptionViewHolder>(MenuOptionViewHolder.DIFF_CALLBACK) {
|
FlexibleListAdapter<MenuItem, MenuItemViewHolder>(MenuItemViewHolder.DIFF_CALLBACK) {
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
|
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)
|
holder.bind(getItem(position), listener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -48,11 +48,21 @@ class MenuOptionAdapter(private val listener: ClickableListListener<MenuItem>) :
|
||||||
*
|
*
|
||||||
* @author Alexander Capehart (OxygenCobalt)
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
*/
|
*/
|
||||||
class MenuOptionViewHolder private constructor(private val binding: ItemMenuOptionBinding) :
|
class MenuItemViewHolder private constructor(private val binding: ItemMenuOptionBinding) :
|
||||||
DialogRecyclerView.ViewHolder(binding.root) {
|
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<MenuItem>) {
|
fun bind(item: MenuItem, listener: ClickableListListener<MenuItem>) {
|
||||||
listener.bind(item, this)
|
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 {
|
companion object {
|
||||||
|
|
@ -63,7 +73,7 @@ class MenuOptionViewHolder private constructor(private val binding: ItemMenuOpti
|
||||||
* @return A new instance.
|
* @return A new instance.
|
||||||
*/
|
*/
|
||||||
fun from(parent: ViewGroup) =
|
fun from(parent: ViewGroup) =
|
||||||
MenuOptionViewHolder(ItemMenuOptionBinding.inflate(parent.context.inflater))
|
MenuItemViewHolder(ItemMenuOptionBinding.inflate(parent.context.inflater))
|
||||||
|
|
||||||
/** A comparator that can be used with DiffUtil. */
|
/** A comparator that can be used with DiffUtil. */
|
||||||
val DIFF_CALLBACK =
|
val DIFF_CALLBACK =
|
||||||
|
|
@ -56,22 +56,19 @@ class MenuViewModel @Inject constructor(private val musicRepository: MusicReposi
|
||||||
musicRepository.removeUpdateListener(this)
|
musicRepository.removeUpdateListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openMenu(@MenuRes menuRes: Int, song: Song) =
|
fun open(@MenuRes menuRes: Int, song: Song) = openImpl(PendingMenu.ForSong(menuRes, song))
|
||||||
openMenuImpl(PendingMenu.ForSong(menuRes, song))
|
|
||||||
|
|
||||||
fun openMenu(@MenuRes menuRes: Int, album: Album) =
|
fun open(@MenuRes menuRes: Int, album: Album) = openImpl(PendingMenu.ForAlbum(menuRes, album))
|
||||||
openMenuImpl(PendingMenu.ForAlbum(menuRes, album))
|
|
||||||
|
|
||||||
fun openMenu(@MenuRes menuRes: Int, artist: Artist) =
|
fun open(@MenuRes menuRes: Int, artist: Artist) =
|
||||||
openMenuImpl(PendingMenu.ForArtist(menuRes, artist))
|
openImpl(PendingMenu.ForArtist(menuRes, artist))
|
||||||
|
|
||||||
fun openMenu(@MenuRes menuRes: Int, genre: Genre) =
|
fun open(@MenuRes menuRes: Int, genre: Genre) = openImpl(PendingMenu.ForGenre(menuRes, genre))
|
||||||
openMenuImpl(PendingMenu.ForGenre(menuRes, genre))
|
|
||||||
|
|
||||||
fun openMenu(@MenuRes menuRes: Int, playlist: Playlist) =
|
fun open(@MenuRes menuRes: Int, playlist: Playlist) =
|
||||||
openMenuImpl(PendingMenu.ForPlaylist(menuRes, playlist))
|
openImpl(PendingMenu.ForPlaylist(menuRes, playlist))
|
||||||
|
|
||||||
private fun openMenuImpl(pendingMenu: PendingMenu) {
|
private fun openImpl(pendingMenu: PendingMenu) {
|
||||||
val existing = _pendingMenu.flow.value
|
val existing = _pendingMenu.flow.value
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
logW("Already opening $existing, ignoring $pendingMenu")
|
logW("Already opening $existing, ignoring $pendingMenu")
|
||||||
|
|
|
||||||
|
|
@ -164,11 +164,11 @@ class PlaybackPanelFragment :
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_go_artist -> {
|
R.id.action_artist_details -> {
|
||||||
navigateToCurrentArtist()
|
navigateToCurrentArtist()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_go_album -> {
|
R.id.action_album_details -> {
|
||||||
navigateToCurrentAlbum()
|
navigateToCurrentAlbum()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -176,7 +176,7 @@ class PlaybackPanelFragment :
|
||||||
playbackModel.song.value?.let(musicModel::addToPlaylist)
|
playbackModel.song.value?.let(musicModel::addToPlaylist)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_song_detail -> {
|
R.id.action_detail -> {
|
||||||
playbackModel.song.value?.let(detailModel::showSong)
|
playbackModel.song.value?.let(detailModel::showSong)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -184,11 +184,11 @@ class SearchFragment : ListFragment<Music, FragmentSearchBinding>() {
|
||||||
|
|
||||||
override fun onOpenMenu(item: Music, anchor: View) {
|
override fun onOpenMenu(item: Music, anchor: View) {
|
||||||
when (item) {
|
when (item) {
|
||||||
is Song -> menuModel.openMenu(R.menu.item_song, item)
|
is Song -> menuModel.open(R.menu.item_song, item)
|
||||||
is Album -> menuModel.openMenu(R.menu.item_album, item)
|
is Album -> menuModel.open(R.menu.item_album, item)
|
||||||
is Artist -> menuModel.openMenu(R.menu.item_parent, item)
|
is Artist -> menuModel.open(R.menu.item_parent, item)
|
||||||
is Genre -> menuModel.openMenu(R.menu.item_parent, item)
|
is Genre -> menuModel.open(R.menu.item_parent, item)
|
||||||
is Playlist -> menuModel.openMenu(R.menu.item_playlist, item)
|
is Playlist -> menuModel.open(R.menu.item_playlist, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
11
app/src/main/res/drawable/ic_details_24.xml
Normal file
11
app/src/main/res/drawable/ic_details_24.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M360,720L800,720Q800,720 800,720Q800,720 800,720L800,613L360,613L360,720ZM160,347L280,347L280,240L160,240Q160,240 160,240Q160,240 160,240L160,347ZM160,534L280,534L280,427L160,427L160,534ZM160,720L280,720L280,613L160,613L160,720Q160,720 160,720Q160,720 160,720ZM360,534L800,534L800,427L360,427L360,534ZM360,347L800,347L800,240Q800,240 800,240Q800,240 800,240L360,240L360,347ZM160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800Z"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24"
|
|
||||||
android:viewportHeight="24"
|
|
||||||
android:tint="?attr/colorControlNormal">
|
|
||||||
<path
|
|
||||||
android:fillColor="@android:color/white"
|
|
||||||
android:pathData="M13,14H15V11H18V9H15V6H13V9H10V11H13ZM8,18Q7.175,18 6.588,17.413Q6,16.825 6,16V4Q6,3.175 6.588,2.587Q7.175,2 8,2H20Q20.825,2 21.413,2.587Q22,3.175 22,4V16Q22,16.825 21.413,17.413Q20.825,18 20,18ZM8,16H20Q20,16 20,16Q20,16 20,16V4Q20,4 20,4Q20,4 20,4H8Q8,4 8,4Q8,4 8,4V16Q8,16 8,16Q8,16 8,16ZM4,22Q3.175,22 2.588,21.413Q2,20.825 2,20V6H4V20Q4,20 4,20Q4,20 4,20H18V22ZM8,4Q8,4 8,4Q8,4 8,4V16Q8,16 8,16Q8,16 8,16Q8,16 8,16Q8,16 8,16V4Q8,4 8,4Q8,4 8,4Z"/>
|
|
||||||
</vector>
|
|
||||||
11
app/src/main/res/drawable/ic_play_next_24.xml
Normal file
11
app/src/main/res/drawable/ic_play_next_24.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M780,900L720,840L840,720L720,600L780,540L960,720L780,900ZM320,840L320,760L160,760Q127,760 103.5,736.5Q80,713 80,680L80,200Q80,167 103.5,143.5Q127,120 160,120L800,120Q833,120 856.5,143.5Q880,167 880,200L880,480L800,480L800,200Q800,200 800,200Q800,200 800,200L160,200Q160,200 160,200Q160,200 160,200L160,680Q160,680 160,680Q160,680 160,680L680,680L680,760L600,760L600,840L320,840ZM440,600L520,600L520,480L640,480L640,400L520,400L520,280L440,280L440,400L320,400L320,480L440,480L440,600ZM160,680L160,680Q160,680 160,680Q160,680 160,680L160,200Q160,200 160,200Q160,200 160,200L160,200Q160,200 160,200Q160,200 160,200L160,680L160,680L160,680Z"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -3,9 +3,10 @@
|
||||||
xmlns:aapt="http://schemas.android.com/aapt">
|
xmlns:aapt="http://schemas.android.com/aapt">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Yes, this whole file is the material equalizer icon influenced by Spotify's
|
I kind of like Spotify's little equalizer playing indicator, so I tried to make
|
||||||
equalizer animation with each vector inlined using aapt:attr so that it does
|
the material symbols equalizer icon animate in a similar way. I got the best
|
||||||
not clutter the drawable folder.
|
results doing it frame by frame, but to avoid cluttering the drawable folder I
|
||||||
|
bundled them up with AAPT inlining, hence this monster of a file.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- Frame 1 -->
|
<!-- Frame 1 -->
|
||||||
|
|
|
||||||
12
app/src/main/res/drawable/ic_playlist_add_24.xml
Normal file
12
app/src/main/res/drawable/ic_playlist_add_24.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M120,640L120,560L400,560L400,640L120,640ZM120,480L120,400L560,400L560,480L120,480ZM120,320L120,240L560,240L560,320L120,320ZM640,800L640,640L480,640L480,560L640,560L640,400L720,400L720,560L880,560L880,640L720,640L720,800L640,800Z"/>
|
||||||
|
</vector>
|
||||||
|
|
||||||
11
app/src/main/res/drawable/ic_queue_add_24.xml
Normal file
11
app/src/main/res/drawable/ic_queue_add_24.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M440,600L520,600L520,480L640,480L640,400L520,400L520,280L440,280L440,400L320,400L320,480L440,480L440,600ZM320,840L320,760L160,760Q127,760 103.5,736.5Q80,713 80,680L80,200Q80,167 103.5,143.5Q127,120 160,120L800,120Q833,120 856.5,143.5Q880,167 880,200L880,680Q880,713 856.5,736.5Q833,760 800,760L640,760L640,840L320,840ZM160,680L800,680Q800,680 800,680Q800,680 800,680L800,200Q800,200 800,200Q800,200 800,200L160,200Q160,200 160,200Q160,200 160,200L160,680Q160,680 160,680Q160,680 160,680ZM160,680Q160,680 160,680Q160,680 160,680L160,200Q160,200 160,200Q160,200 160,200L160,200Q160,200 160,200Q160,200 160,200L160,680Q160,680 160,680Q160,680 160,680L160,680Z"/>
|
||||||
|
</vector>
|
||||||
11
app/src/main/res/drawable/ic_share_24.xml
Normal file
11
app/src/main/res/drawable/ic_share_24.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M720,880Q670,880 635,845Q600,810 600,760Q600,753 601,745.5Q602,738 604,732L322,568Q305,583 284,591.5Q263,600 240,600Q190,600 155,565Q120,530 120,480Q120,430 155,395Q190,360 240,360Q263,360 284,368.5Q305,377 322,392L604,228Q602,222 601,214.5Q600,207 600,200Q600,150 635,115Q670,80 720,80Q770,80 805,115Q840,150 840,200Q840,250 805,285Q770,320 720,320Q697,320 676,311.5Q655,303 638,288L356,452Q358,458 359,465.5Q360,473 360,480Q360,487 359,494.5Q358,502 356,508L638,672Q655,657 676,648.5Q697,640 720,640Q770,640 805,675Q840,710 840,760Q840,810 805,845Q770,880 720,880ZM720,240Q737,240 748.5,228.5Q760,217 760,200Q760,183 748.5,171.5Q737,160 720,160Q703,160 691.5,171.5Q680,183 680,200Q680,217 691.5,228.5Q703,240 720,240ZM240,520Q257,520 268.5,508.5Q280,497 280,480Q280,463 268.5,451.5Q257,440 240,440Q223,440 211.5,451.5Q200,463 200,480Q200,497 211.5,508.5Q223,520 240,520ZM720,800Q737,800 748.5,788.5Q760,777 760,760Q760,743 748.5,731.5Q737,720 720,720Q703,720 691.5,731.5Q680,743 680,760Q680,777 691.5,788.5Q703,800 720,800ZM720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200ZM240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480ZM720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Z"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
<path
|
<path
|
||||||
android:name="note"
|
android:name="note"
|
||||||
android:fillColor="@android:color/transparent"
|
android:fillColor="@android:color/transparent"
|
||||||
android:pathData="M 13,4.0000207 17,8 M 12.999969,4.0004121 V 17.000315 m 0,-2.94e-4 -3.0000004,3 -2.9999997,-3 2.9999997,-3 M 7.021336,16.939069"
|
android:pathData="M13 4l4 4m-4-4v13m0 0l-3 3-3-3 3-3"
|
||||||
android:strokeWidth="2"
|
android:strokeWidth="2"
|
||||||
android:strokeColor="@android:color/white"
|
android:strokeColor="@android:color/white"
|
||||||
android:strokeLineCap="round"
|
android:strokeLineCap="round"
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.appcompat.widget.AppCompatTextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@android:id/title"
|
android:id="@android:id/title"
|
||||||
android:textAppearance="@style/TextAppearance.Auxio.TitleMedium"
|
|
||||||
android:padding="@dimen/spacing_medium"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:background="@drawable/ui_item_ripple"
|
android:padding="@dimen/spacing_medium"
|
||||||
|
android:textColor="@color/sel_selectable_text_primary"
|
||||||
|
style="@style/Widget.Auxio.TextView.Icon.Clickable"
|
||||||
|
app:drawableStartCompat="@drawable/ic_edit_24"
|
||||||
|
app:drawableTint="@color/sel_activatable_icon"
|
||||||
tools:text="Songs" />
|
tools:text="Songs" />
|
||||||
|
|
@ -1,18 +1,35 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_play"
|
||||||
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle"
|
||||||
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_parent_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
<item
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
android:id="@+id/action_go_artist"
|
|
||||||
android:title="@string/lbl_go_artist" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_artist_details"
|
||||||
|
android:title="@string/lbl_artist_details"
|
||||||
|
android:icon="@drawable/ic_artist_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -1,20 +1,33 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_play"
|
||||||
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle"
|
||||||
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
<item
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
android:id="@+id/action_go_artist"
|
|
||||||
android:title="@string/lbl_go_artist" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_song_detail"
|
android:id="@+id/action_artist_details"
|
||||||
android:title="@string/lbl_song_detail" />
|
android:title="@string/lbl_artist_details"
|
||||||
|
android:icon="@drawable/ic_artist_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_song_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share" />
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,29 @@
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play"
|
android:id="@+id/action_play"
|
||||||
android:title="@string/lbl_play"
|
android:title="@string/lbl_play"
|
||||||
app:showAsAction="never" />
|
android:icon="@drawable/ic_play_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_shuffle"
|
android:id="@+id/action_shuffle"
|
||||||
android:title="@string/lbl_shuffle"
|
android:title="@string/lbl_shuffle"
|
||||||
app:showAsAction="never" />
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_parent_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -1,21 +1,35 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_play"
|
||||||
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle"
|
||||||
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
<item
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
android:id="@+id/action_go_album"
|
|
||||||
android:title="@string/lbl_go_album" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_song_detail"
|
android:id="@+id/action_album_details"
|
||||||
android:title="@string/lbl_song_detail" />
|
android:title="@string/lbl_album_details"
|
||||||
|
android:icon="@drawable/ic_album_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_song_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -2,20 +2,31 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play"
|
android:id="@+id/action_play"
|
||||||
android:title="@string/lbl_play" />
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_shuffle"
|
android:id="@+id/action_shuffle"
|
||||||
android:title="@string/lbl_shuffle" />
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_parent_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -2,23 +2,34 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play"
|
android:id="@+id/action_play"
|
||||||
android:title="@string/lbl_play" />
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_shuffle"
|
android:id="@+id/action_shuffle"
|
||||||
android:title="@string/lbl_shuffle" />
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_parent_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
|
android:icon="@drawable/ic_queue_add_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_rename"
|
android:id="@+id/action_rename"
|
||||||
android:title="@string/lbl_rename" />
|
android:title="@string/lbl_rename"
|
||||||
|
android:icon="@drawable/ic_edit_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_delete"
|
android:id="@+id/action_delete"
|
||||||
android:title="@string/lbl_delete" />
|
android:title="@string/lbl_delete"
|
||||||
|
android:icon="@drawable/ic_delete_24"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -1,21 +1,35 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_play"
|
||||||
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle"
|
||||||
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
|
android:icon="@drawable/ic_queue_add_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_go_artist"
|
android:id="@+id/action_artist_details"
|
||||||
android:title="@string/lbl_go_artist" />
|
android:title="@string/lbl_artist_details"
|
||||||
|
android:icon="@drawable/ic_artist_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_go_album"
|
android:id="@+id/action_album_details"
|
||||||
android:title="@string/lbl_go_album" />
|
android:title="@string/lbl_album_details"
|
||||||
|
android:icon="@drawable/ic_album_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_song_detail"
|
android:id="@+id/action_detail"
|
||||||
android:title="@string/lbl_song_detail" />
|
android:title="@string/lbl_song_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -1,24 +1,39 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_play"
|
||||||
|
android:title="@string/lbl_play"
|
||||||
|
android:icon="@drawable/ic_play_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_shuffle"
|
||||||
|
android:title="@string/lbl_shuffle"
|
||||||
|
android:icon="@drawable/ic_shuffle_off_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_play_next"
|
android:id="@+id/action_play_next"
|
||||||
android:title="@string/lbl_play_next" />
|
android:title="@string/lbl_play_next"
|
||||||
|
android:icon="@drawable/ic_play_next_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add"
|
||||||
<item
|
android:icon="@drawable/ic_queue_add_24" />
|
||||||
android:id="@+id/action_go_artist"
|
|
||||||
android:title="@string/lbl_go_artist" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_go_album"
|
|
||||||
android:title="@string/lbl_go_album" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add"
|
||||||
|
android:icon="@drawable/ic_playlist_add_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_song_detail"
|
android:id="@+id/action_artist_details"
|
||||||
android:title="@string/lbl_song_detail" />
|
android:title="@string/lbl_artist_details"
|
||||||
|
android:icon="@drawable/ic_artist_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_album_details"
|
||||||
|
android:title="@string/lbl_album_details"
|
||||||
|
android:icon="@drawable/ic_album_24" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_detail"
|
||||||
|
android:title="@string/lbl_song_detail"
|
||||||
|
android:icon="@drawable/ic_details_24" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
android:id="@+id/action_share"
|
||||||
android:title="@string/lbl_share" />
|
android:title="@string/lbl_share"
|
||||||
|
android:icon="@drawable/ic_share_24" />
|
||||||
</menu>
|
</menu>
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
android:id="@+id/action_queue_add"
|
android:id="@+id/action_queue_add"
|
||||||
android:title="@string/lbl_queue_add" />
|
android:title="@string/lbl_queue_add" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_go_artist"
|
android:id="@+id/action_artist_details"
|
||||||
android:title="@string/lbl_go_artist" />
|
android:title="@string/lbl_artist_details" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add" />
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,18 @@
|
||||||
android:title="@string/lbl_equalizer"
|
android:title="@string/lbl_equalizer"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_go_artist"
|
android:id="@+id/action_artist_details"
|
||||||
android:title="@string/lbl_go_artist"
|
android:title="@string/lbl_artist_details"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_go_album"
|
android:id="@+id/action_album_details"
|
||||||
android:title="@string/lbl_go_album"
|
android:title="@string/lbl_album_details"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_playlist_add"
|
android:id="@+id/action_playlist_add"
|
||||||
android:title="@string/lbl_playlist_add" />
|
android:title="@string/lbl_playlist_add" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_song_detail"
|
android:id="@+id/action_detail"
|
||||||
android:title="@string/lbl_song_detail"
|
android:title="@string/lbl_song_detail"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_selection_play_next"
|
android:id="@+id/action_selection_play_next"
|
||||||
android:title="@string/lbl_play_next"
|
android:title="@string/lbl_play_next"
|
||||||
android:icon="@drawable/ic_play_next"
|
android:icon="@drawable/ic_play_next_24"
|
||||||
app:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_selection_queue_add"
|
android:id="@+id/action_selection_queue_add"
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<string name="lbl_play_next">شغل الاغنية التالية</string>
|
<string name="lbl_play_next">شغل الاغنية التالية</string>
|
||||||
<string name="lbl_queue_add">أضف إلى الطابور</string>
|
<string name="lbl_queue_add">أضف إلى الطابور</string>
|
||||||
<string name="lng_queue_added">تمت الإضافة إلى الطابور</string>
|
<string name="lng_queue_added">تمت الإضافة إلى الطابور</string>
|
||||||
<string name="lbl_go_artist">أذهب إلى الفنان</string>
|
<string name="lbl_artist_details">أذهب إلى الفنان</string>
|
||||||
<string name="lbl_go_album">أذهب إلى الالبوم</string>
|
<string name="lbl_album_details">أذهب إلى الالبوم</string>
|
||||||
<string name="lbl_state_saved">تم حفظ الحالة</string>
|
<string name="lbl_state_saved">تم حفظ الحالة</string>
|
||||||
<string name="lbl_add">أضف</string>
|
<string name="lbl_add">أضف</string>
|
||||||
<string name="lbl_save">حفظ</string>
|
<string name="lbl_save">حفظ</string>
|
||||||
|
|
|
||||||
|
|
@ -83,8 +83,8 @@
|
||||||
<string name="lbl_equalizer">Эквалайзер</string>
|
<string name="lbl_equalizer">Эквалайзер</string>
|
||||||
<string name="lbl_play_selected">Гуляць выбрана</string>
|
<string name="lbl_play_selected">Гуляць выбрана</string>
|
||||||
<string name="lbl_queue">Чарга</string>
|
<string name="lbl_queue">Чарга</string>
|
||||||
<string name="lbl_go_album">Перайсці да альбома</string>
|
<string name="lbl_album_details">Перайсці да альбома</string>
|
||||||
<string name="lbl_go_artist">Перайсці да выканаўцы</string>
|
<string name="lbl_artist_details">Перайсці да выканаўцы</string>
|
||||||
<string name="lbl_file_name">Імя файла</string>
|
<string name="lbl_file_name">Імя файла</string>
|
||||||
<string name="lbl_song_detail">Праглядзіце ўласцівасці</string>
|
<string name="lbl_song_detail">Праглядзіце ўласцівасці</string>
|
||||||
<string name="lbl_props">Уласцівасці песні</string>
|
<string name="lbl_props">Уласцівасці песні</string>
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@
|
||||||
<string name="lbl_play_next">Přehrát další</string>
|
<string name="lbl_play_next">Přehrát další</string>
|
||||||
<string name="lbl_queue_add">Přidat do fronty</string>
|
<string name="lbl_queue_add">Přidat do fronty</string>
|
||||||
<string name="lng_queue_added">Přidáno do fronty</string>
|
<string name="lng_queue_added">Přidáno do fronty</string>
|
||||||
<string name="lbl_go_artist">Přejít na umělce</string>
|
<string name="lbl_artist_details">Přejít na umělce</string>
|
||||||
<string name="lbl_go_album">Přejít na album</string>
|
<string name="lbl_album_details">Přejít na album</string>
|
||||||
<string name="lbl_state_saved">Stav uložen</string>
|
<string name="lbl_state_saved">Stav uložen</string>
|
||||||
<!-- Actual string: Ok -->
|
<!-- Actual string: Ok -->
|
||||||
<string name="lbl_ok">OK</string>
|
<string name="lbl_ok">OK</string>
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@
|
||||||
<string name="lbl_play_next">Als Nächstes abspielen</string>
|
<string name="lbl_play_next">Als Nächstes abspielen</string>
|
||||||
<string name="lbl_queue_add">Zur Warteschlange hinzufügen</string>
|
<string name="lbl_queue_add">Zur Warteschlange hinzufügen</string>
|
||||||
<string name="lng_queue_added">Der Warteschlange hinzugefügt</string>
|
<string name="lng_queue_added">Der Warteschlange hinzugefügt</string>
|
||||||
<string name="lbl_go_artist">Zum Künstler gehen</string>
|
<string name="lbl_artist_details">Zum Künstler gehen</string>
|
||||||
<string name="lbl_go_album">Zum Album gehen</string>
|
<string name="lbl_album_details">Zum Album gehen</string>
|
||||||
<string name="lbl_state_saved">Wiedergabezustand gespeichert</string>
|
<string name="lbl_state_saved">Wiedergabezustand gespeichert</string>
|
||||||
<string name="lbl_add">Hinzufügen</string>
|
<string name="lbl_add">Hinzufügen</string>
|
||||||
<string name="lbl_save">Speichern</string>
|
<string name="lbl_save">Speichern</string>
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
<string name="lbl_play_next">Επόμενο</string>
|
<string name="lbl_play_next">Επόμενο</string>
|
||||||
<string name="lbl_queue_add">Προσθήκη στην ουρά αναπ/γής</string>
|
<string name="lbl_queue_add">Προσθήκη στην ουρά αναπ/γής</string>
|
||||||
<string name="lng_queue_added">Προστέθηκε ένας τίτλος στην ουρά αναπαραγωγής</string>
|
<string name="lng_queue_added">Προστέθηκε ένας τίτλος στην ουρά αναπαραγωγής</string>
|
||||||
<string name="lbl_go_artist">Πήγαινε στον καλλιτέχνη</string>
|
<string name="lbl_artist_details">Πήγαινε στον καλλιτέχνη</string>
|
||||||
<string name="lbl_go_album">Πήγαινε στο άλμπουμ</string>
|
<string name="lbl_album_details">Πήγαινε στο άλμπουμ</string>
|
||||||
<string name="lbl_about">Σχετικά με</string>
|
<string name="lbl_about">Σχετικά με</string>
|
||||||
<string name="lbl_version">Έκδοση</string>
|
<string name="lbl_version">Έκδοση</string>
|
||||||
<string name="lbl_code">Πηγαίος κώδικας</string>
|
<string name="lbl_code">Πηγαίος κώδικας</string>
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<string name="lbl_play_next">Reproducir siguiente</string>
|
<string name="lbl_play_next">Reproducir siguiente</string>
|
||||||
<string name="lbl_queue_add">Agregar a la cola</string>
|
<string name="lbl_queue_add">Agregar a la cola</string>
|
||||||
<string name="lng_queue_added">Agregado a la cola</string>
|
<string name="lng_queue_added">Agregado a la cola</string>
|
||||||
<string name="lbl_go_artist">Ir al artista</string>
|
<string name="lbl_artist_details">Ir al artista</string>
|
||||||
<string name="lbl_go_album">Ir al álbum</string>
|
<string name="lbl_album_details">Ir al álbum</string>
|
||||||
<string name="lbl_state_saved">Estado guardado</string>
|
<string name="lbl_state_saved">Estado guardado</string>
|
||||||
<string name="lbl_add">Agregar</string>
|
<string name="lbl_add">Agregar</string>
|
||||||
<string name="lbl_save">Guardar</string>
|
<string name="lbl_save">Guardar</string>
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
<string name="lbl_shuffle">Sekoita</string>
|
<string name="lbl_shuffle">Sekoita</string>
|
||||||
<string name="lbl_queue">Jono</string>
|
<string name="lbl_queue">Jono</string>
|
||||||
<string name="lbl_queue_add">Lisää jonoon</string>
|
<string name="lbl_queue_add">Lisää jonoon</string>
|
||||||
<string name="lbl_go_album">Siirry albumiin</string>
|
<string name="lbl_album_details">Siirry albumiin</string>
|
||||||
<string name="lbl_song_detail">Näytä ominaisuudet</string>
|
<string name="lbl_song_detail">Näytä ominaisuudet</string>
|
||||||
<string name="lbl_props">Kappaleen ominaisuudet</string>
|
<string name="lbl_props">Kappaleen ominaisuudet</string>
|
||||||
<string name="lbl_file_name">Tiedostonimi</string>
|
<string name="lbl_file_name">Tiedostonimi</string>
|
||||||
|
|
@ -211,7 +211,7 @@
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="lbl_sort_asc">Nousevasti</string>
|
<string name="lbl_sort_asc">Nousevasti</string>
|
||||||
<string name="lbl_play_next">Toista seuraava</string>
|
<string name="lbl_play_next">Toista seuraava</string>
|
||||||
<string name="lbl_go_artist">Siirry esittäjään</string>
|
<string name="lbl_artist_details">Siirry esittäjään</string>
|
||||||
<string name="set_content">Sisältö</string>
|
<string name="set_content">Sisältö</string>
|
||||||
<string name="set_music">Musiikki</string>
|
<string name="set_music">Musiikki</string>
|
||||||
<string name="set_images">Kuvat</string>
|
<string name="set_images">Kuvat</string>
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,8 @@
|
||||||
<string name="lbl_play_next">Tugtugin pagkatapos</string>
|
<string name="lbl_play_next">Tugtugin pagkatapos</string>
|
||||||
<string name="lbl_queue_add">Idagdag sa pila</string>
|
<string name="lbl_queue_add">Idagdag sa pila</string>
|
||||||
<string name="lng_queue_added">Idiinagdag sa pila</string>
|
<string name="lng_queue_added">Idiinagdag sa pila</string>
|
||||||
<string name="lbl_go_artist">Puntahan ang artista</string>
|
<string name="lbl_artist_details">Puntahan ang artista</string>
|
||||||
<string name="lbl_go_album">Puntahan ang album</string>
|
<string name="lbl_album_details">Puntahan ang album</string>
|
||||||
<string name="lbl_song_detail">Tignan ang katangian</string>
|
<string name="lbl_song_detail">Tignan ang katangian</string>
|
||||||
<string name="lbl_props">Katangian ng kanta</string>
|
<string name="lbl_props">Katangian ng kanta</string>
|
||||||
<string name="lbl_file_name">Pangalan ng file</string>
|
<string name="lbl_file_name">Pangalan ng file</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Jouer ensuite</string>
|
<string name="lbl_play_next">Jouer ensuite</string>
|
||||||
<string name="lbl_queue_add">Ajouter à la file d\'attente</string>
|
<string name="lbl_queue_add">Ajouter à la file d\'attente</string>
|
||||||
<string name="lng_queue_added">Ajouté à la file d\'attente</string>
|
<string name="lng_queue_added">Ajouté à la file d\'attente</string>
|
||||||
<string name="lbl_go_album">Aller à l\'album</string>
|
<string name="lbl_album_details">Aller à l\'album</string>
|
||||||
<string name="lbl_go_artist">Aller à l\'artiste</string>
|
<string name="lbl_artist_details">Aller à l\'artiste</string>
|
||||||
<string name="lbl_about">À propos</string>
|
<string name="lbl_about">À propos</string>
|
||||||
<string name="lbl_version">Version</string>
|
<string name="lbl_version">Version</string>
|
||||||
<string name="lbl_code">Code source</string>
|
<string name="lbl_code">Code source</string>
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
<string name="lbl_single_live">Sinxelo en directo</string>
|
<string name="lbl_single_live">Sinxelo en directo</string>
|
||||||
<string name="lbl_compilation_live">Compilación en directo</string>
|
<string name="lbl_compilation_live">Compilación en directo</string>
|
||||||
<string name="lbl_mixes">Mesturas</string>
|
<string name="lbl_mixes">Mesturas</string>
|
||||||
<string name="lbl_go_album">Ir ao álbum</string>
|
<string name="lbl_album_details">Ir ao álbum</string>
|
||||||
<string name="lbl_genres">Xéneros</string>
|
<string name="lbl_genres">Xéneros</string>
|
||||||
<string name="lbl_genre">Xénero</string>
|
<string name="lbl_genre">Xénero</string>
|
||||||
<string name="lbl_filter">Filtro</string>
|
<string name="lbl_filter">Filtro</string>
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
<string name="lbl_queue">Cola</string>
|
<string name="lbl_queue">Cola</string>
|
||||||
<string name="lbl_queue_add">Engadir á cola</string>
|
<string name="lbl_queue_add">Engadir á cola</string>
|
||||||
<string name="set_exclude_non_music">Excluir o que non é música</string>
|
<string name="set_exclude_non_music">Excluir o que non é música</string>
|
||||||
<string name="lbl_go_artist">Ir ao artista</string>
|
<string name="lbl_artist_details">Ir ao artista</string>
|
||||||
<string name="lbl_file_name">Nome do arquivo</string>
|
<string name="lbl_file_name">Nome do arquivo</string>
|
||||||
<string name="lbl_shuffle_shortcut_short">Mesturar</string>
|
<string name="lbl_shuffle_shortcut_short">Mesturar</string>
|
||||||
<string name="lbl_shuffle_shortcut_long">Mesturar todo</string>
|
<string name="lbl_shuffle_shortcut_long">Mesturar todo</string>
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@
|
||||||
<string name="lbl_sort">क्रमबद्ध</string>
|
<string name="lbl_sort">क्रमबद्ध</string>
|
||||||
<string name="lbl_play">चलाएं</string>
|
<string name="lbl_play">चलाएं</string>
|
||||||
<string name="lbl_shuffle">शफ़ल</string>
|
<string name="lbl_shuffle">शफ़ल</string>
|
||||||
<string name="lbl_go_artist">कलाकार पर जाएं</string>
|
<string name="lbl_artist_details">कलाकार पर जाएं</string>
|
||||||
<string name="lbl_go_album">एल्बम पर जाएं</string>
|
<string name="lbl_album_details">एल्बम पर जाएं</string>
|
||||||
<string name="lbl_queue">पंक्ति</string>
|
<string name="lbl_queue">पंक्ति</string>
|
||||||
<string name="lbl_queue_add">क़तार में जोड़ें</string>
|
<string name="lbl_queue_add">क़तार में जोड़ें</string>
|
||||||
<string name="lng_queue_added">कतार में जोड़ा गया</string>
|
<string name="lng_queue_added">कतार में जोड़ा गया</string>
|
||||||
|
|
|
||||||
|
|
@ -179,8 +179,8 @@
|
||||||
<string name="lbl_queue_add">Dodaj u popis pjesama</string>
|
<string name="lbl_queue_add">Dodaj u popis pjesama</string>
|
||||||
<string name="lng_queue_added">Dodano u popis pjesama</string>
|
<string name="lng_queue_added">Dodano u popis pjesama</string>
|
||||||
<string name="lbl_song_detail">Prikaži svojstva</string>
|
<string name="lbl_song_detail">Prikaži svojstva</string>
|
||||||
<string name="lbl_go_artist">Idi na izvođača</string>
|
<string name="lbl_artist_details">Idi na izvođača</string>
|
||||||
<string name="lbl_go_album">Idi na album</string>
|
<string name="lbl_album_details">Idi na album</string>
|
||||||
<string name="set_keep_shuffle_desc">Ostavi miješanje omogućeno kada se druga pjesma reproducira</string>
|
<string name="set_keep_shuffle_desc">Ostavi miješanje omogućeno kada se druga pjesma reproducira</string>
|
||||||
<string name="set_root_title">Postavke</string>
|
<string name="set_root_title">Postavke</string>
|
||||||
<string name="set_theme">Tema</string>
|
<string name="set_theme">Tema</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Következő lejátszása</string>
|
<string name="lbl_play_next">Következő lejátszása</string>
|
||||||
<string name="lbl_queue_add">Várósorhoz ad</string>
|
<string name="lbl_queue_add">Várósorhoz ad</string>
|
||||||
<string name="lng_queue_added">Sorbaállítva</string>
|
<string name="lng_queue_added">Sorbaállítva</string>
|
||||||
<string name="lbl_go_artist">Ugrás előadóhoz</string>
|
<string name="lbl_artist_details">Ugrás előadóhoz</string>
|
||||||
<string name="lbl_go_album">Ugrás albumhoz</string>
|
<string name="lbl_album_details">Ugrás albumhoz</string>
|
||||||
<string name="lbl_about">Rólunk</string>
|
<string name="lbl_about">Rólunk</string>
|
||||||
<string name="lbl_version">Verzió</string>
|
<string name="lbl_version">Verzió</string>
|
||||||
<string name="lbl_code">Forráskód</string>
|
<string name="lbl_code">Forráskód</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Putar berikutnya</string>
|
<string name="lbl_play_next">Putar berikutnya</string>
|
||||||
<string name="lbl_queue_add">Tambahkan ke antrean</string>
|
<string name="lbl_queue_add">Tambahkan ke antrean</string>
|
||||||
<string name="lng_queue_added">Ditambahkan ke antrean</string>
|
<string name="lng_queue_added">Ditambahkan ke antrean</string>
|
||||||
<string name="lbl_go_artist">Buka artis</string>
|
<string name="lbl_artist_details">Buka artis</string>
|
||||||
<string name="lbl_go_album">Buka album</string>
|
<string name="lbl_album_details">Buka album</string>
|
||||||
<string name="lbl_about">Tentang</string>
|
<string name="lbl_about">Tentang</string>
|
||||||
<string name="lbl_version">Versi</string>
|
<string name="lbl_version">Versi</string>
|
||||||
<string name="lbl_code">Kode sumber</string>
|
<string name="lbl_code">Kode sumber</string>
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<string name="lbl_play_next">Riproduci successivo</string>
|
<string name="lbl_play_next">Riproduci successivo</string>
|
||||||
<string name="lbl_queue_add">Accoda</string>
|
<string name="lbl_queue_add">Accoda</string>
|
||||||
<string name="lng_queue_added">Accodato</string>
|
<string name="lng_queue_added">Accodato</string>
|
||||||
<string name="lbl_go_artist">Vai all\'artista</string>
|
<string name="lbl_artist_details">Vai all\'artista</string>
|
||||||
<string name="lbl_go_album">Vai all\'album</string>
|
<string name="lbl_album_details">Vai all\'album</string>
|
||||||
<string name="lbl_state_saved">Stato salvato</string>
|
<string name="lbl_state_saved">Stato salvato</string>
|
||||||
<string name="lbl_add">Aggiungi</string>
|
<string name="lbl_add">Aggiungi</string>
|
||||||
<string name="lbl_save">Salva</string>
|
<string name="lbl_save">Salva</string>
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
<string name="lbl_shuffle_selected">ערבוב הנבחרים</string>
|
<string name="lbl_shuffle_selected">ערבוב הנבחרים</string>
|
||||||
<string name="lbl_play_next">ניגון הבא</string>
|
<string name="lbl_play_next">ניגון הבא</string>
|
||||||
<string name="lbl_queue_add">הוספה לתור</string>
|
<string name="lbl_queue_add">הוספה לתור</string>
|
||||||
<string name="lbl_go_album">מעבר לאלבום</string>
|
<string name="lbl_album_details">מעבר לאלבום</string>
|
||||||
<string name="lbl_song_detail">הצגת מאפיינים</string>
|
<string name="lbl_song_detail">הצגת מאפיינים</string>
|
||||||
<string name="lbl_props">מאפייני שיר</string>
|
<string name="lbl_props">מאפייני שיר</string>
|
||||||
<string name="lbl_format">תבנית</string>
|
<string name="lbl_format">תבנית</string>
|
||||||
|
|
@ -132,7 +132,7 @@
|
||||||
<string name="lbl_name">שם</string>
|
<string name="lbl_name">שם</string>
|
||||||
<string name="lbl_track">רצועה</string>
|
<string name="lbl_track">רצועה</string>
|
||||||
<string name="lbl_queue">תור</string>
|
<string name="lbl_queue">תור</string>
|
||||||
<string name="lbl_go_artist">מעבר לאומן</string>
|
<string name="lbl_artist_details">מעבר לאומן</string>
|
||||||
<string name="lbl_file_name">שם קובץ</string>
|
<string name="lbl_file_name">שם קובץ</string>
|
||||||
<string name="lbl_shuffle_shortcut_short">ערבוב</string>
|
<string name="lbl_shuffle_shortcut_short">ערבוב</string>
|
||||||
<string name="lbl_state_restored">המצב שוחזר</string>
|
<string name="lbl_state_restored">המצב שוחזר</string>
|
||||||
|
|
|
||||||
|
|
@ -116,8 +116,8 @@
|
||||||
<plurals name="fmt_artist_count">
|
<plurals name="fmt_artist_count">
|
||||||
<item quantity="other">%d 人のアーティスト</item>
|
<item quantity="other">%d 人のアーティスト</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="lbl_go_artist">アーティストに移動</string>
|
<string name="lbl_artist_details">アーティストに移動</string>
|
||||||
<string name="lbl_go_album">アルバムに移動</string>
|
<string name="lbl_album_details">アルバムに移動</string>
|
||||||
<string name="lbl_props">曲のプロパティ</string>
|
<string name="lbl_props">曲のプロパティ</string>
|
||||||
<string name="lng_queue_added">再生待ちに追加</string>
|
<string name="lng_queue_added">再生待ちに追加</string>
|
||||||
<string name="lng_author">開発者 アレクサンダー・ケイプハート (Alexander Capehart)</string>
|
<string name="lng_author">開発者 アレクサンダー・ケイプハート (Alexander Capehart)</string>
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@
|
||||||
<string name="lbl_play_next">다음 곡 재생</string>
|
<string name="lbl_play_next">다음 곡 재생</string>
|
||||||
<string name="lbl_queue_add">대기열에 추가</string>
|
<string name="lbl_queue_add">대기열에 추가</string>
|
||||||
<string name="lng_queue_added">대기열에 추가됨</string>
|
<string name="lng_queue_added">대기열에 추가됨</string>
|
||||||
<string name="lbl_go_artist">아티스트로 이동</string>
|
<string name="lbl_artist_details">아티스트로 이동</string>
|
||||||
<string name="lbl_go_album">앨범으로 이동</string>
|
<string name="lbl_album_details">앨범으로 이동</string>
|
||||||
<string name="lbl_state_saved">상태 저장됨</string>
|
<string name="lbl_state_saved">상태 저장됨</string>
|
||||||
<!-- Actual string: Ok -->
|
<!-- Actual string: Ok -->
|
||||||
<string name="lbl_ok">확인</string>
|
<string name="lbl_ok">확인</string>
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,8 @@
|
||||||
<string name="lbl_play_next">Groti kitą</string>
|
<string name="lbl_play_next">Groti kitą</string>
|
||||||
<string name="lbl_queue_add">Pridėti į eilę</string>
|
<string name="lbl_queue_add">Pridėti į eilę</string>
|
||||||
<string name="lbl_queue">Eilė</string>
|
<string name="lbl_queue">Eilė</string>
|
||||||
<string name="lbl_go_artist">Eiti į atlikėją</string>
|
<string name="lbl_artist_details">Eiti į atlikėją</string>
|
||||||
<string name="lbl_go_album">Eiti į albumą</string>
|
<string name="lbl_album_details">Eiti į albumą</string>
|
||||||
<string name="lbl_song_detail">Peržiūrėti ypatybes</string>
|
<string name="lbl_song_detail">Peržiūrėti ypatybes</string>
|
||||||
<string name="lbl_size">Dydis</string>
|
<string name="lbl_size">Dydis</string>
|
||||||
<string name="lbl_bitrate">Bitų srautas</string>
|
<string name="lbl_bitrate">Bitų srautas</string>
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
<item quantity="one">%d പാട്ട്</item>
|
<item quantity="one">%d പാട്ട്</item>
|
||||||
<item quantity="other">%d പാട്ടുകൾ</item>
|
<item quantity="other">%d പാട്ടുകൾ</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="lbl_go_artist">കലാകാരനിലേക്ക് പോകുക</string>
|
<string name="lbl_artist_details">കലാകാരനിലേക്ക് പോകുക</string>
|
||||||
<string name="lbl_song_detail">സവിശേഷതകൾ കാണുക</string>
|
<string name="lbl_song_detail">സവിശേഷതകൾ കാണുക</string>
|
||||||
<string name="lbl_state_saved">സ്ഥിതി സംരക്ഷിച്ചു</string>
|
<string name="lbl_state_saved">സ്ഥിതി സംരക്ഷിച്ചു</string>
|
||||||
<string name="lbl_sort_dec">അവരോഹണം</string>
|
<string name="lbl_sort_dec">അവരോഹണം</string>
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@
|
||||||
<string name="lbl_play_next">Afspelen als volgende</string>
|
<string name="lbl_play_next">Afspelen als volgende</string>
|
||||||
<string name="lbl_queue_add">Toevoegen aan wachtrij</string>
|
<string name="lbl_queue_add">Toevoegen aan wachtrij</string>
|
||||||
<string name="lng_queue_added">Toegevoegd aan de wachtrij</string>
|
<string name="lng_queue_added">Toegevoegd aan de wachtrij</string>
|
||||||
<string name="lbl_go_artist">Ga naar artiest</string>
|
<string name="lbl_artist_details">Ga naar artiest</string>
|
||||||
<string name="lbl_go_album">Ga naar album</string>
|
<string name="lbl_album_details">Ga naar album</string>
|
||||||
<string name="lbl_state_saved">Staat gered</string>
|
<string name="lbl_state_saved">Staat gered</string>
|
||||||
<string name="lbl_add">Toevoegen</string>
|
<string name="lbl_add">Toevoegen</string>
|
||||||
<string name="lbl_save">Opslaan</string>
|
<string name="lbl_save">Opslaan</string>
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
<string name="lbl_queue">ਕਤਾਰ</string>
|
<string name="lbl_queue">ਕਤਾਰ</string>
|
||||||
<string name="lbl_play_next">ਅਗਲਾ ਚਲਾਓ</string>
|
<string name="lbl_play_next">ਅਗਲਾ ਚਲਾਓ</string>
|
||||||
<string name="lbl_queue_add">ਕਤਾਰ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰੋ</string>
|
<string name="lbl_queue_add">ਕਤਾਰ ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰੋ</string>
|
||||||
<string name="lbl_go_album">ਐਲਬਮ \'ਤੇ ਜਾਓ</string>
|
<string name="lbl_album_details">ਐਲਬਮ \'ਤੇ ਜਾਓ</string>
|
||||||
<string name="lbl_song_detail">ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵੇਖੋ</string>
|
<string name="lbl_song_detail">ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵੇਖੋ</string>
|
||||||
<string name="lbl_props">ਗੀਤ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ</string>
|
<string name="lbl_props">ਗੀਤ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ</string>
|
||||||
<string name="lbl_relative_path">ਪੇਰੈਂਟ ਮਾਰਗ</string>
|
<string name="lbl_relative_path">ਪੇਰੈਂਟ ਮਾਰਗ</string>
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<string name="lbl_song_count">ਗੀਤ ਦੀ ਗਿਣਤੀ</string>
|
<string name="lbl_song_count">ਗੀਤ ਦੀ ਗਿਣਤੀ</string>
|
||||||
<string name="lbl_sort_dec">ਘਟਦੇ ਹੋਏ</string>
|
<string name="lbl_sort_dec">ਘਟਦੇ ਹੋਏ</string>
|
||||||
<string name="lbl_play_selected">ਚੁਣਿਆ ਹੋਇਆ ਚਲਾਓ</string>
|
<string name="lbl_play_selected">ਚੁਣਿਆ ਹੋਇਆ ਚਲਾਓ</string>
|
||||||
<string name="lbl_go_artist">ਕਲਾਕਾਰ \'ਤੇ ਜਾਓ</string>
|
<string name="lbl_artist_details">ਕਲਾਕਾਰ \'ਤੇ ਜਾਓ</string>
|
||||||
<string name="lbl_file_name">ਫਾਈਲ ਦਾ ਨਾਮ</string>
|
<string name="lbl_file_name">ਫਾਈਲ ਦਾ ਨਾਮ</string>
|
||||||
<string name="lbl_bitrate">ਬਿੱਟ ਰੇਟ</string>
|
<string name="lbl_bitrate">ਬਿੱਟ ਰੇਟ</string>
|
||||||
<string name="lbl_sample_rate">ਸੈਂਪਲ ਰੇਟ</string>
|
<string name="lbl_sample_rate">ਸੈਂਪਲ ਰੇਟ</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Odtwórz następny</string>
|
<string name="lbl_play_next">Odtwórz następny</string>
|
||||||
<string name="lbl_queue_add">Dodaj do kolejki</string>
|
<string name="lbl_queue_add">Dodaj do kolejki</string>
|
||||||
<string name="lng_queue_added">Dodano do kolejki</string>
|
<string name="lng_queue_added">Dodano do kolejki</string>
|
||||||
<string name="lbl_go_artist">Przejdź do wykonawcy</string>
|
<string name="lbl_artist_details">Przejdź do wykonawcy</string>
|
||||||
<string name="lbl_go_album">Przejdź do albumu</string>
|
<string name="lbl_album_details">Przejdź do albumu</string>
|
||||||
<string name="lbl_about">O aplikacji</string>
|
<string name="lbl_about">O aplikacji</string>
|
||||||
<string name="lbl_version">Wersja</string>
|
<string name="lbl_version">Wersja</string>
|
||||||
<string name="lbl_code">Kod źródłowy</string>
|
<string name="lbl_code">Kod źródłowy</string>
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
<string name="lbl_play_next">Reproduzir próxima</string>
|
<string name="lbl_play_next">Reproduzir próxima</string>
|
||||||
<string name="lbl_queue_add">Adicionar à fila</string>
|
<string name="lbl_queue_add">Adicionar à fila</string>
|
||||||
<string name="lng_queue_added">Adicionada à fila</string>
|
<string name="lng_queue_added">Adicionada à fila</string>
|
||||||
<string name="lbl_go_artist">Ir para o artista</string>
|
<string name="lbl_artist_details">Ir para o artista</string>
|
||||||
<string name="lbl_go_album">Ir para o álbum</string>
|
<string name="lbl_album_details">Ir para o álbum</string>
|
||||||
<string name="lbl_about">Sobre</string>
|
<string name="lbl_about">Sobre</string>
|
||||||
<string name="lbl_version">Versão</string>
|
<string name="lbl_version">Versão</string>
|
||||||
<string name="lbl_code">Código-fonte</string>
|
<string name="lbl_code">Código-fonte</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Reproduzir a próxima</string>
|
<string name="lbl_play_next">Reproduzir a próxima</string>
|
||||||
<string name="lbl_queue_add">Adicionar à fila</string>
|
<string name="lbl_queue_add">Adicionar à fila</string>
|
||||||
<string name="lng_queue_added">Adicionada à fila</string>
|
<string name="lng_queue_added">Adicionada à fila</string>
|
||||||
<string name="lbl_go_artist">Ir para o artista</string>
|
<string name="lbl_artist_details">Ir para o artista</string>
|
||||||
<string name="lbl_go_album">Ir para o álbum</string>
|
<string name="lbl_album_details">Ir para o álbum</string>
|
||||||
<string name="lbl_about">Sobre</string>
|
<string name="lbl_about">Sobre</string>
|
||||||
<string name="lbl_version">Versão</string>
|
<string name="lbl_version">Versão</string>
|
||||||
<string name="lbl_code">Código fonte</string>
|
<string name="lbl_code">Código fonte</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Redă următoarea</string>
|
<string name="lbl_play_next">Redă următoarea</string>
|
||||||
<string name="lbl_queue_add">Adăugați la lista de așteptare</string>
|
<string name="lbl_queue_add">Adăugați la lista de așteptare</string>
|
||||||
<string name="lng_queue_added">A fost adăugat la lista de așteptare</string>
|
<string name="lng_queue_added">A fost adăugat la lista de așteptare</string>
|
||||||
<string name="lbl_go_artist">Mergi la artist</string>
|
<string name="lbl_artist_details">Mergi la artist</string>
|
||||||
<string name="lbl_go_album">Accesaţi albumul</string>
|
<string name="lbl_album_details">Accesaţi albumul</string>
|
||||||
<string name="lbl_about">Despre</string>
|
<string name="lbl_about">Despre</string>
|
||||||
<string name="lbl_version">Versiune</string>
|
<string name="lbl_version">Versiune</string>
|
||||||
<string name="lbl_code">Cod sursă</string>
|
<string name="lbl_code">Cod sursă</string>
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<string name="lbl_play_next">Играть далее</string>
|
<string name="lbl_play_next">Играть далее</string>
|
||||||
<string name="lbl_queue_add">Добавить в очередь</string>
|
<string name="lbl_queue_add">Добавить в очередь</string>
|
||||||
<string name="lng_queue_added">Добавлено в очередь</string>
|
<string name="lng_queue_added">Добавлено в очередь</string>
|
||||||
<string name="lbl_go_artist">Перейти к исполнителю</string>
|
<string name="lbl_artist_details">Перейти к исполнителю</string>
|
||||||
<string name="lbl_go_album">Перейти к альбому</string>
|
<string name="lbl_album_details">Перейти к альбому</string>
|
||||||
<string name="lbl_state_saved">Позиция сохранена</string>
|
<string name="lbl_state_saved">Позиция сохранена</string>
|
||||||
<string name="lbl_add">Добавить</string>
|
<string name="lbl_add">Добавить</string>
|
||||||
<string name="lbl_save">Сохранить</string>
|
<string name="lbl_save">Сохранить</string>
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@
|
||||||
<string name="lbl_queue">Kö</string>
|
<string name="lbl_queue">Kö</string>
|
||||||
<string name="lbl_play_next">Spela nästa</string>
|
<string name="lbl_play_next">Spela nästa</string>
|
||||||
<string name="lbl_playlist_add">Lägg till spellista</string>
|
<string name="lbl_playlist_add">Lägg till spellista</string>
|
||||||
<string name="lbl_go_artist">Gå till konstnär</string>
|
<string name="lbl_artist_details">Gå till konstnär</string>
|
||||||
<string name="lbl_go_album">Gå till album</string>
|
<string name="lbl_album_details">Gå till album</string>
|
||||||
<string name="lbl_song_detail">Visa egenskaper</string>
|
<string name="lbl_song_detail">Visa egenskaper</string>
|
||||||
<string name="lbl_share">Dela</string>
|
<string name="lbl_share">Dela</string>
|
||||||
<string name="lbl_props">Egenskaper för låt</string>
|
<string name="lbl_props">Egenskaper för låt</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">Sonraki şarkı</string>
|
<string name="lbl_play_next">Sonraki şarkı</string>
|
||||||
<string name="lbl_queue_add">Kuyruğa ekle</string>
|
<string name="lbl_queue_add">Kuyruğa ekle</string>
|
||||||
<string name="lng_queue_added">Kuyruğa eklendi</string>
|
<string name="lng_queue_added">Kuyruğa eklendi</string>
|
||||||
<string name="lbl_go_artist">Sanatçıya git</string>
|
<string name="lbl_artist_details">Sanatçıya git</string>
|
||||||
<string name="lbl_go_album">Albüme git</string>
|
<string name="lbl_album_details">Albüme git</string>
|
||||||
<string name="lbl_about">Hakkında</string>
|
<string name="lbl_about">Hakkında</string>
|
||||||
<string name="lbl_version">Sürüm</string>
|
<string name="lbl_version">Sürüm</string>
|
||||||
<string name="lbl_code">Kaynak kodu</string>
|
<string name="lbl_code">Kaynak kodu</string>
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
<string name="lbl_play_next">Відтворити наступним</string>
|
<string name="lbl_play_next">Відтворити наступним</string>
|
||||||
<string name="lbl_queue_add">Додати в чергу</string>
|
<string name="lbl_queue_add">Додати в чергу</string>
|
||||||
<string name="lng_queue_added">Додано в чергу</string>
|
<string name="lng_queue_added">Додано в чергу</string>
|
||||||
<string name="lbl_go_artist">Перейти до виконавця</string>
|
<string name="lbl_artist_details">Перейти до виконавця</string>
|
||||||
<string name="lbl_go_album">Перейти до альбому</string>
|
<string name="lbl_album_details">Перейти до альбому</string>
|
||||||
<string name="lbl_about">Про застосунок</string>
|
<string name="lbl_about">Про застосунок</string>
|
||||||
<string name="lbl_version">Версія</string>
|
<string name="lbl_version">Версія</string>
|
||||||
<string name="lbl_code">Вихідний код</string>
|
<string name="lbl_code">Вихідний код</string>
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@
|
||||||
<string name="lbl_play_next">作为下一首播放</string>
|
<string name="lbl_play_next">作为下一首播放</string>
|
||||||
<string name="lbl_queue_add">加入播放队列</string>
|
<string name="lbl_queue_add">加入播放队列</string>
|
||||||
<string name="lng_queue_added">已加入播放队列</string>
|
<string name="lng_queue_added">已加入播放队列</string>
|
||||||
<string name="lbl_go_artist">查看艺术家</string>
|
<string name="lbl_artist_details">查看艺术家</string>
|
||||||
<string name="lbl_go_album">查看专辑</string>
|
<string name="lbl_album_details">查看专辑</string>
|
||||||
<string name="lbl_state_saved">已保存播放进度</string>
|
<string name="lbl_state_saved">已保存播放进度</string>
|
||||||
<string name="lbl_add">添加</string>
|
<string name="lbl_add">添加</string>
|
||||||
<string name="lbl_save">保存</string>
|
<string name="lbl_save">保存</string>
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
<string name="lbl_play_next">下一首播放</string>
|
<string name="lbl_play_next">下一首播放</string>
|
||||||
<string name="lbl_queue_add">添加到隊列</string>
|
<string name="lbl_queue_add">添加到隊列</string>
|
||||||
<string name="lng_queue_added">已加入隊列</string>
|
<string name="lng_queue_added">已加入隊列</string>
|
||||||
<string name="lbl_go_artist">前往該歌手頁面</string>
|
<string name="lbl_artist_details">前往該歌手頁面</string>
|
||||||
<string name="lbl_go_album">專輯</string>
|
<string name="lbl_album_details">專輯</string>
|
||||||
<string name="lbl_about">關於</string>
|
<string name="lbl_about">關於</string>
|
||||||
<string name="lbl_version">版本</string>
|
<string name="lbl_version">版本</string>
|
||||||
<string name="lbl_code">在 GitHub 上檢視</string>
|
<string name="lbl_code">在 GitHub 上檢視</string>
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,11 @@
|
||||||
|
|
||||||
<string name="lbl_playlist_add">Add to playlist</string>
|
<string name="lbl_playlist_add">Add to playlist</string>
|
||||||
|
|
||||||
<string name="lbl_go_artist">Go to artist</string>
|
|
||||||
<string name="lbl_go_album">Go to album</string>
|
<string name="lbl_artist_details">Go to artist</string>
|
||||||
|
<string name="lbl_album_details">Go to album</string>
|
||||||
<string name="lbl_song_detail">View properties</string>
|
<string name="lbl_song_detail">View properties</string>
|
||||||
|
<string name="lbl_parent_detail">View</string>
|
||||||
<string name="lbl_share">Share</string>
|
<string name="lbl_share">Share</string>
|
||||||
|
|
||||||
<string name="lbl_props">Song properties</string>
|
<string name="lbl_props">Song properties</string>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue