Added request delivery/read receipt to identity

This commit is contained in:
M66B 2018-12-07 16:48:52 +01:00
parent a59e665714
commit 3f2499698e
7 changed files with 1261 additions and 3 deletions

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 18,
version = 19,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -268,6 +268,14 @@ public abstract class DB extends RoomDatabase {
db.execSQL("ALTER TABLE `folder` ADD COLUMN `tbd` INTEGER");
}
})
.addMigrations(new Migration(18, 19) {
@Override
public void migrate(SupportSQLiteDatabase db) {
Log.i(Helper.TAG, "DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `identity` ADD COLUMN `delivery_receipt` INTEGER NOT NULL DEFAULT 0");
db.execSQL("ALTER TABLE `identity` ADD COLUMN `read_receipt` INTEGER NOT NULL DEFAULT 0");
}
})
.build();
}

View File

@ -51,6 +51,10 @@ public class EntityIdentity {
public String email;
public String replyto;
@NonNull
public Boolean delivery_receipt;
@NonNull
public Boolean read_receipt;
@NonNull
public Long account;
@NonNull
public String host; // SMTP

View File

@ -80,6 +80,8 @@ public class FragmentIdentity extends FragmentEx {
private TextView tvEmail;
private EditText etEmail;
private EditText etReplyTo;
private CheckBox cbDeliveryReceipt;
private CheckBox cbReadReceipt;
private Spinner spProvider;
private EditText etDomain;
private Button btnAutoConfig;
@ -137,6 +139,8 @@ public class FragmentIdentity extends FragmentEx {
tvEmail = view.findViewById(R.id.tvEmail);
etEmail = view.findViewById(R.id.etEmail);
etReplyTo = view.findViewById(R.id.etReplyTo);
cbDeliveryReceipt = view.findViewById(R.id.cbDeliveryReceipt);
cbReadReceipt = view.findViewById(R.id.cbReadReceipt);
spProvider = view.findViewById(R.id.spProvider);
@ -378,6 +382,8 @@ public class FragmentIdentity extends FragmentEx {
args.putString("name", etName.getText().toString());
args.putString("email", etEmail.getText().toString());
args.putString("replyto", etReplyTo.getText().toString());
args.putBoolean("delivery_receipt", cbDeliveryReceipt.isChecked());
args.putBoolean("read_receipt", cbReadReceipt.isChecked());
args.putLong("account", account == null ? -1 : account.id);
args.putInt("auth_type", account == null || account.auth_type == null ? Helper.AUTH_TYPE_PASSWORD : account.auth_type);
args.putString("host", etHost.getText().toString());
@ -400,6 +406,8 @@ public class FragmentIdentity extends FragmentEx {
long account = args.getLong("account");
String email = args.getString("email");
String replyto = args.getString("replyto");
boolean delivery_receipt = args.getBoolean("delivery_receipt");
boolean read_receipt = args.getBoolean("read_receipt");
String host = args.getString("host");
boolean starttls = args.getBoolean("starttls");
boolean insecure = args.getBoolean("insecure");
@ -473,6 +481,8 @@ public class FragmentIdentity extends FragmentEx {
identity.account = account;
identity.email = email;
identity.replyto = replyto;
identity.delivery_receipt = delivery_receipt;
identity.read_receipt = read_receipt;
identity.host = host;
identity.starttls = starttls;
identity.insecure = insecure;
@ -576,6 +586,8 @@ public class FragmentIdentity extends FragmentEx {
etName.setText(identity == null ? null : identity.name);
etEmail.setText(identity == null ? null : identity.email);
etReplyTo.setText(identity == null ? null : identity.replyto);
cbDeliveryReceipt.setChecked(identity == null ? false : identity.delivery_receipt);
cbReadReceipt.setChecked(identity == null ? false : identity.read_receipt);
etHost.setText(identity == null ? null : identity.host);
cbStartTls.setChecked(identity == null ? false : identity.starttls);
cbInsecure.setChecked(identity == null ? false : identity.insecure);

View File

@ -1661,6 +1661,12 @@ public class ServiceSynchronize extends LifecycleService {
if (ident.replyto != null)
imessage.setReplyTo(new Address[]{new InternetAddress(ident.replyto)});
if (ident.delivery_receipt)
imessage.addHeader("Return-Receipt-To", ident.replyto == null ? ident.email : ident.replyto);
if (ident.read_receipt)
imessage.addHeader("Disposition-Notification-To", ident.replyto == null ? ident.email : ident.replyto);
// Create transport
// TODO: cache transport?
Transport itransport = isession.getTransport(ident.starttls ? "smtp" : "smtps");

View File

@ -109,6 +109,24 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvReplyTo" />
<CheckBox
android:id="@+id/cbDeliveryReceipt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_identity_delivery_receipt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
<CheckBox
android:id="@+id/cbReadReceipt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_identity_read_receipt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cbDeliveryReceipt" />
<!--- provider -->
<TextView
@ -119,7 +137,7 @@
android:text="@string/title_provider"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etReplyTo" />
app:layout_constraintTop_toBottomOf="@id/cbReadReceipt" />
<Spinner
android:id="@+id/spProvider"
@ -435,6 +453,6 @@
android:id="@+id/grpAdvanced"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvEmail,etEmail,tvReplyTo,etReplyTo,tvProvider,spProvider,tvDomain,etDomain,btnAutoConfig,tvSmtp,tvInsecure,tvHost,etHost,cbStartTls,tvPort,etPort,tvUser,etUser,tvPassword,tilPassword,btnColor,vwColor,ibColorDefault,tvSignature,etSignature,ibPro,cbSynchronize,cbPrimary,tvSent,spSent" />
app:constraint_referenced_ids="tvEmail,etEmail,tvReplyTo,etReplyTo,cbDeliveryReceipt,cbReadReceipt,tvProvider,spProvider,tvDomain,etDomain,btnAutoConfig,tvSmtp,tvInsecure,tvHost,etHost,cbStartTls,tvPort,etPort,tvUser,etUser,tvPassword,tilPassword,btnColor,vwColor,ibColorDefault,tvSignature,etSignature,ibPro,cbSynchronize,cbPrimary,tvSent,spSent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

View File

@ -120,6 +120,8 @@
<string name="title_identity_name">Your name</string>
<string name="title_identity_email">Your email address</string>
<string name="title_identity_reply_to">Reply to address</string>
<string name="title_identity_read_receipt">Request read receipt</string>
<string name="title_identity_delivery_receipt">Request delivery receipt</string>
<string name="title_optional">Optional</string>
<string name="title_account_linked">Linked account</string>
<string name="title_account_name">Account name</string>