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

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

messageview: simplify handling of external pictures, ditch ShowPicturesController

parent b5b60300
Loading
Loading
Loading
Loading
+10 −9
Original line number Original line Diff line number Diff line
@@ -35,7 +35,6 @@ import com.fsck.k9.helper.ClipboardManager;
import com.fsck.k9.helper.Contacts;
import com.fsck.k9.helper.Contacts;
import com.fsck.k9.helper.Utility;
import com.fsck.k9.helper.Utility;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mailstore.AttachmentResolver;
import com.fsck.k9.mailstore.AttachmentResolver;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.mailstore.MessageViewInfo;
@@ -76,6 +75,7 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
    private SavedState mSavedState;
    private SavedState mSavedState;
    private ClipboardManager mClipboardManager;
    private ClipboardManager mClipboardManager;
    private Map<AttachmentViewInfo, AttachmentView> attachments = new HashMap<>();
    private Map<AttachmentViewInfo, AttachmentView> attachments = new HashMap<>();
    private boolean hasHiddenExternalImages;


    private String currentHtmlText;
    private String currentHtmlText;
    private AttachmentResolver currentAttachmentResolver;
    private AttachmentResolver currentAttachmentResolver;
@@ -403,8 +403,7 @@ public class MessageContainerView extends LinearLayout implements OnClickListene


    public void displayMessageViewContainer(MessageViewInfo messageViewInfo,
    public void displayMessageViewContainer(MessageViewInfo messageViewInfo,
            final OnRenderingFinishedListener onRenderingFinishedListener, boolean automaticallyLoadPictures,
            final OnRenderingFinishedListener onRenderingFinishedListener, boolean automaticallyLoadPictures,
            ShowPicturesController showPicturesController,
            AttachmentViewCallback attachmentCallback) {
            AttachmentViewCallback attachmentCallback) throws MessagingException {


        this.attachmentCallback = attachmentCallback;
        this.attachmentCallback = attachmentCallback;


@@ -414,11 +413,9 @@ public class MessageContainerView extends LinearLayout implements OnClickListene


        mHiddenAttachments.setVisibility(View.GONE);
        mHiddenAttachments.setVisibility(View.GONE);


        boolean lookForImages = true;
        if (mSavedState != null) {
        if (mSavedState != null) {
            if (mSavedState.showingPictures) {
            if (mSavedState.showingPictures) {
                setLoadPictures(true);
                setLoadPictures(true);
                lookForImages = false;
            }
            }


            if (mSavedState.hiddenAttachmentsVisible) {
            if (mSavedState.hiddenAttachmentsVisible) {
@@ -429,12 +426,12 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
        }
        }


        String textToDisplay = messageViewInfo.text;
        String textToDisplay = messageViewInfo.text;
        if (textToDisplay != null && lookForImages) {
        if (textToDisplay != null && !isShowingPictures()) {
            if (Utility.hasExternalImages(textToDisplay) && !isShowingPictures()) {
            if (Utility.hasExternalImages(textToDisplay)) {
                if (automaticallyLoadPictures) {
                if (automaticallyLoadPictures) {
                    setLoadPictures(true);
                    setLoadPictures(true);
                } else {
                } else {
                    showPicturesController.notifyMessageContainerContainsPictures(this);
                    hasHiddenExternalImages = true;
                }
                }
            }
            }
        }
        }
@@ -459,6 +456,10 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
        }
        }
    }
    }


    public boolean hasHiddenExternalImages() {
        return hasHiddenExternalImages;
    }

    public String wrapStatusMessage(String status) {
    public String wrapStatusMessage(String status) {
        return "<div style=\"text-align:center; color: grey;\">" + status + "</div>";
        return "<div style=\"text-align:center; color: grey;\">" + status + "</div>";
    }
    }
