Skip to content

Instantly share code, notes, and snippets.

@astraube
Created August 30, 2021 11:49
Show Gist options
  • Save astraube/3d39512164943c1aeb88de29bc003716 to your computer and use it in GitHub Desktop.
Save astraube/3d39512164943c1aeb88de29bc003716 to your computer and use it in GitHub Desktop.
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