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:
parent
a44f0bce35
commit
3e79f31792
8 changed files with 28 additions and 12 deletions
|
@ -58,6 +58,8 @@ interface PlaybackSettings : Settings<PlaybackSettings.Listener> {
|
||||||
val rewindWithPrev: Boolean
|
val rewindWithPrev: Boolean
|
||||||
/** Whether a song should pause after every repeat. */
|
/** Whether a song should pause after every repeat. */
|
||||||
val pauseOnRepeat: Boolean
|
val pauseOnRepeat: Boolean
|
||||||
|
/** Whether to maintain the play/pause state when skipping or editing the queue */
|
||||||
|
val rememberPause: Boolean
|
||||||
|
|
||||||
interface Listener {
|
interface Listener {
|
||||||
/** Called when one of the ReplayGain configurations have changed. */
|
/** Called when one of the ReplayGain configurations have changed. */
|
||||||
|
@ -129,6 +131,9 @@ class PlaybackSettingsImpl @Inject constructor(@ApplicationContext context: Cont
|
||||||
override val pauseOnRepeat: Boolean
|
override val pauseOnRepeat: Boolean
|
||||||
get() = sharedPreferences.getBoolean(getString(R.string.set_key_repeat_pause), false)
|
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() {
|
override fun migrate() {
|
||||||
// MusicMode was converted to PlaySong in 3.2.0
|
// MusicMode was converted to PlaySong in 3.2.0
|
||||||
fun Int.migrateMusicMode() =
|
fun Int.migrateMusicMode() =
|
||||||
|
|
|
@ -456,7 +456,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
val stateHolder = stateHolder ?: return
|
val stateHolder = stateHolder ?: return
|
||||||
logD("Going to next song")
|
logD("Going to next song")
|
||||||
stateHolder.next()
|
stateHolder.next()
|
||||||
stateHolder.playing(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -464,7 +463,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
val stateHolder = stateHolder ?: return
|
val stateHolder = stateHolder ?: return
|
||||||
logD("Going to previous song")
|
logD("Going to previous song")
|
||||||
stateHolder.prev()
|
stateHolder.prev()
|
||||||
stateHolder.playing(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -472,7 +470,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
val stateHolder = stateHolder ?: return
|
val stateHolder = stateHolder ?: return
|
||||||
logD("Going to index $index")
|
logD("Going to index $index")
|
||||||
stateHolder.goto(index)
|
stateHolder.goto(index)
|
||||||
stateHolder.playing(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -643,10 +640,6 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
rawQueue = rawQueue,
|
rawQueue = rawQueue,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (change.type == QueueChange.Type.SONG) {
|
|
||||||
stateHolder.playing(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
listeners.forEach {
|
listeners.forEach {
|
||||||
it.onQueueChanged(stateMirror.queue, stateMirror.index, change)
|
it.onQueueChanged(stateMirror.queue, stateMirror.index, change)
|
||||||
}
|
}
|
||||||
|
|
|
@ -316,6 +316,9 @@ class PlaybackService :
|
||||||
|
|
||||||
override fun next() {
|
override fun next() {
|
||||||
player.seekToNext()
|
player.seekToNext()
|
||||||
|
if (!playbackSettings.rememberPause) {
|
||||||
|
player.play()
|
||||||
|
}
|
||||||
playbackManager.ack(this, StateAck.IndexMoved)
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
// Deferred save is handled on position discontinuity
|
// Deferred save is handled on position discontinuity
|
||||||
}
|
}
|
||||||
|
@ -326,6 +329,9 @@ class PlaybackService :
|
||||||
} else {
|
} else {
|
||||||
player.seekToPreviousMediaItem()
|
player.seekToPreviousMediaItem()
|
||||||
}
|
}
|
||||||
|
if (!playbackSettings.rememberPause) {
|
||||||
|
player.play()
|
||||||
|
}
|
||||||
playbackManager.ack(this, StateAck.IndexMoved)
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
// Deferred save is handled on position discontinuity
|
// Deferred save is handled on position discontinuity
|
||||||
}
|
}
|
||||||
|
@ -338,6 +344,9 @@ class PlaybackService :
|
||||||
|
|
||||||
val trueIndex = indices[index]
|
val trueIndex = indices[index]
|
||||||
player.seekTo(trueIndex, C.TIME_UNSET)
|
player.seekTo(trueIndex, C.TIME_UNSET)
|
||||||
|
if (!playbackSettings.rememberPause) {
|
||||||
|
player.play()
|
||||||
|
}
|
||||||
playbackManager.ack(this, StateAck.IndexMoved)
|
playbackManager.ack(this, StateAck.IndexMoved)
|
||||||
// Deferred save is handled on position discontinuity
|
// Deferred save is handled on position discontinuity
|
||||||
}
|
}
|
||||||
|
@ -396,7 +405,11 @@ class PlaybackService :
|
||||||
}
|
}
|
||||||
|
|
||||||
val trueIndex = indices[at]
|
val trueIndex = indices[at]
|
||||||
|
val songWillChange = player.currentMediaItemIndex == trueIndex
|
||||||
player.removeMediaItem(trueIndex)
|
player.removeMediaItem(trueIndex)
|
||||||
|
if (songWillChange && !playbackSettings.rememberPause) {
|
||||||
|
player.play()
|
||||||
|
}
|
||||||
playbackManager.ack(this, ack)
|
playbackManager.ack(this, ack)
|
||||||
deferSave()
|
deferSave()
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.settings.ui.WrappedDialogPreference
|
import org.oxycblt.auxio.settings.ui.WrappedDialogPreference
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.navigateSafe
|
import org.oxycblt.auxio.util.navigateSafe
|
||||||
import org.oxycblt.auxio.util.showToast
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [PreferenceFragmentCompat] that displays the root settings list.
|
* The [PreferenceFragmentCompat] that displays the root settings list.
|
||||||
|
|
|
@ -32,9 +32,7 @@
|
||||||
<string name="set_key_keep_shuffle" translatable="false">KEY_KEEP_SHUFFLE</string>
|
<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_rewind_prev" translatable="false">KEY_PREV_REWIND</string>
|
||||||
<string name="set_key_repeat_pause" translatable="false">KEY_LOOP_PAUSE</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_remember_pause" translatable="false">auxio_remember_pause</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_home_tabs" translatable="false">auxio_home_tabs</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>
|
<string name="set_key_hide_collaborators" translatable="false">auxio_hide_collaborators</string>
|
||||||
|
|
|
@ -288,6 +288,8 @@
|
||||||
<string name="set_rewind_prev_desc">Rewind before skipping to the previous song</string>
|
<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">Pause on repeat</string>
|
||||||
<string name="set_repeat_pause_desc">Pause when a song repeats</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">ReplayGain</string>
|
||||||
<string name="set_replay_gain_mode">ReplayGain strategy</string>
|
<string name="set_replay_gain_mode">ReplayGain strategy</string>
|
||||||
<string name="set_replay_gain_mode_track">Prefer track</string>
|
<string name="set_replay_gain_mode_track">Prefer track</string>
|
||||||
|
|
|
@ -21,6 +21,12 @@
|
||||||
app:summary="@string/set_repeat_pause_desc"
|
app:summary="@string/set_repeat_pause_desc"
|
||||||
app:title="@string/set_repeat_pause" />
|
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>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/set_replay_gain">
|
<PreferenceCategory android:title="@string/set_replay_gain">
|
||||||
|
|
|
@ -44,5 +44,5 @@
|
||||||
app:title="@string/set_rescan" />
|
app:title="@string/set_rescan" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
Loading…
Reference in a new issue