@@ -478,7 +479,7 @@ public class MessageContainerView extends LinearLayout implements OnClickListene
        mMessageContentView.displayHtmlContentWithInlineAttachments("", null, null);
        mMessageContentView.displayHtmlContentWithInlineAttachments("", null, null);
    }
    }


    public void renderAttachments(MessageViewInfo messageViewInfo) throws MessagingException {
    public void renderAttachments(MessageViewInfo messageViewInfo) {
        if (messageViewInfo.attachments != null) {
        if (messageViewInfo.attachments != null) {
            for (AttachmentViewInfo attachment : messageViewInfo.attachments) {
            for (AttachmentViewInfo attachment : messageViewInfo.attachments) {
                ViewGroup parent = attachment.firstClassAttachment ? mAttachments : mHiddenAttachments;
                ViewGroup parent = attachment.firstClassAttachment ? mAttachments : mHiddenAttachments;
+15 −31
Original line number Original line Diff line number Diff line
package com.fsck.k9.ui.messageview;
package com.fsck.k9.ui.messageview;




import java.util.ArrayList;
import java.util.List;

import android.animation.Animator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
@@ -22,13 +18,11 @@ import android.widget.TextView;


import com.fsck.k9.Account;
import com.fsck.k9.Account;
import com.fsck.k9.Account.ShowPictures;
import com.fsck.k9.Account.ShowPictures;
import com.fsck.k9.K9;
import com.fsck.k9.R;
import com.fsck.k9.R;
import com.fsck.k9.helper.Contacts;
import com.fsck.k9.helper.Contacts;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.ui.messageview.MessageContainerView.OnRenderingFinishedListener;
import com.fsck.k9.ui.messageview.MessageContainerView.OnRenderingFinishedListener;
import com.fsck.k9.view.MessageCryptoDisplayStatus;
import com.fsck.k9.view.MessageCryptoDisplayStatus;
@@ -37,7 +31,7 @@ import com.fsck.k9.view.ToolableViewAnimator;
import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.OpenPgpError;




public class MessageTopView extends LinearLayout implements ShowPicturesController {
public class MessageTopView extends LinearLayout {


    public static final int PROGRESS_MAX = 1000;
    public static final int PROGRESS_MAX = 1000;
    public static final int PROGRESS_MAX_WITH_MARGIN = 950;
    public static final int PROGRESS_MAX_WITH_MARGIN = 950;
@@ -54,7 +48,6 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
    private Button mDownloadRemainder;
    private Button mDownloadRemainder;
    private AttachmentViewCallback attachmentCallback;
    private AttachmentViewCallback attachmentCallback;
    private Button showPicturesButton;
    private Button showPicturesButton;
    private List<MessageContainerView> messageContainerViewsWithPictures = new ArrayList<>();
    private boolean isShowingProgress;
    private boolean isShowingProgress;


    private MessageCryptoPresenter messageCryptoPresenter;
    private MessageCryptoPresenter messageCryptoPresenter;
@@ -97,10 +90,10 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
    }
    }


    private void showPicturesInAllContainerViews() {
    private void showPicturesInAllContainerViews() {
        for (MessageContainerView containerView : messageContainerViewsWithPictures) {
        View messageContainerViewCandidate = containerView.getChildAt(0);
            containerView.showPictures();
        if (messageContainerViewCandidate instanceof MessageContainerView) {
            ((MessageContainerView) messageContainerViewCandidate).showPictures();
        }
        }

        hideShowPicturesButton();
        hideShowPicturesButton();
    }
    }


@@ -109,7 +102,7 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
        containerView.removeAllViews();
        containerView.removeAllViews();
    }
    }


    public void setMessage(Account account, MessageViewInfo messageViewInfo) throws MessagingException {
    public void setMessage(Account account, MessageViewInfo messageViewInfo) {
        resetView();
        resetView();


        setShowDownloadButton(messageViewInfo.message);
        setShowDownloadButton(messageViewInfo.message);
@@ -160,8 +153,7 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
        displayViewOnLoadFinished(false);
        displayViewOnLoadFinished(false);
    }
    }


    private void showMessageContentView(Account account, MessageViewInfo messageViewInfo)
    private void showMessageContentView(Account account, MessageViewInfo messageViewInfo) {
            throws MessagingException {
        ShowPictures showPicturesSetting = account.getShowPictures();
        ShowPictures showPicturesSetting = account.getShowPictures();
        boolean automaticallyLoadPictures =
        boolean automaticallyLoadPictures =
                shouldAutomaticallyLoadPictures(showPicturesSetting, messageViewInfo.message);
                shouldAutomaticallyLoadPictures(showPicturesSetting, messageViewInfo.message);
@@ -175,7 +167,11 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
            public void onLoadFinished() {
            public void onLoadFinished() {
                displayViewOnLoadFinished(true);
                displayViewOnLoadFinished(true);
            }
            }
        }, automaticallyLoadPictures, this, attachmentCallback);
        }, automaticallyLoadPictures, attachmentCallback);

        if (view.hasHiddenExternalImages()) {
            showShowPicturesButton();
        }
    }
    }


    private void showMessageCryptoErrorView(Account account, MessageViewInfo messageViewInfo) {
    private void showMessageCryptoErrorView(Account account, MessageViewInfo messageViewInfo) {
@@ -231,16 +227,11 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
    }
    }


    public void setHeaders(final Message message, Account account) {
    public void setHeaders(final Message message, Account account) {
        try {
        mHeaderContainer.populate(message, account);
        mHeaderContainer.populate(message, account);
        if (account.isOpenPgpProviderConfigured()) {
        if (account.isOpenPgpProviderConfigured()) {
            mHeaderContainer.setCryptoStatus(MessageCryptoDisplayStatus.LOADING);
            mHeaderContainer.setCryptoStatus(MessageCryptoDisplayStatus.LOADING);
        }
        }
        mHeaderContainer.setVisibility(View.VISIBLE);
        mHeaderContainer.setVisibility(View.VISIBLE);

        } catch (Exception me) {
            Log.e(K9.LOG_TAG, "setHeaders - error", me);
        }
    }
    }


    public void setOnToggleFlagClickListener(OnClickListener listener) {
    public void setOnToggleFlagClickListener(OnClickListener listener) {
@@ -297,13 +288,6 @@ public class MessageTopView extends LinearLayout implements ShowPicturesControll
        showPicturesButton.setVisibility(View.GONE);
        showPicturesButton.setVisibility(View.GONE);
    }
    }


    @Override
    public void notifyMessageContainerContainsPictures(MessageContainerView messageContainerView) {
        messageContainerViewsWithPictures.add(messageContainerView);

        showShowPicturesButton();
    }

    private boolean shouldAutomaticallyLoadPictures(ShowPictures showPicturesSetting, Message message) {
    private boolean shouldAutomaticallyLoadPictures(ShowPictures showPicturesSetting, Message message) {
        return showPicturesSetting == ShowPictures.ALWAYS || shouldShowPicturesFromSender(showPicturesSetting, message);
        return showPicturesSetting == ShowPictures.ALWAYS || shouldShowPicturesFromSender(showPicturesSetting, message);
    }
    }
