diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index c2b29af889..a1ed2cc67e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -3178,9 +3178,9 @@ public class FragmentCompose extends FragmentBase { File file = data.draft.getFile(context); Document doc = JsoupEx.parse(Helper.readText(file)); + doc.select("div[fairemail=signature]").remove(); Elements ref = doc.select("div[fairemail=reference]"); ref.remove(); - doc.select("div[fairemail=signature]").remove(); File refFile = data.draft.getRefFile(context); if (refFile.exists()) { @@ -3190,13 +3190,19 @@ public class FragmentCompose extends FragmentBase { Document document = HtmlHelper.sanitize(context, doc.html(), true, false); + EntityIdentity identity = null; + if (data.draft.identity != null) + identity = db.identity().getIdentity(data.draft.identity); + boolean signature_end = prefs.getBoolean("signature_end", false); + + if (!signature_end && identity != null) + addSignature(context, document, data.draft, identity); + for (Element e : ref) document.body().appendChild(e); - if (data.draft.identity != null) { - EntityIdentity identity = db.identity().getIdentity(data.draft.identity); + if (signature_end && identity != null) addSignature(context, document, data.draft, identity); - } String html = JsoupEx.parse(document.html()).html(); Helper.writeText(file, html); @@ -3579,26 +3585,41 @@ public class FragmentCompose extends FragmentBase { (extras != null && extras.containsKey("html"))) { dirty = true; + doc.select("div[fairemail=signature]").remove(); Elements ref = doc.select("div[fairemail=reference]"); ref.remove(); - doc.select("div[fairemail=signature]").remove(); + + boolean signature_end = prefs.getBoolean("signature_end", false); // Get saved body Document d; if (extras != null && extras.containsKey("html")) { // Save current revision Document c = JsoupEx.parse(body); + + if (!signature_end) + addSignature(context, c, draft, identity); + for (Element e : ref) c.body().appendChild(e); - addSignature(context, c, draft, identity); + + if (signature_end) + addSignature(context, c, draft, identity); + Helper.writeText(draft.getFile(context, draft.revision), c.html()); d = JsoupEx.parse(extras.getString("html")); } else { d = JsoupEx.parse(body); + + if (!signature_end) + addSignature(context, d, draft, identity); + for (Element e : ref) d.body().appendChild(e); - addSignature(context, d, draft, identity); + + if (signature_end) + addSignature(context, d, draft, identity); } body = d.html(); @@ -3679,8 +3700,8 @@ public class FragmentCompose extends FragmentBase { for (String text : Helper.getStrings(context, R.string.title_attachment_keywords)) keywords.addAll(Arrays.asList(text.split(","))); - d.select("div[fairemail=reference]").remove(); d.select("div[fairemail=signature]").remove(); + d.select("div[fairemail=reference]").remove(); String text = d.text(); for (String keyword : keywords) @@ -3955,9 +3976,9 @@ public class FragmentCompose extends FragmentBase { throw new IllegalArgumentException(context.getString(R.string.title_no_body)); Document doc = JsoupEx.parse(Helper.readText(draft.getFile(context))); + doc.select("div[fairemail=signature]").remove(); Elements ref = doc.select("div[fairemail=reference]"); ref.remove(); - doc.select("div[fairemail=signature]").remove(); Spanned spannedBody = HtmlHelper.fromHtml(doc.html(), new Html.ImageGetter() { @Override diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java index 65dfbd7ea2..8e4eaaaaa9 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java @@ -50,6 +50,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc private SwitchCompat swPrefixOnce; private SwitchCompat swExtendedReply; private SwitchCompat swQuoteReply; + private SwitchCompat swSignatureEnd; private SwitchCompat swPlainOnly; private SwitchCompat swUsenetSignature; private SwitchCompat swResizeImages; @@ -63,7 +64,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc private final static String[] RESET_OPTIONS = new String[]{ "keyboard", "suggest_sent", "suggested_received", - "prefix_once", "extended_reply", "quote_reply", + "prefix_once", "extended_reply", "quote_reply", "signature_end", "plain_only", "usenet_signature", "resize_images", "resize_attachments", "send_reminders", "receipt_default", "resize", "lookup_mx", "send_delayed" }; @@ -85,6 +86,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc swPrefixOnce = view.findViewById(R.id.swPrefixOnce); swExtendedReply = view.findViewById(R.id.swExtendedReply); swQuoteReply = view.findViewById(R.id.swQuoteReply); + swSignatureEnd = view.findViewById(R.id.swSignatureEnd); swPlainOnly = view.findViewById(R.id.swPlainOnly); swUsenetSignature = view.findViewById(R.id.swUsenetSignature); swResizeImages = view.findViewById(R.id.swResizeImages); @@ -152,6 +154,13 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc } }); + swSignatureEnd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("signature_end", checked).apply(); + } + }); + swPlainOnly.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -282,6 +291,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc swPrefixOnce.setChecked(prefs.getBoolean("prefix_once", true)); swExtendedReply.setChecked(prefs.getBoolean("extended_reply", false)); swQuoteReply.setChecked(prefs.getBoolean("quote_reply", true)); + swSignatureEnd.setChecked(prefs.getBoolean("signature_end", false)); swPlainOnly.setChecked(prefs.getBoolean("plain_only", false)); swUsenetSignature.setChecked(prefs.getBoolean("usenet_signature", false)); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 243368bb99..db1e0ba8dd 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -484,7 +484,7 @@ public class MessageHelper { // When sending message if (identity != null) - document.select("div[fairemail=reference],div[fairemail=signature]").removeAttr("fairemail"); + document.select("div[fairemail=signature],div[fairemail=reference]").removeAttr("fairemail"); // multipart/mixed // multipart/related diff --git a/app/src/main/res/layout/fragment_options_send.xml b/app/src/main/res/layout/fragment_options_send.xml index c201e238a4..01ef03974b 100644 --- a/app/src/main/res/layout/fragment_options_send.xml +++ b/app/src/main/res/layout/fragment_options_send.xml @@ -119,6 +119,17 @@ app:layout_constraintTop_toBottomOf="@id/swExtendedReply" app:switchPadding="12dp" /> + + Prefix subject only once on replying or forwarding Use extended reply/forward header Quote replied text + Add signature after quoted/forwarded message Send plain text only by default Usenet signature convention Automatically resize embedded images