diff --git a/core/logging/impl-legacy/build.gradle.kts b/core/logging/impl-legacy/build.gradle.kts index 50d80fc1b10..c1c90701804 100644 --- a/core/logging/impl-legacy/build.gradle.kts +++ b/core/logging/impl-legacy/build.gradle.kts @@ -10,6 +10,8 @@ kotlin { sourceSets { androidMain.dependencies { implementation(libs.timber) + implementation(projects.core.logging.implComposite) + implementation(projects.core.logging.implFile) } commonMain.dependencies { diff --git a/core/logging/impl-legacy/src/androidMain/kotlin/net/thunderbird/core/logging/legacy/DebugLogConfigurator.kt b/core/logging/impl-legacy/src/androidMain/kotlin/net/thunderbird/core/logging/legacy/DebugLogConfigurator.kt index 715aa8fc8e3..2e8c63df314 100644 --- a/core/logging/impl-legacy/src/androidMain/kotlin/net/thunderbird/core/logging/legacy/DebugLogConfigurator.kt +++ b/core/logging/impl-legacy/src/androidMain/kotlin/net/thunderbird/core/logging/legacy/DebugLogConfigurator.kt @@ -1,14 +1,27 @@ package net.thunderbird.core.logging.legacy +import net.thunderbird.core.logging.composite.CompositeLogSink +import net.thunderbird.core.logging.file.FileLogSink import timber.log.Timber +import timber.log.Timber.DebugTree // TODO: Implementation https://github.com/thunderbird/thunderbird-android/issues/9573 -class DebugLogConfigurator { - +class DebugLogConfigurator( + private val syncDebugCompositeSink: CompositeLogSink, + private val syncDebugFileLogSink: FileLogSink, +) { fun updateLoggingStatus(isDebugLoggingEnabled: Boolean) { Timber.uprootAll() if (isDebugLoggingEnabled) { - Timber.plant(Timber.DebugTree()) + Timber.plant(DebugTree()) + } + } + + fun updateSyncLogging(isSyncLoggingEnabled: Boolean) { + if (isSyncLoggingEnabled) { + syncDebugCompositeSink.manager.add(syncDebugFileLogSink) + } else { + syncDebugCompositeSink.manager.remove(syncDebugFileLogSink) } } } diff --git a/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettings.kt b/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettings.kt index 410f7a95b81..4b9f1321d0d 100644 --- a/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettings.kt +++ b/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettings.kt @@ -1,7 +1,9 @@ package net.thunderbird.core.preference.debugging +const val DEBUGGING_SETTINGS_DEFAULT_IS_SYNC_LOGGING_ENABLED = false val DEBUGGING_SETTINGS_DEFAULT_IS_DEBUGGING_LOGGING_ENABLED = isDebug data class DebuggingSettings( val isDebugLoggingEnabled: Boolean = DEBUGGING_SETTINGS_DEFAULT_IS_DEBUGGING_LOGGING_ENABLED, + val isSyncLoggingEnabled: Boolean = DEBUGGING_SETTINGS_DEFAULT_IS_SYNC_LOGGING_ENABLED, ) diff --git a/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettingsPreferenceManager.kt b/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettingsPreferenceManager.kt index 244f5b36427..ee254806962 100644 --- a/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettingsPreferenceManager.kt +++ b/core/preference/api/src/commonMain/kotlin/net/thunderbird/core/preference/debugging/DebuggingSettingsPreferenceManager.kt @@ -3,5 +3,6 @@ package net.thunderbird.core.preference.debugging import net.thunderbird.core.preference.PreferenceManager const val KEY_ENABLE_DEBUG_LOGGING = "enableDebugLogging" +const val KEY_ENABLE_SYNC_DEBUG_LOGGING = "enableSyncDebugLogging" interface DebuggingSettingsPreferenceManager : PreferenceManager 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 0139a168d69..44756a57923 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 @@ -40,6 +40,10 @@ class DefaultDebuggingSettingsPreferenceManager( KEY_ENABLE_DEBUG_LOGGING, DEBUGGING_SETTINGS_DEFAULT_IS_DEBUGGING_LOGGING_ENABLED, ), + isSyncLoggingEnabled = storage.getBoolean( + KEY_ENABLE_SYNC_DEBUG_LOGGING, + DEBUGGING_SETTINGS_DEFAULT_IS_SYNC_LOGGING_ENABLED, + ), ) private fun writeConfig(config: DebuggingSettings) { @@ -47,6 +51,7 @@ class DefaultDebuggingSettingsPreferenceManager( scope.launch(ioDispatcher) { mutex.withLock { storageEditor.putBoolean(KEY_ENABLE_DEBUG_LOGGING, config.isDebugLoggingEnabled) + storageEditor.putBoolean(KEY_ENABLE_SYNC_DEBUG_LOGGING, config.isSyncLoggingEnabled) storageEditor.commit().also { commited -> logger.verbose(TAG) { "writeConfig: storageEditor.commit() resulted in: $commited" } } diff --git a/legacy/core/src/main/java/com/fsck/k9/K9.kt b/legacy/core/src/main/java/com/fsck/k9/K9.kt index c3982f7f4b4..5839c50f878 100644 --- a/legacy/core/src/main/java/com/fsck/k9/K9.kt +++ b/legacy/core/src/main/java/com/fsck/k9/K9.kt @@ -16,14 +16,11 @@ import net.thunderbird.core.common.action.SwipeAction import net.thunderbird.core.common.action.SwipeActions import net.thunderbird.core.featureflag.FeatureFlagProvider import net.thunderbird.core.featureflag.toFeatureFlagKey -import net.thunderbird.core.logging.composite.CompositeLogSink -import net.thunderbird.core.logging.file.FileLogSink import net.thunderbird.core.preference.storage.Storage import net.thunderbird.core.preference.storage.StorageEditor import net.thunderbird.core.preference.storage.getEnumOrDefault import org.koin.core.component.KoinComponent import org.koin.core.component.inject -import org.koin.core.qualifier.named import timber.log.Timber // TODO "Use GeneralSettingsManager and GeneralSettings instead" @@ -31,8 +28,6 @@ object K9 : KoinComponent { private val generalSettingsManager: DefaultGeneralSettingsManager by inject() private val telemetryManager: TelemetryManager by inject() private val featureFlagProvider: FeatureFlagProvider by inject() - private val syncDebugCompositeSink: CompositeLogSink by inject(named("syncDebug")) - private val syncDebugFileLogSink: FileLogSink by inject(named("syncDebug")) /** * Name of the [SharedPreferences] file used to store the last known version of the @@ -118,13 +113,6 @@ object K9 : KoinComponent { } } - @JvmStatic - var isSyncLoggingEnabled: Boolean = false - set(debug) { - field = debug - updateSyncLogging() - } - @JvmStatic var isSensitiveDebugLoggingEnabled: Boolean = false @@ -161,9 +149,6 @@ object K9 : KoinComponent { @JvmStatic var messageListPreviewLines = 2 - @JvmStatic - var isShowContactName = false - @JvmStatic var contactNameColor = 0xFF1093F5.toInt() @@ -261,7 +246,6 @@ object K9 : KoinComponent { @JvmStatic @Suppress("LongMethod") fun loadPrefs(storage: Storage) { - isSyncLoggingEnabled = storage.getBoolean("enableSyncDebugLogging", false) isSensitiveDebugLoggingEnabled = storage.getBoolean("enableSensitiveLogging", false) isUseVolumeKeysForNavigation = storage.getBoolean("useVolumeKeysForNavigation", false) isShowAccountSelector = storage.getBoolean("showAccountSelector", true) @@ -330,7 +314,6 @@ object K9 : KoinComponent { @Suppress("LongMethod") internal fun save(editor: StorageEditor) { - editor.putBoolean("enableSyncDebugLogging", isSyncLoggingEnabled) editor.putBoolean("enableSensitiveLogging", isSensitiveDebugLoggingEnabled) editor.putBoolean("useVolumeKeysForNavigation", isUseVolumeKeysForNavigation) editor.putBoolean("notificationDuringQuietTimeEnabled", isNotificationDuringQuietTimeEnabled) @@ -379,14 +362,6 @@ object K9 : KoinComponent { fontSizes.save(editor) } - private fun updateSyncLogging() { - if (isSyncLoggingEnabled) { - syncDebugCompositeSink.manager.add(syncDebugFileLogSink) - } else { - syncDebugCompositeSink.manager.remove(syncDebugFileLogSink) - } - } - @JvmStatic fun saveSettingsAsync() { generalSettingsManager.saveSettingsAsync() diff --git a/legacy/core/src/main/java/com/fsck/k9/job/KoinModule.kt b/legacy/core/src/main/java/com/fsck/k9/job/KoinModule.kt index c64e726b241..c97fdf4d7da 100644 --- a/legacy/core/src/main/java/com/fsck/k9/job/KoinModule.kt +++ b/legacy/core/src/main/java/com/fsck/k9/job/KoinModule.kt @@ -50,7 +50,8 @@ val jobModule = module { baseLogger = get(), fileLogSink = get(named("syncDebug")), syncDebugCompositeSink = get(named("syncDebug")), - parameters, + generalSettingsManager = get(), + parameters = parameters, ) } } diff --git a/legacy/core/src/main/java/com/fsck/k9/job/SyncDebugWorker.kt b/legacy/core/src/main/java/com/fsck/k9/job/SyncDebugWorker.kt index cc0d0ba0fdc..a1557d99778 100644 --- a/legacy/core/src/main/java/com/fsck/k9/job/SyncDebugWorker.kt +++ b/legacy/core/src/main/java/com/fsck/k9/job/SyncDebugWorker.kt @@ -3,11 +3,12 @@ package com.fsck.k9.job import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkerParameters -import com.fsck.k9.K9 import java.io.IOException import net.thunderbird.core.logging.Logger import net.thunderbird.core.logging.composite.CompositeLogSink import net.thunderbird.core.logging.file.FileLogSink +import net.thunderbird.core.preference.GeneralSettingsManager +import net.thunderbird.core.preference.update class SyncDebugWorker( context: Context, @@ -15,6 +16,7 @@ class SyncDebugWorker( val fileLogSink: FileLogSink, val syncDebugCompositeSink: CompositeLogSink, parameters: WorkerParameters, + val generalSettingsManager: GeneralSettingsManager, ) : CoroutineWorker(context, parameters) { override suspend fun doWork(): Result { @@ -25,8 +27,9 @@ class SyncDebugWorker( return Result.failure() } syncDebugCompositeSink.manager.remove(fileLogSink) - K9.isSyncLoggingEnabled = false - K9.saveSettingsAsync() + generalSettingsManager.update { settings -> + settings.copy(debugging = settings.debugging.copy(isSyncLoggingEnabled = false)) + } return Result.success() } } diff --git a/legacy/core/src/main/java/com/fsck/k9/preferences/DefaultGeneralSettingsManager.kt b/legacy/core/src/main/java/com/fsck/k9/preferences/DefaultGeneralSettingsManager.kt index 7253f6b4de5..86953582565 100644 --- a/legacy/core/src/main/java/com/fsck/k9/preferences/DefaultGeneralSettingsManager.kt +++ b/legacy/core/src/main/java/com/fsck/k9/preferences/DefaultGeneralSettingsManager.kt @@ -76,6 +76,7 @@ internal class DefaultGeneralSettingsManager( debugging = debuggingSettings, ).also { debugLogConfigurator.updateLoggingStatus(debuggingSettings.isDebugLoggingEnabled) + debugLogConfigurator.updateSyncLogging(debuggingSettings.isSyncLoggingEnabled) } } .stateIn( 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 d03c9d52984..2cda0b84a69 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 @@ -74,7 +74,10 @@ val preferencesModule = module { ) } single { - DebugLogConfigurator() + DebugLogConfigurator( + syncDebugCompositeSink = get(named("syncDebug")), + syncDebugFileLogSink = get(named("syncDebug")), + ) } single { DefaultGeneralSettingsManager( diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/general/GeneralSettingsDataStore.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/general/GeneralSettingsDataStore.kt index 6f9094ea8fa..703b296a3b4 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/general/GeneralSettingsDataStore.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/general/GeneralSettingsDataStore.kt @@ -71,7 +71,7 @@ class GeneralSettingsDataStore( "privacy_hide_useragent" -> generalSettingsManager.getConfig().privacy.isHideUserAgent "privacy_hide_timezone" -> generalSettingsManager.getConfig().privacy.isHideTimeZone "debug_logging" -> generalSettingsManager.getConfig().debugging.isDebugLoggingEnabled - "sync_debug_logging" -> K9.isSyncLoggingEnabled + "sync_debug_logging" -> generalSettingsManager.getConfig().debugging.isSyncLoggingEnabled "sensitive_logging" -> K9.isSensitiveDebugLoggingEnabled "volume_navigation" -> K9.isUseVolumeKeysForNavigation "enable_telemetry" -> K9.isTelemetryEnabled @@ -111,7 +111,7 @@ class GeneralSettingsDataStore( "privacy_hide_useragent" -> setIsHideUserAgent(isHideUserAgent = value) "privacy_hide_timezone" -> setIsHideTimeZone(isHideTimeZone = value) "debug_logging" -> setIsDebugLoggingEnabled(isDebugLoggingEnabled = value) - "sync_debug_logging" -> K9.isSyncLoggingEnabled = value + "sync_debug_logging" -> setIsSyncLoggingEnabled(isSyncLoggingEnabled = value) "sensitive_logging" -> K9.isSensitiveDebugLoggingEnabled = value "volume_navigation" -> K9.isUseVolumeKeysForNavigation = value "enable_telemetry" -> setTelemetryEnabled(value) @@ -479,6 +479,17 @@ class GeneralSettingsDataStore( } } + private fun setIsSyncLoggingEnabled(isSyncLoggingEnabled: Boolean) { + skipSaveSettings = true + generalSettingsManager.update { settings -> + settings.copy( + debugging = settings.debugging.copy( + isSyncLoggingEnabled = isSyncLoggingEnabled, + ), + ) + } + } + private fun setIsHideUserAgent(isHideUserAgent: Boolean) { skipSaveSettings = true generalSettingsManager.update { settings ->