diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java
index 50aafaef3c..71e7494624 100644
--- a/app/src/main/java/eu/faircode/email/Core.java
+++ b/app/src/main/java/eu/faircode/email/Core.java
@@ -564,7 +564,7 @@ class Core {
if (!ifolder.getPermanentFlags().contains(Flags.Flag.FLAGGED)) {
db.message().setMessageFlagged(message.id, false);
- db.message().setMessageUiFlagged(message.id, false);
+ db.message().setMessageUiFlagged(message.id, false, null);
return;
}
@@ -760,6 +760,8 @@ class Core {
// Get arguments
long id = jargs.getLong(0);
boolean autoread = jargs.optBoolean(1, false);
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ boolean autounflag = prefs.getBoolean("autounflag", false);
Flags flags = ifolder.getPermanentFlags();
// Get target folder
@@ -806,6 +808,11 @@ class Core {
if (autoread && flags.contains(Flags.Flag.SEEN))
icopy.setFlag(Flags.Flag.SEEN, true);
+ // Auto unflag
+ if (autounflag && flags.contains(Flags.Flag.FLAGGED))
+ icopy.setFlag(Flags.Flag.FLAGGED, false);
+
+ // Answered fix
if (message.ui_answered && flags.contains(Flags.Flag.ANSWERED))
icopy.setFlag(Flags.Flag.ANSWERED, true);
@@ -824,6 +831,11 @@ class Core {
if (autoread && flags.contains(Flags.Flag.SEEN))
imessage.setFlag(Flags.Flag.SEEN, true);
+ // Auto unflag
+ if (autounflag && flags.contains(Flags.Flag.FLAGGED))
+ imessage.setFlag(Flags.Flag.FLAGGED, false);
+
+ // Answered fix
if (message.ui_answered && flags.contains(Flags.Flag.ANSWERED))
imessage.setFlag(Flags.Flag.ANSWERED, true);
}
@@ -2182,6 +2194,8 @@ class Core {
update = true;
message.flagged = flagged;
message.ui_flagged = flagged;
+ if (!flagged)
+ message.color = null;
Log.i(folder.name + " updated id=" + message.id + " uid=" + message.uid + " flagged=" + flagged);
}
diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java
index ad7c95582a..08d178bebc 100644
--- a/app/src/main/java/eu/faircode/email/DaoMessage.java
+++ b/app/src/main/java/eu/faircode/email/DaoMessage.java
@@ -380,8 +380,8 @@ public interface DaoMessage {
@Query("UPDATE message SET ui_seen = :ui_seen WHERE id = :id")
int setMessageUiSeen(long id, boolean ui_seen);
- @Query("UPDATE message SET ui_flagged = :ui_flagged WHERE id = :id")
- int setMessageUiFlagged(long id, boolean ui_flagged);
+ @Query("UPDATE message SET ui_flagged = :ui_flagged, color = :color WHERE id = :id")
+ int setMessageUiFlagged(long id, boolean ui_flagged, Integer color);
@Query("UPDATE message SET ui_answered = :ui_answered WHERE id = :id")
int setMessageUiAnswered(long id, boolean ui_answered);
@@ -392,9 +392,6 @@ public interface DaoMessage {
@Query("UPDATE message SET ui_ignored = :ui_ignored WHERE id = :id")
int setMessageUiIgnored(long id, boolean ui_ignored);
- @Query("UPDATE message SET color = :color WHERE id = :id")
- int setMessageColor(long id, Integer color);
-
@Query("UPDATE message SET received = :sent, sent = :sent WHERE id = :id")
int setMessageSent(long id, Long sent);
diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java
index dce5ef0e3f..ae12d60ac5 100644
--- a/app/src/main/java/eu/faircode/email/EntityOperation.java
+++ b/app/src/main/java/eu/faircode/email/EntityOperation.java
@@ -130,10 +130,8 @@ public class EntityOperation {
} else if (FLAG.equals(name)) {
boolean flagged = jargs.getBoolean(0);
Integer color = (jargs.length() > 1 && !jargs.isNull(1) ? jargs.getInt(1) : null);
- for (EntityMessage similar : db.message().getMessageByMsgId(message.account, message.msgid)) {
- db.message().setMessageUiFlagged(similar.id, flagged);
- db.message().setMessageColor(similar.id, flagged ? color : null);
- }
+ for (EntityMessage similar : db.message().getMessageByMsgId(message.account, message.msgid))
+ db.message().setMessageUiFlagged(similar.id, flagged, flagged ? color : null);
} else if (ANSWERED.equals(name))
for (EntityMessage similar : db.message().getMessageByMsgId(message.account, message.msgid))
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
index f3b26f0ace..09ab9237f3 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
@@ -51,13 +51,14 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
private Spinner spOnClose;
private SwitchCompat swCollapse;
private SwitchCompat swAutoRead;
+ private SwitchCompat swAutoUnflag;
private SwitchCompat swAutoMove;
private SwitchCompat swDiscardDelete;
private SwitchCompat swDisableTracking;
private final static String[] RESET_OPTIONS = new String[]{
"pull", "autoscroll", "swipenav", "reversed", "doubletap", "autoexpand", "expand_one", "autoclose", "onclose",
- "collapse", "autoread", "automove", "discard_delete", "disable_tracking"
+ "collapse", "autoread", "autounflag", "automove", "discard_delete", "disable_tracking"
};
@Override
@@ -81,6 +82,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
spOnClose = view.findViewById(R.id.spOnClose);
swCollapse = view.findViewById(R.id.swCollapse);
swAutoRead = view.findViewById(R.id.swAutoRead);
+ swAutoUnflag = view.findViewById(R.id.swAutoUnflag);
swAutoMove = view.findViewById(R.id.swAutoMove);
swDiscardDelete = view.findViewById(R.id.swDiscardDelete);
swDisableTracking = view.findViewById(R.id.swDisableTracking);
@@ -179,6 +181,13 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
}
});
+ swAutoUnflag.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("autounflag", checked).apply();
+ }
+ });
+
swAutoMove.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -267,6 +276,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
swCollapse.setChecked(prefs.getBoolean("collapse", false));
swAutoRead.setChecked(prefs.getBoolean("autoread", false));
+ swAutoUnflag.setChecked(prefs.getBoolean("autounflag", false));
swAutoMove.setChecked(!prefs.getBoolean("automove", false));
swDiscardDelete.setChecked(prefs.getBoolean("discard_delete", false));
swDisableTracking.setChecked(prefs.getBoolean("disable_tracking", true));
diff --git a/app/src/main/res/layout/fragment_options_behavior.xml b/app/src/main/res/layout/fragment_options_behavior.xml
index a30e9c2317..8302232716 100644
--- a/app/src/main/res/layout/fragment_options_behavior.xml
+++ b/app/src/main/res/layout/fragment_options_behavior.xml
@@ -184,6 +184,17 @@
app:layout_constraintTop_toBottomOf="@id/spOnClose"
app:switchPadding="12dp" />
+
+
Automatically close conversations
On closing a conversation
Automatically mark messages read on moving messages
+ Automatically remove star from messages on moving messages
Confirm moving messages
On discard draft permanently delete draft
Automatically recognize and disable tracking images