diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt index 648f82b9bd..b208492150 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt @@ -14,18 +14,27 @@ import androidx.datastore.preferences.preferencesDataStore import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.SingleIn import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory +import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject +@SingleIn(AppScope::class) @ContributesBinding(AppScope::class) class DefaultPreferencesDataStoreFactory @Inject constructor( @ApplicationContext private val context: Context, ) : PreferenceDataStoreFactory { + private val dataStoreHolders = ConcurrentHashMap() + private class DataStoreHolder(name: String) { val Context.dataStore: DataStore by preferencesDataStore(name = name) } + override fun create(name: String): DataStore { - return with(DataStoreHolder(name)) { + val holder = dataStoreHolders.getOrPut(name) { + DataStoreHolder(name) + } + return with(holder) { context.dataStore } }