+1 −6
Original line number Original line Diff line number Diff line
@@ -42,7 +42,6 @@ import com.fsck.k9.fragment.ProgressDialogFragment;
import com.fsck.k9.helper.FileBrowserHelper;
import com.fsck.k9.helper.FileBrowserHelper;
import com.fsck.k9.helper.FileBrowserHelper.FileBrowserFailOverCallback;
import com.fsck.k9.helper.FileBrowserHelper.FileBrowserFailOverCallback;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.LocalMessage;
import com.fsck.k9.mailstore.LocalMessage;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.mailstore.MessageViewInfo;
@@ -236,11 +235,7 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF


    private void showMessage(MessageViewInfo messageViewInfo) {
    private void showMessage(MessageViewInfo messageViewInfo) {
        messageCryptoPresenter.setMessageViewInfo(messageViewInfo);
        messageCryptoPresenter.setMessageViewInfo(messageViewInfo);
        try {
        mMessageView.setMessage(mAccount, messageViewInfo);
        mMessageView.setMessage(mAccount, messageViewInfo);
        } catch (MessagingException e) {
            Log.e(K9.LOG_TAG, "Error while trying to display message", e);
        }
    }
    }


    private void displayMessageHeader(LocalMessage message) {
    private void displayMessageHeader(LocalMessage message) {
+0 −6
Original line number Original line Diff line number Diff line
package com.fsck.k9.ui.messageview;


interface ShowPicturesController {
    void notifyMessageContainerContainsPictures(MessageContainerView messageContainerView);
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -256,7 +256,7 @@ public class MessageHeader extends LinearLayout implements OnClickListener, OnLo


    }
    }


    public void populate(final Message message, final Account account) throws MessagingException {
    public void populate(final Message message, final Account account) {
        final Contacts contacts = K9.showContactName() ? mContacts : null;
        final Contacts contacts = K9.showContactName() ? mContacts : null;
        final CharSequence from = MessageHelper.toFriendly(message.getFrom(), contacts);
        final CharSequence from = MessageHelper.toFriendly(message.getFrom(), contacts);
        final CharSequence to = MessageHelper.toFriendly(message.getRecipients(Message.RecipientType.TO), contacts);
        final CharSequence to = MessageHelper.toFriendly(message.getRecipients(Message.RecipientType.TO), contacts);