diff --git a/app/src/main/java/eu/faircode/email/ActivityEml.java b/app/src/main/java/eu/faircode/email/ActivityEml.java index 5a98a8a08f..e096f52e9e 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEml.java +++ b/app/src/main/java/eu/faircode/email/ActivityEml.java @@ -103,7 +103,7 @@ public class ActivityEml extends ActivityBase { result.parts = HtmlHelper.fromHtml(sb.toString()); result.html = parts.getHtml(context); - result.body = HtmlHelper.fromHtml(HtmlHelper.sanitize(result.html, true)); + result.body = HtmlHelper.fromHtml(HtmlHelper.sanitize(context, result.html, true)); ByteArrayOutputStream bos = new ByteArrayOutputStream(); mmessage.writeTo(bos); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 93ac86be1e..b22bd2aa94 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -1653,7 +1653,7 @@ public class AdapterMessage extends RecyclerView.Adapter heads = Arrays.asList("h1", "h2", "h3", "h4", "h5", "h6", "p", "table", "ol", "ul", "br", "hr"); private static final List tails = Arrays.asList("h1", "h2", "h3", "h4", "h5", "h6", "p", "ol", "ul", "li"); - static String sanitize(String html, boolean showQuotes) { + static String sanitize(Context context, String html, boolean showQuotes) { final Document document = Jsoup.parse(Jsoup.clean(html, Whitelist .relaxed() .addTags("hr") @@ -137,9 +137,14 @@ public class HtmlHelper { // Images for (Element img : document.select("img")) { + String src = img.attr("src"); + String alt = img.attr("alt"); + String height = img.attr("height").trim(); + String width = img.attr("width").trim(); + Element div = document.createElement("div"); - Uri uri = Uri.parse(img.attr("src")); + Uri uri = Uri.parse(src); if ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme())) { boolean linked = false; for (Element parent : img.parents()) @@ -160,12 +165,17 @@ public class HtmlHelper { } } - String alt = img.attr("alt"); if (!TextUtils.isEmpty(alt)) { div.appendElement("br"); div.appendElement("em").text(alt); } + // Tracking image + if ("1".equals(height) && "1".equals(width) && !TextUtils.isEmpty(src)) { + div.appendElement("br"); + div.appendElement("strong").text(context.getString(R.string.title_hint_tracking_image)); + } + img.replaceWith(div); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 35eff2bbb5..c25054c6a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -519,6 +519,7 @@ Swipe left to trash; swipe right to archive (if available) Long press a message to start selecting multiple messages Downloading messages can take some time, depending on the speed of the provider, internet connection and device and on the number of messages. While downloading messages the app might respond slower. + Tracking image Open link Show organization