Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d84ce23e authored by cketti's avatar cketti
Browse files

Replace "cid:" URI with "content://" URI when viewing/saving inline image

Fix #818
parent 952da74b
Loading
Loading
Loading
Loading
+30 −1
Original line number Original line Diff line number Diff line
@@ -163,7 +163,11 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
            }
            }
            case HitTestResult.IMAGE_TYPE:
            case HitTestResult.IMAGE_TYPE:
            case HitTestResult.SRC_IMAGE_ANCHOR_TYPE: {
            case HitTestResult.SRC_IMAGE_ANCHOR_TYPE: {
                final String url = result.getExtra();
                final String url = getUriForExternalAccess(result.getExtra());
                if (url == null) {
                    return;
                }

                final boolean externalImage = url.startsWith("http");
                final boolean externalImage = url.startsWith("http");
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {
                OnMenuItemClickListener listener = new OnMenuItemClickListener() {
                    @Override
                    @Override
@@ -309,6 +313,31 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
        }
        }
    }
    }


    private String getUriForExternalAccess(String url) {
        if (!url.startsWith("cid:")) {
            return url;
        }

        String cid = Uri.parse(url).getSchemeSpecificPart();

        AttachmentViewInfo attachment = getAttachmentByContentId(cid);
        if (attachment == null) {
            return null;
        }

        return attachment.uri.toString();
    }

    private AttachmentViewInfo getAttachmentByContentId(String cid) {
        for (AttachmentViewInfo attachment : attachments.keySet()) {
            if (cid.equals(attachment.part.getContentId())) {
                return attachment;
            }
        }

        return null;
    }

    private void startActivityIfAvailable(Context context, Intent intent) {
    private void startActivityIfAvailable(Context context, Intent intent) {
        try {
        try {
            context.startActivity(intent);
            context.startActivity(intent);