Skip to content

Commit 58557d5

Browse files
authored
Create PreferencesRepository.kt
1 parent 9b6f58f commit 58557d5

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.hackeros.app.data.repository
2+
3+
import android.content.Context
4+
import androidx.datastore.core.DataStore
5+
import androidx.datastore.preferences.core.Preferences
6+
import androidx.datastore.preferences.core.booleanPreferencesKey
7+
import androidx.datastore.preferences.core.edit
8+
import androidx.datastore.preferences.core.stringPreferencesKey
9+
import androidx.datastore.preferences.preferencesDataStore
10+
import com.hackeros.app.data.model.Language
11+
import com.hackeros.app.data.model.ThemeId
12+
import kotlinx.coroutines.flow.Flow
13+
import kotlinx.coroutines.flow.map
14+
15+
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "hackeros_prefs")
16+
17+
class PreferencesRepository(private val context: Context) {
18+
19+
companion object {
20+
val THEME_KEY = stringPreferencesKey("hackeros_theme")
21+
val LANG_KEY = stringPreferencesKey("hackeros_lang")
22+
val NOTIFICATIONS_KEY = booleanPreferencesKey("hackeros_notifications")
23+
}
24+
25+
val themeFlow: Flow<ThemeId> = context.dataStore.data.map { prefs ->
26+
val saved = prefs[THEME_KEY]
27+
ThemeId.entries.find { it.name == saved } ?: ThemeId.HACKER
28+
}
29+
30+
val languageFlow: Flow<Language> = context.dataStore.data.map { prefs ->
31+
val saved = prefs[LANG_KEY]
32+
Language.entries.find { it.name == saved } ?: Language.PL
33+
}
34+
35+
val notificationsFlow: Flow<Boolean> = context.dataStore.data.map { prefs ->
36+
prefs[NOTIFICATIONS_KEY] ?: false
37+
}
38+
39+
suspend fun saveTheme(themeId: ThemeId) {
40+
context.dataStore.edit { it[THEME_KEY] = themeId.name }
41+
}
42+
43+
suspend fun saveLanguage(lang: Language) {
44+
context.dataStore.edit { it[LANG_KEY] = lang.name }
45+
}
46+
47+
suspend fun saveNotifications(enabled: Boolean) {
48+
context.dataStore.edit { it[NOTIFICATIONS_KEY] = enabled }
49+
}
50+
}

0 commit comments

Comments
 (0)