diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSettings.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSettings.kt index 846a6ae68..9899477c3 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSettings.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackSettings.kt @@ -58,6 +58,8 @@ interface PlaybackSettings : Settings { val rewindWithPrev: Boolean /** Whether a song should pause after every repeat. */ val pauseOnRepeat: Boolean + /** Whether to maintain the play/pause state when skipping or editing the queue */ + val rememberPause: Boolean interface Listener { /** Called when one of the ReplayGain configurations have changed. */ @@ -129,6 +131,9 @@ class PlaybackSettingsImpl @Inject constructor(@ApplicationContext context: Cont override val pauseOnRepeat: Boolean get() = sharedPreferences.getBoolean(getString(R.string.set_key_repeat_pause), false) + override val rememberPause: Boolean + get() = sharedPreferences.getBoolean(getString(R.string.set_key_remember_pause), false) + override fun migrate() { // MusicMode was converted to PlaySong in 3.2.0 fun Int.migrateMusicMode() = diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 7cdbe0690..f03884f8d 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -456,7 +456,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { val stateHolder = stateHolder ?: return logD("Going to next song") stateHolder.next() - stateHolder.playing(true) } @Synchronized @@ -464,7 +463,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { val stateHolder = stateHolder ?: return logD("Going to previous song") stateHolder.prev() - stateHolder.playing(true) } @Synchronized @@ -472,7 +470,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { val stateHolder = stateHolder ?: return logD("Going to index $index") stateHolder.goto(index) - stateHolder.playing(true) } @Synchronized @@ -643,10 +640,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager { rawQueue = rawQueue, ) - if (change.type == QueueChange.Type.SONG) { - stateHolder.playing(true) - } - listeners.forEach { it.onQueueChanged(stateMirror.queue, stateMirror.index, change) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 72c0e9de4..637c62286 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -316,6 +316,9 @@ class PlaybackService : override fun next() { player.seekToNext() + if (!playbackSettings.rememberPause) { + player.play() + } playbackManager.ack(this, StateAck.IndexMoved) // Deferred save is handled on position discontinuity } @@ -326,6 +329,9 @@ class PlaybackService : } else { player.seekToPreviousMediaItem() } + if (!playbackSettings.rememberPause) { + player.play() + } playbackManager.ack(this, StateAck.IndexMoved) // Deferred save is handled on position discontinuity } @@ -338,6 +344,9 @@ class PlaybackService : val trueIndex = indices[index] player.seekTo(trueIndex, C.TIME_UNSET) + if (!playbackSettings.rememberPause) { + player.play() + } playbackManager.ack(this, StateAck.IndexMoved) // Deferred save is handled on position discontinuity } @@ -396,7 +405,11 @@ class PlaybackService : } val trueIndex = indices[at] + val songWillChange = player.currentMediaItemIndex == trueIndex player.removeMediaItem(trueIndex) + if (songWillChange && !playbackSettings.rememberPause) { + player.play() + } playbackManager.ack(this, ack) deferSave() } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt index 310e36155..78961662f 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/RootPreferenceFragment.kt @@ -32,7 +32,6 @@ import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.settings.ui.WrappedDialogPreference import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.navigateSafe -import org.oxycblt.auxio.util.showToast /** * The [PreferenceFragmentCompat] that displays the root settings list. diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index eb07550e3..f5c45132a 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -32,9 +32,7 @@ KEY_KEEP_SHUFFLE KEY_PREV_REWIND KEY_LOOP_PAUSE - auxio_save_state - auxio_wipe_state - auxio_restore_state + auxio_remember_pause auxio_home_tabs auxio_hide_collaborators diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 241b71838..5a465a49c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -288,6 +288,8 @@ Rewind before skipping to the previous song Pause on repeat Pause when a song repeats + Remember pause + Remain playing/paused when skipping or editing queue ReplayGain ReplayGain strategy Prefer track diff --git a/app/src/main/res/xml/preferences_audio.xml b/app/src/main/res/xml/preferences_audio.xml index ba4402385..9768fe3dd 100644 --- a/app/src/main/res/xml/preferences_audio.xml +++ b/app/src/main/res/xml/preferences_audio.xml @@ -21,6 +21,12 @@ app:summary="@string/set_repeat_pause_desc" app:title="@string/set_repeat_pause" /> + + diff --git a/app/src/main/res/xml/preferences_root.xml b/app/src/main/res/xml/preferences_root.xml index 114c4ca29..64b8ebafc 100644 --- a/app/src/main/res/xml/preferences_root.xml +++ b/app/src/main/res/xml/preferences_root.xml @@ -44,5 +44,5 @@ app:title="@string/set_rescan" /> - + \ No newline at end of file