diff --git a/app/src/main/java/in/sminnovations/attendanceapp/screens/settings/data/datastore.kt b/app/src/main/java/in/sminnovations/attendanceapp/screens/settings/data/datastore.kt new file mode 100644 index 0000000..d63eca8 --- /dev/null +++ b/app/src/main/java/in/sminnovations/attendanceapp/screens/settings/data/datastore.kt @@ -0,0 +1,83 @@ +package `in`.sminnovations.attendanceapp.screens.settings.data + +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.stringPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + + +class SettingsData(private val context: Context) { + + companion object { + private val Context.dataStore: DataStore by preferencesDataStore("Settings") + val DYNAMIC_THEME_KEY = booleanPreferencesKey("dynamic_theme") + val BLACK_THEME_KEY = booleanPreferencesKey("black_theme") + val THEME_MODE_KEY = stringPreferencesKey("app_theme") + val DEV_MODE_TOGGLE_KEY = booleanPreferencesKey("dev_mode_toggle") + } + + + + val getDevModeToggle: Flow = context.dataStore.data + .map { preferences -> + preferences[DEV_MODE_TOGGLE_KEY] ?: false + } + + suspend fun setDevMode(mode: Boolean) { + context.dataStore.edit { preferences -> + preferences[DEV_MODE_TOGGLE_KEY] = mode + } + } + + + + + val getDynamicColorThemeValue: Flow = context.dataStore.data + .map { preferences -> + preferences[DYNAMIC_THEME_KEY] ?: true + } + + suspend fun setDynamicColorThemeValue(value: Boolean) { + context.dataStore.edit { preferences -> + preferences[DYNAMIC_THEME_KEY] = value + } + } + + + + + + + val getBlackThemeValue: Flow = context.dataStore.data + .map { preferences -> + preferences[BLACK_THEME_KEY] ?: false + } + + suspend fun setBlackThemeValue(value: Boolean) { + context.dataStore.edit { preferences -> + preferences[BLACK_THEME_KEY] = value + } + } + + + + + + val getThemeMode: Flow = context.dataStore.data + .map { preferences -> + preferences[THEME_MODE_KEY] ?: "System default" + } + + suspend fun saveThemeMode(theme: String) { + context.dataStore.edit { preferences -> + preferences[THEME_MODE_KEY] = theme + } + } + + +}