mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat: enhance settings screen with dropdown and void setting options for improved user experience
This commit is contained in:
@@ -5,7 +5,8 @@ import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.core.navigation.NavigationManager
|
||||
import hu.bbara.purefin.core.settings.BooleanSetting
|
||||
import hu.bbara.purefin.core.settings.NumberSetting
|
||||
import hu.bbara.purefin.core.settings.DropdownSetting
|
||||
import hu.bbara.purefin.core.settings.RangeSetting
|
||||
import hu.bbara.purefin.core.settings.SettingsRepository
|
||||
import hu.bbara.purefin.core.settings.StringSetting
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -17,13 +18,15 @@ class SettingsViewModel @Inject constructor(
|
||||
private val navigationManager: NavigationManager,
|
||||
) : ViewModel() {
|
||||
|
||||
fun value(option: NumberSetting) = settingsRepository.value(option)
|
||||
fun value(option: RangeSetting) = settingsRepository.value(option)
|
||||
|
||||
fun value(option: BooleanSetting) = settingsRepository.value(option)
|
||||
|
||||
fun value(option: StringSetting) = settingsRepository.value(option)
|
||||
|
||||
fun set(option: NumberSetting, value: Double) {
|
||||
fun <T> value(option: DropdownSetting<T>) = settingsRepository.value(option)
|
||||
|
||||
fun set(option: RangeSetting, value: Double) {
|
||||
viewModelScope.launch {
|
||||
settingsRepository.set(option, value)
|
||||
}
|
||||
@@ -41,6 +44,12 @@ class SettingsViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> set(option: DropdownSetting<T>, value: T) {
|
||||
viewModelScope.launch {
|
||||
settingsRepository.set(option, value)
|
||||
}
|
||||
}
|
||||
|
||||
fun onBack() {
|
||||
navigationManager.pop()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ sealed interface SettingOption<T> {
|
||||
val defaultValue: T
|
||||
}
|
||||
|
||||
data class NumberSetting(
|
||||
data class RangeSetting(
|
||||
override val key: String,
|
||||
override val title: String,
|
||||
override val defaultValue: Double,
|
||||
@@ -25,8 +25,26 @@ data class StringSetting(
|
||||
override val defaultValue: String
|
||||
) : SettingOption<String>
|
||||
|
||||
data class VoidSetting(
|
||||
override val key: String,
|
||||
override val title: String,
|
||||
override val defaultValue: Unit = Unit
|
||||
) : SettingOption<Unit>
|
||||
|
||||
data class DropdownSetting<T>(
|
||||
override val key: String,
|
||||
override val title: String,
|
||||
override val defaultValue: T,
|
||||
val options: List<T>
|
||||
): SettingOption<T>
|
||||
|
||||
data class SettingGroup(
|
||||
val title: String?,
|
||||
val options: List<SettingOption<*>>
|
||||
)
|
||||
|
||||
object SettingsOptions {
|
||||
val defaultPlaybackSpeed = NumberSetting(
|
||||
val defaultPlaybackSpeed = RangeSetting(
|
||||
key = "default_playback_speed",
|
||||
title = "Default playback speed",
|
||||
defaultValue = 1.0,
|
||||
@@ -45,7 +63,28 @@ object SettingsOptions {
|
||||
defaultValue = "English"
|
||||
)
|
||||
|
||||
val numberSettings = listOf(defaultPlaybackSpeed)
|
||||
val booleanSettings = listOf(confirmMobileDataPlayback)
|
||||
val stringSettings = listOf(preferredAudioLanguage)
|
||||
val resetPlaybackSettings = VoidSetting(
|
||||
key = "reset_playback_settings",
|
||||
title = "Reset playback settings"
|
||||
)
|
||||
|
||||
val streamingQuality = DropdownSetting(
|
||||
key = "streaming_quality",
|
||||
title = "Streaming quality",
|
||||
defaultValue = "Auto",
|
||||
options = listOf("Auto", "Low", "Medium", "High")
|
||||
)
|
||||
|
||||
val groups = listOf(
|
||||
SettingGroup(
|
||||
title = "Playback",
|
||||
options = listOf(
|
||||
defaultPlaybackSpeed,
|
||||
confirmMobileDataPlayback,
|
||||
preferredAudioLanguage,
|
||||
resetPlaybackSettings,
|
||||
streamingQuality
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -6,15 +6,19 @@ import kotlinx.coroutines.flow.Flow
|
||||
interface SettingsRepository {
|
||||
val settings: Flow<Settings>
|
||||
|
||||
fun value(option: NumberSetting): Flow<Double>
|
||||
fun value(option: RangeSetting): Flow<Double>
|
||||
|
||||
fun value(option: BooleanSetting): Flow<Boolean>
|
||||
|
||||
fun value(option: StringSetting): Flow<String>
|
||||
|
||||
suspend fun set(option: NumberSetting, value: Double)
|
||||
fun <T> value(option: DropdownSetting<T>): Flow<T>
|
||||
|
||||
suspend fun set(option: RangeSetting, value: Double)
|
||||
|
||||
suspend fun set(option: BooleanSetting, value: Boolean)
|
||||
|
||||
suspend fun set(option: StringSetting, value: String)
|
||||
|
||||
suspend fun <T> set(option: DropdownSetting<T>, value: T)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user