From aaeba52dba529f468483c7e3185082c7baef75d9 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 28 Sep 2022 16:24:17 +0200 Subject: [PATCH] EML: show inline images --- .../java/eu/faircode/email/ActivityEML.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index 13408f2f43..fb9796e544 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -23,6 +23,9 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -283,10 +286,32 @@ public class ActivityEML extends ActivityBase { result.body = HtmlHelper.fromDocument(context, document, new HtmlHelper.ImageGetterEx() { @Override public Drawable getDrawable(Element img) { - Drawable d; - if (TextUtils.isEmpty(img.attr("x-tracking"))) - d = ContextCompat.getDrawable(context, R.drawable.twotone_image_24); - else { + Drawable d = null; + if (TextUtils.isEmpty(img.attr("x-tracking"))) { + String src = img.attr("src"); + if (src.startsWith("cid:")) { + String cid = "<" + src.substring(4) + ">"; + Integer w = Helper.parseInt(img.attr("width")); + Integer h = Helper.parseInt(img.attr("height")); + Resources res = context.getResources(); + int scaleToPixels = res.getDisplayMetrics().widthPixels; + for (MessageHelper.AttachmentPart apart : result.parts.getAttachmentParts()) + if (cid.equals(apart.attachment.cid)) { + try { + Bitmap bm = ImageHelper.getScaledBitmap(apart.part.getInputStream(), src, apart.attachment.type, scaleToPixels); + d = new BitmapDrawable(res, bm); + d.setBounds(0, 0, bm.getWidth(), bm.getHeight()); + ImageHelper.fitDrawable(d, w == null ? 0 : w, h == null ? 0 : h, 1.0f, tvBody); + } catch (Throwable ex) { + Log.e(ex); + d = ContextCompat.getDrawable(context, R.drawable.twotone_broken_image_24); + } + break; + } + if (d == null) + d = ContextCompat.getDrawable(context, R.drawable.twotone_image_24); + } + } else { d = ContextCompat.getDrawable(context, R.drawable.twotone_my_location_24); d.setTint(Helper.resolveColor(context, R.attr.colorWarning)); }