mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat(settings): add SettingsScreen and integrate settings management
This commit is contained in:
@@ -256,6 +256,10 @@ class AppViewModel @Inject constructor(
|
||||
navigationManager.navigate(Route.HomeSearchRoute)
|
||||
}
|
||||
|
||||
fun openSettings() {
|
||||
navigationManager.navigate(Route.SettingsRoute)
|
||||
}
|
||||
|
||||
fun logout() {
|
||||
viewModelScope.launch {
|
||||
userSessionRepository.setLoggedIn(false)
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package hu.bbara.purefin.feature.settings
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.navigation.NavigationManager
|
||||
import hu.bbara.purefin.settings.BooleanSetting
|
||||
import hu.bbara.purefin.settings.NumberSetting
|
||||
import hu.bbara.purefin.settings.SettingsRepository
|
||||
import hu.bbara.purefin.settings.StringSetting
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class SettingsViewModel @Inject constructor(
|
||||
private val settingsRepository: SettingsRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
) : ViewModel() {
|
||||
|
||||
fun value(option: NumberSetting) = settingsRepository.value(option)
|
||||
|
||||
fun value(option: BooleanSetting) = settingsRepository.value(option)
|
||||
|
||||
fun value(option: StringSetting) = settingsRepository.value(option)
|
||||
|
||||
fun set(option: NumberSetting, value: Double) {
|
||||
viewModelScope.launch {
|
||||
settingsRepository.set(option, value)
|
||||
}
|
||||
}
|
||||
|
||||
fun set(option: BooleanSetting, value: Boolean) {
|
||||
viewModelScope.launch {
|
||||
settingsRepository.set(option, value)
|
||||
}
|
||||
}
|
||||
|
||||
fun set(option: StringSetting, value: String) {
|
||||
viewModelScope.launch {
|
||||
settingsRepository.set(option, value)
|
||||
}
|
||||
}
|
||||
|
||||
fun onBack() {
|
||||
navigationManager.pop()
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,9 @@ sealed interface Route : NavKey {
|
||||
@Serializable
|
||||
data object LoginRoute : Route
|
||||
|
||||
@Serializable
|
||||
data object SettingsRoute : Route
|
||||
|
||||
@Serializable
|
||||
data class PlayerRoute(val mediaId: String) : Route
|
||||
}
|
||||
|
||||
@@ -2,20 +2,50 @@ package hu.bbara.purefin.settings
|
||||
|
||||
sealed interface SettingOption<T> {
|
||||
val key: String
|
||||
val title: String
|
||||
val defaultValue: T
|
||||
}
|
||||
|
||||
data class NumberSetting(
|
||||
override val key: String,
|
||||
override val defaultValue: Double
|
||||
override val title: String,
|
||||
override val defaultValue: Double,
|
||||
val valueRange: ClosedFloatingPointRange<Double> = 0.0..100.0,
|
||||
) : SettingOption<Double>
|
||||
|
||||
data class BooleanSetting(
|
||||
override val key: String,
|
||||
override val title: String,
|
||||
override val defaultValue: Boolean
|
||||
) : SettingOption<Boolean>
|
||||
|
||||
data class StringSetting(
|
||||
override val key: String,
|
||||
override val title: String,
|
||||
override val defaultValue: String
|
||||
) : SettingOption<String>
|
||||
|
||||
object SettingsOptions {
|
||||
val defaultPlaybackSpeed = NumberSetting(
|
||||
key = "default_playback_speed",
|
||||
title = "Default playback speed",
|
||||
defaultValue = 1.0,
|
||||
valueRange = 0.5..2.0
|
||||
)
|
||||
|
||||
val confirmMobileDataPlayback = BooleanSetting(
|
||||
key = "confirm_mobile_data_playback",
|
||||
title = "Confirm mobile data playback",
|
||||
defaultValue = true
|
||||
)
|
||||
|
||||
val preferredAudioLanguage = StringSetting(
|
||||
key = "preferred_audio_language",
|
||||
title = "Preferred audio language",
|
||||
defaultValue = "English"
|
||||
)
|
||||
|
||||
val numberSettings = listOf(defaultPlaybackSpeed)
|
||||
val booleanSettings = listOf(confirmMobileDataPlayback)
|
||||
val stringSettings = listOf(preferredAudioLanguage)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user