Merge pull request #5198 from element-hq/fix/fixCrashOnPro
Ensure that only one DataStore is active for the same file.
This commit is contained in:
commit
44d0111cf2
2 changed files with 10 additions and 4 deletions
|
|
@ -21,8 +21,6 @@ import androidx.datastore.preferences.core.booleanPreferencesKey
|
|||
import androidx.datastore.preferences.core.edit
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.di.SingleIn
|
||||
import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsEvents
|
||||
import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsState
|
||||
import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory
|
||||
|
|
@ -32,7 +30,6 @@ import kotlinx.coroutines.flow.map
|
|||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@SingleIn(AppScope::class)
|
||||
class FullScreenIntentPermissionsPresenter @Inject constructor(
|
||||
private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider,
|
||||
private val externalIntentLauncher: ExternalIntentLauncher,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue