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

Unverified Commit 05d9315d authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #3743 from k9mail/message-reply-button

Message reply button
parents ecd3238d e18c9167
Loading
Loading
Loading
Loading
+7 −29
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -61,8 +62,6 @@ import com.fsck.k9.ui.R;
import com.fsck.k9.ui.messageview.MessageViewFragment;
import com.fsck.k9.ui.messageview.MessageViewFragment.MessageViewFragmentListener;
import com.fsck.k9.ui.settings.SettingsActivity;
import com.fsck.k9.view.MessageHeader;
import com.fsck.k9.view.MessageTitleView;
import com.fsck.k9.view.ViewSwitcher;
import com.fsck.k9.view.ViewSwitcher.OnSwitchCompleteListener;
import com.mikepenz.materialdrawer.Drawer.OnDrawerListener;
@@ -165,8 +164,6 @@ public class MessageList extends K9Activity implements MessageListFragmentListen
    private K9Drawer drawer;
    private FragmentTransaction openFolderTransaction;
    private View actionBarMessageList;
    private View actionBarMessageView;
    private MessageTitleView actionBarSubject;
    private TextView actionBarTitle;
    private TextView actionBarSubTitle;
    private Menu menu;
@@ -560,8 +557,6 @@ public class MessageList extends K9Activity implements MessageListFragmentListen

        View customView = actionBar.getCustomView();
        actionBarMessageList = customView.findViewById(R.id.actionbar_message_list);
        actionBarMessageView = customView.findViewById(R.id.actionbar_message_view);
        actionBarSubject = customView.findViewById(R.id.message_title_view);
        actionBarTitle = customView.findViewById(R.id.actionbar_title_first);
        actionBarSubTitle = customView.findViewById(R.id.actionbar_title_sub);
        actionBarProgress = customView.findViewById(R.id.actionbar_progress);
@@ -1102,11 +1097,17 @@ public class MessageList extends K9Activity implements MessageListFragmentListen
            }

            // Set title of menu item to toggle the read state of the currently displayed message
            int[] drawableAttr;
            if (messageViewFragment.isMessageRead()) {
                menu.findItem(R.id.toggle_unread).setTitle(R.string.mark_as_unread_action);
                drawableAttr = new int[] { R.attr.iconActionMarkAsUnread };
            } else {
                menu.findItem(R.id.toggle_unread).setTitle(R.string.mark_as_read_action);
                drawableAttr = new int[] { R.attr.iconActionMarkAsRead };
            }
            TypedArray ta = obtainStyledAttributes(drawableAttr);
            menu.findItem(R.id.toggle_unread).setIcon(ta.getDrawable(0));
            ta.recycle();

            // Jellybean has built-in long press selection support
            menu.findItem(R.id.select_text).setVisible(Build.VERSION.SDK_INT < 16);
@@ -1492,15 +1493,6 @@ public class MessageList extends K9Activity implements MessageListFragmentListen
        }
    }

    @Override
    public void displayMessageSubject(String subject) {
        if (displayMode == DisplayMode.MESSAGE_VIEW) {
            actionBarSubject.setText(subject);
        } else {
            actionBarSubject.showSubjectInMessageHeader();
        }
    }

    @Override
    public void showNextMessageOrReturn() {
        if (K9.messageViewReturnToList() || !showLogicalNextMessage()) {
@@ -1537,11 +1529,6 @@ public class MessageList extends K9Activity implements MessageListFragmentListen
        setProgressBarIndeterminateVisibility(enable);
    }

    @Override
    public void messageHeaderViewAvailable(MessageHeader header) {
        actionBarSubject.setMessageHeader(header);
    }

    private boolean showNextMessage() {
        MessageReference ref = messageViewFragment.getMessageReference();
        if (ref != null) {
@@ -1629,24 +1616,15 @@ public class MessageList extends K9Activity implements MessageListFragmentListen
    }

    private void showDefaultTitleView() {
        actionBarMessageView.setVisibility(View.GONE);
        actionBarMessageList.setVisibility(View.VISIBLE);

        if (messageListFragment != null) {
            messageListFragment.updateTitle();
        }

        actionBarSubject.setMessageHeader(null);
    }

    private void showMessageTitleView() {
        actionBarMessageList.setVisibility(View.GONE);
        actionBarMessageView.setVisibility(View.VISIBLE);

        if (messageViewFragment != null) {
            displayMessageSubject(null);
            messageViewFragment.updateTitle();
        }
    }

    @Override
+5 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -219,6 +220,10 @@ public class MessageTopView extends LinearLayout {
        mHeaderContainer.setOnFlagListener(listener);
    }

    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
        mHeaderContainer.setOnMenuItemClickListener(listener);
    }

    public void showAllHeaders() {
        mHeaderContainer.onShowAdditionalHeaders();
    }
+30 −22
Original line number Diff line number Diff line
@@ -18,10 +18,12 @@ import android.os.SystemClock;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@@ -31,9 +33,8 @@ import android.widget.Toast;
import com.fsck.k9.Account;
import com.fsck.k9.K9;
import com.fsck.k9.Preferences;
import com.fsck.k9.activity.K9ActivityCommon;
import com.fsck.k9.ui.R;
import com.fsck.k9.activity.ChooseFolder;
import com.fsck.k9.activity.K9ActivityCommon;
import com.fsck.k9.activity.MessageLoaderHelper;
import com.fsck.k9.activity.MessageLoaderHelper.MessageLoaderCallbacks;
import com.fsck.k9.controller.MessageReference;
@@ -41,17 +42,17 @@ import com.fsck.k9.controller.MessagingController;
import com.fsck.k9.fragment.AttachmentDownloadDialogFragment;
import com.fsck.k9.fragment.ConfirmationDialogFragment;
import com.fsck.k9.fragment.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
import com.fsck.k9.ui.helper.FileBrowserHelper;
import com.fsck.k9.ui.helper.FileBrowserHelper.FileBrowserFailOverCallback;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mailstore.AttachmentViewInfo;
import com.fsck.k9.mailstore.LocalMessage;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.ui.R;
import com.fsck.k9.ui.helper.FileBrowserHelper;
import com.fsck.k9.ui.helper.FileBrowserHelper.FileBrowserFailOverCallback;
import com.fsck.k9.ui.messageview.CryptoInfoDialog.OnClickShowCryptoKeyListener;
import com.fsck.k9.ui.messageview.MessageCryptoPresenter.MessageCryptoMvpView;
import com.fsck.k9.ui.settings.account.AccountSettingsActivity;
import com.fsck.k9.view.MessageCryptoDisplayStatus;
import com.fsck.k9.view.MessageHeader;
import timber.log.Timber;


@@ -179,6 +180,30 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
            }
        });

        mMessageView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                int id = item.getItemId();
                if (id == R.id.reply) {
                    onReply();
                    return true;
                } else if (id == R.id.reply_all) {
                    onReplyAll();
                    return true;
                } else if (id == R.id.forward) {
                    onForward();
                    return true;
                } else if (id == R.id.forward_as_attachment) {
                    onForwardAsAttachment();
                    return true;
                } else if (id == R.id.share) {
                    onSendAlternate();
                    return true;
                }
                return false;
            }
        });

        mMessageView.setOnDownloadButtonClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -187,8 +212,6 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
            }
        });

        mFragmentListener.messageHeaderViewAvailable(mMessageView.getMessageHeaderView());

        return view;
    }

