diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index e6a50b1f7d..ee80f9d384 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -4414,7 +4414,7 @@ public class FragmentCompose extends FragmentBase { final TextView tvVia = dview.findViewById(R.id.tvVia); final CheckBox cbPlainOnly = dview.findViewById(R.id.cbPlainOnly); final CheckBox cbReceipt = dview.findViewById(R.id.cbReceipt); - final TextView tvReceipt = dview.findViewById(R.id.tvReceipt); + final TextView tvReceipt = dview.findViewById(R.id.tvReceiptType); final Spinner spEncrypt = dview.findViewById(R.id.spEncrypt); final Spinner spPriority = dview.findViewById(R.id.spPriority); final TextView tvSendAt = dview.findViewById(R.id.tvSendAt); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java index d31f28538a..49618c28d0 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSend.java @@ -51,6 +51,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc private SwitchCompat swExtendedReply; private SwitchCompat swQuoteReply; private SwitchCompat swPlainOnly; + private Spinner spReceiptType; private Spinner spSignatureLocation; private SwitchCompat swUsenetSignature; private SwitchCompat swRemoveSignatures; @@ -66,7 +67,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc private final static String[] RESET_OPTIONS = new String[]{ "keyboard", "suggest_sent", "suggested_received", "prefix_once", "extended_reply", "quote_reply", - "plain_only", "signature_location", "usenet_signature", "remove_signatures", + "plain_only", "receipt_type", "signature_location", "usenet_signature", "remove_signatures", "resize_images", "resize_attachments", "send_reminders", "receipt_default", "resize", "lookup_mx", "send_delayed" }; @@ -88,6 +89,7 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc swExtendedReply = view.findViewById(R.id.swExtendedReply); swQuoteReply = view.findViewById(R.id.swQuoteReply); swPlainOnly = view.findViewById(R.id.swPlainOnly); + spReceiptType = view.findViewById(R.id.spReceiptType); spSignatureLocation = view.findViewById(R.id.spSignatureLocation); swUsenetSignature = view.findViewById(R.id.swUsenetSignature); swRemoveSignatures = view.findViewById(R.id.swRemoveSignatures); @@ -163,6 +165,18 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc } }); + spReceiptType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int position, long id) { + prefs.edit().putInt("receipt_type", position).apply(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + prefs.edit().remove("receipt_type").apply(); + } + }); + spSignatureLocation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int position, long id) { @@ -307,6 +321,9 @@ public class FragmentOptionsSend extends FragmentBase implements SharedPreferenc swQuoteReply.setChecked(prefs.getBoolean("quote_reply", true)); swPlainOnly.setChecked(prefs.getBoolean("plain_only", false)); + int receipt_type = prefs.getInt("receipt_type", 2); + spReceiptType.setSelection(receipt_type); + int signature_location = prefs.getInt("signature_location", 1); spSignatureLocation.setSelection(signature_location); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 85f340ce73..8ab02f3839 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -231,11 +231,19 @@ public class MessageHelper { if (message.receipt_request != null && message.receipt_request) { String to = (identity.replyto == null ? identity.email : identity.replyto); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + int receipt_type = prefs.getInt("receipt_type", 2); + // 0=Read receipt + // 1=Delivery receipt + // 2=Read+delivery receipt + // defacto standard - imessage.addHeader("Return-Receipt-To", to); + if (receipt_type == 1 || receipt_type == 2) // Delivery receipt + imessage.addHeader("Return-Receipt-To", to); // https://tools.ietf.org/html/rfc3798 - imessage.addHeader("Disposition-Notification-To", to); + if (receipt_type == 0 || receipt_type == 2) // Read receipt + imessage.addHeader("Disposition-Notification-To", to); } } diff --git a/app/src/main/res/layout/dialog_send.xml b/app/src/main/res/layout/dialog_send.xml index d60c9b775f..9f3a9dfd2a 100644 --- a/app/src/main/res/layout/dialog_send.xml +++ b/app/src/main/res/layout/dialog_send.xml @@ -126,7 +126,7 @@ app:layout_constraintTop_toBottomOf="@id/cbPlainOnly" /> + app:layout_constraintTop_toBottomOf="@id/tvReceiptType" /> + + + + + app:layout_constraintTop_toBottomOf="@id/spReceiptType" /> Signature position Add signature after quoted/forwarded message Send plain text only by default + When requesting a receipt Usenet signature convention Remove recognized signatures Automatically resize embedded images @@ -807,7 +808,7 @@ No private key Invalid private key Plain text only - Request delivery/read receipt + Request receipt Most providers and email clients ignore receipt requests Sender missing @@ -1357,6 +1358,12 @@ Large + + Read receipt + Delivery receipt + Read+delivery receipt + + Above the text Below the text