Loading app/core/src/main/java/com/fsck/k9/K9.kt +1 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import kotlinx.coroutines.launch import timber.log.Timber import timber.log.Timber.DebugTree @Deprecated("Use GeneralSettingsManager and GeneralSettings instead") object K9 : EarlyInit { private val preferences: Preferences by inject() Loading app/core/src/main/java/com/fsck/k9/SettingsChangeListener.kt +1 −1 Original line number Diff line number Diff line package com.fsck.k9 interface SettingsChangeListener { fun interface SettingsChangeListener { fun onSettingsChanged() } app/core/src/main/java/com/fsck/k9/controller/push/KoinModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ internal val controllerPushModule = module { single { PushController( preferences = get(), generalSettingsManager = get(), backendManager = get(), pushServiceManager = get(), bootCompleteManager = get(), Loading app/core/src/main/java/com/fsck/k9/controller/push/PushController.kt +21 −16 Original line number Diff line number Diff line Loading @@ -2,9 +2,7 @@ package com.fsck.k9.controller.push import com.fsck.k9.Account import com.fsck.k9.Account.FolderMode import com.fsck.k9.K9 import com.fsck.k9.Preferences import com.fsck.k9.SettingsChangeListener import com.fsck.k9.backend.BackendManager import com.fsck.k9.network.ConnectivityChangeListener import com.fsck.k9.network.ConnectivityManager Loading @@ -13,10 +11,16 @@ import com.fsck.k9.notification.PushNotificationState import com.fsck.k9.notification.PushNotificationState.LISTENING import com.fsck.k9.notification.PushNotificationState.WAIT_BACKGROUND_SYNC import com.fsck.k9.notification.PushNotificationState.WAIT_NETWORK import com.fsck.k9.preferences.BackgroundSync import com.fsck.k9.preferences.GeneralSettingsManager import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber Loading @@ -25,6 +29,7 @@ import timber.log.Timber */ class PushController internal constructor( private val preferences: Preferences, private val generalSettingsManager: GeneralSettingsManager, private val backendManager: BackendManager, private val pushServiceManager: PushServiceManager, private val bootCompleteManager: BootCompleteManager, Loading @@ -41,18 +46,6 @@ class PushController internal constructor( private val autoSyncListener = AutoSyncListener(::onAutoSyncChanged) private val connectivityChangeListener = ConnectivityChangeListener(::onConnectivityChanged) private val settingsChangeListener = object : SettingsChangeListener { @Volatile private var previousBackgroundSync: K9.BACKGROUND_OPS? = null override fun onSettingsChanged() { val backgroundSync = K9.backgroundOps if (backgroundSync != previousBackgroundSync) { previousBackgroundSync = backgroundSync launchUpdatePushers() } } } /** * Initialize [PushController]. Loading @@ -77,12 +70,22 @@ class PushController internal constructor( Timber.v("PushController.initInBackground()") preferences.addOnAccountsChangeListener(::onAccountsChanged) preferences.addSettingsChangeListener(settingsChangeListener) listenForBackgroundSyncChanges() backendManager.addListener(::onBackendChanged) updatePushers() } private fun listenForBackgroundSyncChanges() { generalSettingsManager.getSettingsFlow() .map { it.backgroundSync } .distinctUntilChanged() .onEach { launchUpdatePushers() } .launchIn(coroutineScope) } private fun onAccountsChanged() { launchUpdatePushers() } Loading Loading @@ -115,8 +118,10 @@ class PushController internal constructor( private fun updatePushers() { Timber.v("PushController.updatePushers()") val generalSettings = generalSettingsManager.getSettings() val backgroundSyncDisabledViaSystem = autoSyncManager.isAutoSyncDisabled val backgroundSyncDisabledInApp = K9.backgroundOps == K9.BACKGROUND_OPS.NEVER val backgroundSyncDisabledInApp = generalSettings.backgroundSync == BackgroundSync.NEVER val networkNotAvailable = !connectivityManager.isNetworkAvailable() val realPushAccounts = getPushAccounts() Loading app/core/src/main/java/com/fsck/k9/preferences/GeneralSettings.kt 0 → 100644 +16 −0 Original line number Diff line number Diff line package com.fsck.k9.preferences /** * Stores a snapshot of the app's general settings. * * TODO: Add more settings as needed. */ data class GeneralSettings( val backgroundSync: BackgroundSync ) enum class BackgroundSync { ALWAYS, NEVER, FOLLOW_SYSTEM_AUTO_SYNC } Loading
app/core/src/main/java/com/fsck/k9/K9.kt +1 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import kotlinx.coroutines.launch import timber.log.Timber import timber.log.Timber.DebugTree @Deprecated("Use GeneralSettingsManager and GeneralSettings instead") object K9 : EarlyInit { private val preferences: Preferences by inject() Loading
app/core/src/main/java/com/fsck/k9/SettingsChangeListener.kt +1 −1 Original line number Diff line number Diff line package com.fsck.k9 interface SettingsChangeListener { fun interface SettingsChangeListener { fun onSettingsChanged() }
app/core/src/main/java/com/fsck/k9/controller/push/KoinModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ internal val controllerPushModule = module { single { PushController( preferences = get(), generalSettingsManager = get(), backendManager = get(), pushServiceManager = get(), bootCompleteManager = get(), Loading
app/core/src/main/java/com/fsck/k9/controller/push/PushController.kt +21 −16 Original line number Diff line number Diff line Loading @@ -2,9 +2,7 @@ package com.fsck.k9.controller.push import com.fsck.k9.Account import com.fsck.k9.Account.FolderMode import com.fsck.k9.K9 import com.fsck.k9.Preferences import com.fsck.k9.SettingsChangeListener import com.fsck.k9.backend.BackendManager import com.fsck.k9.network.ConnectivityChangeListener import com.fsck.k9.network.ConnectivityManager Loading @@ -13,10 +11,16 @@ import com.fsck.k9.notification.PushNotificationState import com.fsck.k9.notification.PushNotificationState.LISTENING import com.fsck.k9.notification.PushNotificationState.WAIT_BACKGROUND_SYNC import com.fsck.k9.notification.PushNotificationState.WAIT_NETWORK import com.fsck.k9.preferences.BackgroundSync import com.fsck.k9.preferences.GeneralSettingsManager import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber Loading @@ -25,6 +29,7 @@ import timber.log.Timber */ class PushController internal constructor( private val preferences: Preferences, private val generalSettingsManager: GeneralSettingsManager, private val backendManager: BackendManager, private val pushServiceManager: PushServiceManager, private val bootCompleteManager: BootCompleteManager, Loading @@ -41,18 +46,6 @@ class PushController internal constructor( private val autoSyncListener = AutoSyncListener(::onAutoSyncChanged) private val connectivityChangeListener = ConnectivityChangeListener(::onConnectivityChanged) private val settingsChangeListener = object : SettingsChangeListener { @Volatile private var previousBackgroundSync: K9.BACKGROUND_OPS? = null override fun onSettingsChanged() { val backgroundSync = K9.backgroundOps if (backgroundSync != previousBackgroundSync) { previousBackgroundSync = backgroundSync launchUpdatePushers() } } } /** * Initialize [PushController]. Loading @@ -77,12 +70,22 @@ class PushController internal constructor( Timber.v("PushController.initInBackground()") preferences.addOnAccountsChangeListener(::onAccountsChanged) preferences.addSettingsChangeListener(settingsChangeListener) listenForBackgroundSyncChanges() backendManager.addListener(::onBackendChanged) updatePushers() } private fun listenForBackgroundSyncChanges() { generalSettingsManager.getSettingsFlow() .map { it.backgroundSync } .distinctUntilChanged() .onEach { launchUpdatePushers() } .launchIn(coroutineScope) } private fun onAccountsChanged() { launchUpdatePushers() } Loading Loading @@ -115,8 +118,10 @@ class PushController internal constructor( private fun updatePushers() { Timber.v("PushController.updatePushers()") val generalSettings = generalSettingsManager.getSettings() val backgroundSyncDisabledViaSystem = autoSyncManager.isAutoSyncDisabled val backgroundSyncDisabledInApp = K9.backgroundOps == K9.BACKGROUND_OPS.NEVER val backgroundSyncDisabledInApp = generalSettings.backgroundSync == BackgroundSync.NEVER val networkNotAvailable = !connectivityManager.isNetworkAvailable() val realPushAccounts = getPushAccounts() Loading
app/core/src/main/java/com/fsck/k9/preferences/GeneralSettings.kt 0 → 100644 +16 −0 Original line number Diff line number Diff line package com.fsck.k9.preferences /** * Stores a snapshot of the app's general settings. * * TODO: Add more settings as needed. */ data class GeneralSettings( val backgroundSync: BackgroundSync ) enum class BackgroundSync { ALWAYS, NEVER, FOLLOW_SYSTEM_AUTO_SYNC }