util: implement user preferences utility
This commit is contained in:
parent
46bd638c5f
commit
5ad65919e9
|
|
@ -0,0 +1,83 @@
|
||||||
|
package com.example.llama.revamp.data.preferences
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.datastore.core.DataStore
|
||||||
|
import androidx.datastore.preferences.core.Preferences
|
||||||
|
import androidx.datastore.preferences.core.booleanPreferencesKey
|
||||||
|
import androidx.datastore.preferences.core.edit
|
||||||
|
import androidx.datastore.preferences.core.longPreferencesKey
|
||||||
|
import androidx.datastore.preferences.preferencesDataStore
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manages user preferences for the application.
|
||||||
|
*/
|
||||||
|
class UserPreferences(private val context: Context) {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
|
||||||
|
|
||||||
|
// Performance monitoring preferences
|
||||||
|
val PERFORMANCE_MONITORING_ENABLED = booleanPreferencesKey("performance_monitoring_enabled")
|
||||||
|
val USE_FAHRENHEIT_TEMPERATURE = booleanPreferencesKey("use_fahrenheit_temperature")
|
||||||
|
val MONITORING_INTERVAL_MS = longPreferencesKey("monitoring_interval_ms")
|
||||||
|
|
||||||
|
// Default values
|
||||||
|
const val DEFAULT_MONITORING_INTERVAL_MS = 5000L
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether performance monitoring is enabled.
|
||||||
|
*/
|
||||||
|
fun isPerformanceMonitoringEnabled(): Flow<Boolean> {
|
||||||
|
return context.dataStore.data.map { preferences ->
|
||||||
|
preferences[PERFORMANCE_MONITORING_ENABLED] ?: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether performance monitoring is enabled.
|
||||||
|
*/
|
||||||
|
suspend fun setPerformanceMonitoringEnabled(enabled: Boolean) {
|
||||||
|
context.dataStore.edit { preferences ->
|
||||||
|
preferences[PERFORMANCE_MONITORING_ENABLED] = enabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether temperature should be displayed in Fahrenheit.
|
||||||
|
*/
|
||||||
|
fun usesFahrenheitTemperature(): Flow<Boolean> {
|
||||||
|
return context.dataStore.data.map { preferences ->
|
||||||
|
preferences[USE_FAHRENHEIT_TEMPERATURE] ?: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether temperature should be displayed in Fahrenheit.
|
||||||
|
*/
|
||||||
|
suspend fun setUseFahrenheitTemperature(useFahrenheit: Boolean) {
|
||||||
|
context.dataStore.edit { preferences ->
|
||||||
|
preferences[USE_FAHRENHEIT_TEMPERATURE] = useFahrenheit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the monitoring interval in milliseconds.
|
||||||
|
*/
|
||||||
|
fun getMonitoringInterval(): Flow<Long> {
|
||||||
|
return context.dataStore.data.map { preferences ->
|
||||||
|
preferences[MONITORING_INTERVAL_MS] ?: DEFAULT_MONITORING_INTERVAL_MS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the monitoring interval in milliseconds.
|
||||||
|
*/
|
||||||
|
suspend fun setMonitoringInterval(intervalMs: Long) {
|
||||||
|
context.dataStore.edit { preferences ->
|
||||||
|
preferences[MONITORING_INTERVAL_MS] = intervalMs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue