Added identity option to send plain text only

This commit is contained in:
M66B 2019-02-09 12:54:58 +00:00
parent aa3f4a4990
commit f0fc21bfbc
9 changed files with 1505 additions and 11 deletions

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 41,
version = 42,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -482,6 +482,13 @@ public abstract class DB extends RoomDatabase {
db.execSQL("ALTER TABLE `message` ADD COLUMN `flags` TEXT");
}
})
.addMigrations(new Migration(41, 42) {
@Override
public void migrate(SupportSQLiteDatabase db) {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `identity` ADD COLUMN `plain_only` INTEGER NOT NULL DEFAULT 0");
}
})
.build();
}

View File

@ -76,6 +76,8 @@ public class EntityIdentity {
public String replyto;
public String bcc;
@NonNull
public Boolean plain_only = false;
@NonNull
public Boolean delivery_receipt = false;
@NonNull
public Boolean read_receipt = false;
@ -113,6 +115,7 @@ public class EntityIdentity {
json.put("replyto", replyto);
json.put("bcc", bcc);
json.put("plain_only", plain_only);
json.put("delivery_receipt", delivery_receipt);
json.put("read_receipt", read_receipt);
json.put("store_sent", store_sent);
@ -151,6 +154,8 @@ public class EntityIdentity {
if (json.has("bcc"))
identity.bcc = json.getString("bcc");
if (json.has("plain_only"))
identity.plain_only = json.getBoolean("plain_only");
if (json.has("delivery_receipt"))
identity.delivery_receipt = json.getBoolean("delivery_receipt");
if (json.has("read_receipt"))

View File

@ -1003,11 +1003,14 @@ public class FragmentCompose extends FragmentBase {
if (attachment.encryption != null)
attachments.remove(attachment);
EntityIdentity identity =
(message.identity == null ? null : db.identity().getIdentity(message.identity));
// Build message
Properties props = MessageHelper.getSessionProperties(Helper.AUTH_TYPE_PASSWORD, null, false);
Session isession = Session.getInstance(props, null);
MimeMessage imessage = new MimeMessage(isession);
MessageHelper.build(context, message, imessage);
MessageHelper.build(context, message, imessage, identity == null ? false : identity.plain_only);
// Serialize message
ByteArrayOutputStream os = new ByteArrayOutputStream();

View File

@ -99,6 +99,7 @@ public class FragmentIdentity extends FragmentBase {
private EditText etReplyTo;
private EditText etBcc;
private CheckBox cbPlainOnly;
private CheckBox cbDeliveryReceipt;
private CheckBox cbReadReceipt;
@ -165,6 +166,7 @@ public class FragmentIdentity extends FragmentBase {
etReplyTo = view.findViewById(R.id.etReplyTo);
etBcc = view.findViewById(R.id.etBcc);
cbPlainOnly = view.findViewById(R.id.cbPlainOnly);
cbDeliveryReceipt = view.findViewById(R.id.cbDeliveryReceipt);
cbReadReceipt = view.findViewById(R.id.cbReadReceipt);
@ -464,6 +466,7 @@ public class FragmentIdentity extends FragmentBase {
args.putString("display", etDisplay.getText().toString());
args.putString("replyto", etReplyTo.getText().toString().trim());
args.putString("bcc", etBcc.getText().toString().trim());
args.putBoolean("plain_only", cbPlainOnly.isChecked());
args.putBoolean("delivery_receipt", cbDeliveryReceipt.isChecked());
args.putBoolean("read_receipt", cbReadReceipt.isChecked());
args.putBoolean("store_sent", cbStoreSent.isChecked());
@ -523,6 +526,7 @@ public class FragmentIdentity extends FragmentBase {
String replyto = args.getString("replyto");
String bcc = args.getString("bcc");
boolean plain_only = args.getBoolean("plain_only");
boolean delivery_receipt = args.getBoolean("delivery_receipt");
boolean read_receipt = args.getBoolean("read_receipt");
boolean store_sent = args.getBoolean("store_sent");
@ -627,6 +631,7 @@ public class FragmentIdentity extends FragmentBase {
identity.replyto = replyto;
identity.bcc = bcc;
identity.plain_only = plain_only;
identity.delivery_receipt = delivery_receipt;
identity.read_receipt = read_receipt;
identity.store_sent = store_sent;
@ -728,6 +733,7 @@ public class FragmentIdentity extends FragmentBase {
etReplyTo.setText(identity == null ? null : identity.replyto);
etBcc.setText(identity == null ? null : identity.bcc);
cbPlainOnly.setChecked(identity == null ? false : identity.plain_only);
cbDeliveryReceipt.setChecked(identity == null ? false : identity.delivery_receipt);
cbReadReceipt.setChecked(identity == null ? false : identity.read_receipt);
cbStoreSent.setChecked(identity == null ? false : identity.store_sent);

View File

@ -185,7 +185,7 @@ public class MessageHelper {
return props;
}
static MimeMessageEx from(Context context, EntityMessage message, Session isession) throws MessagingException, IOException {
static MimeMessageEx from(Context context, EntityMessage message, Session isession, boolean plainOnly) throws MessagingException, IOException {
DB db = DB.getInstance(context);
MimeMessageEx imessage = new MimeMessageEx(isession, message.msgid);
@ -282,12 +282,12 @@ public class MessageHelper {
return imessage;
}
build(context, message, imessage);
build(context, message, imessage, plainOnly);
return imessage;
}
static void build(Context context, EntityMessage message, MimeMessage imessage) throws IOException, MessagingException {
static void build(Context context, EntityMessage message, MimeMessage imessage, boolean plainOnly) throws IOException, MessagingException {
DB db = DB.getInstance(context);
StringBuilder body = new StringBuilder();
@ -334,12 +334,18 @@ public class MessageHelper {
Log.i("Attachments available=" + available);
if (available == 0)
imessage.setContent(alternativePart);
if (plainOnly)
imessage.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name());
else
imessage.setContent(alternativePart);
else {
Multipart mixedPart = new MimeMultipart("mixed");
BodyPart attachmentPart = new MimeBodyPart();
attachmentPart.setContent(alternativePart);
if (plainOnly)
attachmentPart.setContent(plainContent, "text/plain; charset=" + Charset.defaultCharset().name());
else
attachmentPart.setContent(alternativePart);
mixedPart.addBodyPart(attachmentPart);
for (final EntityAttachment attachment : attachments)

View File

@ -1690,12 +1690,16 @@ public class ServiceSynchronize extends LifecycleService {
if (!message.content)
throw new IllegalArgumentException("Message body missing");
EntityIdentity identity =
(message.identity == null ? null : db.identity().getIdentity(message.identity));
List<EntityAttachment> attachments = db.attachment().getAttachments(message.id);
for (EntityAttachment attachment : attachments)
if (!attachment.available)
throw new IllegalArgumentException("Attachment missing");
imessage = MessageHelper.from(this, message, isession);
imessage = MessageHelper.from(this, message, isession,
identity == null ? false : identity.plain_only);
} else {
// Cross account move
File file = EntityMessage.getRawFile(this, message.id);
@ -1891,7 +1895,7 @@ public class ServiceSynchronize extends LifecycleService {
final Session isession = Session.getInstance(props, null);
// Create message
MimeMessage imessage = MessageHelper.from(this, message, isession);
MimeMessage imessage = MessageHelper.from(this, message, isession, ident.plain_only);
// Add reply to
if (ident.replyto != null)

View File

@ -448,6 +448,15 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvBcc" />
<CheckBox
android:id="@+id/cbPlainOnly"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_identity_plain_text"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etBcc" />
<CheckBox
android:id="@+id/cbDeliveryReceipt"
android:layout_width="wrap_content"
@ -455,7 +464,7 @@
android:layout_marginTop="12dp"
android:text="@string/title_identity_delivery_receipt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/etBcc" />
app:layout_constraintTop_toBottomOf="@id/cbPlainOnly" />
<CheckBox
android:id="@+id/cbReadReceipt"
@ -562,7 +571,7 @@
tvRealm,etRealm,
cbSynchronize,cbPrimary,
tvReplyTo,etReplyTo,tvBcc,etBcc,
cbDeliveryReceipt,cbReadReceipt,tvReceipt,
cbPlainOnly,cbDeliveryReceipt,cbReadReceipt,tvReceipt,
cbStoreSent,tvStoreSent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

View File

@ -191,6 +191,7 @@
<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_plain_text">Send plain text only</string>
<string name="title_identity_read_receipt">Request read receipt</string>
<string name="title_identity_delivery_receipt">Request delivery receipt</string>
<string name="title_identity_receipt_remark">Most providers ignore receipt requests</string>