playback: add remember pause setting

This setting allows you to remain playing/paused when you move in the
queue or edit the queue. Useful for some people who like this behavior
more than always playing.

Resolves #568.
This commit is contained in:
Alexander Capehart 2024-01-15 16:45:44 -07:00
parent a44f0bce35
commit 3e79f31792
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
8 changed files with 28 additions and 12 deletions

View file

@ -58,6 +58,8 @@ interface PlaybackSettings : Settings<PlaybackSettings.Listener> {
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() =

View file

@ -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)
}

View file

@ -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()
}

View file

@ -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.

View file

@ -32,9 +32,7 @@
<string name="set_key_keep_shuffle" translatable="false">KEY_KEEP_SHUFFLE</string>
<string name="set_key_rewind_prev" translatable="false">KEY_PREV_REWIND</string>
<string name="set_key_repeat_pause" translatable="false">KEY_LOOP_PAUSE</string>
<string name="set_key_save_state" translatable="false">auxio_save_state</string>
<string name="set_key_wipe_state" translatable="false">auxio_wipe_state</string>
<string name="set_key_restore_state" translatable="false">auxio_restore_state</string>
<string name="set_key_remember_pause" translatable="false">auxio_remember_pause</string>
<string name="set_key_home_tabs" translatable="false">auxio_home_tabs</string>
<string name="set_key_hide_collaborators" translatable="false">auxio_hide_collaborators</string>

View file

@ -288,6 +288,8 @@
<string name="set_rewind_prev_desc">Rewind before skipping to the previous song</string>
<string name="set_repeat_pause">Pause on repeat</string>
<string name="set_repeat_pause_desc">Pause when a song repeats</string>
<string name="set_remember_pause">Remember pause</string>
<string name="set_remember_pause_desc">Remain playing/paused when skipping or editing queue</string>
<string name="set_replay_gain">ReplayGain</string>
<string name="set_replay_gain_mode">ReplayGain strategy</string>
<string name="set_replay_gain_mode_track">Prefer track</string>

View file

@ -21,6 +21,12 @@
app:summary="@string/set_repeat_pause_desc"
app:title="@string/set_repeat_pause" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:key="@string/set_key_remember_pause"
app:summary="@string/set_remember_pause_desc"
app:title="@string/set_remember_pause" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/set_replay_gain">