diff --git a/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt b/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..fdaef4708cb2f58cc6badbb11dcfcfd08ce42486 --- /dev/null +++ b/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt @@ -0,0 +1,12 @@ +package com.example.abe.data.local + +import androidx.datastore.preferences.core.Preferences +import kotlinx.coroutines.flow.Flow + +interface IPreferenceDataStore { + suspend fun <T> getPreference(key: Preferences.Key<T>,defaultValue: T):Flow<T> + suspend fun <T> getFirstPreference(key: Preferences.Key<T>,defaultValue: T):T + suspend fun <T> putPreference(key: Preferences.Key<T>,value:T) + suspend fun <T> removePreference(key: Preferences.Key<T>) + suspend fun <T> clearAllPreference() +} \ No newline at end of file diff --git a/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt new file mode 100644 index 0000000000000000000000000000000000000000..576322b342de156997934d4fececc78ee20f2fb7 --- /dev/null +++ b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt @@ -0,0 +1,8 @@ +package com.example.abe.data.local + +import androidx.datastore.preferences.core.stringPreferencesKey + +object PreferenceDataStoreConstants { + val TOKEN = stringPreferencesKey("TOKEN") + val USER = stringPreferencesKey("USER") +} \ No newline at end of file diff --git a/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt new file mode 100644 index 0000000000000000000000000000000000000000..45416a3edb0785328a1d6e8a811abdecb582a00e --- /dev/null +++ b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt @@ -0,0 +1,53 @@ +package com.example.abe.data.local + +import android.content.Context +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.emptyPreferences +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import java.io.IOException + +private val Context.dataStore by preferencesDataStore( + name = "PreferenceDataStore" +) +class PreferenceDataStoreHelper(context: Context):IPreferenceDataStore { + + private val dataSource = context.dataStore + + override suspend fun <T> getPreference(key: Preferences.Key<T>, defaultValue: T): + Flow<T> = dataSource.data.catch { exception -> + if (exception is IOException){ + emit(emptyPreferences()) + }else{ + throw exception + } + }.map { preferences-> + val result = preferences[key]?: defaultValue + result + } + + override suspend fun <T> getFirstPreference(key: Preferences.Key<T>, defaultValue: T) : + T = dataSource.data.first()[key] ?: defaultValue + + override suspend fun <T> putPreference(key: Preferences.Key<T>, value: T) { + dataSource.edit { preferences -> + preferences[key] = value + } + } + + override suspend fun <T> removePreference(key: Preferences.Key<T>) { + dataSource.edit { preferences -> + preferences.remove(key) + } + } + + override suspend fun <T> clearAllPreference() { + dataSource.edit { preferences -> + preferences.clear() + } + } +} \ No newline at end of file