git.iko.soy/opencode-android
on 8865a77 help sign in
28 lines 1.0 kB history raw
1package soy.iko.opencode.data.repo
3import android.content.Context
4import androidx.datastore.preferences.core.edit
5import androidx.datastore.preferences.core.stringPreferencesKey
6import androidx.datastore.preferences.preferencesDataStore
7import kotlinx.coroutines.flow.Flow
8import kotlinx.coroutines.flow.map
10enum class ThemeMode { SYSTEM, LIGHT, DARK }
12private val Context.settingsDataStore by preferencesDataStore(name = "settings")
14/** Small app-preferences store (theme mode for now; default agent etc. can join later). */
15class SettingsStore(context: Context) {
17 private val appContext = context.applicationContext
18 private val themeKey = stringPreferencesKey("theme_mode")
20 val themeMode: Flow<ThemeMode> = appContext.settingsDataStore.data.map { prefs ->
21 runCatching { ThemeMode.valueOf(prefs[themeKey] ?: ThemeMode.SYSTEM.name) }
22 .getOrDefault(ThemeMode.SYSTEM)
23 }
25 suspend fun setThemeMode(mode: ThemeMode) {
26 appContext.settingsDataStore.edit { it[themeKey] = mode.name }
27 }