Skip to content

Commit

Permalink
playback: add remember pause setting
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
OxygenCobalt committed Jan 15, 2024
1 parent a44f0bc commit 3e79f31
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down Expand Up @@ -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() =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -456,23 +456,20 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
val stateHolder = stateHolder ?: return
logD("Going to next song")
stateHolder.next()
stateHolder.playing(true)
}

@Synchronized
override fun prev() {
val stateHolder = stateHolder ?: return
logD("Going to previous song")
stateHolder.prev()
stateHolder.playing(true)
}

@Synchronized
override fun goto(index: Int) {
val stateHolder = stateHolder ?: return
logD("Going to index $index")
stateHolder.goto(index)
stateHolder.playing(true)
}

@Synchronized
Expand Down Expand Up @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down Expand Up @@ -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()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 1 addition & 3 deletions app/src/main/res/values/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/xml/preferences_audio.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/xml/preferences_root.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,5 @@
app:title="@string/set_rescan" />

</PreferenceCategory>

</PreferenceScreen>

0 comments on commit 3e79f31

Please sign in to comment.