Created
August 30, 2021 11:49
-
-
Save astraube/3d39512164943c1aeb88de29bc003716 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.straucorp.datastorepreferences | |
/** | |
* @author Andre Straube - Created on 29/08/2021 | |
*/ | |
import android.content.Context | |
import androidx.datastore.core.DataStore | |
import androidx.datastore.preferences.SharedPreferencesMigration | |
import androidx.datastore.preferences.core.Preferences | |
import androidx.datastore.preferences.core.intPreferencesKey | |
import androidx.datastore.preferences.core.longPreferencesKey | |
import androidx.datastore.preferences.core.stringPreferencesKey | |
import androidx.datastore.preferences.preferencesDataStore | |
import com.straucorp.datastorepreferences.core.Theme | |
import com.straucorp.datastorepreferences.delegates.PreferenceDataStore | |
import kotlinx.coroutines.flow.map | |
import kotlin.reflect.KProperty | |
private const val PREF_NAME = "app_settings" | |
val Context.dataStore by preferencesDataStore( | |
name = PREF_NAME, | |
produceMigrations = { context -> | |
listOf(SharedPreferencesMigration(context, PREF_NAME)) | |
} | |
) | |
/** | |
* | |
* Exemplo de uso: | |
* | |
* ``` | |
* val appPreferences = AppStorePreferences(this) | |
* ``` | |
*/ | |
internal class AppStorePreferences(context: Context) { | |
private val dataStore: DataStore<Preferences> = context.dataStore | |
var launchCount by PreferenceDataStore( | |
dataStore = dataStore, | |
key = intPreferencesKey(name = "launch_count"), | |
defaultValue = 0 | |
) | |
val launchCountFlow = dataStore.data.map { launchCount } | |
var lastAskForReview by PreferenceDataStore( | |
dataStore = dataStore, | |
key = longPreferencesKey(name = "last_ask_for_review"), | |
defaultValue = 0L | |
) | |
val lastAskForReviewFlow = dataStore.data.map { lastAskForReview } | |
var selectedTheme by PreferenceDataStore( | |
dataStore = dataStore, | |
key = stringPreferencesKey(name = Theme.PREF_KEY), | |
defaultValue = Theme.SYSTEM.storageKey | |
) | |
val selectedThemeFlow = dataStore.data.map { selectedTheme } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment