Message header layout improvements

This commit is contained in:
M66B 2019-10-18 19:35:40 +02:00
parent ea6383b784
commit feee6589aa
6 changed files with 210 additions and 166 deletions

View File

@ -154,7 +154,7 @@ repositories {
jcenter()
maven { url "https://repo1.maven.org/maven2/" }
maven { url "https://jitpack.io" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots"}
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
configurations.all {

View File

@ -257,22 +257,20 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private ImageButton ibExpander;
private ImageView ibFlagged;
private ImageView ivAvatar;
private ImageView ivPriority;
private ImageView ibAuth;
private TextView tvFrom;
private TextView tvSize;
private TextView tvTime;
private ImageView ivType;
private ImageView ivPriority;
private ImageView ibAuth;
private ImageView ibSnoozed;
private ImageView ivBrowsed;
private ImageView ivAnswered;
private ImageView ivPlain;
private ImageView ivReceipt;
private ImageView ivAttachments;
private TextView tvSubject;
private TextView tvFolder;
private TextView tvCount;
private ImageView ivThread;
private TextView tvExpand;
private TextView tvPreview;
private TextView tvError;
private ImageButton ibHelp;
@ -281,6 +279,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private ImageButton ibExpanderAddress;
private ImageView ivPlain;
private ImageView ivReceipt;
private ImageView ivBrowsed;
private ImageButton ibSearchContact;
private ImageButton ibNotifyContact;
private ImageButton ibAddContact;
@ -293,6 +295,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private TextView tvIdentityTitle;
private TextView tvTimeExTitle;
private TextView tvSizeExTitle;
private TextView tvFolderExTitle;
private TextView tvFromEx;
private TextView tvTo;
@ -302,6 +305,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private TextView tvIdentity;
private TextView tvTimeEx;
private TextView tvSizeEx;
private TextView tvFolderEx;
private TextView tvSubjectEx;
private TextView tvFlags;
@ -372,19 +376,17 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibExpander = itemView.findViewById(R.id.ibExpander);
ibFlagged = itemView.findViewById(R.id.ibFlagged);
ivAvatar = itemView.findViewById(R.id.ivAvatar);
ivPriority = itemView.findViewById(R.id.ivPriority);
ibAuth = itemView.findViewById(R.id.ibAuth);
tvFrom = itemView.findViewById(subject_top ? R.id.tvSubject : R.id.tvFrom);
tvSize = itemView.findViewById(R.id.tvSize);
tvTime = itemView.findViewById(R.id.tvTime);
ivType = itemView.findViewById(R.id.ivType);
ivPriority = itemView.findViewById(R.id.ivPriority);
ibAuth = itemView.findViewById(R.id.ibAuth);
ibSnoozed = itemView.findViewById(R.id.ibSnoozed);
ivBrowsed = itemView.findViewById(R.id.ivBrowsed);
ivAnswered = itemView.findViewById(R.id.ivAnswered);
ivPlain = itemView.findViewById(R.id.ivPlain);
ivReceipt = itemView.findViewById(R.id.ivReceipt);
ivAttachments = itemView.findViewById(R.id.ivAttachments);
tvSubject = itemView.findViewById(subject_top ? R.id.tvFrom : R.id.tvSubject);
tvExpand = itemView.findViewById(R.id.tvExpand);
tvPreview = itemView.findViewById(R.id.tvPreview);
tvFolder = itemView.findViewById(R.id.tvFolder);
tvCount = itemView.findViewById(R.id.tvCount);
@ -419,6 +421,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibExpanderAddress = vsBody.findViewById(R.id.ibExpanderAddress);
ivPlain = vsBody.findViewById(R.id.ivPlain);
ivReceipt = vsBody.findViewById(R.id.ivReceipt);
ivBrowsed = vsBody.findViewById(R.id.ivBrowsed);
ibSearchContact = vsBody.findViewById(R.id.ibSearchContact);
ibNotifyContact = vsBody.findViewById(R.id.ibNotifyContact);
ibAddContact = vsBody.findViewById(R.id.ibAddContact);
@ -431,6 +437,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvIdentityTitle = vsBody.findViewById(R.id.tvIdentityTitle);
tvTimeExTitle = vsBody.findViewById(R.id.tvTimeExTitle);
tvSizeExTitle = vsBody.findViewById(R.id.tvSizeExTitle);
tvFolderExTitle = vsBody.findViewById(R.id.tvFolderExTitle);
tvFromEx = vsBody.findViewById(R.id.tvFromEx);
tvTo = vsBody.findViewById(R.id.tvTo);
@ -441,6 +448,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvTimeEx = vsBody.findViewById(R.id.tvTimeEx);
tvSizeEx = vsBody.findViewById(R.id.tvSizeEx);
tvFolderEx = vsBody.findViewById(R.id.tvFolderEx);
tvSubjectEx = vsBody.findViewById(R.id.tvSubjectEx);
tvFlags = vsBody.findViewById(R.id.tvFlags);
tvKeywords = vsBody.findViewById(R.id.tvKeywords);
@ -632,22 +640,20 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibExpander.setVisibility(View.GONE);
ibFlagged.setVisibility(View.GONE);
ivAvatar.setVisibility(View.GONE);
ivPriority.setVisibility(View.GONE);
ibAuth.setVisibility(View.GONE);
tvFrom.setText(null);
tvSize.setText(null);
tvTime.setText(null);
ivType.setVisibility(View.GONE);
ivPriority.setVisibility(View.GONE);
ibAuth.setVisibility(View.GONE);
ibSnoozed.setVisibility(View.GONE);
ivBrowsed.setVisibility(View.GONE);
ivAnswered.setVisibility(View.GONE);
ivPlain.setVisibility(View.GONE);
ivReceipt.setVisibility(View.GONE);
ivAttachments.setVisibility(View.GONE);
tvSubject.setText(null);
tvFolder.setText(null);
tvCount.setText(null);
ivThread.setVisibility(View.GONE);
tvExpand.setVisibility(View.GONE);
tvPreview.setVisibility(View.GONE);
tvError.setVisibility(View.GONE);
ibHelp.setVisibility(View.GONE);
@ -661,6 +667,11 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
boolean outbox = EntityFolder.OUTBOX.equals(message.folderType);
boolean outgoing = isOutgoing(message);
Address[] addresses = (outgoing && viewType != ViewType.THREAD ? message.to : message.senders);
boolean authenticated =
!(Boolean.FALSE.equals(message.dkim) ||
Boolean.FALSE.equals(message.spf) ||
Boolean.FALSE.equals(message.dmarc) ||
Boolean.FALSE.equals(message.mx));
boolean expanded = (viewType == ViewType.THREAD && properties.getValue("expanded", message.id));
// Text size
@ -694,17 +705,14 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
boolean dim = (message.duplicate || EntityFolder.TRASH.equals(message.folderType));
ibFlagged.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivAvatar.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivPriority.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ibAuth.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
tvFrom.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
tvSize.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
tvTime.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivType.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivPriority.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ibAuth.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ibSnoozed.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivBrowsed.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivAnswered.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivPlain.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivReceipt.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
ivAttachments.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
tvSubject.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
tvFolder.setAlpha(dim ? Helper.LOW_LIGHT : 1.0f);
@ -760,11 +768,12 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ivAvatar.setVisibility(avatars ? View.INVISIBLE : View.GONE);
// Line 1
ivPriority.setVisibility(EntityMessage.PRIORITIY_HIGH.equals(message.priority) ? View.VISIBLE : View.GONE);
ibAuth.setVisibility(authentication && !authenticated ? View.VISIBLE : View.GONE);
tvFrom.setText(MessageHelper.formatAddresses(addresses, name_email, false));
tvFrom.setPaintFlags(tvFrom.getPaintFlags() & ~Paint.UNDERLINE_TEXT_FLAG);
Long size = ("size".equals(sort) ? message.totalSize : message.size);
tvSize.setText(size == null ? null : Helper.humanReadableByteCount(size, true));
tvSize.setVisibility(size == null || (message.content && !"size".equals(sort)) ? View.GONE : View.VISIBLE);
tvSize.setText(message.totalSize == null ? null : Helper.humanReadableByteCount(message.totalSize, true));
tvSize.setVisibility(message.totalSize != null && "size".equals(sort) ? View.VISIBLE : View.GONE);
tvTime.setText(date && "time".equals(sort)
? TF.format(message.received)
: Helper.getRelativeTimeSpanString(context, message.received));
@ -772,12 +781,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
// Line 2
tvSubject.setText(message.subject);
boolean authenticated =
!(Boolean.FALSE.equals(message.dkim) ||
Boolean.FALSE.equals(message.spf) ||
Boolean.FALSE.equals(message.dmarc) ||
Boolean.FALSE.equals(message.mx));
// Line 3
int icon = (message.drafts > 0
? R.drawable.baseline_edit_24
@ -797,13 +800,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
message.ui_snoozed != null && message.ui_snoozed == Long.MAX_VALUE
? R.drawable.baseline_visibility_off_24 : R.drawable.baseline_timelapse_24);
ivPriority.setVisibility(EntityMessage.PRIORITIY_HIGH.equals(message.priority) ? View.VISIBLE : View.GONE);
ibAuth.setVisibility(authentication && !authenticated ? View.VISIBLE : View.GONE);
ibSnoozed.setVisibility(message.ui_snoozed == null ? View.GONE : View.VISIBLE);
ivBrowsed.setVisibility(message.ui_browsed ? View.VISIBLE : View.GONE);
ivAnswered.setVisibility(message.ui_answered ? View.VISIBLE : View.GONE);
ivPlain.setVisibility(message.plain_only != null && message.plain_only ? View.VISIBLE : View.GONE);
ivReceipt.setVisibility(message.receipt_request != null && message.receipt_request ? View.VISIBLE : View.GONE);
ivAttachments.setVisibility(message.attachments > 0 ? View.VISIBLE : View.GONE);
if (viewType == ViewType.FOLDER)
@ -813,9 +811,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
else
tvFolder.setText(message.accountName + "/" + message.getFolderName(context));
tvFolder.setVisibility(compact &&
((viewType == ViewType.FOLDER && !outbox) || (viewType == ViewType.UNIFIED && type == null && inbox))
? View.GONE : View.VISIBLE);
tvFolder.setVisibility(compact ? View.GONE : View.VISIBLE);
if (viewType == ViewType.THREAD || !threading) {
tvCount.setVisibility(View.GONE);
@ -828,6 +824,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
// Starred
bindFlagged(message, expanded);
// Expand warning
bindExpandWarning(message, expanded);
// Message text preview
int textColor = (contrast ? textColorPrimary : textColorSecondary);
if (tvPreview.getTag() == null || (int) tvPreview.getTag() != textColor) {
@ -932,6 +931,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
grpAttachments.setVisibility(View.GONE);
grpImages.setVisibility(View.GONE);
ivPlain.setVisibility(View.GONE);
ivReceipt.setVisibility(View.GONE);
ivBrowsed.setVisibility(View.GONE);
ibSearchContact.setVisibility(View.GONE);
ibNotifyContact.setVisibility(View.GONE);
ibAddContact.setVisibility(View.GONE);
@ -944,6 +947,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvIdentityTitle.setVisibility(View.GONE);
tvTimeExTitle.setVisibility(View.GONE);
tvSizeExTitle.setVisibility(View.GONE);
tvFolderExTitle.setVisibility(View.GONE);
tvFromEx.setVisibility(View.GONE);
tvTo.setVisibility(View.GONE);
@ -953,6 +957,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvIdentity.setVisibility(View.GONE);
tvTimeEx.setVisibility(View.GONE);
tvSizeEx.setVisibility(View.GONE);
tvFolderEx.setVisibility(View.GONE);
tvSubjectEx.setVisibility(View.GONE);
tvFlags.setVisibility(View.GONE);
tvKeywords.setVisibility(View.GONE);
@ -1016,6 +1021,16 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvFrom.setPaintFlags(tvFrom.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
}
private void bindExpandWarning(TupleMessageEx message, boolean expanded) {
tvExpand.setText(
message.size == null ? null : context.getString(R.string.title_expand_warning,
Helper.humanReadableByteCount(message.size, true)));
tvExpand.setVisibility(
viewType == ViewType.THREAD && !expanded &&
message.size != null && !message.content && message.uid != null
? View.VISIBLE : View.GONE);
}
private void bindExpanded(final TupleMessageEx message, final boolean scroll) {
DB db = DB.getInstance(context);
@ -1037,6 +1052,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
boolean hasTo = (message.to != null && message.to.length > 0);
boolean hasChannel = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O);
ivPlain.setVisibility(show_addresses && message.plain_only != null && message.plain_only ? View.VISIBLE : View.GONE);
ivReceipt.setVisibility(show_addresses && message.receipt_request != null && message.receipt_request ? View.VISIBLE : View.GONE);
ivBrowsed.setVisibility(show_addresses && message.ui_browsed ? View.VISIBLE : View.GONE);
ibSearchContact.setVisibility(show_addresses && (hasFrom || hasTo) ? View.VISIBLE : View.GONE);
ibNotifyContact.setVisibility(show_addresses && hasChannel && hasFrom ? View.VISIBLE : View.GONE);
ibAddContact.setVisibility(show_addresses && contacts && hasFrom ? View.VISIBLE : View.GONE);
@ -1114,6 +1133,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
.append(message.total == null ? "-" : Helper.humanReadableByteCount(message.total, true));
tvSizeEx.setText(size.toString());
tvFolderExTitle.setVisibility(show_addresses ? View.VISIBLE : View.GONE);
tvFolderEx.setVisibility(show_addresses ? View.VISIBLE : View.GONE);
tvFolderEx.setText(tvFolder.getText());
tvSubjectEx.setVisibility(show_addresses ? View.VISIBLE : View.GONE);
tvSubjectEx.setText(message.subject);
if (subject_italic)
@ -2403,6 +2426,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
clearExpanded(message);
bindFlagged(message, expanded);
bindExpandWarning(message, expanded);
}
}

View File

@ -13,6 +13,36 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/ivPlain"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_plain_only"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ibExpanderAddress"
app:srcCompat="@drawable/baseline_notes_24" />
<ImageView
android:id="@+id/ivReceipt"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_receipt"
app:layout_constraintStart_toEndOf="@id/ivPlain"
app:layout_constraintTop_toBottomOf="@id/ibExpanderAddress"
app:srcCompat="@drawable/baseline_playlist_add_check_24" />
<ImageView
android:id="@+id/ivBrowsed"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_browsed"
app:layout_constraintStart_toEndOf="@id/ivReceipt"
app:layout_constraintTop_toBottomOf="@id/ibExpanderAddress"
app:srcCompat="@drawable/baseline_playlist_add_24" />
<ImageButton
android:id="@+id/ibExpanderAddress"
android:layout_width="0dp"
@ -260,6 +290,30 @@
app:layout_constraintStart_toEndOf="@+id/barrier_addresses"
app:layout_constraintTop_toBottomOf="@id/tvTimeEx" />
<TextView
android:id="@+id/tvFolderExTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:text="@string/title_folder"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSizeEx" />
<TextView
android:id="@+id/tvFolderEx"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
android:text="Folder"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textIsSelectable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/barrier_addresses"
app:layout_constraintTop_toBottomOf="@id/tvSizeEx" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_addresses"
android:layout_width="wrap_content"
@ -269,7 +323,8 @@
tvFromExTitle,tvToTitle,tvReplyToTitle,
tvCcTitle,tvBccTitle,
tvIdentityTitle,
tvTimeExTitle,tvSizeExTitle" />
tvTimeExTitle,tvSizeExTitle,
tvFolderExTitle" />
<TextView
android:id="@+id/tvSubjectEx"
@ -282,7 +337,7 @@
android:textIsSelectable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSizeEx" />
app:layout_constraintTop_toBottomOf="@id/tvFolderEx" />
<TextView
android:id="@+id/tvFlags"

View File

@ -56,6 +56,31 @@
app:layout_constraintTop_toBottomOf="@id/paddingTop"
app:srcCompat="@drawable/baseline_person_24" />
<ImageView
android:id="@+id/ivPriority"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_send_priority"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFrom"
app:layout_constraintStart_toEndOf="@id/ivAvatar"
app:layout_constraintTop_toTopOf="@+id/tvFrom"
app:srcCompat="@drawable/baseline_priority_high_24" />
<ImageButton
android:id="@+id/ibAuth"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_auth"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFrom"
app:layout_constraintStart_toEndOf="@id/ivPriority"
app:layout_constraintTop_toTopOf="@+id/tvFrom"
app:srcCompat="@drawable/baseline_flag_24" />
<TextView
android:id="@+id/tvFrom"
android:layout_width="0dp"
@ -69,7 +94,7 @@
android:text="From"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toStartOf="@+id/tvSize"
app:layout_constraintStart_toEndOf="@id/ivAvatar"
app:layout_constraintStart_toEndOf="@id/ibAuth"
app:layout_constraintTop_toBottomOf="@id/paddingTop" />
<TextView
@ -109,31 +134,6 @@
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_edit_24" />
<ImageView
android:id="@+id/ivPriority"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_send_priority"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivType"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_priority_high_24" />
<ImageButton
android:id="@+id/ibAuth"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_auth"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivPriority"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_flag_24" />
<ImageButton
android:id="@+id/ibSnoozed"
android:layout_width="21dp"
@ -142,21 +142,10 @@
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_snoozed"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ibAuth"
app:layout_constraintStart_toEndOf="@id/ivType"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_timelapse_24" />
<ImageView
android:id="@+id/ivBrowsed"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_browsed"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ibSnoozed"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_playlist_add_24" />
<ImageView
android:id="@+id/ivAnswered"
android:layout_width="21dp"
@ -164,32 +153,10 @@
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_answered"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivBrowsed"
app:layout_constraintStart_toEndOf="@id/ibSnoozed"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_reply_24" />
<ImageView
android:id="@+id/ivPlain"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_plain_only"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivAnswered"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_notes_24" />
<ImageView
android:id="@+id/ivReceipt"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_receipt"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivPlain"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_playlist_add_check_24" />
<ImageView
android:id="@+id/ivAttachments"
android:layout_width="21dp"
@ -197,7 +164,7 @@
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_attachment"
app:layout_constraintBottom_toBottomOf="@+id/tvSubject"
app:layout_constraintStart_toEndOf="@id/ivReceipt"
app:layout_constraintStart_toEndOf="@id/ivAnswered"
app:layout_constraintTop_toTopOf="@+id/tvSubject"
app:srcCompat="@drawable/baseline_attachment_24" />
@ -272,6 +239,20 @@
app:layout_constraintTop_toBottomOf="@id/paddingTop"
app:srcCompat="@drawable/baseline_star_24" />
<TextView
android:id="@+id/tvExpand"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
android:gravity="center_horizontal"
android:text="@string/title_expand_warning"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/paddingEnd"
app:layout_constraintStart_toEndOf="@id/paddingStart"
app:layout_constraintTop_toBottomOf="@id/tvSubject" />
<TextView
android:id="@+id/tvPreview"
android:layout_width="0dp"
@ -286,7 +267,7 @@
android:textStyle="italic"
app:layout_constraintEnd_toStartOf="@+id/paddingEnd"
app:layout_constraintStart_toEndOf="@id/paddingStart"
app:layout_constraintTop_toBottomOf="@id/tvSubject" />
app:layout_constraintTop_toBottomOf="@id/tvExpand" />
<TextView
android:id="@+id/tvError"

View File

@ -55,6 +55,31 @@
app:layout_constraintTop_toBottomOf="@id/paddingTop"
app:srcCompat="@drawable/baseline_person_24" />
<ImageView
android:id="@+id/ivPriority"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_send_priority"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFrom"
app:layout_constraintStart_toEndOf="@id/ivAvatar"
app:layout_constraintTop_toTopOf="@+id/tvFrom"
app:srcCompat="@drawable/baseline_priority_high_24" />
<ImageButton
android:id="@+id/ibAuth"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_auth"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFrom"
app:layout_constraintStart_toEndOf="@id/ivPriority"
app:layout_constraintTop_toTopOf="@+id/tvFrom"
app:srcCompat="@drawable/baseline_flag_24" />
<TextView
android:id="@+id/tvFrom"
android:layout_width="0dp"
@ -66,7 +91,7 @@
android:text="From"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toStartOf="@+id/tvSize"
app:layout_constraintStart_toEndOf="@id/ivAvatar"
app:layout_constraintStart_toEndOf="@id/ibAuth"
app:layout_constraintTop_toBottomOf="@id/paddingTop" />
<TextView
@ -134,31 +159,6 @@
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_edit_24" />
<ImageView
android:id="@+id/ivPriority"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_send_priority"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivType"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_priority_high_24" />
<ImageButton
android:id="@+id/ibAuth"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_auth"
android:tint="@color/colorError"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivPriority"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_flag_24" />
<ImageButton
android:id="@+id/ibSnoozed"
android:layout_width="21dp"
@ -167,21 +167,10 @@
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_legend_snoozed"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ibAuth"
app:layout_constraintStart_toEndOf="@id/ivType"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_timelapse_24" />
<ImageView
android:id="@+id/ivBrowsed"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_browsed"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ibSnoozed"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_playlist_add_24" />
<ImageView
android:id="@+id/ivAnswered"
android:layout_width="21dp"
@ -189,32 +178,10 @@
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_answered"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivBrowsed"
app:layout_constraintStart_toEndOf="@id/ibSnoozed"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_reply_24" />
<ImageView
android:id="@+id/ivPlain"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_plain_only"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivAnswered"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_notes_24" />
<ImageView
android:id="@+id/ivReceipt"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_receipt"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivPlain"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_playlist_add_check_24" />
<ImageView
android:id="@+id/ivAttachments"
android:layout_width="21dp"
@ -222,7 +189,7 @@
android:layout_marginStart="6dp"
android:contentDescription="@string/title_legend_attachment"
app:layout_constraintBottom_toBottomOf="@+id/tvFolder"
app:layout_constraintStart_toEndOf="@id/ivReceipt"
app:layout_constraintStart_toEndOf="@id/ivAnswered"
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_attachment_24" />
@ -265,6 +232,21 @@
app:layout_constraintTop_toTopOf="@+id/tvFolder"
app:srcCompat="@drawable/baseline_message_24" />
<TextView
android:id="@+id/tvExpand"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="3dp"
android:layout_marginEnd="6dp"
android:gravity="center_horizontal"
android:text="@string/title_expand_warning"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@+id/paddingEnd"
app:layout_constraintStart_toEndOf="@id/paddingStart"
app:layout_constraintTop_toBottomOf="@id/tvFolder" />
<TextView
android:id="@+id/tvPreview"
android:layout_width="0dp"
@ -280,7 +262,7 @@
android:textStyle="italic"
app:layout_constraintEnd_toStartOf="@+id/paddingEnd"
app:layout_constraintStart_toEndOf="@id/paddingStart"
app:layout_constraintTop_toBottomOf="@id/tvFolder" />
app:layout_constraintTop_toBottomOf="@id/tvExpand" />
<TextView
android:id="@+id/tvError"

View File

@ -590,6 +590,7 @@
<string name="title_ask_help">Help improve FairEmail</string>
<string name="title_ask_reporting">Send error reports?</string>
<string name="title_reporting_why">Error reporting will help improve FairEmail</string>
<string name="title_expand_warning">Expanding this message will download %1$s</string>
<string name="title_download_message">Downloading &#8230;</string>
<string name="title_compose">Compose</string>
@ -601,6 +602,7 @@
<string name="title_via_identity">Via:</string>
<string name="title_received">Received:</string>
<string name="title_size">Size:</string>
<string name="title_folder">Folder:</string>
<string name="title_subject">Subject:</string>
<string name="title_body_hint">Your message</string>
<string name="title_discard">Discard</string>