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
16b943239c
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 androidx.datastore.preferences.core.edit
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.meta.BuildMeta
|
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.FullScreenIntentPermissionsEvents
|
||||||
import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsState
|
import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsState
|
||||||
import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory
|
import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory
|
||||||
|
|
@ -32,7 +30,6 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@SingleIn(AppScope::class)
|
|
||||||
class FullScreenIntentPermissionsPresenter @Inject constructor(
|
class FullScreenIntentPermissionsPresenter @Inject constructor(
|
||||||
private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider,
|
private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider,
|
||||||
private val externalIntentLauncher: ExternalIntentLauncher,
|
private val externalIntentLauncher: ExternalIntentLauncher,
|
||||||
|
|
|
||||||
|
|
@ -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