Update loop behavior [Resolves #13]

Change the loop behavior to something that is actually sensible,
with [ ] looping the whole playlist and [ 1 ] looping the song.

This also removes the "Do on end" setting. A new stop option may
be reintroduced, however.

This resolves issue #13.
This commit is contained in:
OxygenCobalt 2021-04-03 14:50:29 -06:00
parent 2b047f0d2c
commit f2445e56f2
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
29 changed files with 33 additions and 166 deletions

View file

@ -106,16 +106,16 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
binding.playbackLoop.setImageResource(R.drawable.ic_loop) binding.playbackLoop.setImageResource(R.drawable.ic_loop)
} }
LoopMode.ONCE -> { LoopMode.ALL -> {
binding.playbackLoop.imageTintList = accentColor
binding.playbackLoop.setImageResource(R.drawable.ic_loop_one)
}
LoopMode.INFINITE -> {
binding.playbackLoop.imageTintList = accentColor binding.playbackLoop.imageTintList = accentColor
binding.playbackLoop.setImageResource(R.drawable.ic_loop) binding.playbackLoop.setImageResource(R.drawable.ic_loop)
} }
LoopMode.TRACK -> {
binding.playbackLoop.imageTintList = accentColor
binding.playbackLoop.setImageResource(R.drawable.ic_loop_one)
}
else -> return@observe else -> return@observe
} }
} }

View file

@ -5,16 +5,16 @@ package org.oxycblt.auxio.playback.state
* @author OxygenCobalt * @author OxygenCobalt
*/ */
enum class LoopMode { enum class LoopMode {
NONE, ONCE, INFINITE; NONE, ALL, TRACK;
/** /**
* Increment the LoopMode, e.g from [NONE] to [ONCE] * Increment the LoopMode, e.g from [NONE] to [ALL]
*/ */
fun increment(): LoopMode { fun increment(): LoopMode {
return when (this) { return when (this) {
NONE -> ONCE NONE -> ALL
ONCE -> INFINITE ALL -> TRACK
INFINITE -> NONE TRACK -> NONE
} }
} }
@ -25,25 +25,24 @@ enum class LoopMode {
fun toInt(): Int { fun toInt(): Int {
return when (this) { return when (this) {
NONE -> CONST_NONE NONE -> CONST_NONE
ONCE -> CONST_ONCE ALL -> CONST_ALL
INFINITE -> CONST_INFINITE TRACK -> CONST_TRACK
} }
} }
companion object { companion object {
const val CONST_NONE = 0xA100 const val CONST_NONE = 0xA100
const val CONST_ONCE = 0xA101 const val CONST_ALL = 0xA101
const val CONST_INFINITE = 0xA102 const val CONST_TRACK = 0xA102
/** /**
* Convert an int [constant] into a LoopMode * Convert an int [constant] into a LoopMode, or null if it isnt valid.
* @return The corresponding LoopMode. Null if it corresponds to nothing.
*/ */
fun fromInt(constant: Int): LoopMode? { fun fromInt(constant: Int): LoopMode? {
return when (constant) { return when (constant) {
CONST_NONE -> NONE CONST_NONE -> NONE
CONST_ONCE -> ONCE CONST_ALL -> ALL
CONST_INFINITE -> INFINITE CONST_TRACK -> TRACK
else -> null else -> null
} }

View file

@ -47,6 +47,5 @@ enum class PlaybackMode {
else -> null else -> null
} }
} }
} }
} }

View file

