From 98a058775bab5b336ea220fa2c946a915bb35cab Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 21 Jul 2020 22:31:37 +0200 Subject: [PATCH] Fixed reply to self --- .../java/eu/faircode/email/EntityMessage.java | 26 ++++++++++++++----- .../eu/faircode/email/FragmentCompose.java | 22 +++++++--------- .../eu/faircode/email/FragmentMessages.java | 6 ++--- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityMessage.java b/app/src/main/java/eu/faircode/email/EntityMessage.java index 5c8865c98c..ea0c69b978 100644 --- a/app/src/main/java/eu/faircode/email/EntityMessage.java +++ b/app/src/main/java/eu/faircode/email/EntityMessage.java @@ -208,24 +208,36 @@ public class EntityMessage implements Serializable { return "<" + UUID.randomUUID() + "@" + domain + '>'; } - boolean replySelf(List identities, long account) { + List
replyOthers(List identities, long account) { + List
others = new ArrayList<>(); Address[] senders = (reply == null || reply.length == 0 ? from : reply); if (identities != null && senders != null) - for (Address sender : senders) + for (Address sender : senders) { + boolean self = false; for (TupleIdentityEx identity : identities) if (identity.account == account && identity.self && - identity.similarAddress(sender)) - return true; + identity.similarAddress(sender)) { + self = true; + break; + } + if (!self) + others.add(sender); + } - return false; + return others; } Address[] getAllRecipients(List identities, long account) { List
addresses = new ArrayList<>(); - if (to != null && !replySelf(identities, account)) - addresses.addAll(Arrays.asList(to)); + List
others = replyOthers(identities, account); + if (others.size() > 0) + addresses.addAll(others); + else { + if (to != null) + addresses.addAll(Arrays.asList(to)); + } if (cc != null) addresses.addAll(Arrays.asList(cc)); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 117f30dcc1..2d7bd2af9a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -3151,8 +3151,11 @@ public class FragmentCompose extends FragmentBase { break; } - Address[] refto = (ref == null ? null - : ref.replySelf(data.identities, ref.account) ? ref.from : ref.to); + Address[] refto = null; + if (ref != null) { + List
others = ref.replyOthers(data.identities, ref.account); + refto = (others.size() == 0 ? ref.to : others.toArray(new Address[0])); + } if (refto != null && refto.length > 0) { if (selected == null) for (Address sender : refto) @@ -3316,20 +3319,13 @@ public class FragmentCompose extends FragmentBase { data.draft.to = ref.receipt_to; else { // Prevent replying to self - if (ref.replySelf(data.identities, ref.account)) { + List
others = ref.replyOthers(data.identities, ref.account); + if (others.size() == 0) { data.draft.from = ref.from; - List
tos = new ArrayList<>(); - if (ref.to != null) - for (Address to : ref.to) - for (EntityIdentity identity : data.identities) - if (!Objects.equals(identity.account, ref.account) || - !identity.self || - !identity.similarAddress(to)) - tos.add(to); - data.draft.to = (tos.size() == 0 ? null : tos.toArray(new Address[0])); + data.draft.to = ref.to; } else { data.draft.from = ref.to; - data.draft.to = (ref.reply == null || ref.reply.length == 0 ? ref.from : ref.reply); + data.draft.to = others.toArray(new Address[0]); } if (data.draft.from != null && data.draft.from.length > 0) { diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index a00270990e..bd28b1765b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -2193,10 +2193,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (data.identities == null) data.identities = new ArrayList<>(); - final Address[] to = - message.replySelf(data.identities, message.account) - ? message.to - : (message.reply == null || message.reply.length == 0 ? message.from : message.reply); + List
others = message.replyOthers(data.identities, message.account); + final Address[] to = (others.size() == 0 ? message.to : others.toArray(new Address[0])); Address[] recipients = message.getAllRecipients(data.identities, message.account);