diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DefaultDebuggingSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DefaultDebuggingSettingsPreferenceManager.kt index dec5ed7ef98..258a5ef6ab4 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DefaultDebuggingSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DefaultDebuggingSettingsPreferenceManager.kt @@ -16,12 +16,13 @@ import net.thunderbird.core.logging.LogLevelManager import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister private const val TAG = "DefaultDebuggingSettingsPreferenceManager" class DefaultDebuggingSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val logLevelManager: LogLevelManager, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, @@ -30,6 +31,8 @@ class DefaultDebuggingSettingsPreferenceManager( ) : DebuggingSettingsPreferenceManager { private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun getConfig(): DebuggingSettings = configState.value override fun getConfigFlow(): Flow = configState diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/coreSettings/DefaultDisplayCoreSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/coreSettings/DefaultDisplayCoreSettingsPreferenceManager.kt index 0bd2c3e4797..a8bcda29690 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/coreSettings/DefaultDisplayCoreSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/coreSettings/DefaultDisplayCoreSettingsPreferenceManager.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister import net.thunderbird.core.preference.storage.getEnumOrDefault import net.thunderbird.core.preference.storage.putEnum @@ -20,7 +21,7 @@ private const val TAG = "DefaultDisplayCoreSettingsPreferenceManager" class DefaultDisplayCoreSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), @@ -28,6 +29,8 @@ class DefaultDisplayCoreSettingsPreferenceManager( private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun getConfig(): DisplayCoreSettings = configState.value diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/inboxSettings/DefaultDisplayInboxSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/inboxSettings/DefaultDisplayInboxSettingsPreferenceManager.kt index 525a1e04718..62ac95ceb8e 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/inboxSettings/DefaultDisplayInboxSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/inboxSettings/DefaultDisplayInboxSettingsPreferenceManager.kt @@ -13,12 +13,13 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister private const val TAG = "DefaultDisplayInboxSettingsPreferenceManager" class DefaultDisplayInboxSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), @@ -26,6 +27,8 @@ class DefaultDisplayInboxSettingsPreferenceManager( private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun getConfig(): DisplayInboxSettings = configState.value diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/miscSettings/DefaultDisplayMiscSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/miscSettings/DefaultDisplayMiscSettingsPreferenceManager.kt index 95b67aa04cc..052d8e0b4a4 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/miscSettings/DefaultDisplayMiscSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/miscSettings/DefaultDisplayMiscSettingsPreferenceManager.kt @@ -13,18 +13,21 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister private const val TAG = "DefaultDisplayMiscSettingsPreferenceManager" class DefaultDisplayMiscSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), ) : DisplayMiscSettingsPreferenceManager { private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun save(config: DisplayMiscSettings) { logger.debug(TAG) { "save() called with: config = $config" } writeConfig(config) diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/visualSettings/DefaultDisplayVisualSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/visualSettings/DefaultDisplayVisualSettingsPreferenceManager.kt index e3890d9f4d9..cbd2049ba38 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/visualSettings/DefaultDisplayVisualSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/display/visualSettings/DefaultDisplayVisualSettingsPreferenceManager.kt @@ -15,9 +15,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger +import net.thunderbird.core.preference.PreferenceChangeBroker +import net.thunderbird.core.preference.PreferenceChangeSubscriber import net.thunderbird.core.preference.display.visualSettings.message.list.MessageListPreferencesManager import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister import net.thunderbird.core.preference.storage.getEnumOrDefault import net.thunderbird.core.preference.storage.putEnum @@ -25,12 +28,17 @@ private const val TAG = "DefaultDisplayVisualSettingsPreferenceManager" class DefaultDisplayVisualSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, + preferenceChangeBroker: PreferenceChangeBroker, private val messageListPreferences: MessageListPreferencesManager, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private val scope: CoroutineScope = CoroutineScope(SupervisorJob()), -) : DisplayVisualSettingsPreferenceManager { +) : DisplayVisualSettingsPreferenceManager, PreferenceChangeSubscriber { + + init { + preferenceChangeBroker.subscribe(this) + } private val internalConfigState = MutableStateFlow(value = loadConfig()) private val configState: StateFlow = combine( internalConfigState, @@ -39,6 +47,8 @@ class DefaultDisplayVisualSettingsPreferenceManager( config.copy(messageListSettings = messageListConfig) }.stateIn(scope = scope, started = SharingStarted.Eagerly, initialValue = internalConfigState.value) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun save(config: DisplayVisualSettings) { logger.debug(TAG) { "save() called with: config = $config" } @@ -92,4 +102,8 @@ class DefaultDisplayVisualSettingsPreferenceManager( override fun getConfig() = configState.value override fun getConfigFlow(): Flow = configState + + override fun receive() { + internalConfigState.update { loadConfig() } + } } diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/interaction/DefaultInteractionSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/interaction/DefaultInteractionSettingsPreferenceManager.kt index 97d1c64517f..ff1b2620256 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/interaction/DefaultInteractionSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/interaction/DefaultInteractionSettingsPreferenceManager.kt @@ -14,6 +14,7 @@ import net.thunderbird.core.common.action.SwipeActions import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister import net.thunderbird.core.preference.storage.getEnumOrDefault import net.thunderbird.core.preference.storage.putEnum @@ -21,7 +22,7 @@ private const val TAG = "DefaultInteractionSettingsPreferenceManager" class DefaultInteractionSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), @@ -29,6 +30,9 @@ class DefaultInteractionSettingsPreferenceManager( private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() + override fun getConfig(): InteractionSettings = configState.value override fun getConfigFlow(): Flow = configState diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/network/DefaultNetworkSettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/network/DefaultNetworkSettingsPreferenceManager.kt index 40984b16f01..2f47d06de08 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/network/DefaultNetworkSettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/network/DefaultNetworkSettingsPreferenceManager.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister import net.thunderbird.core.preference.storage.getEnumOrDefault import net.thunderbird.core.preference.storage.putEnum @@ -20,13 +21,15 @@ private const val TAG = "DefaultNetworkSettingsPreferenceManager" class DefaultNetworkSettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), ) : NetworkSettingsPreferenceManager { private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun getConfig(): NetworkSettings = configState.value override fun getConfigFlow(): Flow = configState diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/notification/DefaultNotificationPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/notification/DefaultNotificationPreferenceManager.kt index 96121c53ab3..f23e9694bd3 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/notification/DefaultNotificationPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/notification/DefaultNotificationPreferenceManager.kt @@ -13,17 +13,20 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister private const val TAG = "DefaultNotificationPreferenceManager" class DefaultNotificationPreferenceManager( private val logger: Logger, - storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), ) : NotificationPreferenceManager { private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() private val configState = MutableStateFlow( value = NotificationPreference( isQuietTimeEnabled = storage.getBoolean( diff --git a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/privacy/DefaultPrivacySettingsPreferenceManager.kt b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/privacy/DefaultPrivacySettingsPreferenceManager.kt index 689adf13e1f..51bbcd0c568 100644 --- a/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/privacy/DefaultPrivacySettingsPreferenceManager.kt +++ b/core/preference/impl/src/commonMain/kotlin/net/thunderbird/core/preference/privacy/DefaultPrivacySettingsPreferenceManager.kt @@ -13,18 +13,21 @@ import kotlinx.coroutines.sync.withLock import net.thunderbird.core.logging.Logger import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor +import net.thunderbird.core.preference.storage.StoragePersister private const val TAG = "DefaultPrivacySettingsPreferenceManager" class DefaultPrivacySettingsPreferenceManager( private val logger: Logger, - private val storage: Storage, + private val storagePersister: StoragePersister, private val storageEditor: StorageEditor, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, private var scope: CoroutineScope = CoroutineScope(SupervisorJob()), ) : PrivacySettingsPreferenceManager { private val configState: MutableStateFlow = MutableStateFlow(value = loadConfig()) private val mutex = Mutex() + private val storage: Storage + get() = storagePersister.loadValues() override fun getConfig(): PrivacySettings = configState.value override fun getConfigFlow(): Flow = configState diff --git a/legacy/core/src/main/java/com/fsck/k9/preferences/KoinModule.kt b/legacy/core/src/main/java/com/fsck/k9/preferences/KoinModule.kt index 450f1ef2b3d..8a8eac287df 100644 --- a/legacy/core/src/main/java/com/fsck/k9/preferences/KoinModule.kt +++ b/legacy/core/src/main/java/com/fsck/k9/preferences/KoinModule.kt @@ -52,50 +52,51 @@ val preferencesModule = module { single { DefaultPrivacySettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultNotificationPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultDisplayCoreSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultDisplayInboxSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultDisplayVisualSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), messageListPreferences = get(), + preferenceChangeBroker = get(), ) } single { DefaultDisplayMiscSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultInteractionSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } @@ -118,14 +119,14 @@ val preferencesModule = module { single { DefaultNetworkSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), ) } single { DefaultDebuggingSettingsPreferenceManager( logger = get(), - storage = get().storage, + storagePersister = get(), storageEditor = get().createStorageEditor(), logLevelManager = get(), platformConfigProvider = get(),