Ensure that only one DataStore active for the same file.

This commit is contained in:
Benoit Marty
2025-08-21 11:56:16 +02:00
parent 26cd6772fb
commit e3089dc6ca

View File

@@ -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<String, DataStoreHolder>()
private class DataStoreHolder(name: String) {
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = name)
}
override fun create(name: String): DataStore<Preferences> {
return with(DataStoreHolder(name)) {
val holder = dataStoreHolders.getOrPut(name) {
DataStoreHolder(name)
}
return with(holder) {
context.dataStore
}
}