Loading k9mail/src/main/java/io/eelo/mail/K9.java +463 −237 File changed.Preview size limit exceeded, changes collapsed. Show changes k9mail/src/main/java/io/eelo/mail/fragment/MessageListAdapter.java +149 −68 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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()); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); } Loading @@ -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 Loading @@ -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 Loading @@ -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); Loading @@ -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 Loading @@ -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(); Loading @@ -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); } } Loading k9mail/src/main/java/io/eelo/mail/fragment/MessageViewHolder.java +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading k9mail/src/main/res/layout/message_list_item.xml +9 −2 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -52,6 +51,7 @@ android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center_vertical" android:paddingBottom="6dp" android:paddingTop="5dip"> Loading Loading @@ -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" Loading Loading
k9mail/src/main/java/io/eelo/mail/K9.java +463 −237 File changed.Preview size limit exceeded, changes collapsed. Show changes
k9mail/src/main/java/io/eelo/mail/fragment/MessageListAdapter.java +149 −68 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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()); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); } Loading @@ -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 Loading @@ -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 Loading @@ -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); Loading @@ -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 Loading @@ -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(); Loading @@ -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); } } Loading
k9mail/src/main/java/io/eelo/mail/fragment/MessageViewHolder.java +12 −6 Original line number Diff line number Diff line Loading @@ -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; Loading
k9mail/src/main/res/layout/message_list_item.xml +9 −2 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -52,6 +51,7 @@ android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center_vertical" android:paddingBottom="6dp" android:paddingTop="5dip"> Loading Loading @@ -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" Loading