@ -235,17 +235,13 @@ class PlaybackStateManager private constructor() {
/** /**
* Update the playback to a new [song], doing all the required logic. * Update the playback to a new [song], doing all the required logic.
*/ */
private fun updatePlayback(song: Song) { private fun updatePlayback(song: Song, shouldPlay: Boolean = true) {
mIsInUserQueue = false mIsInUserQueue = false
mSong = song mSong = song
mPosition = 0 mPosition = 0
if (!mIsPlaying) { setPlaying(shouldPlay)
setPlaying(true)
}
clearLoopMode()
} }
// --- QUEUE FUNCTIONS --- // --- QUEUE FUNCTIONS ---
@ -269,13 +265,14 @@ class PlaybackStateManager private constructor() {
// If it cant be incremented anymore, end playback or loop depending on the setting. // If it cant be incremented anymore, end playback or loop depending on the setting.
if (mIndex < mQueue.lastIndex) { if (mIndex < mQueue.lastIndex) {
mIndex = mIndex.inc() mIndex = mIndex.inc()
updatePlayback(mQueue[mIndex])
} else { } else {
handlePlaylistEnd() mIndex = 0
updatePlayback(mQueue[mIndex], shouldPlay = mLoopMode == LoopMode.ALL)
return return
} }
updatePlayback(mQueue[mIndex])
forceQueueUpdate() forceQueueUpdate()
} }
} }
@ -299,39 +296,6 @@ class PlaybackStateManager private constructor() {
} }
} }
/**
* Handle what to do at then end of a playlist.
*/
private fun handlePlaylistEnd() {
when (settingsManager.doAtEnd) {
SettingsManager.EntryValues.AT_END_LOOP_PAUSE -> {
mIndex = 0
mPosition = 0
mIsInUserQueue = false
mSong = mQueue[0]
clearLoopMode()
setPlaying(false)
forceQueueUpdate()
}
SettingsManager.EntryValues.AT_END_LOOP -> {
mIndex = 0
forceQueueUpdate()
updatePlayback(mQueue[0])
}
SettingsManager.EntryValues.AT_END_STOP -> {
mQueue.clear()
forceQueueUpdate()
mSong = null
mParent = null
}
}
}
// --- QUEUE EDITING FUNCTIONS --- // --- QUEUE EDITING FUNCTIONS ---
/** /**
@ -562,17 +526,6 @@ class PlaybackStateManager private constructor() {
mLoopMode = mode mLoopMode = mode
} }
/**
* Reset the current [LoopMode] from [LoopMode.ONCE], if needed.
* Use this instead of duplicating the code manually.
*/
fun clearLoopMode() {
// Reset the loop mode from ONCE if needed.
if (mLoopMode == LoopMode.ONCE) {
mLoopMode = LoopMode.NONE
}
}
/** /**
* Mark whether this instance has played or not * Mark whether this instance has played or not
*/ */

View file

