From 6fafbaac5af095035bea3e2c0f56e81c4325130c Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 28 Aug 2018 09:10:31 +0000 Subject: [PATCH] Made removing HTML formatting an advanced option Default off --- .../eu/faircode/email/FragmentMessage.java | 8 +++++++- .../eu/faircode/email/FragmentOptions.java | 10 ++++++++++ .../java/eu/faircode/email/HtmlHelper.java | 19 +++++++++++++++--- app/src/main/res/layout/fragment_options.xml | 20 +++++++++++++++---- app/src/main/res/values/strings.xml | 3 ++- 5 files changed, 51 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessage.java b/app/src/main/java/eu/faircode/email/FragmentMessage.java index 8957aacd33..2f2ce635fa 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessage.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessage.java @@ -224,6 +224,11 @@ public class FragmentMessage extends FragmentEx { String url = link[0].getURL(); Uri uri = Uri.parse(url); + if (!"http".equals(uri.getScheme()) && !"https".equals(uri.getScheme())) { + Toast.makeText(getContext(), getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show(); + return true; + } + if (BuildConfig.APPLICATION_ID.equals(uri.getHost()) && "/activate/".equals(uri.getPath())) { LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); lbm.sendBroadcast( @@ -249,6 +254,7 @@ public class FragmentMessage extends FragmentEx { customTabsIntent.launchUrl(getContext(), Uri.parse(url)); } } + return true; } }); @@ -490,7 +496,7 @@ public class FragmentMessage extends FragmentEx { }, new Html.TagHandler() { @Override public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { - // Do nothing + Log.i(Helper.TAG, "HTML tag=" + tag + " opening=" + opening); } }); } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 9df10cf902..e88317bdb2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -36,6 +36,7 @@ import androidx.annotation.Nullable; public class FragmentOptions extends FragmentEx { private CheckBox cbWebView; private TextView tvCustomTabs; + private CheckBox cbSanitize; private CheckBox cbDebug; @Override @@ -48,6 +49,7 @@ public class FragmentOptions extends FragmentEx { // Get controls cbWebView = view.findViewById(R.id.cbWebView); tvCustomTabs = view.findViewById(R.id.tvCustomTabs); + cbSanitize = view.findViewById(R.id.cbSanitize); cbDebug = view.findViewById(R.id.cbDebug); // Wire controls @@ -62,6 +64,14 @@ public class FragmentOptions extends FragmentEx { } }); + cbSanitize.setChecked(prefs.getBoolean("sanitize", false)); + cbSanitize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("sanitize", checked).apply(); + } + }); + cbDebug.setChecked(prefs.getBoolean("debug", false)); cbDebug.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 4d14737258..4e24a20501 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -20,12 +20,15 @@ package eu.faircode.email; */ import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; import android.text.Html; import android.text.TextUtils; import org.jsoup.Jsoup; import org.jsoup.helper.StringUtil; import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import org.jsoup.nodes.TextNode; import org.jsoup.select.NodeTraversor; @@ -110,9 +113,19 @@ public class HtmlHelper implements NodeVisitor { } public static String sanitize(Context context, String html, boolean reply) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + Document document = Jsoup.parse(html); - HtmlHelper visitor = new HtmlHelper(context, reply); - NodeTraversor.traverse(visitor, document.body()); - return visitor.toString(); + if (prefs.getBoolean("sanitize", false)) { + HtmlHelper visitor = new HtmlHelper(context, reply); + NodeTraversor.traverse(visitor, document.body()); + return visitor.toString(); + } else { + document.getElementsByTag("style").remove(); + document.select("[style]").removeAttr("style"); + for (Element tr : document.select("tr")) + tr.after("
"); + return document.body().html(); + } } } diff --git a/app/src/main/res/layout/fragment_options.xml b/app/src/main/res/layout/fragment_options.xml index d8507cba4f..8e45532af1 100644 --- a/app/src/main/res/layout/fragment_options.xml +++ b/app/src/main/res/layout/fragment_options.xml @@ -18,7 +18,7 @@ android:layout_marginStart="12dp" android:layout_marginTop="12dp" android:text="@string/title_advanced_webview" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorSecondary" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -27,12 +27,24 @@ android:id="@+id/tvCustomTabs" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="12dp" + android:layout_marginStart="45dp" android:text="@string/title_advanced_customtabs" android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cbWebView" /> + + + app:layout_constraintTop_toBottomOf="@id/cbSanitize" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41b2ac89fd..e415592e47 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,8 +66,9 @@ Dark theme Advanced options - Use WebView + Use WebView to show external links Instead of Chrome Custom Tabs + Remove HTML formatting from messages Debug Select …