polish stream quality settings

- label the rows 'Stream quality: Wi-Fi' / 'Stream quality: Mobile'
- default mobile to 192kbps/mp3 while Wi-Fi stays unlimited/server default
- apply the selection only when Done is pressed, cancelling discards the draft
- fade the bottom of the dialog list so the remaining options are visible as scrollable
This commit is contained in:
austinried
2026-10-04 00:29:59 +00:00
parent 9e25a971e6
commit 95216143dc
3 changed files with 65 additions and 31 deletions
@@ -56,7 +56,9 @@ class UserPreferences(
fun streamQuality(mode: NetworkMode): Flow<StreamQuality> =
store.data.map { prefs ->
prefs[streamQualityKey(mode)]?.let(::decodeStreamQuality) ?: legacyStreamQuality(prefs)
prefs[streamQualityKey(mode)]?.let(::decodeStreamQuality)
?: legacyStreamQuality(prefs)
?: defaultStreamQuality(mode)
}
suspend fun setStreamQuality(
@@ -82,11 +84,21 @@ class UserPreferences(
)
}
private fun legacyStreamQuality(prefs: Preferences): StreamQuality =
StreamQuality(
maxBitrate = prefs[LEGACY_BITRATE] ?: 0,
format = prefs[LEGACY_FORMAT]?.takeIf { it.isNotEmpty() },
private fun legacyStreamQuality(prefs: Preferences): StreamQuality? {
val bitrate = prefs[LEGACY_BITRATE]
val format = prefs[LEGACY_FORMAT]
if (bitrate == null && format == null) return null
return StreamQuality(
maxBitrate = bitrate ?: 0,
format = format?.takeIf { it.isNotEmpty() },
)
}
private fun defaultStreamQuality(mode: NetworkMode): StreamQuality =
when (mode) {
NetworkMode.Wifi -> StreamQuality()
NetworkMode.Mobile -> StreamQuality(maxBitrate = 192, format = "mp3")
}
private fun decode(
stored: String?,