From dee9f452aaf8f0fd891f7caefa5eddc181d70f6f Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 1 Oct 2022 10:18:15 +0200 Subject: [PATCH] Added option to auto check with LanguageTool --- CHANGELOG.md | 4 ++ app/src/main/assets/CHANGELOG.md | 4 ++ .../eu/faircode/email/FragmentCompose.java | 51 ++++++++++++------- .../faircode/email/FragmentOptionsMisc.java | 14 ++++- .../java/eu/faircode/email/LanguageTool.java | 9 ++++ .../main/res/layout/fragment_options_misc.xml | 14 ++++- app/src/main/res/values/strings.xml | 1 + metadata/en-US/changelogs/1973.txt | 4 ++ 8 files changed, 82 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afc2e01a7f..c960f84802 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ ### [Mei long](https://en.wikipedia.org/wiki/Mei_long) +### Next version + +* Added option to auto check with LanguageTool after each new line + ### 1.1973 - 2022-10-01 * Added Ukrainian to DeepL languages diff --git a/app/src/main/assets/CHANGELOG.md b/app/src/main/assets/CHANGELOG.md index afc2e01a7f..c960f84802 100644 --- a/app/src/main/assets/CHANGELOG.md +++ b/app/src/main/assets/CHANGELOG.md @@ -4,6 +4,10 @@ ### [Mei long](https://en.wikipedia.org/wiki/Mei_long) +### Next version + +* Added option to auto check with LanguageTool after each new line + ### 1.1973 - 2022-10-01 * Added Ukrainian to DeepL languages diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 9d5627b02a..b59a8f0851 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -291,6 +291,8 @@ public class FragmentCompose extends FragmentBase { private boolean media = true; private boolean compact = false; private int zoom = 0; + private boolean lt_enabled; + private boolean lt_auto; private long working = -1; private State state = State.NONE; @@ -343,7 +345,8 @@ public class FragmentCompose extends FragmentBase { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + final Context context = getContext(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean experiments = prefs.getBoolean("experiments", false); compose_font = prefs.getString("compose_font", ""); @@ -353,6 +356,9 @@ public class FragmentCompose extends FragmentBase { compact = prefs.getBoolean("compose_compact", false); zoom = prefs.getInt("compose_zoom", compact ? 0 : 1); + lt_enabled = LanguageTool.isEnabled(context); + lt_auto = LanguageTool.isAuto(context); + setTitle(R.string.page_compose); setSubtitle(getResources().getQuantityString(R.plurals.page_message, 1)); } @@ -792,6 +798,9 @@ public class FragmentCompose extends FragmentBase { if (renum) StyleHelper.renumber(text, false, etBody.getContext()); + + if (lt_auto) + onLanguageTool(true); } catch (Throwable ex) { Log.e(ex); } finally { @@ -1958,8 +1967,8 @@ public class FragmentCompose extends FragmentBase { bottom_navigation.findViewById(R.id.action_save).setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - if (LanguageTool.isEnabled(v.getContext())) { - onLanguageTool(); + if (lt_enabled) { + onLanguageTool(false); return true; } else return false; @@ -2559,7 +2568,7 @@ public class FragmentCompose extends FragmentBase { popupMenu.showWithIcons(context, anchor); } - private void onLanguageTool() { + private void onLanguageTool(boolean silent) { etBody.clearComposingText(); Log.i("LT running enabled=" + etBody.isSuggestionsEnabled()); @@ -2572,16 +2581,20 @@ public class FragmentCompose extends FragmentBase { @Override protected void onPreExecute(Bundle args) { - toast = ToastEx.makeText(getContext(), R.string.title_suggestions_check, Toast.LENGTH_LONG); - toast.show(); - setBusy(true); + if (!silent) { + toast = ToastEx.makeText(getContext(), R.string.title_suggestions_check, Toast.LENGTH_LONG); + toast.show(); + setBusy(true); + } } @Override protected void onPostExecute(Bundle args) { - if (toast != null) - toast.cancel(); - setBusy(false); + if (!silent) { + if (toast != null) + toast.cancel(); + setBusy(false); + } } @Override @@ -2592,12 +2605,11 @@ public class FragmentCompose extends FragmentBase { @Override protected void onExecuted(Bundle args, List suggestions) { - if (suggestions == null || suggestions.size() == 0) { - ToastEx.makeText(getContext(), R.string.title_suggestions_none, Toast.LENGTH_LONG).show(); - return; - } - LanguageTool.applySuggestions(etBody, suggestions); + + if (!silent && + (suggestions == null || suggestions.size() == 0)) + ToastEx.makeText(getContext(), R.string.title_suggestions_none, Toast.LENGTH_LONG).show(); } @Override @@ -2610,8 +2622,10 @@ public class FragmentCompose extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { - Throwable exex = new Throwable("LanguageTool", ex); - Log.unexpectedError(getParentFragmentManager(), exex, false); + if (!silent) { + Throwable exex = new Throwable("LanguageTool", ex); + Log.unexpectedError(getParentFragmentManager(), exex, false); + } } }.execute(this, args, "compose:lt"); } @@ -6883,6 +6897,9 @@ public class FragmentCompose extends FragmentBase { grpBody.setVisibility(View.VISIBLE); + if (lt_auto) + onLanguageTool(true); + cbSignature.setChecked(draft.signature); tvSignature.setAlpha(draft.signature ? 1.0f : Helper.LOW_LIGHT); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index c52a28ecf9..c9ee476a1b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -122,6 +122,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private TextView tvFtsPro; private Spinner spLanguage; private SwitchCompat swLanguageTool; + private SwitchCompat swLanguageToolAuto; private SwitchCompat swLanguageToolPicky; private TextView tvLanguageToolPrivacy; private ImageButton ibLanguageTool; @@ -242,7 +243,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private final static String[] RESET_OPTIONS = new String[]{ "sort_answers", "shortcuts", "fts", "classification", "class_min_probability", "class_min_difference", - "language", "lt_enabled", "lt_picky", "deepl_enabled", "vt_enabled", "vt_apikey", "send_enabled", "send_host", + "language", "lt_enabled", "lt_auto", "lt_picky", "deepl_enabled", "vt_enabled", "vt_apikey", "send_enabled", "send_host", "updates", "weekly", "show_changelog", "crash_reports", "cleanup_attachments", "watchdog", "experiments", "main_log", "main_log_memory", "protocol", "log_level", "debug", "leak_canary", @@ -327,6 +328,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc tvFtsPro = view.findViewById(R.id.tvFtsPro); spLanguage = view.findViewById(R.id.spLanguage); swLanguageTool = view.findViewById(R.id.swLanguageTool); + swLanguageToolAuto = view.findViewById(R.id.swLanguageToolAuto); swLanguageToolPicky = view.findViewById(R.id.swLanguageToolPicky); tvLanguageToolPrivacy = view.findViewById(R.id.tvLanguageToolPrivacy); ibLanguageTool = view.findViewById(R.id.ibLanguageTool); @@ -635,10 +637,18 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("lt_enabled", checked).apply(); + swLanguageToolAuto.setEnabled(checked); swLanguageToolPicky.setEnabled(checked); } }); + swLanguageToolAuto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("lt_auto", checked).apply(); + } + }); + swLanguageToolPicky.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -2006,6 +2016,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc spLanguage.setSelection(selected); swLanguageTool.setChecked(prefs.getBoolean("lt_enabled", false)); + swLanguageToolAuto.setChecked(prefs.getBoolean("lt_auto", false)); + swLanguageToolAuto.setEnabled(swLanguageTool.isChecked()); swLanguageToolPicky.setChecked(prefs.getBoolean("lt_picky", false)); swLanguageToolPicky.setEnabled(swLanguageTool.isChecked()); swDeepL.setChecked(prefs.getBoolean("deepl_enabled", false)); diff --git a/app/src/main/java/eu/faircode/email/LanguageTool.java b/app/src/main/java/eu/faircode/email/LanguageTool.java index cef820b56a..fe59137588 100644 --- a/app/src/main/java/eu/faircode/email/LanguageTool.java +++ b/app/src/main/java/eu/faircode/email/LanguageTool.java @@ -54,6 +54,13 @@ public class LanguageTool { return prefs.getBoolean("lt_enabled", false); } + static boolean isAuto(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean lt_enabled = prefs.getBoolean("lt_enabled", false); + boolean lt_auto = prefs.getBoolean("lt_auto", false); + return (lt_enabled && lt_auto); + } + static List getSuggestions(Context context, CharSequence text) throws IOException, JSONException { // https://languagetool.org/http-api/swagger-ui/#!/default/post_check String request = @@ -155,6 +162,8 @@ public class LanguageTool { Editable edit = etBody.getText(); if (edit == null) return; + if (suggestions == null) + return; // https://developer.android.com/reference/android/text/style/SuggestionSpan for (SuggestionSpanEx span : edit.getSpans(0, edit.length(), SuggestionSpanEx.class)) { diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 0ed5203ff1..918c9a20f8 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -343,6 +343,18 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvLanguageToolHint" /> + + Language System LanguageTool integration + Check message automatically after each new line DeepL integration VirusTotal integration Send integration diff --git a/metadata/en-US/changelogs/1973.txt b/metadata/en-US/changelogs/1973.txt index 05cc3742b9..591c106e3a 100644 --- a/metadata/en-US/changelogs/1973.txt +++ b/metadata/en-US/changelogs/1973.txt @@ -4,6 +4,10 @@ Changelog Mei long +Next version + +* Added option to auto check with LanguageTool after each new line + 1.1973 - 2022-10-01 * Added Ukrainian to DeepL languages