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

Commit e52d6609 authored by Vincent Breitmoser's avatar Vincent Breitmoser
Browse files

Merge commit 'd096261c' into decrypted-file-provider

parents 8b719a32 d096261c
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
package com.fsck.k9;


import android.content.Context;


public class Globals {
    private static Context context;

    static void setContext(Context context) {
        Globals.context = context;
    }

    public static Context getContext() {
        if (context == null) {
            throw new IllegalStateException("No context provided");
        }

        return context;
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -505,6 +505,7 @@ public class K9 extends Application {

        super.onCreate();
        app = this;
        Globals.setContext(this);

        K9MailLib.setDebugStatus(new K9MailLib.DebugStatus() {
            @Override public boolean enabled() {
+4 −5
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

import android.content.Context;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
@@ -42,14 +41,14 @@ public class AttachmentResolver {
    }

    @WorkerThread
    public static AttachmentResolver createFromPart(Context context, Part part) {
    public static AttachmentResolver createFromPart(Part part) {
        AttachmentInfoExtractor attachmentInfoExtractor = AttachmentInfoExtractor.getInstance();
        Map<String, Uri> contentIdToAttachmentUriMap = buildCidToAttachmentUriMap(context, attachmentInfoExtractor, part);
        Map<String, Uri> contentIdToAttachmentUriMap = buildCidToAttachmentUriMap(attachmentInfoExtractor, part);
        return new AttachmentResolver(contentIdToAttachmentUriMap);
    }

    @VisibleForTesting
    static Map<String,Uri> buildCidToAttachmentUriMap(Context context, AttachmentInfoExtractor attachmentInfoExtractor,
    static Map<String,Uri> buildCidToAttachmentUriMap(AttachmentInfoExtractor attachmentInfoExtractor,
            Part rootPart) {
        HashMap<String,Uri> result = new HashMap<>();

@@ -69,7 +68,7 @@ public class AttachmentResolver {
                try {
                    String contentId = part.getContentId();
                    if (contentId != null) {
                        AttachmentViewInfo attachmentInfo = attachmentInfoExtractor.extractAttachmentInfo(context, part);
                        AttachmentViewInfo attachmentInfo = attachmentInfoExtractor.extractAttachmentInfo(part);
                        result.put(contentId, attachmentInfo.uri);
                    }
                } catch (MessagingException e) {
+2 −2
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public class MessageViewInfoExtractor {
            extraViewableText = extraViewable.text;
        }

        AttachmentResolver attachmentResolver = AttachmentResolver.createFromPart(context, rootPart);
        AttachmentResolver attachmentResolver = AttachmentResolver.createFromPart(rootPart);

        return MessageViewInfo.createWithExtractedContent(message, rootPart, viewable.html,
                attachmentInfos, cryptoResultAnnotation, extraViewableText, extraAttachmentInfos, attachmentResolver);
@@ -89,7 +89,7 @@ public class MessageViewInfoExtractor {
            MessageExtractor.findViewablesAndAttachments(part, viewableParts, attachments);
        }

        attachmentInfos.addAll(attachmentInfoExtractor.extractAttachmentInfos(context, attachments));
        attachmentInfos.addAll(attachmentInfoExtractor.extractAttachmentInfos(attachments));
        return MessageViewInfoExtractor.extractTextFromViewables(context, viewableParts);
    }

+15 −9
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.Log;

import com.fsck.k9.Globals;
import com.fsck.k9.K9;
import com.fsck.k9.mail.Body;
import com.fsck.k9.mail.MessagingException;
@@ -26,25 +27,30 @@ import com.fsck.k9.provider.DecryptedFileProvider;


public class AttachmentInfoExtractor {
    @VisibleForTesting
    AttachmentInfoExtractor() { }
    private final Context context;


    public static AttachmentInfoExtractor getInstance() {
        return new AttachmentInfoExtractor();
        Context context = Globals.getContext();
        return new AttachmentInfoExtractor(context);
    }

    @VisibleForTesting
    AttachmentInfoExtractor(Context context) {
        this.context = context;
    }

    public List<AttachmentViewInfo> extractAttachmentInfos(Context context, List<Part> attachmentParts)
            throws MessagingException {
    public List<AttachmentViewInfo> extractAttachmentInfos(List<Part> attachmentParts) throws MessagingException {

        List<AttachmentViewInfo> attachments = new ArrayList<>();
        for (Part part : attachmentParts) {
            attachments.add(extractAttachmentInfo(context, part));
            attachments.add(extractAttachmentInfo(part));
        }

        return attachments;
    }

    public AttachmentViewInfo extractAttachmentInfo(Context context, Part part) throws MessagingException {
    public AttachmentViewInfo extractAttachmentInfo(Part part) throws MessagingException {
        Uri uri;
        long size;
        if (part instanceof LocalPart) {
@@ -58,7 +64,7 @@ public class AttachmentInfoExtractor {
            if (body instanceof DeferredFileBody) {
                DeferredFileBody decryptedTempFileBody = (DeferredFileBody) body;
                size = decryptedTempFileBody.getSize();
                uri = getDecryptedFileProviderUri(context, decryptedTempFileBody, part.getMimeType());
                uri = getDecryptedFileProviderUri(decryptedTempFileBody, part.getMimeType());
                return extractAttachmentInfo(part, uri, size);
            } else {
                throw new IllegalArgumentException("Unsupported part type provided");
@@ -70,7 +76,7 @@ public class AttachmentInfoExtractor {

    @Nullable
    @VisibleForTesting
    protected Uri getDecryptedFileProviderUri(Context context, DeferredFileBody decryptedTempFileBody, String mimeType) {
    protected Uri getDecryptedFileProviderUri(DeferredFileBody decryptedTempFileBody, String mimeType) {
        Uri uri;
        try {
            File file = decryptedTempFileBody.getFile();
Loading