diff --git a/app/src/main/java/com/sadellie/unitto/data/preferences/DataStoreModule.kt b/app/src/main/java/com/sadellie/unitto/data/preferences/DataStoreModule.kt new file mode 100644 index 00000000..3ae74e68 --- /dev/null +++ b/app/src/main/java/com/sadellie/unitto/data/preferences/DataStoreModule.kt @@ -0,0 +1,41 @@ +package com.sadellie.unitto.data.preferences + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler +import androidx.datastore.preferences.core.PreferenceDataStoreFactory +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.emptyPreferences +import androidx.datastore.preferences.preferencesDataStoreFile +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +// DON'T TOUCH!!! +private const val USER_PREFERENCES = "settings" + +/** + * This module is for DataStore dependency injection + */ +@InstallIn(SingletonComponent::class) +@Module +class DataStoreModule { + + /** + * Tells Hilt to use this method to get [DataStore] + * + * @param appContext + * @return Singleton of [DataStore] + */ + @Singleton + @Provides + fun provideUserPreferencesDataStore(@ApplicationContext appContext: Context): DataStore { + return PreferenceDataStoreFactory.create( + corruptionHandler = ReplaceFileCorruptionHandler { emptyPreferences() }, + produceFile = { appContext.preferencesDataStoreFile(USER_PREFERENCES) } + ) + } +} diff --git a/app/src/main/java/com/sadellie/unitto/data/preferences/UserPreferences.kt b/app/src/main/java/com/sadellie/unitto/data/preferences/UserPreferences.kt index ff872235..775ac7aa 100644 --- a/app/src/main/java/com/sadellie/unitto/data/preferences/UserPreferences.kt +++ b/app/src/main/java/com/sadellie/unitto/data/preferences/UserPreferences.kt @@ -1,21 +1,14 @@ package com.sadellie.unitto.data.preferences -import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.* -import androidx.datastore.preferences.preferencesDataStore import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.MyUnitIDS -import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject -// It's at the top level to make DataStore singleton -// DON'T TOUCH STRINGS!!! -private val Context.settingsDataStore by preferencesDataStore("settings") - /** * Represents user preferences that are user across the app * @@ -39,12 +32,8 @@ data class UserPreferences( /** * Repository that works with DataStore - * - * @property context */ -class UserPreferencesRepository @Inject constructor(@ApplicationContext private val context: Context) { - - private val dataStore: DataStore = context.settingsDataStore +class UserPreferencesRepository @Inject constructor(private val dataStore: DataStore) { /** * Keys for DataStore