Loading legacy/core/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ dependencies { implementation(projects.plugins.openpgpApiLib.openpgpApi) implementation(projects.feature.telemetry.api) implementation(projects.core.featureflags) api(libs.androidx.annotation) Loading legacy/core/src/main/java/com/fsck/k9/controller/ArchiveOperations.kt +10 −1 Original line number Diff line number Diff line package com.fsck.k9.controller import app.k9mail.core.featureflag.FeatureFlagProvider import app.k9mail.core.featureflag.FeatureFlagResult import app.k9mail.core.featureflag.toFeatureFlagKey import app.k9mail.legacy.account.Account import app.k9mail.legacy.message.controller.MessageReference import com.fsck.k9.controller.MessagingController.MessageActor Loading @@ -10,6 +13,7 @@ import timber.log.Timber internal class ArchiveOperations( private val messagingController: MessagingController, private val featureFlagProvider: FeatureFlagProvider, ) { fun archiveThreads(messages: List<MessageReference>) { archiveByFolder("archiveThreads", messages) { account, folderId, messagesInFolder, archiveFolderId -> Loading Loading @@ -69,12 +73,17 @@ internal class ArchiveOperations( messages: List<LocalMessage>, archiveFolderId: Long, ) { val operation = when (featureFlagProvider.provide("archive_marks_as_read".toFeatureFlagKey())) { FeatureFlagResult.Enabled -> MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ FeatureFlagResult.Disabled -> MoveOrCopyFlavor.MOVE FeatureFlagResult.Unavailable -> MoveOrCopyFlavor.MOVE } messagingController.moveOrCopyMessageSynchronous( account, sourceFolderId, messages, archiveFolderId, MoveOrCopyFlavor.MOVE, operation, ) } Loading legacy/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +2 −0 Original line number Diff line number Diff line package com.fsck.k9.controller import android.content.Context import app.k9mail.core.featureflag.FeatureFlagProvider import app.k9mail.legacy.mailstore.MessageStoreManager import app.k9mail.legacy.message.controller.MessageCountsProvider import app.k9mail.legacy.message.controller.MessagingControllerRegistry Loading Loading @@ -28,6 +29,7 @@ val controllerModule = module { get<SpecialLocalFoldersCreator>(), get<LocalDeleteOperationDecider>(), get(named("controllerExtensions")), get<FeatureFlagProvider>(), ) } Loading legacy/core/src/main/java/com/fsck/k9/controller/MessagingController.java +17 −11 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.os.SystemClock; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import app.k9mail.core.featureflag.FeatureFlagProvider; import app.k9mail.legacy.account.Account; import app.k9mail.legacy.account.Account.DeletePolicy; import app.k9mail.legacy.di.DI; Loading Loading @@ -145,7 +146,9 @@ public class MessagingController implements MessagingControllerRegistry, Messagi NotificationStrategy notificationStrategy, LocalStoreProvider localStoreProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, SaveMessageDataCreator saveMessageDataCreator, SpecialLocalFoldersCreator specialLocalFoldersCreator, LocalDeleteOperationDecider localDeleteOperationDecider, List<ControllerExtension> controllerExtensions) { LocalDeleteOperationDecider localDeleteOperationDecider, List<ControllerExtension> controllerExtensions, FeatureFlagProvider featureFlagProvider ) { this.context = context; this.notificationController = notificationController; this.notificationStrategy = notificationStrategy; Loading @@ -171,7 +174,7 @@ public class MessagingController implements MessagingControllerRegistry, Messagi draftOperations = new DraftOperations(this, messageStoreManager, saveMessageDataCreator); notificationOperations = new NotificationOperations(notificationController, preferences, messageStoreManager); archiveOperations = new ArchiveOperations(this); archiveOperations = new ArchiveOperations(this, featureFlagProvider); } private void initializeControllerExtensions(List<ControllerExtension> controllerExtensions) { Loading Loading @@ -1754,10 +1757,6 @@ public class MessagingController implements MessagingControllerRegistry, Messagi void moveOrCopyMessageSynchronous(Account account, long srcFolderId, List<LocalMessage> inMessages, long destFolderId, MoveOrCopyFlavor operation) { if (operation == MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ) { throw new UnsupportedOperationException("MOVE_AND_MARK_AS_READ unsupported"); } try { LocalStore localStore = localStoreProvider.getInstance(account); if (operation == MoveOrCopyFlavor.MOVE && !isMoveCapable(account)) { Loading @@ -1781,10 +1780,17 @@ public class MessagingController implements MessagingControllerRegistry, Messagi uids.add(uid); } if (operation == MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ) { if (!message.isSet(Flag.SEEN)) { unreadCountAffected = true; message.setFlag(Flag.SEEN, true); } } else { if (!unreadCountAffected && !message.isSet(Flag.SEEN)) { unreadCountAffected = true; } } } List<LocalMessage> messages = localSrcFolder.getMessagesByUids(uids); if (messages.size() > 0) { Loading legacy/core/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ import java.util.List; import java.util.Set; import android.content.Context; import app.k9mail.core.featureflag.FeatureFlagProvider; import app.k9mail.core.featureflag.FeatureFlagResult.Disabled; import app.k9mail.legacy.account.Account; import app.k9mail.legacy.message.controller.SimpleMessagingListener; import com.fsck.k9.K9; Loading Loading @@ -111,6 +112,7 @@ public class MessagingControllerTest extends K9RobolectricTest { private Preferences preferences; private String accountUuid; private FeatureFlagProvider featureFlagProvider; @Before Loading @@ -120,11 +122,14 @@ public class MessagingControllerTest extends K9RobolectricTest { appContext = RuntimeEnvironment.getApplication(); preferences = Preferences.getPreferences(); featureFlagProvider = key -> Disabled.INSTANCE; controller = new MessagingController(appContext, notificationController, notificationStrategy, localStoreProvider, backendManager, preferences, messageStoreManager, saveMessageDataCreator, specialLocalFoldersCreator, new LocalDeleteOperationDecider(), Collections.<ControllerExtension>emptyList()); Collections.<ControllerExtension>emptyList(), featureFlagProvider ); configureAccount(); configureBackendManager(); Loading Loading
legacy/core/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ dependencies { implementation(projects.plugins.openpgpApiLib.openpgpApi) implementation(projects.feature.telemetry.api) implementation(projects.core.featureflags) api(libs.androidx.annotation) Loading
legacy/core/src/main/java/com/fsck/k9/controller/ArchiveOperations.kt +10 −1 Original line number Diff line number Diff line package com.fsck.k9.controller import app.k9mail.core.featureflag.FeatureFlagProvider import app.k9mail.core.featureflag.FeatureFlagResult import app.k9mail.core.featureflag.toFeatureFlagKey import app.k9mail.legacy.account.Account import app.k9mail.legacy.message.controller.MessageReference import com.fsck.k9.controller.MessagingController.MessageActor Loading @@ -10,6 +13,7 @@ import timber.log.Timber internal class ArchiveOperations( private val messagingController: MessagingController, private val featureFlagProvider: FeatureFlagProvider, ) { fun archiveThreads(messages: List<MessageReference>) { archiveByFolder("archiveThreads", messages) { account, folderId, messagesInFolder, archiveFolderId -> Loading Loading @@ -69,12 +73,17 @@ internal class ArchiveOperations( messages: List<LocalMessage>, archiveFolderId: Long, ) { val operation = when (featureFlagProvider.provide("archive_marks_as_read".toFeatureFlagKey())) { FeatureFlagResult.Enabled -> MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ FeatureFlagResult.Disabled -> MoveOrCopyFlavor.MOVE FeatureFlagResult.Unavailable -> MoveOrCopyFlavor.MOVE } messagingController.moveOrCopyMessageSynchronous( account, sourceFolderId, messages, archiveFolderId, MoveOrCopyFlavor.MOVE, operation, ) } Loading
legacy/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +2 −0 Original line number Diff line number Diff line package com.fsck.k9.controller import android.content.Context import app.k9mail.core.featureflag.FeatureFlagProvider import app.k9mail.legacy.mailstore.MessageStoreManager import app.k9mail.legacy.message.controller.MessageCountsProvider import app.k9mail.legacy.message.controller.MessagingControllerRegistry Loading Loading @@ -28,6 +29,7 @@ val controllerModule = module { get<SpecialLocalFoldersCreator>(), get<LocalDeleteOperationDecider>(), get(named("controllerExtensions")), get<FeatureFlagProvider>(), ) } Loading
legacy/core/src/main/java/com/fsck/k9/controller/MessagingController.java +17 −11 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.os.SystemClock; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import app.k9mail.core.featureflag.FeatureFlagProvider; import app.k9mail.legacy.account.Account; import app.k9mail.legacy.account.Account.DeletePolicy; import app.k9mail.legacy.di.DI; Loading Loading @@ -145,7 +146,9 @@ public class MessagingController implements MessagingControllerRegistry, Messagi NotificationStrategy notificationStrategy, LocalStoreProvider localStoreProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, SaveMessageDataCreator saveMessageDataCreator, SpecialLocalFoldersCreator specialLocalFoldersCreator, LocalDeleteOperationDecider localDeleteOperationDecider, List<ControllerExtension> controllerExtensions) { LocalDeleteOperationDecider localDeleteOperationDecider, List<ControllerExtension> controllerExtensions, FeatureFlagProvider featureFlagProvider ) { this.context = context; this.notificationController = notificationController; this.notificationStrategy = notificationStrategy; Loading @@ -171,7 +174,7 @@ public class MessagingController implements MessagingControllerRegistry, Messagi draftOperations = new DraftOperations(this, messageStoreManager, saveMessageDataCreator); notificationOperations = new NotificationOperations(notificationController, preferences, messageStoreManager); archiveOperations = new ArchiveOperations(this); archiveOperations = new ArchiveOperations(this, featureFlagProvider); } private void initializeControllerExtensions(List<ControllerExtension> controllerExtensions) { Loading Loading @@ -1754,10 +1757,6 @@ public class MessagingController implements MessagingControllerRegistry, Messagi void moveOrCopyMessageSynchronous(Account account, long srcFolderId, List<LocalMessage> inMessages, long destFolderId, MoveOrCopyFlavor operation) { if (operation == MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ) { throw new UnsupportedOperationException("MOVE_AND_MARK_AS_READ unsupported"); } try { LocalStore localStore = localStoreProvider.getInstance(account); if (operation == MoveOrCopyFlavor.MOVE && !isMoveCapable(account)) { Loading @@ -1781,10 +1780,17 @@ public class MessagingController implements MessagingControllerRegistry, Messagi uids.add(uid); } if (operation == MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ) { if (!message.isSet(Flag.SEEN)) { unreadCountAffected = true; message.setFlag(Flag.SEEN, true); } } else { if (!unreadCountAffected && !message.isSet(Flag.SEEN)) { unreadCountAffected = true; } } } List<LocalMessage> messages = localSrcFolder.getMessagesByUids(uids); if (messages.size() > 0) { Loading
legacy/core/src/test/java/com/fsck/k9/controller/MessagingControllerTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ import java.util.List; import java.util.Set; import android.content.Context; import app.k9mail.core.featureflag.FeatureFlagProvider; import app.k9mail.core.featureflag.FeatureFlagResult.Disabled; import app.k9mail.legacy.account.Account; import app.k9mail.legacy.message.controller.SimpleMessagingListener; import com.fsck.k9.K9; Loading Loading @@ -111,6 +112,7 @@ public class MessagingControllerTest extends K9RobolectricTest { private Preferences preferences; private String accountUuid; private FeatureFlagProvider featureFlagProvider; @Before Loading @@ -120,11 +122,14 @@ public class MessagingControllerTest extends K9RobolectricTest { appContext = RuntimeEnvironment.getApplication(); preferences = Preferences.getPreferences(); featureFlagProvider = key -> Disabled.INSTANCE; controller = new MessagingController(appContext, notificationController, notificationStrategy, localStoreProvider, backendManager, preferences, messageStoreManager, saveMessageDataCreator, specialLocalFoldersCreator, new LocalDeleteOperationDecider(), Collections.<ControllerExtension>emptyList()); Collections.<ControllerExtension>emptyList(), featureFlagProvider ); configureAccount(); configureBackendManager(); Loading