From 2d6e35a028f517a67bff2460d2f9f0af4777b461 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 28 Sep 2019 20:25:19 +0200 Subject: [PATCH] Added option to auto unflag on move --- app/src/main/java/eu/faircode/email/Core.java | 16 +++++++++++++++- .../main/java/eu/faircode/email/DaoMessage.java | 7 ++----- .../java/eu/faircode/email/EntityOperation.java | 6 ++---- .../faircode/email/FragmentOptionsBehavior.java | 12 +++++++++++- .../res/layout/fragment_options_behavior.xml | 13 ++++++++++++- app/src/main/res/values/strings.xml | 1 + 6 files changed, 43 insertions(+), 12 deletions(-) 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