1515 */
1616package soup.movie.data.settings.impl
1717
18- import android.content.Context
1918import androidx.datastore.core.DataStore
20- import androidx.datastore.preferences.SharedPreferencesMigration
2119import androidx.datastore.preferences.core.Preferences
2220import androidx.datastore.preferences.core.edit
2321import androidx.datastore.preferences.core.intPreferencesKey
2422import androidx.datastore.preferences.core.stringPreferencesKey
25- import androidx.datastore.preferences.preferencesDataStore
26- import dagger.hilt.android.qualifiers.ApplicationContext
27- import kotlinx.coroutines.CoroutineDispatcher
2823import kotlinx.coroutines.CoroutineScope
2924import kotlinx.coroutines.flow.Flow
3025import kotlinx.coroutines.flow.first
3126import kotlinx.coroutines.flow.map
3227import kotlinx.coroutines.launch
33- import kotlinx.coroutines.withContext
3428import soup.movie.common.ApplicationScope
35- import soup.movie.common.IoDispatcher
3629import soup.movie.data.settings.AppSettings
3730import soup.movie.model.settings.AgeFilter
3831import soup.movie.model.settings.TheaterFilter
@@ -41,21 +34,10 @@ import javax.inject.Singleton
4134
4235@Singleton
4336class AppSettingsImpl @Inject constructor(
44- @ApplicationContext private val context : Context ,
45- @IoDispatcher private val ioDispatcher : CoroutineDispatcher ,
37+ private val preferences : DataStore <Preferences >,
4638 @ApplicationScope private val coroutineScope : CoroutineScope ,
4739) : AppSettings {
4840
49- private val Context .preferencesName: String
50- get() = packageName + " _preferences"
51-
52- private val Context .dataStore: DataStore <Preferences > by preferencesDataStore(
53- name = context.preferencesName,
54- produceMigrations = { context ->
55- listOf (SharedPreferencesMigration (context, context.preferencesName))
56- },
57- )
58-
5941 private val theaterFilterKey = intPreferencesKey(" theater_filter" )
6042
6143 init {
@@ -65,13 +47,13 @@ class AppSettingsImpl @Inject constructor(
6547 }
6648
6749 override suspend fun setTheaterFilter (theaterFilter : TheaterFilter ) {
68- context.dataStore .edit { settings ->
50+ preferences .edit { settings ->
6951 settings[theaterFilterKey] = theaterFilter.toFlags()
7052 }
7153 }
7254
7355 override fun getTheaterFilterFlow (): Flow <TheaterFilter > {
74- return context.dataStore .data.map { preferences ->
56+ return preferences .data.map { preferences ->
7557 TheaterFilter (
7658 preferences[theaterFilterKey]
7759 ? : TheaterFilter .FLAG_THEATER_ALL ,
@@ -82,13 +64,13 @@ class AppSettingsImpl @Inject constructor(
8264 private val ageFilterKey = intPreferencesKey(" age_filter" )
8365
8466 override suspend fun setAgeFilter (ageFilter : AgeFilter ) {
85- context.dataStore .edit { settings ->
67+ preferences .edit { settings ->
8668 settings[ageFilterKey] = ageFilter.toFlags()
8769 }
8870 }
8971
9072 override fun getAgeFilterFlow (): Flow <AgeFilter > {
91- return context.dataStore .data.map { preferences ->
73+ return preferences .data.map { preferences ->
9274 AgeFilter (
9375 preferences[ageFilterKey] ? : AgeFilter .FLAG_AGE_DEFAULT ,
9476 )
@@ -98,10 +80,8 @@ class AppSettingsImpl @Inject constructor(
9880 private val themeOptionKey = stringPreferencesKey(" theme_option" )
9981
10082 override suspend fun setThemeOption (themeOption : String ) {
101- withContext(ioDispatcher) {
102- context.dataStore.edit { settings ->
103- settings[themeOptionKey] = themeOption
104- }
83+ preferences.edit { settings ->
84+ settings[themeOptionKey] = themeOption
10585 }
10686 }
10787
@@ -110,17 +90,15 @@ class AppSettingsImpl @Inject constructor(
11090 }
11191
11292 override fun getThemeOptionFlow (): Flow <String > {
113- return context.dataStore .data.map { preferences ->
93+ return preferences .data.map { preferences ->
11494 preferences[themeOptionKey].orEmpty()
11595 }
11696 }
11797
11898 private suspend fun clearStaleData () {
119- withContext(ioDispatcher) {
120- context.dataStore.edit { settings ->
121- settings.remove(stringPreferencesKey(" favorite_theaters" ))
122- settings.remove(stringPreferencesKey(" favorite_genre" ))
123- }
99+ preferences.edit { settings ->
100+ settings.remove(stringPreferencesKey(" favorite_theaters" ))
101+ settings.remove(stringPreferencesKey(" favorite_genre" ))
124102 }
125103 }
126104}
0 commit comments