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:
parent
6882722201
commit
c7549d6bfa
8 changed files with 127 additions and 41 deletions
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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}.")
|
||||
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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>
|
|
@ -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 & 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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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" />
|
||||
|
||||
|
|
Loading…
Reference in a new issue