Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 9cb7ddb1 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #8602 from shamim-emon/fix-issue-8309

Always mark as read when archiving messages
parents 5eb5656e ed727883
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ dependencies {

    implementation(projects.plugins.openpgpApiLib.openpgpApi)
    implementation(projects.feature.telemetry.api)
    implementation(projects.core.featureflags)

    api(libs.androidx.annotation)

+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
@@ -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 ->
@@ -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,
        )
    }

+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
@@ -28,6 +29,7 @@ val controllerModule = module {
            get<SpecialLocalFoldersCreator>(),
            get<LocalDeleteOperationDecider>(),
            get(named("controllerExtensions")),
            get<FeatureFlagProvider>(),
        )
    }

+17 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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) {
@@ -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)) {
@@ -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) {
+7 −2
Original line number Diff line number Diff line
@@ -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;
@@ -111,6 +112,7 @@ public class MessagingControllerTest extends K9RobolectricTest {

    private Preferences preferences;
    private String accountUuid;
    private FeatureFlagProvider featureFlagProvider;


    @Before
@@ -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();