diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9e8773c31..7cf3cbec4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -545,6 +545,9 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin
1st and 2nd Class folders
All except 2nd Class folders
+ Sync remote deletions
+ Remove messages when deleted on server
+
Folder settings
Show in top group
diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml
index ec966ffcb..2a6c57190 100644
--- a/res/xml/account_settings_preferences.xml
+++ b/res/xml/account_settings_preferences.xml
@@ -109,6 +109,12 @@
android:entryValues="@array/account_setup_expunge_policy_values"
android:dialogTitle="@string/account_setup_expunge_policy_label" />
+
+
identities;
@@ -153,6 +154,7 @@ public class Account implements BaseAccount
subscribedFoldersOnly = false;
maximumPolledMessageAge = -1;
mQuotePrefix = DEFAULT_QUOTE_PREFIX;
+ mSyncRemoteDeletions = true;
searchableFolders = Searchable.ALL;
@@ -214,7 +216,8 @@ public class Account implements BaseAccount
mOutboxFolderName = preferences.getPreferences().getString(mUuid + ".outboxFolderName",
"Outbox");
mExpungePolicy = preferences.getPreferences().getString(mUuid + ".expungePolicy", EXPUNGE_IMMEDIATELY);
-
+ mSyncRemoteDeletions = preferences.getPreferences().getBoolean(mUuid + ".syncRemoteDeletions", true);
+
mMaxPushFolders = preferences.getPreferences().getInt(mUuid + ".maxPushFolders", 10);
goToUnreadMessageSearch = preferences.getPreferences().getBoolean(mUuid + ".goToUnreadMessageSearch",
false);
@@ -393,6 +396,7 @@ public class Account implements BaseAccount
editor.remove(mUuid + ".hideButtonsEnum");
editor.remove(mUuid + ".signatureBeforeQuotedText");
editor.remove(mUuid + ".expungePolicy");
+ editor.remove(mUuid + ".syncRemoteDeletions");
editor.remove(mUuid + ".maxPushFolders");
editor.remove(mUuid + ".searchableFolders");
editor.remove(mUuid + ".chipColor");
@@ -481,6 +485,7 @@ public class Account implements BaseAccount
editor.putString(mUuid + ".folderTargetMode", mFolderTargetMode.name());
editor.putBoolean(mUuid + ".signatureBeforeQuotedText", this.mIsSignatureBeforeQuotedText);
editor.putString(mUuid + ".expungePolicy", mExpungePolicy);
+ editor.putBoolean(mUuid + ".syncRemoteDeletions", mSyncRemoteDeletions);
editor.putInt(mUuid + ".maxPushFolders", mMaxPushFolders);
editor.putString(mUuid + ".searchableFolders", searchableFolders.name());
editor.putInt(mUuid + ".chipColor", mChipColor);
@@ -1329,4 +1334,14 @@ public class Account implements BaseAccount
{
mQuotePrefix = quotePrefix;
}
+
+ public boolean syncRemoteDeletions()
+ {
+ return mSyncRemoteDeletions;
+ }
+
+ public void setSyncRemoteDeletions(boolean syncRemoteDeletions)
+ {
+ mSyncRemoteDeletions = syncRemoteDeletions;
+ }
}
diff --git a/src/com/fsck/k9/activity/setup/AccountSettings.java b/src/com/fsck/k9/activity/setup/AccountSettings.java
index 9b032750d..3e50bea5c 100644
--- a/src/com/fsck/k9/activity/setup/AccountSettings.java
+++ b/src/com/fsck/k9/activity/setup/AccountSettings.java
@@ -56,6 +56,7 @@ public class AccountSettings extends K9PreferenceActivity
private static final String PREFERENCE_NOTIFICATION_OPENS_UNREAD = "notification_opens_unread";
private static final String PREFERENCE_MESSAGE_AGE = "account_message_age";
private static final String PREFERENCE_QUOTE_PREFIX = "account_quote_prefix";
+ private static final String PREFERENCE_SYNC_REMOTE_DELETIONS = "account_sync_remote_deletetions";
private Account mAccount;
@@ -86,6 +87,7 @@ public class AccountSettings extends K9PreferenceActivity
private boolean mIncomingChanged = false;
private CheckBoxPreference mNotificationOpensUnread;
private EditTextPreference mAccountQuotePrefix;
+ private CheckBoxPreference mSyncRemoteDeletions;
public static void actionSettings(Context context, Account account)
@@ -258,6 +260,9 @@ public class AccountSettings extends K9PreferenceActivity
return false;
}
});
+
+ mSyncRemoteDeletions = (CheckBoxPreference) findPreference(PREFERENCE_SYNC_REMOTE_DELETIONS);
+ mSyncRemoteDeletions.setChecked(mAccount.syncRemoteDeletions());
mSearchableFolders = (ListPreference) findPreference(PREFERENCE_SEARCHABLE_FOLDERS);
mSearchableFolders.setValue(mAccount.getSearchableFolders().name());
@@ -491,6 +496,7 @@ public class AccountSettings extends K9PreferenceActivity
mAccount.setFolderTargetMode(Account.FolderMode.valueOf(mTargetMode.getValue()));
mAccount.setDeletePolicy(Integer.parseInt(mDeletePolicy.getValue()));
mAccount.setExpungePolicy(mExpungePolicy.getValue());
+ mAccount.setSyncRemoteDeletions(mSyncRemoteDeletions.isChecked());
mAccount.setSearchableFolders(Account.Searchable.valueOf(mSearchableFolders.getValue()));
mAccount.setQuotePrefix(mAccountQuotePrefix.getText());
diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java
index e5eb54326..28645829f 100644
--- a/src/com/fsck/k9/controller/MessagingController.java
+++ b/src/com/fsck/k9/controller/MessagingController.java
@@ -1177,20 +1177,22 @@ public class MessagingController implements Runnable
/*
* Remove any messages that are in the local store but no longer on the remote store or are too old
*/
-
- for (Message localMessage : localMessages)
+ if (account.syncRemoteDeletions())
{
- if (remoteUidMap.get(localMessage.getUid()) == null && !localMessage.isSet(Flag.DELETED))
+ for (Message localMessage : localMessages)
{
- localMessage.setFlag(Flag.X_DESTROYED, true);
-
- for (MessagingListener l : getListeners())
+ if (remoteUidMap.get(localMessage.getUid()) == null && !localMessage.isSet(Flag.DELETED))
{
- l.synchronizeMailboxRemovedMessage(account, folder, localMessage);
- }
- if (listener != null && getListeners().contains(listener) == false)
- {
- listener.synchronizeMailboxRemovedMessage(account, folder, localMessage);
+ localMessage.setFlag(Flag.X_DESTROYED, true);
+
+ for (MessagingListener l : getListeners())
+ {
+ l.synchronizeMailboxRemovedMessage(account, folder, localMessage);
+ }
+ if (listener != null && getListeners().contains(listener) == false)
+ {
+ listener.synchronizeMailboxRemovedMessage(account, folder, localMessage);
+ }
}
}
}
@@ -1892,17 +1894,23 @@ public class MessagingController implements Runnable
}
if (remoteMessage.isSet(Flag.DELETED))
{
- localMessage.setFlag(Flag.DELETED, true);
- messageChanged = true;
- }
- for (Flag flag : new Flag[] { Flag.SEEN, Flag.FLAGGED, Flag.ANSWERED })
- {
- if (remoteMessage.isSet(flag) != localMessage.isSet(flag))
+ if (localMessage.getFolder().getAccount().syncRemoteDeletions())
{
- localMessage.setFlag(flag, remoteMessage.isSet(flag));
+ localMessage.setFlag(Flag.DELETED, true);
messageChanged = true;
}
}
+ else
+ {
+ for (Flag flag : new Flag[] { Flag.SEEN, Flag.FLAGGED, Flag.ANSWERED })
+ {
+ if (remoteMessage.isSet(flag) != localMessage.isSet(flag))
+ {
+ localMessage.setFlag(flag, remoteMessage.isSet(flag));
+ messageChanged = true;
+ }
+ }
+ }
return messageChanged;
}
private String getRootCauseMessage(Throwable t)