Loading k9mail/src/main/java/com/fsck/k9/activity/compose/ComposeCryptoStatus.java +16 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public class ComposeCryptoStatus { private boolean enablePgpInline; private boolean preferEncryptMutual; private boolean isReplyToEncrypted; private boolean encryptSubject; private CryptoMode cryptoMode; private RecipientAutocryptStatus recipientAutocryptStatus; Loading Loading @@ -166,6 +167,10 @@ public class ComposeCryptoStatus { return recipientAutocryptStatus.intent; } public boolean isEncryptSubject() { return encryptSubject; } public static class ComposeCryptoStatusBuilder { private OpenPgpProviderState openPgpProviderState; Loading @@ -175,6 +180,7 @@ public class ComposeCryptoStatus { private Boolean enablePgpInline; private Boolean preferEncryptMutual; private Boolean isReplyToEncrypted; private Boolean encryptSubject; public ComposeCryptoStatusBuilder setOpenPgpProviderState(OpenPgpProviderState openPgpProviderState) { this.openPgpProviderState = openPgpProviderState; Loading Loading @@ -211,6 +217,11 @@ public class ComposeCryptoStatus { return this; } public ComposeCryptoStatusBuilder setEncryptSubject(boolean encryptSubject) { this.encryptSubject = encryptSubject; return this; } public ComposeCryptoStatus build() { if (openPgpProviderState == null) { throw new AssertionError("cryptoProviderState must be set!"); Loading @@ -230,6 +241,9 @@ public class ComposeCryptoStatus { if (isReplyToEncrypted == null) { throw new AssertionError("isReplyToEncrypted must be set!"); } if (encryptSubject == null) { throw new AssertionError("encryptSubject must be set!"); } ArrayList<String> recipientAddresses = new ArrayList<>(); for (Recipient recipient : recipients) { Loading @@ -244,6 +258,7 @@ public class ComposeCryptoStatus { result.isReplyToEncrypted = isReplyToEncrypted; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.encryptSubject = encryptSubject; return result; } } Loading @@ -257,6 +272,7 @@ public class ComposeCryptoStatus { result.openPgpKeyId = openPgpKeyId; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.encryptSubject = encryptSubject; result.recipientAutocryptStatus = recipientAutocryptStatusType; return result; } Loading k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientPresenter.java +1 −0 Original line number Diff line number Diff line Loading @@ -394,6 +394,7 @@ public class RecipientPresenter { .setEnablePgpInline(cryptoEnablePgpInline) .setPreferEncryptMutual(account.getAutocryptPreferEncryptMutual()) .setIsReplyToEncrypted(isReplyToEncryptedMessage) .setEncryptSubject(account.getOpenPgpEncryptSubject()) .setRecipients(getAllRecipients()) .setOpenPgpKeyId(accountCryptoKey) .build(); Loading k9mail/src/main/java/com/fsck/k9/message/PgpMessageBuilder.java +17 −12 Original line number Diff line number Diff line Loading @@ -151,7 +151,12 @@ public class PgpMessageBuilder extends MessageBuilder { } if (messageContentBodyPart == null) { messageContentBodyPart = createBodyPartFromMessageContent(shouldEncrypt); messageContentBodyPart = createBodyPartFromMessageContent(); if (cryptoStatus.isEncryptSubject()) { encryptMessageSubject(); } maybeAddGossipHeadersToBodyPart(); } if (pgpApiIntent == null) { Loading @@ -171,34 +176,34 @@ public class PgpMessageBuilder extends MessageBuilder { } } private MimeBodyPart createBodyPartFromMessageContent(boolean shouldEncrypt) throws MessagingException { private MimeBodyPart createBodyPartFromMessageContent() throws MessagingException { MimeBodyPart bodyPart = currentProcessedMimeMessage.toBodyPart(); String[] contentType = currentProcessedMimeMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE); if (contentType.length > 0) { bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, contentType[0]); } return bodyPart; } private void encryptMessageSubject() { String[] subjects = currentProcessedMimeMessage.getHeader(MimeHeader.SUBJECT); if (subjects.length > 0) { bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, bodyPart.getContentType() + "; protected-headers=\"v1\""); bodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]); messageContentBodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, messageContentBodyPart.getContentType() + "; protected-headers=\"v1\""); messageContentBodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]); currentProcessedMimeMessage.setHeader(MimeHeader.SUBJECT, context.getString(R.string.encrypted_subject)); } addGossipHeadersToBodyPart(shouldEncrypt, bodyPart); return bodyPart; } private void addGossipHeadersToBodyPart(boolean shouldEncrypt, MimeBodyPart bodyPart) { if (!shouldEncrypt) { private void maybeAddGossipHeadersToBodyPart() { if (!cryptoStatus.isEncryptionEnabled()) { return; } String[] recipientAddresses = getCryptoRecipientsWithoutBcc(); boolean hasMultipleOvertRecipients = recipientAddresses.length >= 2; if (hasMultipleOvertRecipients) { addAutocryptGossipHeadersToPart(bodyPart, recipientAddresses); addAutocryptGossipHeadersToPart(messageContentBodyPart, recipientAddresses); } } Loading k9mail/src/test/java/com/fsck/k9/message/PgpMessageBuilderTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -592,6 +592,7 @@ public class PgpMessageBuilderTest extends K9RobolectricTest { .setEnablePgpInline(false) .setPreferEncryptMutual(false) .setIsReplyToEncrypted(false) .setEncryptSubject(true) .setOpenPgpKeyId(TEST_KEY_ID) .setRecipients(new ArrayList<Recipient>()) .setOpenPgpProviderState(OpenPgpProviderState.OK); Loading Loading
k9mail/src/main/java/com/fsck/k9/activity/compose/ComposeCryptoStatus.java +16 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public class ComposeCryptoStatus { private boolean enablePgpInline; private boolean preferEncryptMutual; private boolean isReplyToEncrypted; private boolean encryptSubject; private CryptoMode cryptoMode; private RecipientAutocryptStatus recipientAutocryptStatus; Loading Loading @@ -166,6 +167,10 @@ public class ComposeCryptoStatus { return recipientAutocryptStatus.intent; } public boolean isEncryptSubject() { return encryptSubject; } public static class ComposeCryptoStatusBuilder { private OpenPgpProviderState openPgpProviderState; Loading @@ -175,6 +180,7 @@ public class ComposeCryptoStatus { private Boolean enablePgpInline; private Boolean preferEncryptMutual; private Boolean isReplyToEncrypted; private Boolean encryptSubject; public ComposeCryptoStatusBuilder setOpenPgpProviderState(OpenPgpProviderState openPgpProviderState) { this.openPgpProviderState = openPgpProviderState; Loading Loading @@ -211,6 +217,11 @@ public class ComposeCryptoStatus { return this; } public ComposeCryptoStatusBuilder setEncryptSubject(boolean encryptSubject) { this.encryptSubject = encryptSubject; return this; } public ComposeCryptoStatus build() { if (openPgpProviderState == null) { throw new AssertionError("cryptoProviderState must be set!"); Loading @@ -230,6 +241,9 @@ public class ComposeCryptoStatus { if (isReplyToEncrypted == null) { throw new AssertionError("isReplyToEncrypted must be set!"); } if (encryptSubject == null) { throw new AssertionError("encryptSubject must be set!"); } ArrayList<String> recipientAddresses = new ArrayList<>(); for (Recipient recipient : recipients) { Loading @@ -244,6 +258,7 @@ public class ComposeCryptoStatus { result.isReplyToEncrypted = isReplyToEncrypted; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.encryptSubject = encryptSubject; return result; } } Loading @@ -257,6 +272,7 @@ public class ComposeCryptoStatus { result.openPgpKeyId = openPgpKeyId; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.encryptSubject = encryptSubject; result.recipientAutocryptStatus = recipientAutocryptStatusType; return result; } Loading
k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientPresenter.java +1 −0 Original line number Diff line number Diff line Loading @@ -394,6 +394,7 @@ public class RecipientPresenter { .setEnablePgpInline(cryptoEnablePgpInline) .setPreferEncryptMutual(account.getAutocryptPreferEncryptMutual()) .setIsReplyToEncrypted(isReplyToEncryptedMessage) .setEncryptSubject(account.getOpenPgpEncryptSubject()) .setRecipients(getAllRecipients()) .setOpenPgpKeyId(accountCryptoKey) .build(); Loading
k9mail/src/main/java/com/fsck/k9/message/PgpMessageBuilder.java +17 −12 Original line number Diff line number Diff line Loading @@ -151,7 +151,12 @@ public class PgpMessageBuilder extends MessageBuilder { } if (messageContentBodyPart == null) { messageContentBodyPart = createBodyPartFromMessageContent(shouldEncrypt); messageContentBodyPart = createBodyPartFromMessageContent(); if (cryptoStatus.isEncryptSubject()) { encryptMessageSubject(); } maybeAddGossipHeadersToBodyPart(); } if (pgpApiIntent == null) { Loading @@ -171,34 +176,34 @@ public class PgpMessageBuilder extends MessageBuilder { } } private MimeBodyPart createBodyPartFromMessageContent(boolean shouldEncrypt) throws MessagingException { private MimeBodyPart createBodyPartFromMessageContent() throws MessagingException { MimeBodyPart bodyPart = currentProcessedMimeMessage.toBodyPart(); String[] contentType = currentProcessedMimeMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE); if (contentType.length > 0) { bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, contentType[0]); } return bodyPart; } private void encryptMessageSubject() { String[] subjects = currentProcessedMimeMessage.getHeader(MimeHeader.SUBJECT); if (subjects.length > 0) { bodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, bodyPart.getContentType() + "; protected-headers=\"v1\""); bodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]); messageContentBodyPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, messageContentBodyPart.getContentType() + "; protected-headers=\"v1\""); messageContentBodyPart.setHeader(MimeHeader.SUBJECT, subjects[0]); currentProcessedMimeMessage.setHeader(MimeHeader.SUBJECT, context.getString(R.string.encrypted_subject)); } addGossipHeadersToBodyPart(shouldEncrypt, bodyPart); return bodyPart; } private void addGossipHeadersToBodyPart(boolean shouldEncrypt, MimeBodyPart bodyPart) { if (!shouldEncrypt) { private void maybeAddGossipHeadersToBodyPart() { if (!cryptoStatus.isEncryptionEnabled()) { return; } String[] recipientAddresses = getCryptoRecipientsWithoutBcc(); boolean hasMultipleOvertRecipients = recipientAddresses.length >= 2; if (hasMultipleOvertRecipients) { addAutocryptGossipHeadersToPart(bodyPart, recipientAddresses); addAutocryptGossipHeadersToPart(messageContentBodyPart, recipientAddresses); } } Loading
k9mail/src/test/java/com/fsck/k9/message/PgpMessageBuilderTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -592,6 +592,7 @@ public class PgpMessageBuilderTest extends K9RobolectricTest { .setEnablePgpInline(false) .setPreferEncryptMutual(false) .setIsReplyToEncrypted(false) .setEncryptSubject(true) .setOpenPgpKeyId(TEST_KEY_ID) .setRecipients(new ArrayList<Recipient>()) .setOpenPgpProviderState(OpenPgpProviderState.OK); Loading