diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index e38563ef55..a3c6fa6a63 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -227,6 +227,7 @@ public class AdapterMessage extends RecyclerView.Adapter languages; private static boolean debug; @@ -952,9 +955,13 @@ public class AdapterMessage extends RecyclerView.Adapter 0) { + ibAuth.setImageLevel(auths); + ibAuth.setImageTintList(ColorStateList.valueOf(colorControlNormal)); + ibAuth.setVisibility(View.VISIBLE); + } else + ibAuth.setVisibility(View.GONE); if (EntityMessage.PRIORITIY_HIGH.equals(message.ui_priority)) { ibPriority.setImageLevel(0); @@ -1542,18 +1559,19 @@ public class AdapterMessage extends RecyclerView.Adapter 0) sb.append(context.getString(R.string.title_authentication_failed, TextUtils.join(", ", result))); + else { + sb.append("DKIM: ") + .append(message.dkim == null ? "-" : (message.dkim ? "pass" : "fail")) + .append('\n'); + sb.append("SPF: ") + .append(message.spf == null ? "-" : (message.spf ? "pass" : "fail")) + .append('\n'); + sb.append("DMARC: ") + .append(message.dmarc == null ? "-" : (message.dmarc ? "pass" : "fail")); + } if (Boolean.TRUE.equals(message.blocklist)) { if (sb.length() > 0) @@ -5591,6 +5619,7 @@ public class AdapterMessage extends RecyclerView.Adapter= Build.VERSION_CODES.N) { diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 5674db02f7..c4771249fa 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -105,14 +105,16 @@ public class FragmentOptions extends FragmentBase { static String[] OPTIONS_RESTART = new String[]{ "first", "app_support", "notify_archive", "message_swipe", "message_select", "folder_actions", "folder_sync", - "subscriptions", "check_authentication", "check_reply_domain", + "subscriptions", + "check_authentication", "check_reply_domain", "check_mx", "check_blocklist", "send_pending", "portrait2", "landscape", "landscape3", "startup", "cards", "beige", "tabular_card_bg", "shadow_unread", "indentation", "date", "date_bold", "threading", "threading_unread", "highlight_unread", "highlight_color", "color_stripe", "avatars", "bimi", "gravatars", "favicons", "generated_icons", "identicons", "circular", "saturation", "brightness", "threshold", - "email_format", "prefer_contact", "only_contact", "distinguish_contacts", "show_recipients", "authentication", + "email_format", "prefer_contact", "only_contact", "distinguish_contacts", "show_recipients", + "authentication", "authentication_indicator", "subject_top", "font_size_sender", "font_size_subject", "subject_italic", "highlight_subject", "subject_ellipsize", "keywords_header", "labels_header", "flags", "flags_background", "preview", "preview_italic", "preview_lines", "message_zoom", "overview_mode", "addresses", "button_extra", "attachments_alt", "thumbnails", diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java index 4e462cc2d8..cd4e8d867e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsDisplay.java @@ -146,6 +146,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer private SwitchCompat swParseClasses; private SwitchCompat swAuthentication; + private SwitchCompat swAuthenticationIndicator; private Group grpGravatars; @@ -165,7 +166,8 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer "message_zoom", "overview_mode", "contrast", "monospaced", "monospaced_pre", "background_color", "text_color", "text_size", "text_font", "text_align", "text_separators", "collapse_quotes", "image_placeholders", "inline_images", "button_extra", "attachments_alt", "thumbnails", - "parse_classes", "authentication" + "parse_classes", + "authentication", "authentication_indicator" }; @Override @@ -260,6 +262,7 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swThumbnails = view.findViewById(R.id.swThumbnails); swParseClasses = view.findViewById(R.id.swParseClasses); swAuthentication = view.findViewById(R.id.swAuthentication); + swAuthenticationIndicator = view.findViewById(R.id.swAuthenticationIndicator); grpGravatars = view.findViewById(R.id.grpGravatars); @@ -931,6 +934,14 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("authentication", checked).apply(); + swAuthenticationIndicator.setEnabled(checked); + } + }); + + swAuthenticationIndicator.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("authentication_indicator", checked).apply(); } }); @@ -1118,6 +1129,8 @@ public class FragmentOptionsDisplay extends FragmentBase implements SharedPrefer swParseClasses.setChecked(prefs.getBoolean("parse_classes", true)); swAuthentication.setChecked(prefs.getBoolean("authentication", true)); + swAuthenticationIndicator.setChecked(prefs.getBoolean("authentication_indicator", false)); + swAuthenticationIndicator.setEnabled(swAuthentication.isChecked()); updateColor(); } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index 1428754106..e21972024c 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -95,7 +95,8 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr "enabled", "poll_interval", "auto_optimize", "schedule", "schedule_start", "schedule_end", "sync_nodate", "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept", "gmail_thread_id", "sync_folders", "sync_shared_folders", "subscriptions", - "check_authentication", "check_reply_domain", "check_mx", "check_blocklist", "use_blocklist", "tune_keep_alive" + "check_authentication", "check_reply_domain", "check_mx", "check_blocklist", "use_blocklist", + "tune_keep_alive" }; @Override diff --git a/app/src/main/res/drawable/authenticated.xml b/app/src/main/res/drawable/authenticated.xml new file mode 100644 index 0000000000..7e384c0414 --- /dev/null +++ b/app/src/main/res/drawable/authenticated.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/src/main/res/drawable/twotone_shield_24.xml b/app/src/main/res/drawable/twotone_shield_24.xml new file mode 100644 index 0000000000..0782edbf15 --- /dev/null +++ b/app/src/main/res/drawable/twotone_shield_24.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/drawable/twotone_shield_warning_24.xml b/app/src/main/res/drawable/twotone_shield_warning_24.xml new file mode 100644 index 0000000000..6fb409d982 --- /dev/null +++ b/app/src/main/res/drawable/twotone_shield_warning_24.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/layout/fragment_options_display.xml b/app/src/main/res/layout/fragment_options_display.xml index fb2d7e4f75..dd52c2973c 100644 --- a/app/src/main/res/layout/fragment_options_display.xml +++ b/app/src/main/res/layout/fragment_options_display.xml @@ -1414,29 +1414,35 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swParseClasses" /> - - + + diff --git a/app/src/main/res/layout/include_message_compact.xml b/app/src/main/res/layout/include_message_compact.xml index 44a120c2fe..ed4b80972e 100644 --- a/app/src/main/res/layout/include_message_compact.xml +++ b/app/src/main/res/layout/include_message_compact.xml @@ -79,7 +79,7 @@ app:layout_constraintBottom_toBottomOf="@+id/tvFrom" app:layout_constraintStart_toEndOf="@id/ibVerified" app:layout_constraintTop_toTopOf="@+id/tvFrom" - app:srcCompat="@drawable/twotone_flag_24" + app:srcCompat="@drawable/authenticated" app:tint="?attr/colorWarning" /> Colorize the Android navigation bar Parse style sheets Show a warning when the receiving server could not authenticate the message + Show authentication status indicator Synchronize on start Double \'back\' to exit