EML: show inline images

pull/209/head
M66B 2 years ago
parent d5528a462e
commit aaeba52dba

@ -23,6 +23,9 @@ import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; 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.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -283,10 +286,32 @@ public class ActivityEML extends ActivityBase {
result.body = HtmlHelper.fromDocument(context, document, new HtmlHelper.ImageGetterEx() { result.body = HtmlHelper.fromDocument(context, document, new HtmlHelper.ImageGetterEx() {
@Override @Override
public Drawable getDrawable(Element img) { public Drawable getDrawable(Element img) {
Drawable d; Drawable d = null;
if (TextUtils.isEmpty(img.attr("x-tracking"))) if (TextUtils.isEmpty(img.attr("x-tracking"))) {
d = ContextCompat.getDrawable(context, R.drawable.twotone_image_24); String src = img.attr("src");
else { 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 = ContextCompat.getDrawable(context, R.drawable.twotone_my_location_24);
d.setTint(Helper.resolveColor(context, R.attr.colorWarning)); d.setTint(Helper.resolveColor(context, R.attr.colorWarning));
} }

Loading…
Cancel
Save