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

Commit 64541aca authored by Nihar Thakkar's avatar Nihar Thakkar
Browse files

Added star functionality.

parent 037afb78
Loading
Loading
Loading
Loading
+463 −237

File changed.

Preview size limit exceeded, changes collapsed.

+149 −68
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import io.eelo.mail.Account;
@@ -44,7 +45,8 @@ import static io.eelo.mail.fragment.MLFProjectionInfo.TO_LIST_COLUMN;
import static io.eelo.mail.fragment.MLFProjectionInfo.UID_COLUMN;


public class MessageListAdapter extends CursorAdapter {
public class MessageListAdapter extends CursorAdapter
{

    private final MessageListFragment fragment;
    private Drawable mAttachmentIcon;
@@ -53,7 +55,8 @@ public class MessageListAdapter extends CursorAdapter {
    private Drawable mForwardedAnsweredIcon;
    private FontSizes fontSizes = K9.getFontSizes();

    MessageListAdapter(MessageListFragment fragment) {
    MessageListAdapter(MessageListFragment fragment)
    {
        super(fragment.getActivity(), null, 0);
        this.fragment = fragment;
        mAttachmentIcon = fragment.getResources().getDrawable(R.drawable.ic_email_attachment_small);
@@ -62,33 +65,42 @@ public class MessageListAdapter extends CursorAdapter {
        mForwardedAnsweredIcon = fragment.getResources().getDrawable(R.drawable.ic_email_forwarded_answered_small);
    }

    private String recipientSigil(boolean toMe, boolean ccMe) {
        if (toMe) {
    private String recipientSigil(boolean toMe, boolean ccMe)
    {
        if (toMe)
        {
            return fragment.getString(R.string.messagelist_sent_to_me_sigil);
        } else if (ccMe) {
        }
        else if (ccMe)
        {
            return fragment.getString(R.string.messagelist_sent_cc_me_sigil);
        } else {
        }
        else
        {
            return "";
        }
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
    public View newView(Context context, Cursor cursor, ViewGroup parent)
    {
        View view = fragment.getK9LayoutInflater().inflate(R.layout.message_list_item, parent, false);

        MessageViewHolder holder = new MessageViewHolder(fragment);
        holder.date = (TextView) view.findViewById(R.id.date);


        if (fragment.previewLines == 0 && fragment.contactsPictureLoader == null) {
        if (fragment.previewLines == 0 && fragment.contactsPictureLoader == null)
        {
            view.findViewById(R.id.preview).setVisibility(View.GONE);
            holder.preview = (TextView) view.findViewById(R.id.sender_compact);
            holder.flagged = (CheckBox) view.findViewById(R.id.flagged_center_right);
            view.findViewById(R.id.flagged_bottom_right).setVisibility(View.GONE);



        } else {
        }
        else
        {
            view.findViewById(R.id.sender_compact).setVisibility(View.GONE);
            holder.preview = (TextView) view.findViewById(R.id.preview);
            holder.flagged = (CheckBox) view.findViewById(R.id.flagged_bottom_right);
@@ -98,17 +110,28 @@ public class MessageListAdapter extends CursorAdapter {

        RoundedQuickContactBadge contactBadge =
                (RoundedQuickContactBadge) view.findViewById(R.id.contact_badge);
        if (fragment.contactsPictureLoader != null) {

        // Assign a reference to the Star ImageView and set the visibility to GONE by default
        holder.starImageView = (ImageView) view.findViewById(R.id.star_image_view);
        holder.starImageView.setVisibility(View.GONE);

        if (fragment.contactsPictureLoader != null)
        {
            holder.contactBadge = contactBadge;
        } else {
        }
        else
        {
            contactBadge.setVisibility(View.GONE);
        }

        if (fragment.senderAboveSubject) {
        if (fragment.senderAboveSubject)
        {
            holder.from = (TextView) view.findViewById(R.id.subject);
            fontSizes.setViewTextSize(holder.from, fontSizes.getMessageListSender());

        } else {
        }
        else
        {
            holder.subject = (TextView) view.findViewById(R.id.subject);
            fontSizes.setViewTextSize(holder.subject, fontSizes.getMessageListSubject());

@@ -124,21 +147,19 @@ public class MessageListAdapter extends CursorAdapter {
        fontSizes.setViewTextSize(holder.threadCount, fontSizes.getMessageListSubject()); // thread count is next to subject
        view.findViewById(R.id.selected_checkbox_wrapper).setVisibility((fragment.checkboxes) ? View.VISIBLE : View.GONE);

        holder.flagged.setVisibility(fragment.stars ? View.VISIBLE : View.GONE);
        holder.flagged.setOnClickListener(holder);

        holder.flagged.setVisibility(View.GONE);

        holder.selected = (CheckBox) view.findViewById(R.id.selected_checkbox);
        holder.selected.setOnClickListener(holder);


        view.setTag(holder);

        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
    public void bindView(View view, Context context, Cursor cursor)
    {
        Account account = fragment.getAccountFromCursor(cursor);

        String fromList = cursor.getString(SENDER_LIST_COLUMN);
@@ -178,18 +199,31 @@ public class MessageListAdapter extends CursorAdapter {
        long uniqueId = cursor.getLong(fragment.uniqueIdColumn);
        boolean selected = fragment.selected.contains(uniqueId);

        if (fragment.checkboxes) {
        if (fragment.checkboxes)
        {
            holder.selected.setChecked(selected);
        }
        if (fragment.stars) {
        if (fragment.stars)
        {
            holder.flagged.setChecked(flagged);

            if (flagged)
            {
                holder.starImageView.setVisibility(View.VISIBLE);
            }
            else
            {
                holder.starImageView.setVisibility(View.GONE);
            }
        }
        holder.position = cursor.getPosition();
        if (holder.contactBadge != null) {
        if (holder.contactBadge != null)
        {
            updateContactBadge(holder, counterpartyAddress);
        }
        setBackgroundColor(view, selected, read);
        if (fragment.activeMessage != null) {
        if (fragment.activeMessage != null)
        {
            changeBackgroundColorIfActiveMessage(cursor, account, view);
        }
        updateWithThreadCount(holder, threadCount);
@@ -197,7 +231,8 @@ public class MessageListAdapter extends CursorAdapter {
        String sigil = recipientSigil(toMe, ccMe);
        SpannableStringBuilder messageStringBuilder = new SpannableStringBuilder(sigil)
                .append(beforePreviewText);
        if (fragment.previewLines > 0) {
        if (fragment.previewLines > 0)
        {
            String preview = getPreview(cursor);
            messageStringBuilder.append(" ").append(preview);
        }
@@ -207,9 +242,11 @@ public class MessageListAdapter extends CursorAdapter {

        Drawable statusHolder = buildStatusHolder(forwarded, answered);

        if (holder.from != null ) {
        if (holder.from != null)
        {
            holder.from.setTypeface(Typeface.create(holder.from.getTypeface(), Typeface.BOLD));
            if (fragment.senderAboveSubject) {
            if (fragment.senderAboveSubject)
            {
                holder.from.setCompoundDrawablesWithIntrinsicBounds(
                        statusHolder, // left
                        null, // top
@@ -217,12 +254,16 @@ public class MessageListAdapter extends CursorAdapter {
                        null); // bottom

                holder.from.setText(displayName);
            } else {
            }
            else
            {
                holder.from.setText(new SpannableStringBuilder(sigil).append(displayName));
            }
        }
        if (holder.subject != null ) {
            if (!fragment.senderAboveSubject) {
        if (holder.subject != null)
        {
            if (!fragment.senderAboveSubject)
            {
                holder.subject.setCompoundDrawablesWithIntrinsicBounds(
                        statusHolder, // left
                        null, // top
@@ -236,7 +277,8 @@ public class MessageListAdapter extends CursorAdapter {
        holder.date.setText(displayDate);
    }

    private void formatPreviewText(TextView preview, CharSequence beforePreviewText, String sigil) {
    private void formatPreviewText(TextView preview, CharSequence beforePreviewText, String sigil)
    {
        Spannable previewText = (Spannable) preview.getText();
        previewText.setSpan(buildSenderSpan(), 0, beforePreviewText.length() + sigil.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -251,28 +293,38 @@ public class MessageListAdapter extends CursorAdapter {
    /**
     * Create a span section for the sender, and assign the correct font size and weight
     */
    private AbsoluteSizeSpan buildSenderSpan() {
    private AbsoluteSizeSpan buildSenderSpan()
    {
        int fontSize = (fragment.senderAboveSubject) ?
                fontSizes.getMessageListSubject() :
                fontSizes.getMessageListSender();
        return new AbsoluteSizeSpan(fontSize, true);
    }

    private Address fetchCounterPartyAddress(boolean fromMe, Address[] toAddrs, Address[] ccAddrs, Address[] fromAddrs) {
        if (fromMe) {
            if (toAddrs.length > 0) {
    private Address fetchCounterPartyAddress(boolean fromMe, Address[] toAddrs, Address[] ccAddrs, Address[] fromAddrs)
    {
        if (fromMe)
        {
            if (toAddrs.length > 0)
            {
                return toAddrs[0];
            } else if (ccAddrs.length > 0) {
            }
            else if (ccAddrs.length > 0)
            {
                return ccAddrs[0];
            }
        } else if (fromAddrs.length > 0) {
        }
        else if (fromAddrs.length > 0)
        {
            return fromAddrs[0];
        }
        return null;
    }

    private void updateContactBadge(MessageViewHolder holder, Address counterpartyAddress) {
        if (counterpartyAddress != null) {
    private void updateContactBadge(MessageViewHolder holder, Address counterpartyAddress)
    {
        if (counterpartyAddress != null)
        {
            Utility.setContactForBadge(holder.contactBadge, counterpartyAddress);
            /*
             * At least in Android 2.2 a different background + padding is used when no
@@ -281,19 +333,23 @@ public class MessageListAdapter extends CursorAdapter {
             */
            holder.contactBadge.setPadding(0, 0, 0, 0);
            fragment.contactsPictureLoader.loadContactPicture(counterpartyAddress, holder.contactBadge);
        } else {
        }
        else
        {
            holder.contactBadge.assignContactUri(null);
            holder.contactBadge.setImageResource(R.drawable.ic_contact_picture);
        }
    }

    private void changeBackgroundColorIfActiveMessage(Cursor cursor, Account account, View view) {
    private void changeBackgroundColorIfActiveMessage(Cursor cursor, Account account, View view)
    {
        String uid = cursor.getString(UID_COLUMN);
        String folderName = cursor.getString(FOLDER_NAME_COLUMN);

        if (account.getUuid().equals(fragment.activeMessage.getAccountUuid()) &&
                folderName.equals(fragment.activeMessage.getFolderName()) &&
                uid.equals(fragment.activeMessage.getUid())) {
                uid.equals(fragment.activeMessage.getUid()))
        {
            int res = R.attr.messageListActiveItemBackgroundColor;

            TypedValue outValue = new TypedValue();
@@ -302,65 +358,90 @@ public class MessageListAdapter extends CursorAdapter {
        }
    }

    private int buildPreviewSpanColor() {
    private int buildPreviewSpanColor()
    {
        //TODO: make this part of the theme
        return (K9.getK9Theme() == K9.Theme.LIGHT) ?
                Color.rgb(105, 105, 105) :
                Color.rgb(160, 160, 160);
    }

    private Drawable buildStatusHolder(boolean forwarded, boolean answered) {
        if (forwarded && answered) {
    private Drawable buildStatusHolder(boolean forwarded, boolean answered)
    {
        if (forwarded && answered)
        {
            return mForwardedAnsweredIcon;
        } else if (answered) {
        }
        else if (answered)
        {
            return mAnsweredIcon;
        } else if (forwarded) {
        }
        else if (forwarded)
        {
            return mForwardedIcon;
        }
        return null;
    }

    private void setBackgroundColor(View view, boolean selected, boolean read) {
        if (selected || K9.useBackgroundAsUnreadIndicator()) {
    private void setBackgroundColor(View view, boolean selected, boolean read)
    {
        if (selected || K9.useBackgroundAsUnreadIndicator())
        {
            int res;
            if (selected) {
            if (selected)
            {
                res = R.attr.messageListSelectedBackgroundColor;
            } else if (read) {
            }
            else if (read)
            {
                res = R.attr.messageListReadItemBackgroundColor;
            } else {
            }
            else
            {
                res = R.attr.messageListUnreadItemBackgroundColor;
            }

            TypedValue outValue = new TypedValue();
            fragment.getActivity().getTheme().resolveAttribute(res, outValue, true);
            view.setBackgroundColor(outValue.data);
        } else {
        }
        else
        {
            view.setBackgroundColor(Color.TRANSPARENT);
        }
    }

    private void updateWithThreadCount(MessageViewHolder holder, int threadCount) {
        if (threadCount > 1) {
    private void updateWithThreadCount(MessageViewHolder holder, int threadCount)
    {
        if (threadCount > 1)
        {
            holder.threadCount.setText(String.format("%d", threadCount));
            holder.threadCount.setVisibility(View.VISIBLE);
        } else {
        }
        else
        {
            holder.threadCount.setVisibility(View.GONE);
        }
    }

    private String getPreview(Cursor cursor) {
    private String getPreview(Cursor cursor)
    {
        String previewTypeString = cursor.getString(PREVIEW_TYPE_COLUMN);
        DatabasePreviewType previewType = DatabasePreviewType.fromDatabaseValue(previewTypeString);

        switch (previewType) {
        switch (previewType)
        {
            case NONE:
            case ERROR: {
            case ERROR:
            {
                return "";
            }
            case ENCRYPTED: {
            case ENCRYPTED:
            {
                return fragment.getString(R.string.preview_encrypted);
            }
            case TEXT: {
            case TEXT:
            {
                return cursor.getString(PREVIEW_COLUMN);
            }
        }
+12 −6
Original line number Diff line number Diff line
@@ -3,34 +3,40 @@ package io.eelo.mail.fragment;

import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import io.eelo.mail.R;
import io.eelo.mail.RoundedQuickContactBadge;


public class MessageViewHolder implements View.OnClickListener {
public class MessageViewHolder implements View.OnClickListener
{
    private final MessageListFragment fragment;
    public TextView subject;
    public TextView preview;
    public TextView from;
    public TextView time;
    public TextView date;
    public View chip;
    public ImageView starImageView;
    public TextView threadCount;
    public CheckBox flagged;
    public CheckBox selected;
    public int position = -1;
    public RoundedQuickContactBadge contactBadge;

    public MessageViewHolder(MessageListFragment fragment) {
    public MessageViewHolder(MessageListFragment fragment)
    {
        this.fragment = fragment;
    }

    @Override
    public void onClick(View view) {
        if (position != -1) {
            switch (view.getId()) {
    public void onClick(View view)
    {
        if (position != -1)
        {
            switch (view.getId())
            {
                case R.id.selected_checkbox:
                    fragment.toggleMessageSelectWithAdapterPosition(position);
                    break;
+9 −2
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@
        android:background="@android:color/transparent"
        android:src="@drawable/ic_contact_picture" />


    <RelativeLayout
        android:id="@+id/list_item_inner"
        android:layout_width="match_parent"
@@ -52,6 +51,7 @@
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center_vertical"
        android:paddingBottom="6dp"
        android:paddingTop="5dip">

@@ -82,7 +82,14 @@
            android:layout_alignParentRight="false"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            android:layout_toLeftOf="@+id/date">
            android:layout_toLeftOf="@+id/date"
            android:gravity="center_vertical">

            <ImageView
                android:id="@+id/star_image_view"
                android:layout_width="16dp"
                android:layout_height="16dp"
                android:src="@drawable/ic_star" />

            <TextView
                android:id="@+id/sender_compact"