From f277f5abebc3e9521d1d2fd5394c684f13afdc90 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 13 Feb 2022 11:36:38 +0100 Subject: [PATCH] Plain text only with alt content --- .../eu/faircode/email/AdapterMessage.java | 12 +++---- app/src/main/java/eu/faircode/email/Core.java | 8 +++-- .../java/eu/faircode/email/DaoMessage.java | 4 +-- .../java/eu/faircode/email/EntityMessage.java | 10 +++++- .../java/eu/faircode/email/EntityRule.java | 2 +- .../eu/faircode/email/FragmentCompose.java | 20 ++++++------ .../eu/faircode/email/FragmentMessages.java | 2 +- app/src/main/java/eu/faircode/email/Log.java | 2 +- .../java/eu/faircode/email/MessageHelper.java | 32 ++++++++++--------- .../java/eu/faircode/email/ServiceSend.java | 4 +-- .../java/eu/faircode/email/ServiceUI.java | 2 +- 11 files changed, 55 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 1acbc7be84..84b1778af1 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -2170,7 +2170,7 @@ public class AdapterMessage extends RecyclerView.Adapter'; } + boolean isPlainOnly() { + return (this.plain_only != null && (this.plain_only & 1) != 0); + } + + boolean hasAlt() { + return (this.plain_only != null && (this.plain_only & 0x80) != 0); + } + boolean replySelf(List identities, long account) { Address[] senders = (reply == null || reply.length == 0 ? from : reply); if (identities != null && senders != null) diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 37005a9a20..be6c09c51f 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -796,7 +796,7 @@ public class EntityRule { db.message().setMessageContent(reply.id, true, reply.language, - false, + 0, reply.preview, null); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index b4a49fba2f..286dafecc2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -282,7 +282,7 @@ public class FragmentCompose extends FragmentBase { private long working = -1; private State state = State.NONE; private boolean show_images = false; - private Boolean last_plain_only = null; + private Integer last_plain_only = null; private List last_attachments = null; private boolean saved = false; private String subject = null; @@ -2743,7 +2743,7 @@ public class FragmentCompose extends FragmentBase { return null; DB db = DB.getInstance(context); - db.message().setMessagePlainOnly(id, false); + db.message().setMessagePlainOnly(id, 0); args.putInt("start", start); @@ -4269,7 +4269,7 @@ public class FragmentCompose extends FragmentBase { if (plain_only && !"resend".equals(action) && !"editasnew".equals(action)) - data.draft.plain_only = true; + data.draft.plain_only = 1; if (encrypt_default || selected.encrypt_default) if (selected.encrypt == 0) @@ -4524,8 +4524,8 @@ public class FragmentCompose extends FragmentBase { data.draft.sensitivity = ref.sensitivity; // Plain-only - if (ref.plain_only != null && ref.plain_only) - data.draft.plain_only = true; + if (ref.isPlainOnly()) + data.draft.plain_only = 1; // Encryption List
recipients = new ArrayList<>(); @@ -5177,7 +5177,7 @@ public class FragmentCompose extends FragmentBase { ? View.VISIBLE : View.GONE); tvPlainTextOnly.setVisibility( - draft.plain_only != null && draft.plain_only && !plain_only + draft.isPlainOnly() && !plain_only ? View.VISIBLE : View.GONE); tvNoInternet.setTag(draft.content); @@ -5579,7 +5579,7 @@ public class FragmentCompose extends FragmentBase { dirty = true; } else if (action == R.id.action_send) { - if (draft.plain_only == null || !draft.plain_only) { + if (!draft.isPlainOnly()) { // Remove unused inline images List cids = new ArrayList<>(); Document d = JsoupEx.parse(body); @@ -6036,7 +6036,7 @@ public class FragmentCompose extends FragmentBase { remind_dsn || remind_size || remind_pgp || remind_smime || remind_to || remind_noreply || remind_external || recipients > RECIPIENTS_WARNING || - (formatted && (draft.plain_only != null && draft.plain_only)) || + (formatted && draft.isPlainOnly()) || (send_reminders && (remind_extra || remind_subject || remind_text || remind_attachment))) { setBusy(false); @@ -6982,7 +6982,7 @@ public class FragmentCompose extends FragmentBase { boolean plain_only = args.getBoolean("plain_only"); DB db = DB.getInstance(context); - db.message().setMessagePlainOnly(id, plain_only); + db.message().setMessagePlainOnly(id, plain_only ? 1 : 0); return null; } @@ -7252,7 +7252,7 @@ public class FragmentCompose extends FragmentBase { tvViaTitle.setTextColor(draft.identityColor); tvVia.setText(draft.identityEmail); - cbPlainOnly.setChecked(draft.plain_only != null && draft.plain_only && !dsn); + cbPlainOnly.setChecked(draft.isPlainOnly() && !dsn); cbReceipt.setChecked(draft.receipt_request != null && draft.receipt_request && !dsn); int encrypt = (draft.ui_encrypt == null || dsn ? EntityMessage.ENCRYPT_NONE : draft.ui_encrypt); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index d9aaa1dcbb..cc311fe14d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -8714,7 +8714,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. Document document = JsoupEx.parse(file); boolean monospaced_pre = prefs.getBoolean("monospaced_pre", false); - if (Boolean.TRUE.equals(message.plain_only) && monospaced_pre) + if (message.isPlainOnly() && monospaced_pre) HtmlHelper.restorePre(document); HtmlHelper.embedInlineImages(context, id, document, true); diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index ed61fe1604..6ae9f264a0 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -1656,7 +1656,7 @@ public class Log { File file = draft.getFile(context); Helper.writeText(file, body); - db.message().setMessageContent(draft.id, true, null, false, null, null); + db.message().setMessageContent(draft.id, true, null, 0, null, null); attachSettings(context, draft.id, 1); attachAccounts(context, draft.id, 2); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 8e75931d2d..70a5c25552 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -927,7 +927,7 @@ public class MessageHelper { document.select("div[fairemail=reference]").removeAttr("fairemail"); Elements reply = document.select("div[fairemail=reply]"); - if (message.plain_only != null && message.plain_only) + if (message.isPlainOnly()) reply.select("strong").tagName("span"); reply.removeAttr("fairemail"); @@ -1057,7 +1057,7 @@ public class MessageHelper { } if (availableAttachments == 0) - if (message.plain_only != null && message.plain_only) + if (message.isPlainOnly()) imessage.setContent(plainContent, plainContentType); else imessage.setContent(altMultiPart); @@ -1066,7 +1066,7 @@ public class MessageHelper { Multipart relatedMultiPart = new MimeMultipart("related"); BodyPart bodyPart; - if (message.plain_only != null && message.plain_only) + if (message.isPlainOnly()) bodyPart = plainPart; else { bodyPart = new MimeBodyPart(); @@ -2774,19 +2774,21 @@ public class MessageHelper { return protected_subject; } - Boolean isPlainOnly() { - if (text.size() + extra.size() == 0) - return null; - - boolean has = false; + Integer isPlainOnly() { + int html = 0; + int plain = 0; for (PartHolder h : text) { if (h.isHtml()) - return false; + html++; if (h.isPlainText()) - has = true; + plain++; } - return (has ? true : null); + if (html + plain == 0) + return null; + if (html == 0) + return 1; + return (plain > 0 ? 0x80 : 0); } boolean hasBody() throws MessagingException { @@ -2802,8 +2804,8 @@ public class MessageHelper { } void normalize() { - Boolean plain = isPlainOnly(); - if (plain == null || plain) + Integer plain = isPlainOnly(); + if (plain != null && (plain & 1) != 0) for (AttachmentPart apart : attachments) if (!TextUtils.isEmpty(apart.attachment.cid) || !Part.ATTACHMENT.equals(apart.attachment.disposition)) { @@ -2855,8 +2857,8 @@ public class MessageHelper { List parts = new ArrayList<>(); - Boolean plain = isPlainOnly(); - if (plain != null && plain) + Integer plain = isPlainOnly(); + if (plain != null && (plain & 1) != 0) parts.addAll(text); else for (PartHolder h : text) diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 809294cbd0..3b43db2276 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -598,8 +598,8 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar MessageHelper.MessageParts parts = helper.getMessageParts(); String body = parts.getHtml(this); - Boolean plain = parts.isPlainOnly(); - if (plain != null && plain) + Integer plain = parts.isPlainOnly(); + if (plain != null && (plain & 1) != 0) body = body.replace("
", "
"); String text = HtmlHelper.getFullText(body); diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index 40f1c82b52..bc9ea53d13 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -352,7 +352,7 @@ public class ServiceUI extends IntentService { db.message().setMessageContent(reply.id, true, language, - plain_only || ref.plain_only, + plain_only || ref.isPlainOnly() ? 1 : 0, preview, null);