Add queue behavior options

Add options for whether to remember the shuffle toggle & what to do when a playlist ends.
This commit is contained in:
OxygenCobalt 2020-12-13 12:18:43 -07:00
parent 6882722201
commit c7549d6bfa
8 changed files with 127 additions and 41 deletions

View file

@ -23,7 +23,6 @@ import org.oxycblt.auxio.music.processing.MusicLoaderResponse
* @author OxygenCobalt
*/
class LoadingFragment : Fragment(R.layout.fragment_loading) {
private val loadingModel: LoadingViewModel by activityViewModels {
LoadingViewModel.Factory(requireActivity().application)
}

View file

@ -8,7 +8,6 @@ import android.content.Context
import android.content.Intent
import android.os.Build
import android.support.v4.media.session.MediaSessionCompat
import android.util.Log
import androidx.core.app.NotificationCompat
import androidx.media.app.NotificationCompat.MediaStyle
import org.oxycblt.auxio.MainActivity
@ -172,8 +171,6 @@ private fun newAction(action: String, context: Context): NotificationCompat.Acti
}
NotificationUtils.ACTION_SHUFFLE -> {
Log.d("A function", "Jesus christ does this even call???")
if (playbackManager.isShuffling) {
R.drawable.ic_shuffle
} else {

View file

@ -155,10 +155,14 @@ class PlaybackStateManager private constructor() {
resetLoopMode()
updatePlayback(song)
if (mIsShuffling) {
genShuffle(true)
if (settingsManager.keepShuffle) {
if (mIsShuffling) {
genShuffle(true)
} else {
resetShuffle()
}
} else {
resetShuffle()
setShuffleStatus(false)
}
mIndex = mQueue.indexOf(song)
@ -210,11 +214,11 @@ class PlaybackStateManager private constructor() {
}
}
private fun updatePlayback(song: Song) {
private fun updatePlayback(song: Song, dontPlay: Boolean = false) {
mSong = song
mPosition = 0
if (!mIsPlaying) {
if (!mIsPlaying && !dontPlay) {
setPlayingStatus(true)
}
@ -260,9 +264,7 @@ class PlaybackStateManager private constructor() {
if (mIndex < mQueue.lastIndex) {
mIndex = mIndex.inc()
} else {
// TODO: Implement option to make the playlist loop instead of stop
mQueue = mutableListOf()
mSong = null
handlePlaylistEnd()
return
}
@ -294,6 +296,37 @@ class PlaybackStateManager private constructor() {
}
}
/**
* Handle what to do at then end of a playlist.
*/
private fun handlePlaylistEnd() {
when (settingsManager.doAtEnd) {
SettingsManager.EntryNames.AT_END_LOOP_PAUSE -> {
mIndex = 0
forceQueueUpdate()
updatePlayback(mQueue[0], dontPlay = true)
setPlayingStatus(false)
}
SettingsManager.EntryNames.AT_END_LOOP -> {
mIndex = 0
forceQueueUpdate()
updatePlayback(mQueue[0])
}
SettingsManager.EntryNames.AT_END_STOP -> {
mQueue.clear()
forceQueueUpdate()
mSong = null
}
}
}
// --- QUEUE EDITING FUNCTIONS ---
fun removeQueueItem(index: Int): Boolean {
Log.d(this::class.simpleName, "Removing item ${mQueue[index].name}.")

View file

@ -73,6 +73,13 @@ class SettingsManager private constructor(context: Context) :
)
)
val doAtEnd: String
get() = sharedPrefs.getString(Keys.KEY_AT_END, EntryNames.AT_END_LOOP_PAUSE)
?: EntryNames.AT_END_LOOP_PAUSE
val keepShuffle: Boolean
get() = sharedPrefs.getBoolean(Keys.KEY_KEEP_SHUFFLE, false)
val rewindWithPrev: Boolean
get() = sharedPrefs.getBoolean(Keys.KEY_PREV_REWIND, true)
@ -80,14 +87,13 @@ class SettingsManager private constructor(context: Context) :
get() = (sharedPrefs.getInt(Keys.KEY_REWIND_THRESHOLD, 5) * 1000).toLong()
var librarySortMode: SortMode
get() {
return SortMode.fromInt(
sharedPrefs.getInt(
Keys.KEY_LIBRARY_SORT_MODE,
SortMode.CONSTANT_ALPHA_DOWN
)
) ?: SortMode.ALPHA_DOWN
}
get() = SortMode.fromInt(
sharedPrefs.getInt(
Keys.KEY_LIBRARY_SORT_MODE,
SortMode.CONSTANT_ALPHA_DOWN
)
) ?: SortMode.ALPHA_DOWN
set(value) {
sharedPrefs.edit()
.putInt(Keys.KEY_LIBRARY_SORT_MODE, value.toInt())
@ -167,6 +173,8 @@ class SettingsManager private constructor(context: Context) :
const val KEY_AUDIO_FOCUS = "KEY_AUDIO_FOCUS"
const val KEY_PLUG_MANAGEMENT = "KEY_PLUG_MGT"
const val KEY_SONG_PLAYBACK_MODE = "KEY_SONG_PLAY_MODE"
const val KEY_AT_END = "KEY_AT_END"
const val KEY_KEEP_SHUFFLE = "KEY_KEEP_SHUFFLE"
const val KEY_PREV_REWIND = "KEY_PREV_REWIND"
const val KEY_REWIND_THRESHOLD = "KEY_REWIND_THRESHOLD"
@ -177,6 +185,10 @@ class SettingsManager private constructor(context: Context) :
const val THEME_AUTO = "AUTO"
const val THEME_LIGHT = "LIGHT"
const val THEME_DARK = "DARK"
const val AT_END_LOOP_PAUSE = "LOOP_PAUSE"
const val AT_END_LOOP = "LOOP"
const val AT_END_STOP = "STOP"
}
/**

View file

@ -1,38 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="theme_entries">
<array name="entires_theme">
<item>@string/setting_theme_auto</item>
<item>@string/setting_theme_day</item>
<item>@string/setting_theme_night</item>
</array>
<array name="theme_values">
<array name="values_theme">
<item>AUTO</item>
<item>LIGHT</item>
<item>DARK</item>
</array>
<array name="lib_display_entries">
<array name="entries_lib_display">
<item>@string/label_genres</item>
<item>@string/label_artists</item>
<item>@string/label_albums</item>
</array>
<array name="lib_display_values">
<array name="values_lib_display">
<item>SHOW_GENRES</item>
<item>SHOW_ARTISTS</item>
<item>SHOW_ALBUMS</item>
</array>
<array name="song_playback_mode_entries">
<array name="entries_song_playback_mode">
<item>@string/label_play_all_songs</item>
<item>@string/label_play_artist</item>
<item>@string/label_play_album</item>
</array>
<array name="song_playback_mode_values">
<array name="values_song_playback_mode">
<item>ALL_SONGS</item>
<item>IN_ARTIST</item>
<item>IN_ALBUM</item>
</array>
<array name="entries_at_end">
<item>@string/setting_behavior_end_loop_pause</item>
<item>@string/setting_behavior_end_loop</item>
<item>@string/setting_behavior_end_stop</item>
</array>
<array name="values_at_end">
<item>LOOP_PAUSE</item>
<item>LOOP</item>
<item>STOP</item>
</array>
</resources>

View file

@ -69,7 +69,15 @@
<string name="setting_playback_plug_mgt_desc">Play/Pause when headset connection changes</string>
<string name="setting_behavior">Behavior</string>
<string name="setting_behavior_song_play">When a song is selected</string>
<string name="setting_behavior_song_playback_mode">When a song is selected</string>
<string name="setting_behavior_at_end">When a playlist ends</string>
<string name="setting_behavior_end_loop">Loop</string>
<string name="setting_behavior_end_stop">Stop</string>
<string name="setting_behavior_end_loop_pause">Loop &amp; Pause</string>
<string name="setting_behavior_keep_shuffle">Remember shuffle</string>
<string name="setting_behavior_keep_shuffle_desc">Keep shuffle on when playing a new song</string>
<string name="setting_behavior_rewind_prev">Rewind before skipping back</string>
<string name="setting_behavior_rewind_prev_desc">Rewind before skipping to the previous song</string>

View file

@ -8,8 +8,8 @@
app:key="KEY_THEME"
android:title="@string/setting_theme"
android:icon="@drawable/ic_day"
android:entries="@array/theme_entries"
android:entryValues="@array/theme_values"
android:entries="@array/entires_theme"
android:entryValues="@array/values_theme"
app:defaultValue="AUTO"
app:useSimpleSummaryProvider="true" />
@ -36,8 +36,8 @@
app:key="KEY_LIBRARY_DISPLAY_MODE"
android:title="@string/setting_lib_display"
android:icon="@drawable/ic_artist"
app:entries="@array/lib_display_entries"
app:entryValues="@array/lib_display_values"
app:entries="@array/entries_lib_display"
app:entryValues="@array/values_lib_display"
app:defaultValue="SHOW_ARTISTS"
app:useSimpleSummaryProvider="true" />
@ -86,13 +86,29 @@
<ListPreference
app:key="KEY_SONG_PLAY_MODE"
android:title="@string/setting_behavior_song_play"
android:title="@string/setting_behavior_song_playback_mode"
app:defaultValue="ALL_SONGS"
app:entries="@array/song_playback_mode_entries"
app:entryValues="@array/song_playback_mode_values"
app:entries="@array/entries_song_playback_mode"
app:entryValues="@array/values_song_playback_mode"
app:iconSpaceReserved="false"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:key="KEY_AT_END"
android:title="@string/setting_behavior_at_end"
app:defaultValue="LOOP_PAUSE"
app:entries="@array/entries_at_end"
app:entryValues="@array/values_at_end"
app:iconSpaceReserved="false"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
app:key="KEY_KEEP_SHUFFLE"
android:title="@string/setting_behavior_keep_shuffle"
app:summary="@string/setting_behavior_keep_shuffle_desc"
app:defaultValue="false"
app:iconSpaceReserved="false" />
<SwitchPreference
app:key="KEY_PREV_REWIND"
android:title="@string/setting_behavior_rewind_prev"

View file

@ -8,8 +8,8 @@
app:key="KEY_THEME"
android:title="@string/setting_theme"
android:icon="@drawable/ic_day"
android:entries="@array/theme_entries"
android:entryValues="@array/theme_values"
android:entries="@array/entires_theme"
android:entryValues="@array/values_theme"
app:defaultValue="AUTO"
app:useSimpleSummaryProvider="true" />
@ -28,8 +28,8 @@
app:key="KEY_LIBRARY_DISPLAY_MODE"
android:title="@string/setting_lib_display"
android:icon="@drawable/ic_artist"
app:entries="@array/lib_display_entries"
app:entryValues="@array/lib_display_values"
app:entries="@array/entries_lib_display"
app:entryValues="@array/values_lib_display"
app:defaultValue="SHOW_ARTISTS"
app:useSimpleSummaryProvider="true" />
@ -77,10 +77,19 @@
<ListPreference
app:key="KEY_SONG_PLAY_MODE"
android:title="@string/setting_behavior_song_play"
android:title="@string/setting_behavior_song_playback_mode"
app:defaultValue="ALL_SONGS"
app:entries="@array/song_playback_mode_entries"
app:entryValues="@array/song_playback_mode_values"
app:entries="@array/entries_song_playback_mode"
app:entryValues="@array/values_song_playback_mode"
app:iconSpaceReserved="false"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:key="KEY_AT_END"
android:title="@string/setting_behavior_at_end"
app:defaultValue="LOOP_PAUSE"
app:entries="@array/entries_at_end"
app:entryValues="@array/values_at_end"
app:iconSpaceReserved="false"
app:useSimpleSummaryProvider="true" />