Ensure that only one DataStore active for the same file.
This commit is contained in:
parent
26cd6772fb
commit
e3089dc6ca
1 changed files with 10 additions and 1 deletions
|
|
@ -14,18 +14,27 @@ import androidx.datastore.preferences.preferencesDataStore
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.ApplicationContext
|
import io.element.android.libraries.di.ApplicationContext
|
||||||
|
import io.element.android.libraries.di.SingleIn
|
||||||
import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory
|
import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory
|
||||||
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@SingleIn(AppScope::class)
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class DefaultPreferencesDataStoreFactory @Inject constructor(
|
class DefaultPreferencesDataStoreFactory @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
) : PreferenceDataStoreFactory {
|
) : PreferenceDataStoreFactory {
|
||||||
|
private val dataStoreHolders = ConcurrentHashMap<String, DataStoreHolder>()
|
||||||
|
|
||||||
private class DataStoreHolder(name: String) {
|
private class DataStoreHolder(name: String) {
|
||||||
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = name)
|
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = name)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun create(name: String): DataStore<Preferences> {
|
override fun create(name: String): DataStore<Preferences> {
|
||||||
return with(DataStoreHolder(name)) {
|
val holder = dataStoreHolders.getOrPut(name) {
|
||||||
|
DataStoreHolder(name)
|
||||||
|
}
|
||||||
|
return with(holder) {
|
||||||
context.dataStore
|
context.dataStore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue