diff --git a/app/src/main/java/eu/faircode/email/EntityMessage.java b/app/src/main/java/eu/faircode/email/EntityMessage.java index ea0c69b978..5c8865c98c 100644 --- a/app/src/main/java/eu/faircode/email/EntityMessage.java +++ b/app/src/main/java/eu/faircode/email/EntityMessage.java @@ -208,36 +208,24 @@ public class EntityMessage implements Serializable { return "<" + UUID.randomUUID() + "@" + domain + '>'; } - List
replyOthers(List identities, long account) { - List
others = new ArrayList<>(); + boolean replySelf(List identities, long account) { Address[] senders = (reply == null || reply.length == 0 ? from : reply); if (identities != null && senders != null) - for (Address sender : senders) { - boolean self = false; + for (Address sender : senders) for (TupleIdentityEx identity : identities) if (identity.account == account && identity.self && - identity.similarAddress(sender)) { - self = true; - break; - } - if (!self) - others.add(sender); - } + identity.similarAddress(sender)) + return true; - return others; + return false; } Address[] getAllRecipients(List identities, long account) { List
addresses = new ArrayList<>(); - List
others = replyOthers(identities, account); - if (others.size() > 0) - addresses.addAll(others); - else { - if (to != null) - addresses.addAll(Arrays.asList(to)); - } + if (to != null && !replySelf(identities, account)) + 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 2d7bd2af9a..117f30dcc1 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -3151,11 +3151,8 @@ public class FragmentCompose extends FragmentBase { break; } - 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])); - } + Address[] refto = (ref == null ? null + : ref.replySelf(data.identities, ref.account) ? ref.from : ref.to); if (refto != null && refto.length > 0) { if (selected == null) for (Address sender : refto) @@ -3319,13 +3316,20 @@ public class FragmentCompose extends FragmentBase { data.draft.to = ref.receipt_to; else { // Prevent replying to self - List
others = ref.replyOthers(data.identities, ref.account); - if (others.size() == 0) { + if (ref.replySelf(data.identities, ref.account)) { data.draft.from = ref.from; - data.draft.to = ref.to; + 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])); } else { data.draft.from = ref.to; - data.draft.to = others.toArray(new Address[0]); + data.draft.to = (ref.reply == null || ref.reply.length == 0 ? ref.from : ref.reply); } 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 bd28b1765b..a00270990e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -2193,8 +2193,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (data.identities == null) data.identities = new ArrayList<>(); - List
others = message.replyOthers(data.identities, message.account); - final Address[] to = (others.size() == 0 ? message.to : others.toArray(new Address[0])); + final Address[] to = + message.replySelf(data.identities, message.account) + ? message.to + : (message.reply == null || message.reply.length == 0 ? message.from : message.reply); Address[] recipients = message.getAllRecipients(data.identities, message.account);