diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 9f4ce4aa63..a17fddca7d 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1505,7 +1505,7 @@ class Core { Helper.writeText(file, body); String text = HtmlHelper.getFullText(body); message.preview = HtmlHelper.getPreview(text); - message.language = HtmlHelper.getLanguage(context, text); + message.language = HtmlHelper.getLanguage(context, message.subject, text); db.message().setMessageContent(message.id, true, message.language, @@ -2217,7 +2217,7 @@ class Core { Helper.writeText(file, body); String text = HtmlHelper.getFullText(body); message.preview = HtmlHelper.getPreview(text); - message.language = HtmlHelper.getLanguage(context, text); + message.language = HtmlHelper.getLanguage(context, message.subject, text); db.message().setMessageContent(message.id, true, message.language, @@ -3021,7 +3021,7 @@ class Core { Helper.writeText(file, body); String text = HtmlHelper.getFullText(body); message.preview = HtmlHelper.getPreview(text); - message.language = HtmlHelper.getLanguage(context, text); + message.language = HtmlHelper.getLanguage(context, message.subject, text); db.message().setMessageContent(message.id, true, message.language, @@ -3460,7 +3460,7 @@ class Core { Helper.writeText(file, body); String text = HtmlHelper.getFullText(body); message.preview = HtmlHelper.getPreview(text); - message.language = HtmlHelper.getLanguage(context, text); + message.language = HtmlHelper.getLanguage(context, message.subject, text); db.message().setMessageContent(message.id, true, message.language, diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 6fe1049bc6..cf88143091 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -613,7 +613,7 @@ public class EntityRule { Helper.writeText(file, body); String text = HtmlHelper.getFullText(body); reply.preview = HtmlHelper.getPreview(text); - reply.language = HtmlHelper.getLanguage(context, text); + reply.language = HtmlHelper.getLanguage(context, reply.subject, text); db.message().setMessageContent(reply.id, true, reply.language, diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 77d9d88c62..139bd90ef1 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -3928,7 +3928,7 @@ public class FragmentCompose extends FragmentBase { String text = HtmlHelper.getFullText(html); data.draft.preview = HtmlHelper.getPreview(text); - data.draft.language = HtmlHelper.getLanguage(context, text); + data.draft.language = HtmlHelper.getLanguage(context, data.draft.subject, text); db.message().setMessageContent(data.draft.id, true, data.draft.language, @@ -4084,7 +4084,7 @@ public class FragmentCompose extends FragmentBase { String text = HtmlHelper.getFullText(html); data.draft.preview = HtmlHelper.getPreview(text); - data.draft.language = HtmlHelper.getLanguage(context, text); + data.draft.language = HtmlHelper.getLanguage(context, data.draft.subject, text); db.message().setMessageContent(data.draft.id, true, data.draft.language, @@ -4603,7 +4603,7 @@ public class FragmentCompose extends FragmentBase { String full = HtmlHelper.getFullText(body); draft.preview = HtmlHelper.getPreview(full); - draft.language = HtmlHelper.getLanguage(context, full); + draft.language = HtmlHelper.getLanguage(context, draft.subject, full); db.message().setMessageContent(draft.id, true, draft.language, diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index e4180e5003..ff8d3dfbcc 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -1708,14 +1708,22 @@ public class HtmlHelper { Log.d(document.head().html()); } - static String getLanguage(Context context, String text) { + static String getLanguage(Context context, String subject, String text) { try { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean language_detection = prefs.getBoolean("language_detection", false); if (!language_detection) return null; - Locale locale = TextHelper.detectLanguage(context, text); + StringBuilder sb = new StringBuilder(); + if (!TextUtils.isEmpty(subject)) + sb.append(subject).append('\n'); + if (!TextUtils.isEmpty(text)) + sb.append(text); + if (sb.length() == 0) + return null; + + Locale locale = TextHelper.detectLanguage(context, sb.toString()); return (locale == null ? null : locale.getLanguage()); } catch (Throwable ex) { Log.e(ex); diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 1d1078ed4d..9851a69d0e 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -539,7 +539,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar body = body.replace("
", "
"); String text = HtmlHelper.getFullText(body); - String language = HtmlHelper.getLanguage(this, text); + String language = HtmlHelper.getLanguage(this, message.subject, text); String preview = HtmlHelper.getPreview(text); try { diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index d0db6ef772..9e67763c2a 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -283,37 +283,38 @@ public class ServiceUI extends IntentService { boolean prefix_once = prefs.getBoolean("prefix_once", true); boolean plain_only = prefs.getBoolean("plain_only", false); + DB db = DB.getInstance(this); + + EntityMessage ref = db.message().getMessage(id); + if (ref == null) + throw new IllegalArgumentException("message not found"); + + EntityIdentity identity = db.identity().getIdentity(ref.identity); + if (identity == null) + throw new IllegalArgumentException("identity not found"); + + EntityFolder outbox = db.folder().getOutbox(); + if (outbox == null) + throw new IllegalArgumentException("outbox not found"); + + String subject = (ref.subject == null ? "" : ref.subject); + if (prefix_once) { + String re = getString(R.string.title_subject_reply, ""); + subject = subject.replaceAll("(?i)" + Pattern.quote(re.trim()), "").trim(); + } + Bundle results = RemoteInput.getResultsFromIntent(intent); String body = results.getString("text"); if (body != null) body = "

" + body.replaceAll("\\r?\\n", "
") + "

"; String text = HtmlHelper.getFullText(body); - String language = HtmlHelper.getLanguage(this, text); + String language = HtmlHelper.getLanguage(this, ref.subject, text); String preview = HtmlHelper.getPreview(text); - DB db = DB.getInstance(this); try { db.beginTransaction(); - EntityMessage ref = db.message().getMessage(id); - if (ref == null) - throw new IllegalArgumentException("message not found"); - - EntityIdentity identity = db.identity().getIdentity(ref.identity); - if (identity == null) - throw new IllegalArgumentException("identity not found"); - - EntityFolder outbox = db.folder().getOutbox(); - if (outbox == null) - throw new IllegalArgumentException("outbox not found"); - - String subject = (ref.subject == null ? "" : ref.subject); - if (prefix_once) { - String re = getString(R.string.title_subject_reply, ""); - subject = subject.replaceAll("(?i)" + Pattern.quote(re.trim()), "").trim(); - } - EntityMessage reply = new EntityMessage(); reply.account = identity.account; reply.folder = outbox.id;