@@ -264,7 +287,6 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
        }

        mMessageView.setSubject(subject);
        displayMessageSubject(subject);
    }

    /**
@@ -495,12 +517,6 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
        }
    }

    private void displayMessageSubject(String subject) {
        if (mFragmentListener != null) {
            mFragmentListener.displayMessageSubject(subject);
        }
    }

    public void moveMessage(MessageReference reference, String destFolderName) {
        mController.moveMessage(mAccount, mMessageReference.getFolderServerId(), reference, destFolderName);
    }
@@ -615,12 +631,6 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
                && mAccount.hasSpamFolder());
    }

    public void updateTitle() {
        if (mMessage != null) {
            displayMessageSubject(mMessage.getSubject());
        }
    }

    public Context getApplicationContext() {
        return mContext;
    }
@@ -715,10 +725,8 @@ public class MessageViewFragment extends Fragment implements ConfirmationDialogF
        void disableDeleteAction();
        void onReplyAll(MessageReference messageReference, Parcelable decryptionResultForReply);
        void onReply(MessageReference messageReference, Parcelable decryptionResultForReply);
        void displayMessageSubject(String title);
        void setProgress(boolean b);
        void showNextMessageOrReturn();
        void messageHeaderViewAvailable(MessageHeader messageHeaderView);
        void updateMenu();
    }

+12 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ import org.openintents.openpgp.OpenPgpSignatureResult;

public enum MessageCryptoDisplayStatus {
    LOADING (
            false,
            R.attr.openpgp_grey,
            R.drawable.status_lock_disabled
    ),
@@ -26,6 +27,7 @@ public enum MessageCryptoDisplayStatus {
    ),

    DISABLED (
            false,
            R.attr.openpgp_grey,
            R.drawable.status_lock_disabled,
            R.string.crypto_msg_title_plaintext,
@@ -190,6 +192,7 @@ public enum MessageCryptoDisplayStatus {
    @DrawableRes public final int statusIconRes;
    @StringRes public final Integer titleTextRes;
    @StringRes public final Integer descriptionTextRes;
    public boolean isEnabled;

    MessageCryptoDisplayStatus(@AttrRes int colorAttr, @DrawableRes int statusIconRes, @StringRes int titleTextRes,
            Integer descriptionTextRes) {
@@ -200,12 +203,20 @@ public enum MessageCryptoDisplayStatus {
        this.descriptionTextRes = descriptionTextRes;
    }

    MessageCryptoDisplayStatus(@AttrRes int colorAttr, @DrawableRes int statusIconRes) {
    MessageCryptoDisplayStatus(boolean isEnabled, @AttrRes int colorAttr, @DrawableRes int statusIconRes,
            @StringRes int titleTextRes, Integer descriptionTextRes) {
        this(colorAttr, statusIconRes, titleTextRes, descriptionTextRes);
        this.isEnabled = isEnabled;
    }

    MessageCryptoDisplayStatus(boolean isEnabled, @AttrRes int colorAttr, @DrawableRes int statusIconRes) {
        this.colorAttr = colorAttr;
        this.statusIconRes = statusIconRes;

        this.titleTextRes = null;
        this.descriptionTextRes = null;

        this.isEnabled = isEnabled;
    }

    @NonNull
+0 −41
Original line number Diff line number Diff line
package com.fsck.k9.view;


import android.content.Context;
import android.support.annotation.ColorInt;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import android.widget.ImageView;

import com.fsck.k9.ui.R;


public class MessageCryptoStatusView extends FrameLayout {

    private ImageView iconSingle;

    public MessageCryptoStatusView(Context context) {
        super(context);
    }

    public MessageCryptoStatusView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MessageCryptoStatusView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        iconSingle = findViewById(R.id.crypto_status_single);
    }

    public void setCryptoDisplayStatus(MessageCryptoDisplayStatus displayStatus) {
        @ColorInt int color = ThemeUtils.getStyledColor(getContext(), displayStatus.colorAttr);

        iconSingle.setImageResource(displayStatus.statusIconRes);
        iconSingle.setColorFilter(color);
    }
}
Loading