@ -135,8 +135,8 @@ class PlaybackNotification private constructor(
): NotificationCompat.Action { ): NotificationCompat.Action {
val drawableRes = when (loopMode) { val drawableRes = when (loopMode) {
LoopMode.NONE -> R.drawable.ic_loop_inactive LoopMode.NONE -> R.drawable.ic_loop_inactive
LoopMode.ONCE -> R.drawable.ic_loop_one LoopMode.ALL -> R.drawable.ic_loop
LoopMode.INFINITE -> R.drawable.ic_loop LoopMode.TRACK -> R.drawable.ic_loop_one
} }
return buildAction(context, ACTION_LOOP, drawableRes) return buildAction(context, ACTION_LOOP, drawableRes)

View file

@ -202,11 +202,6 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
} }
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
// Reset the loop mode from LOOP_ONE (if it is LOOP_ONE) on each repeat
if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_REPEAT) {
playbackManager.clearLoopMode()
}
// We use the wakelock to ensure that the CPU is active while music is being loaded // We use the wakelock to ensure that the CPU is active while music is being loaded
acquireWakeLock() acquireWakeLock()
} }
@ -263,10 +258,10 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
} }
override fun onLoopUpdate(loopMode: LoopMode) { override fun onLoopUpdate(loopMode: LoopMode) {
player.repeatMode = if (loopMode == LoopMode.NONE) { player.repeatMode = if (loopMode == LoopMode.TRACK) {
Player.REPEAT_MODE_OFF Player.REPEAT_MODE_ONE
} else { } else {
Player.REPEAT_MODE_ALL Player.REPEAT_MODE_OFF
} }
if (!settingsManager.useAltNotifAction) { if (!settingsManager.useAltNotifAction) {

View file

@ -45,8 +45,7 @@ class AboutDialog : BottomSheetDialogFragment() {
} }
/** /**
* Go through the process of opening a [link] in a browser. Only supports the links * Go through the process of opening a [link] in a browser.
* in [AboutDialog.Companion.LINKS].
*/ */
private fun openLinkInBrowser(link: String) { private fun openLinkInBrowser(link: String) {
try { try {

View file

@ -38,6 +38,7 @@ class SettingsManager private constructor(context: Context) :
/** The current accent. */ /** The current accent. */
var accent: Accent var accent: Accent
get() = handleAccentCompat(sharedPrefs) get() = handleAccentCompat(sharedPrefs)
set(value) { set(value) {
val accentIndex = ACCENTS.indexOf(value) val accentIndex = ACCENTS.indexOf(value)
@ -87,11 +88,6 @@ class SettingsManager private constructor(context: Context) :
val songPlaybackMode: PlaybackMode val songPlaybackMode: PlaybackMode
get() = handleSongPlayModeCompat(sharedPrefs) get() = handleSongPlayModeCompat(sharedPrefs)
/** What to do at the end of a playlist. */
val doAtEnd: String
get() = sharedPrefs.getString(KEY_AT_END, EntryValues.AT_END_LOOP_PAUSE)
?: EntryValues.AT_END_LOOP_PAUSE
/** Whether shuffle should stay on when a new song is selected. */ /** Whether shuffle should stay on when a new song is selected. */
val keepShuffle: Boolean val keepShuffle: Boolean
get() = sharedPrefs.getBoolean(KEY_KEEP_SHUFFLE, true) get() = sharedPrefs.getBoolean(KEY_KEEP_SHUFFLE, true)
@ -115,6 +111,7 @@ class SettingsManager private constructor(context: Context) :
/** The current filter mode of the search tab */ /** The current filter mode of the search tab */
var searchFilterMode: DisplayMode var searchFilterMode: DisplayMode
get() = handleSearchModeCompat(sharedPrefs) get() = handleSearchModeCompat(sharedPrefs)
set(value) { set(value) {
sharedPrefs.edit { sharedPrefs.edit {
putInt(KEY_SEARCH_FILTER_MODE, value.toInt()) putInt(KEY_SEARCH_FILTER_MODE, value.toInt())
@ -159,19 +156,6 @@ class SettingsManager private constructor(context: Context) :
} }
} }
} }
/**
* Values for some settings entries that arent important enough to recieve an enum.
*/
object EntryValues {
/** Pause and loop at the end. Similar to Spotify. */
const val AT_END_LOOP_PAUSE = "LOOP_PAUSE"
/** Loop at the end. Similar to Music Player GO. */
const val AT_END_LOOP = "LOOP"
/** Stop at the end. */
const val AT_END_STOP = "STOP"
}
/** /**
* An interface for receiving some preference updates. Use/Extend this instead of * An interface for receiving some preference updates. Use/Extend this instead of
@ -200,7 +184,6 @@ class SettingsManager private constructor(context: Context) :
const val KEY_PLUG_MANAGEMENT = "KEY_PLUG_MGT" const val KEY_PLUG_MANAGEMENT = "KEY_PLUG_MGT"
const val KEY_SONG_PLAYBACK_MODE = "KEY_SONG_PLAY_MODE2" const val KEY_SONG_PLAYBACK_MODE = "KEY_SONG_PLAY_MODE2"
const val KEY_AT_END = "KEY_AT_END"
const val KEY_KEEP_SHUFFLE = "KEY_KEEP_SHUFFLE" const val KEY_KEEP_SHUFFLE = "KEY_KEEP_SHUFFLE"
const val KEY_PREV_REWIND = "KEY_PREV_REWIND" const val KEY_PREV_REWIND = "KEY_PREV_REWIND"

View file

@ -2,7 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/action_open_about"
android:icon="@drawable/ic_about" android:icon="@drawable/ic_about"
android:title="@string/label_about" android:title="@string/label_about"
app:showAsAction="always" /> app:showAsAction="always" />

View file

@ -83,10 +83,6 @@
<string name="setting_behavior">Verhalten</string> <string name="setting_behavior">Verhalten</string>
<string name="setting_behavior_song_playback_mode">Wenn ein Lied ausgewählt hat</string> <string name="setting_behavior_song_playback_mode">Wenn ein Lied ausgewählt hat</string>
<string name="setting_behavior_at_end">Wenn eine Abspielliste zu Ende ist</string>
<string name="setting_behavior_end_loop_pause">Weiderholen und Pausieren</string>
<string name="setting_behavior_end_loop">Weiderholen</string>
<string name="setting_behavior_end_stop">Stoppen</string>
<string name="setting_behavior_keep_shuffle">Zufällig-Einstellung merken</string> <string name="setting_behavior_keep_shuffle">Zufällig-Einstellung merken</string>
<string name="setting_behavior_keep_shuffle_desc">Lassen zufällig an, wenn ein neues Lied anspielen</string> <string name="setting_behavior_keep_shuffle_desc">Lassen zufällig an, wenn ein neues Lied anspielen</string>
<string name="setting_behavior_rewind_prev">Zurückspulen, bevor zurück springen</string> <string name="setting_behavior_rewind_prev">Zurückspulen, bevor zurück springen</string>

View file

@ -52,7 +52,6 @@
<string name="setting_audio">Ήχος</string> <string name="setting_audio">Ήχος</string>
<string name="setting_behavior">Συμπεριφορά</string> <string name="setting_behavior">Συμπεριφορά</string>
<string name="setting_behavior_end_stop">Διακοπή</string>
<!-- Description Namespace | Accessibility Strings --> <!-- Description Namespace | Accessibility Strings -->
<string name="description_track_number">Κομμάτι %d</string> <string name="description_track_number">Κομμάτι %d</string>

View file

@ -57,9 +57,6 @@
<string name="setting_audio_plug_mgt">Conexión de auriculares</string> <string name="setting_audio_plug_mgt">Conexión de auriculares</string>
<string name="setting_behavior">Funcionamiento</string> <string name="setting_behavior">Funcionamiento</string>
<string name="setting_behavior_end_loop_pause">Continuar y Pausar</string>
<string name="setting_behavior_end_stop">Detener</string>
<string name="setting_behavior_end_loop">Continuar</string>
<string name="setting_behavior_keep_shuffle">Recordar aleatorio</string> <string name="setting_behavior_keep_shuffle">Recordar aleatorio</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -58,9 +58,6 @@
<string name="setting_audio_plug_mgt">Branchement du casque</string> <string name="setting_audio_plug_mgt">Branchement du casque</string>
<string name="setting_behavior">Comportement</string> <string name="setting_behavior">Comportement</string>
<string name="setting_behavior_end_loop_pause">Continuer et Pause</string>
<string name="setting_behavior_end_stop">Arrêter</string>
<string name="setting_behavior_end_loop">Continuer</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">Pas de musique trouvée</string> <string name="error_no_music">Pas de musique trouvée</string>

View file

@ -48,8 +48,6 @@
<string name="setting_audio_plug_mgt">हेडसेट प्लग</string> <string name="setting_audio_plug_mgt">हेडसेट प्लग</string>
<string name="setting_behavior">चाल चलन</string> <string name="setting_behavior">चाल चलन</string>
<string name="setting_behavior_end_loop">जारी</string>
<string name="setting_behavior_end_stop">बंद</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">कोई संगीत नहीं मिला</string> <string name="error_no_music">कोई संगीत नहीं मिला</string>

View file

@ -56,8 +56,6 @@
<string name="setting_audio_plug_mgt">Fejhallgató csatlakozó</string> <string name="setting_audio_plug_mgt">Fejhallgató csatlakozó</string>
<string name="setting_behavior">Működés</string> <string name="setting_behavior">Működés</string>
<string name="setting_behavior_end_loop">Folytatás</string>
<string name="setting_behavior_end_stop">Megállítás</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">Nem található zene</string> <string name="error_no_music">Nem található zene</string>

View file

@ -55,8 +55,6 @@
<string name="setting_audio_focus">Fokus audio</string> <string name="setting_audio_focus">Fokus audio</string>
<string name="setting_behavior">Perilaku</string> <string name="setting_behavior">Perilaku</string>
<string name="setting_behavior_end_loop">Lanjutkan</string>
<string name="setting_behavior_end_stop">Setop</string>
<string name="setting_behavior_keep_shuffle">Ingat putar acak</string> <string name="setting_behavior_keep_shuffle">Ingat putar acak</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -57,9 +57,6 @@
<string name="setting_audio_plug_mgt">Inserimento cuffie</string> <string name="setting_audio_plug_mgt">Inserimento cuffie</string>
<string name="setting_behavior">Comportamento</string> <string name="setting_behavior">Comportamento</string>
<string name="setting_behavior_end_loop_pause">Continua e Pause</string>
<string name="setting_behavior_end_loop">Continua</string>
<string name="setting_behavior_end_stop">Ferma</string>
<string name="setting_behavior_keep_shuffle">Ricorda casuale</string> <string name="setting_behavior_keep_shuffle">Ricorda casuale</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -55,8 +55,6 @@
<string name="setting_audio_plug_mgt">헤드셋 연결</string> <string name="setting_audio_plug_mgt">헤드셋 연결</string>
<string name="setting_behavior">동작</string> <string name="setting_behavior">동작</string>
<string name="setting_behavior_end_loop">계속</string>
<string name="setting_behavior_end_stop">중단</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">노래를 찾을 수 없습니다</string> <string name="error_no_music">노래를 찾을 수 없습니다</string>

View file

@ -58,9 +58,6 @@
<string name="setting_audio_plug_mgt">Headset-pluggen</string> <string name="setting_audio_plug_mgt">Headset-pluggen</string>
<string name="setting_behavior">Gedrag</string> <string name="setting_behavior">Gedrag</string>
<string name="setting_behavior_end_loop_pause">Herhalen en Pauzeren</string>
<string name="setting_behavior_end_loop">Herhalen</string>
<string name="setting_behavior_end_stop">Stoppen</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">Geen muziek aangetroffen</string> <string name="error_no_music">Geen muziek aangetroffen</string>

View file

@ -56,8 +56,6 @@
<string name="setting_audio_plug_mgt">Podłączanie słuchawek</string> <string name="setting_audio_plug_mgt">Podłączanie słuchawek</string>
<string name="setting_behavior">Zachowanie</string> <string name="setting_behavior">Zachowanie</string>
<string name="setting_behavior_end_loop">Kontynuuj</string>
<string name="setting_behavior_end_stop">Zatrzymaj</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">Nie znaleziono muzyki</string> <string name="error_no_music">Nie znaleziono muzyki</string>

View file

@ -56,8 +56,6 @@
<string name="setting_audio_plug_mgt">Entrada do fone de ouvido</string> <string name="setting_audio_plug_mgt">Entrada do fone de ouvido</string>
<string name="setting_behavior">Comportamento</string> <string name="setting_behavior">Comportamento</string>
<string name="setting_behavior_end_loop">Continuar</string>
<string name="setting_behavior_end_stop">Parar</string>
<string name="setting_behavior_keep_shuffle">Memorizar aleatorização</string> <string name="setting_behavior_keep_shuffle">Memorizar aleatorização</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -57,8 +57,6 @@
<string name="setting_audio_plug_mgt">Entrada do fone de ouvido</string> <string name="setting_audio_plug_mgt">Entrada do fone de ouvido</string>
<string name="setting_behavior">Comportamento</string> <string name="setting_behavior">Comportamento</string>
<string name="setting_behavior_end_loop">Continuar</string>
<string name="setting_behavior_end_stop">Parar</string>
<string name="setting_behavior_keep_shuffle">Memorizar aleatorização</string> <string name="setting_behavior_keep_shuffle">Memorizar aleatorização</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -56,8 +56,6 @@
<string name="setting_audio_plug_mgt">Гарнитура</string> <string name="setting_audio_plug_mgt">Гарнитура</string>
<string name="setting_behavior">Поведение</string> <string name="setting_behavior">Поведение</string>
<string name="setting_behavior_end_loop">Продолжить</string>
<string name="setting_behavior_end_stop">Стоп</string>
<string name="setting_behavior_keep_shuffle">Запомнить перемешивание</string> <string name="setting_behavior_keep_shuffle">Запомнить перемешивание</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->

View file

@ -55,8 +55,6 @@
<string name="setting_audio_focus">Ses odaklama</string> <string name="setting_audio_focus">Ses odaklama</string>
<string name="setting_behavior">Tercihler</string> <string name="setting_behavior">Tercihler</string>
<string name="setting_behavior_end_loop">Devam et</string>
<string name="setting_behavior_end_stop">Dur</string>
<!-- Error Namespace | Error Labels --> <!-- Error Namespace | Error Labels -->
<string name="error_no_music">Müzik bulunamadı</string> <string name="error_no_music">Müzik bulunamadı</string>

View file

@ -37,16 +37,4 @@
<item>@integer/play_mode_album</item> <item>@integer/play_mode_album</item>
<item>@integer/play_mode_genre</item> <item>@integer/play_mode_genre</item>
</string-array> </string-array>
<string-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>
</string-array>
<string-array name="values_at_end">
<item>LOOP_PAUSE</item>
<item>LOOP</item>
<item>STOP</item>
</string-array>
</resources> </resources>

View file

@ -84,10 +84,6 @@
<string name="setting_behavior">Behavior</string> <string name="setting_behavior">Behavior</string>
<string name="setting_behavior_song_playback_mode">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_pause">Loop and Pause</string>
<string name="setting_behavior_end_loop">Loop</string>
<string name="setting_behavior_end_stop">Stop</string>
<string name="setting_behavior_keep_shuffle">Remember shuffle</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_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">Rewind before skipping back</string>

View file

@ -103,15 +103,6 @@
app:title="@string/setting_behavior_song_playback_mode" app:title="@string/setting_behavior_song_playback_mode"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<ListPreference
app:defaultValue="LOOP_PAUSE"
app:entries="@array/entries_at_end"
app:entryValues="@array/values_at_end"
app:iconSpaceReserved="false"
app:key="KEY_AT_END"
app:title="@string/setting_behavior_at_end"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:defaultValue="true" app:defaultValue="true"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"

View file

@ -59,8 +59,8 @@ To prevent any strange bugs, all integer representations must be unique. A table
0xA1XX | Data Integer Space [Stored for IO efficency] 0xA1XX | Data Integer Space [Stored for IO efficency]
0xA100 | LoopMode.NONE 0xA100 | LoopMode.NONE
0xA101 | LoopMode.ONCE 0xA101 | LoopMode.ALL
0xA102 | LoopMode.INFINITE 0xA102 | LoopMode.TRACK
0xA103 | PlaybackMode.IN_GENRE 0xA103 | PlaybackMode.IN_GENRE
0xA104 | PlaybackMode.IN_ARTIST 0xA104 | PlaybackMode.IN_ARTIST