From 8465cda6375b3022ae41713aff0f603764558e97 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Tue, 21 Jun 2022 08:48:59 -0600 Subject: [PATCH] playback: allow customization of detail playback Add a new "Detail playback mode" option that allows one to configure what selecting a song will do in an album/artist/genre. This is mostly a clone of the prior setting, just in a new context. Resolves #164. --- CHANGELOG.md | 1 + .../auxio/detail/AlbumDetailFragment.kt | 5 ++- .../auxio/detail/ArtistDetailFragment.kt | 6 +++- .../auxio/detail/GenreDetailFragment.kt | 6 +++- .../org/oxycblt/auxio/home/HomeViewModel.kt | 2 +- .../auxio/home/list/SongListFragment.kt | 2 +- .../auxio/playback/PlaybackBarFragment.kt | 10 +++--- .../auxio/playback/PlaybackViewModel.kt | 2 +- .../oxycblt/auxio/search/SearchFragment.kt | 2 +- .../org/oxycblt/auxio/settings/Settings.kt | 17 ++++++++-- .../org/oxycblt/auxio/util/FrameworkUtil.kt | 16 ++++++++++ app/src/main/res/values-ar-rIQ/strings.xml | 10 +++--- app/src/main/res/values-cs/strings.xml | 10 +++--- app/src/main/res/values-de/strings.xml | 10 +++--- app/src/main/res/values-es/strings.xml | 10 +++--- app/src/main/res/values-it/strings.xml | 10 +++--- app/src/main/res/values-ko/strings.xml | 10 +++--- app/src/main/res/values-nl/strings.xml | 10 +++--- app/src/main/res/values-ru/strings.xml | 10 +++--- app/src/main/res/values-zh-rCN/strings.xml | 10 +++--- app/src/main/res/values/settings.xml | 32 +++++++++++++++---- app/src/main/res/values/strings.xml | 12 ++++--- app/src/main/res/xml/prefs_main.xml | 17 +++++++--- 23 files changed, 145 insertions(+), 75 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1000ca237..d5129549a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ #### What's New - Added a shuffle shortcut +- You can now customize what occurs when a song is played from an album/artist/genre [#164] #### What's Fixed - Fixed broken tablet layouts diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 05173208b..0a567f92c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -38,12 +38,14 @@ import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.state.PlaybackMode +import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.Header import org.oxycblt.auxio.ui.Item import org.oxycblt.auxio.ui.MenuFragment import org.oxycblt.auxio.util.applySpans import org.oxycblt.auxio.util.canScroll import org.oxycblt.auxio.util.collectWith +import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logEOrThrow @@ -62,6 +64,7 @@ class AlbumDetailFragment : private val args: AlbumDetailFragmentArgs by navArgs() private val detailAdapter = AlbumDetailAdapter(this) + private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) @@ -118,7 +121,7 @@ class AlbumDetailFragment : override fun onItemClick(item: Item) { if (item is Song) { - playbackModel.play(item, PlaybackMode.IN_ALBUM) + playbackModel.play(item, settings.detailPlaybackMode ?: PlaybackMode.IN_ALBUM) } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 28d66480f..43b26931d 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -36,11 +36,13 @@ import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.state.PlaybackMode +import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.Header import org.oxycblt.auxio.ui.Item import org.oxycblt.auxio.ui.MenuFragment import org.oxycblt.auxio.util.applySpans import org.oxycblt.auxio.util.collectWith +import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logEOrThrow @@ -57,6 +59,7 @@ class ArtistDetailFragment : private val args: ArtistDetailFragmentArgs by navArgs() private val detailAdapter = ArtistDetailAdapter(this) + private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) @@ -110,7 +113,8 @@ class ArtistDetailFragment : override fun onItemClick(item: Item) { when (item) { - is Song -> playbackModel.play(item, PlaybackMode.IN_ARTIST) + is Song -> + playbackModel.play(item, settings.detailPlaybackMode ?: PlaybackMode.IN_ARTIST) is Album -> navModel.exploreNavigateTo(item) } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 5b1edbf42..de2216160 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -37,11 +37,13 @@ import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.state.PlaybackMode +import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.Header import org.oxycblt.auxio.ui.Item import org.oxycblt.auxio.ui.MenuFragment import org.oxycblt.auxio.util.applySpans import org.oxycblt.auxio.util.collectWith +import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logEOrThrow @@ -58,6 +60,7 @@ class GenreDetailFragment : private val args: GenreDetailFragmentArgs by navArgs() private val detailAdapter = GenreDetailAdapter(this) + private val settings: Settings by lifecycleObject { binding -> Settings(binding.context) } override fun onCreateBinding(inflater: LayoutInflater) = FragmentDetailBinding.inflate(inflater) @@ -110,7 +113,8 @@ class GenreDetailFragment : override fun onItemClick(item: Item) { when (item) { - is Song -> playbackModel.play(item, PlaybackMode.IN_GENRE) + is Song -> + playbackModel.play(item, settings.detailPlaybackMode ?: PlaybackMode.IN_GENRE) is Album -> findNavController() .navigate(ArtistDetailFragmentDirections.actionShowAlbum(item.id)) diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 6d839d81d..76eaaeb91 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -147,7 +147,7 @@ class HomeViewModel(application: Application) : } override fun onSettingChanged(key: String) { - if (key == application.getString(R.string.set_lib_tabs)) { + if (key == application.getString(R.string.set_key_lib_tabs)) { tabs = visibleTabs _shouldRecreateTabs.value = true } diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 4a2ed3fcd..d2ac7cbe5 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -83,7 +83,7 @@ class SongListFragment : HomeListFragment() { override fun onItemClick(item: Item) { check(item is Song) - playbackModel.play(item, settings.songPlaybackMode) + playbackModel.play(item, settings.libPlaybackMode) } override fun onOpenMenu(item: Item, anchor: View) { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt index d264f6e50..3913447c8 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt @@ -29,10 +29,10 @@ import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.util.androidActivityViewModels +import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.getColorStateListSafe import org.oxycblt.auxio.util.getSystemBarInsetsCompat import org.oxycblt.auxio.util.getSystemGestureInsetsCompat -import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.textSafe /** @@ -76,15 +76,17 @@ class PlaybackBarFragment : ViewBindingFragment() { binding.playbackProgressBar.trackColor = requireContext().getColorStateListSafe(R.color.sel_track).defaultColor + binding.playbackProgressBar.progress = 0 + binding.playbackPlayPause.setOnClickListener { playbackModel.invertPlaying() } binding.playbackSkipNext.setOnClickListener { playbackModel.next() } // -- VIEWMODEL SETUP --- - launch { playbackModel.song.collect(::updateSong) } - launch { playbackModel.isPlaying.collect(::updateIsPlaying) } - launch { playbackModel.positionSecs.collect(::updatePosition) } + collectImmediately(playbackModel.song, ::updateSong) + collectImmediately(playbackModel.isPlaying, ::updateIsPlaying) + collectImmediately(playbackModel.positionSecs, ::updatePosition) } private fun updateSong(song: Song?) { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 96a3268b6..3649566fa 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -171,7 +171,7 @@ class PlaybackViewModel(application: Application) : is DelayedAction.ShuffleAll -> shuffleAll() is DelayedAction.Open -> { library.findSongForUri(application, action.uri)?.let { song -> - play(song, settings.songPlaybackMode) + play(song, settings.libPlaybackMode) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index e32f2450d..e27530271 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -126,7 +126,7 @@ class SearchFragment : override fun onItemClick(item: Item) { when (item) { - is Song -> playbackModel.play(item, settings.songPlaybackMode) + is Song -> playbackModel.play(item, settings.libPlaybackMode) is MusicParent -> navModel.exploreNavigateTo(item) } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt index ac29ab6cd..2cf91f5c4 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt @@ -152,13 +152,24 @@ class Settings(private val context: Context, private val callback: Callback? = n } } - /** What queue to create when a song is selected (ex. From All Songs or Search) */ - val songPlaybackMode: PlaybackMode + /** What queue to create when a song is selected from the library or search */ + val libPlaybackMode: PlaybackMode get() = PlaybackMode.fromInt( - inner.getInt(context.getString(R.string.set_key_song_play_mode), Int.MIN_VALUE)) + inner.getInt( + context.getString(R.string.set_key_library_song_playback_mode), Int.MIN_VALUE)) ?: PlaybackMode.ALL_SONGS + /** + * What queue t create when a song is selected from an album/artist/genre. Null means to default + * to the currently shown item. + */ + val detailPlaybackMode: PlaybackMode? + get() = + PlaybackMode.fromInt( + inner.getInt( + context.getString(R.string.set_key_detail_song_playback_mode), Int.MIN_VALUE)) + /** Whether shuffle should stay on when a new song is selected. */ val keepShuffle: Boolean get() = inner.getBoolean(context.getString(R.string.set_key_keep_shuffle), true) diff --git a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt index 5372eecb2..e09b56a0c 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt @@ -46,6 +46,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch import org.oxycblt.auxio.R @@ -157,6 +158,21 @@ val RecyclerView.canScroll: Boolean val @receiver:ColorRes Int.stateList get() = ColorStateList.valueOf(this) +/** + * Collect a [stateFlow] into [block] a UI-safe way. + * + * This method automatically calls [block] when initially starting to ensure UI state consistency. + * This does nominally mean that there are two initializing collections, but this is considered + * okay. [block] should be a function pointer in order to ensure lifecycle consistency. + * + * Only use this if your code absolutely needs to have a good state for ~100ms of draw-time. + * Otherwise, it's somewhat in-efficient. + */ +fun Fragment.collectImmediately(stateFlow: StateFlow, block: (T) -> Unit) { + block(stateFlow.value) + launch { stateFlow.collect(block) } +} + /** * Launches [block] in a lifecycle-aware coroutine once [state] is reached. This is primarily a * shortcut intended to correctly launch a co-routine on a fragment in a way that won't cause diff --git a/app/src/main/res/values-ar-rIQ/strings.xml b/app/src/main/res/values-ar-rIQ/strings.xml index 703aa5f80..80f7cb254 100644 --- a/app/src/main/res/values-ar-rIQ/strings.xml +++ b/app/src/main/res/values-ar-rIQ/strings.xml @@ -30,10 +30,10 @@ يعمل الآن تشغيل خلط - تشغيل من جميع الاغاني - تشغيل من البوم - تشغيل من فنان - تشغيل من نوع + تشغيل من جميع الاغاني + تشغيل من البوم + تشغيل من فنان + تشغيل من نوع طابور شغل تالياً @@ -88,7 +88,7 @@ ديناميكي سلوك - عند اختيار اغنية + عند اختيار اغنية تذكر الخلط إبقاء وضع الخلط عند تشغيل اغنية جديدة تشجيع قبل التخطي للخلف diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 29028e58d..1cb26f3af 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -35,10 +35,10 @@ Právě hraje Přehrát Náhodně - Přehrát ze všech skladeb - Přehrát z alba - Přehrát z umělce - Přehrát ze žánru + Přehrát ze všech skladeb + Přehrát z alba + Přehrát z umělce + Přehrát ze žánru Fronta Přehrát další @@ -104,7 +104,7 @@ Varování: Změna předzesilovače na vysokou kladnou hodnotu může u některých zvukových stop vést k příliš vysokým hlasitostem. Chování - Když je vybrána skladba + Když je vybrána skladba Zapamatovat si náhodné přehrávání Ponechat náhodné přehrávání při přehrávání nové skladby Přetočit před přeskočením zpět diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 155116783..3a7187dd3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -22,10 +22,10 @@ Abspielen Zufällig - Von allen Lieder abspielen - Von Album abspielen - Von Künstler abspielen - Von Genre abspielen + Von allen Lieder abspielen + Von Album abspielen + Von Künstler abspielen + Von Genre abspielen Aktuelle Wiedergabe Warteschlange @@ -84,7 +84,7 @@ Album bevorzugen Verhalten - Wenn ein Lied ausgewählt wird + Wenn ein Lied ausgewählt wird Zufällig-Einstellung merken Zufällig anlassen, wenn ein neues Lied abgespielt wird Zurückspulen, bevor das Lied zurück geändert wird diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8ab785a68..905c581dd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -30,10 +30,10 @@ En reproducción Reproducir Mezcla - Reproducir todo - Reproducir por álbum - Reproducir por artista - Reproducir por género + Reproducir todo + Reproducir por álbum + Reproducir por artista + Reproducir por género Cola Reproducir siguiente @@ -88,7 +88,7 @@ Dinámico Comportamiento - Cuando se selecciona una canción + Cuando se selecciona una canción Recordar mezcla Mantener mezcla cuando se reproduce una nueva canción Rebobinar atrás diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6bb3de811..27808a255 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -29,10 +29,10 @@ Ora in riproduzione Riproduci Mescola - Riproduci da tutte le canzoni - Riproduci dal disco - Riproduci dall\'artista - Riproduci dal genere + Riproduci da tutte le canzoni + Riproduci dal disco + Riproduci dall\'artista + Riproduci dal genere Coda Riproduci successivo @@ -89,7 +89,7 @@ Dinamico Comportamento - Quando una canzone è selezionata + Quando una canzone è selezionata Mantieni mescolamento Mantiene il mescolamento anche se una nuova canzone è selezionata Riavvolgi prima di saltare indietro diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 25c53f897..9529ec390 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -33,10 +33,10 @@ 지금 재생 중 재생 무작위 - 모든 곡에서 재생 - 앨범에서 재생 - 아티스트에서 재생 - 장르에서 재생 + 모든 곡에서 재생 + 앨범에서 재생 + 아티스트에서 재생 + 장르에서 재생 대기열 다음 곡 재생 @@ -102,7 +102,7 @@ 주의: 프리앰프를 높게 설정하면 일부 오디오 트랙에서 주파수가 잘릴 수 있습니다. 동작 - 음악을 선택했을 때 + 음악을 선택했을 때 무작위 모드 기억 새 음악을 재생할 때 무작위 모드 유지 이전 곡으로 가기 전에 되감기 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a9b4053e5..dd027bf0c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -23,10 +23,10 @@ Afspelen Shuffle - Speel van alle nummers - Speel af van album - Speel van artiest - Speel vanuit genre + Speel van alle nummers + Speel af van album + Speel van artiest + Speel vanuit genre Afspeelscherm Wachtrij @@ -72,7 +72,7 @@ Audio Gedrag - Wanneer een liedje is geselecteerd + Wanneer een liedje is geselecteerd Onthoud shuffle Houd shuffle aan bij het afspelen van een nieuw nummer Terugspoelen voordat je terugspoelt diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cc907345a..99c4ab424 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -30,10 +30,10 @@ Сейчас играет Играть Перемешать - Играть все треки - Играть альбом - Играть исполнителя - Играть жанр + Играть все треки + Играть альбом + Играть исполнителя + Играть жанр Очередь Играть далее @@ -90,7 +90,7 @@ Динамический Поведение - При выборе трека + При выборе трека Запоминать перемешивание Запоминать режим перемешивания для новых треков Сначала перемотать трек diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 01c60f76b..18c3e5d21 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -29,10 +29,10 @@ 正在播放 播放 随机 - 从全部歌曲开始播放 - 从专辑开始播放 - 从艺术家开始播放 - 从流派开始播放 + 从全部歌曲开始播放 + 从专辑开始播放 + 从艺术家开始播放 + 从流派开始播放 播放队列 作为下一首播放 @@ -88,7 +88,7 @@ 动态 行为 - 选中歌曲时 + 选中歌曲时 记住随机模式 播放新曲目时保留随机播放模式 切换上一曲前先倒带 diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index 66698961f..995c6dad5 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -17,7 +17,8 @@ auxio_pre_amp_with auxio_pre_amp_without - KEY_SONG_PLAY_MODE2 + KEY_SONG_PLAY_MODE2 + auxio_detail_song_play_mode KEY_KEEP_SHUFFLE KEY_PREV_REWIND KEY_LOOP_PAUSE @@ -56,14 +57,30 @@ @integer/theme_dark - - @string/lbl_play_all - @string/lbl_play_artist - @string/lbl_play_album - @string/lbl_play_genre + + @string/set_playback_mode_all + @string/set_playback_mode_artist + @string/set_playback_mode_album + @string/set_playback_mode_genre - + + @integer/play_mode_songs + @integer/play_mode_artist + @integer/play_mode_album + @integer/play_mode_genre + + + + @string/set_playback_mode_none + @string/set_playback_mode_all + @string/set_playback_mode_artist + @string/set_playback_mode_album + @string/set_playback_mode_genre + + + + @integer/play_mode_none @integer/play_mode_songs @integer/play_mode_artist @integer/play_mode_album @@ -88,6 +105,7 @@ 1 2 + -2147483648 0xA103 0xA104 0xA105 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70396f7f9..c92e91aad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,10 +35,6 @@ Now Playing Play Shuffle - Play from all songs - Play from album - Play from artist - Play from genre Queue Play next @@ -118,7 +114,13 @@ Warning: Changing the pre-amp to a high positive value may result in peaking on some audio tracks. Behavior - When a song is selected + Library playback mode + Detail playback mode + Play from shown item + Play from all songs + Play from album + Play from artist + Play from genre Remember shuffle Keep shuffle on when playing a new song Rewind before skipping back diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index f236c40f1..0b22fb263 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -110,11 +110,20 @@ + +