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 …