Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.thunderbird.feature.mail.message.list

import net.thunderbird.core.android.account.LegacyAccountDto

/**
* Decides whether deleting a message in the app moves it to the trash folder or deletes it immediately.
*
* Note: This only applies to local messages. What remote operation is performed when deleting a message is controlled
* by [LegacyAccountDto.deletePolicy].
*/
interface LocalDeleteOperationDecider {
/**
* Returns `true` if messages in the given folder should be deleted immediately
* rather than moved to the trash folder.
*
* @param account The account the message belongs to.
* @param folderId The ID of the folder the message is being deleted from.
*/
fun isDeleteImmediately(account: LegacyAccountDto, folderId: Long): Boolean
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.fsck.k9.controller
package net.thunderbird.feature.mail.message.list.internal

import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider

/**
* Decides whether deleting a message in the app moves it to the trash folder or deletes it immediately.
*
* Note: This only applies to local messages. What remote operation is performed when deleting a message is controlled
* by [LegacyAccountDto.deletePolicy].
*/
internal class LocalDeleteOperationDecider {
fun isDeleteImmediately(account: LegacyAccountDto, folderId: Long): Boolean {
class DefaultLocalDeleteOperationDecider : LocalDeleteOperationDecider {
override fun isDeleteImmediately(
account: LegacyAccountDto,
folderId: Long,
): Boolean {
// If there's no trash folder configured, all messages are deleted immediately.
if (!account.hasTrashFolder()) {
return true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package net.thunderbird.feature.mail.message.list.internal

import net.thunderbird.core.common.inject.factoryListOf
import net.thunderbird.core.common.inject.getList
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider
import net.thunderbird.feature.mail.message.list.domain.DomainContract
import net.thunderbird.feature.mail.message.list.internal.domain.usecase.BuildSwipeActions
import net.thunderbird.feature.mail.message.list.internal.domain.usecase.CreateArchiveFolder
Expand Down Expand Up @@ -117,4 +118,5 @@ val featureMessageListModule = module {
stateSideEffectHandlersFactories = getList { parameters },
)
}
single<LocalDeleteOperationDecider> { DefaultLocalDeleteOperationDecider() }
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.fsck.k9.controller
package net.thunderbird.feature.mail.message.list.internal

import assertk.assertThat
import assertk.assertions.isFalse
Expand All @@ -8,7 +8,7 @@ import kotlin.test.Test
import net.thunderbird.core.android.account.LegacyAccountDto

class LocalDeleteOperationDeciderTest {
private val localDeleteOperationDecider = LocalDeleteOperationDecider()
private val localDeleteOperationDecider = DefaultLocalDeleteOperationDecider()
private val account = LegacyAccountDto(UUID.randomUUID().toString()).apply {
spamFolderId = SPAM_FOLDER_ID
trashFolderId = TRASH_FOLDER_ID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.fsck.k9.notification.NotificationStrategy
import net.thunderbird.core.featureflag.FeatureFlagProvider
import net.thunderbird.core.logging.Logger
import net.thunderbird.feature.mail.folder.api.OutboxFolderManager
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider
import net.thunderbird.feature.notification.api.NotificationManager
import org.koin.core.qualifier.named
import org.koin.dsl.binds
Expand Down Expand Up @@ -57,6 +58,4 @@ val controllerModule = module {
outboxFolderManager = get(),
)
}

single { LocalDeleteOperationDecider() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
import net.thunderbird.core.featureflag.compat.FeatureFlagProviderCompat;
import net.thunderbird.core.logging.Logger;
import net.thunderbird.core.logging.legacy.Log;
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider;
import net.thunderbird.feature.mail.folder.api.OutboxFolderManager;
import net.thunderbird.feature.mail.folder.api.OutboxFolderManagerKt;
import net.thunderbird.feature.notification.api.NotificationManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@
import net.thunderbird.core.common.mail.Protocols;
import net.thunderbird.core.logging.Logger;
import net.thunderbird.core.outcome.Outcome;
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider;
import net.thunderbird.feature.mail.folder.api.OutboxFolderManager;
import net.thunderbird.feature.notification.api.NotificationManager;
import net.thunderbird.feature.notification.testing.fake.FakeInAppOnlyNotification;
import net.thunderbird.feature.notification.testing.fake.FakeNotificationManager;
import net.thunderbird.legacy.core.StubLocalDeleteOperationDecider;
import net.thunderbird.legacy.core.mailstore.folder.FakeOutboxFolderManager;
import org.junit.After;
import org.junit.Before;
Expand Down Expand Up @@ -131,6 +133,7 @@ public void setUp() throws MessagingException {
appContext = RuntimeEnvironment.getApplication();

preferences = Preferences.getPreferences();
final LocalDeleteOperationDecider noOpLocalDeleteOperationDecider = new StubLocalDeleteOperationDecider();
featureFlagProvider = key -> Disabled.INSTANCE;

final NotificationManager notificationManager = new FakeNotificationManager(
Expand All @@ -151,7 +154,7 @@ public void setUp() throws MessagingException {
messageStoreManager,
saveMessageDataCreator,
specialLocalFoldersCreator,
new LocalDeleteOperationDecider(),
noOpLocalDeleteOperationDecider,
Collections.<ControllerExtension>emptyList(),
featureFlagProvider,
syncLogger,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.thunderbird.legacy.core

import net.thunderbird.core.android.account.LegacyAccountDto
import net.thunderbird.feature.mail.message.list.LocalDeleteOperationDecider

/**
* A [LocalDeleteOperationDecider] that always returns false.
*/
class StubLocalDeleteOperationDecider : LocalDeleteOperationDecider {
override fun isDeleteImmediately(
account: LegacyAccountDto,
folderId: Long,
): Boolean = false
}
Loading