Loading k9mail/src/main/java/com/fsck/k9/Account.java +11 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ public class Account implements BaseAccount, StoreConfig { private long openPgpKey; private boolean autocryptPreferEncryptMutual; private boolean openPgpHideSignOnly; private boolean openPgpEncryptSubject; private boolean markMessageAsReadOnView; private boolean alwaysShowCcBcc; private boolean allowRemoteSearch; Loading Loading @@ -435,6 +436,7 @@ public class Account implements BaseAccount, StoreConfig { openPgpProvider = storage.getString(accountUuid + ".openPgpProvider", ""); openPgpKey = storage.getLong(accountUuid + ".cryptoKey", NO_OPENPGP_KEY); openPgpHideSignOnly = storage.getBoolean(accountUuid + ".openPgpHideSignOnly", true); openPgpEncryptSubject = storage.getBoolean(accountUuid + ".openPgpEncryptSubject", true); autocryptPreferEncryptMutual = storage.getBoolean(accountUuid + ".autocryptMutualMode", false); allowRemoteSearch = storage.getBoolean(accountUuid + ".allowRemoteSearch", false); remoteSearchFullText = storage.getBoolean(accountUuid + ".remoteSearchFullText", false); Loading Loading @@ -703,6 +705,7 @@ public class Account implements BaseAccount, StoreConfig { editor.putBoolean(accountUuid + ".stripSignature", stripSignature); editor.putLong(accountUuid + ".cryptoKey", openPgpKey); editor.putBoolean(accountUuid + ".openPgpHideSignOnly", openPgpHideSignOnly); editor.putBoolean(accountUuid + ".openPgpEncryptSubject", openPgpEncryptSubject); editor.putString(accountUuid + ".openPgpProvider", openPgpProvider); editor.putBoolean(accountUuid + ".autocryptMutualMode", autocryptPreferEncryptMutual); editor.putBoolean(accountUuid + ".allowRemoteSearch", allowRemoteSearch); Loading Loading @@ -1555,6 +1558,14 @@ public class Account implements BaseAccount, StoreConfig { this.openPgpHideSignOnly = openPgpHideSignOnly; } public boolean getOpenPgpEncryptSubject() { return openPgpEncryptSubject; } public void setOpenPgpEncryptSubject(boolean openPgpEncryptSubject) { this.openPgpEncryptSubject = openPgpEncryptSubject; } public boolean allowRemoteSearch() { return allowRemoteSearch; } 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/activity/setup/AccountSettings.java +7 −1 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ public class AccountSettings extends K9PreferenceActivity { private static final String PREFERENCE_CRYPTO_KEY = "openpgp_key"; private static final String PREFERENCE_CRYPTO_HIDE_SIGN_ONLY = "openpgp_hide_sign_only"; private static final String PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT = "autocrypt_prefer_encrypt"; private static final String PREFERENCE_CRYPTO_ENCRYPT_SUBJECT = "openpgp_encrypt_subject"; private static final String PREFERENCE_CLOUD_SEARCH_ENABLED = "remote_search_enabled"; private static final String PREFERENCE_REMOTE_SEARCH_NUM_RESULTS = "account_remote_search_num_results"; private static final String PREFERENCE_REMOTE_SEARCH_FULL_TEXT = "account_remote_search_full_text"; Loading Loading @@ -187,6 +188,7 @@ public class AccountSettings extends K9PreferenceActivity { private OpenPgpKeyPreference pgpCryptoKey; private Preference autocryptPreferEncryptMutual; private SwitchPreference pgpHideSignOnly; private SwitchPreference pgpEncryptSubject; private PreferenceScreen searchScreen; private CheckBoxPreference cloudSearchEnabled; Loading Loading @@ -734,6 +736,7 @@ public class AccountSettings extends K9PreferenceActivity { pgpCryptoKey = (OpenPgpKeyPreference) findPreference(PREFERENCE_CRYPTO_KEY); autocryptPreferEncryptMutual = findPreference(PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT); pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY); pgpEncryptSubject = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_ENCRYPT_SUBJECT); String pgpProvider = account.getOpenPgpProvider(); String pgpProviderName = null; Loading Loading @@ -806,8 +809,10 @@ public class AccountSettings extends K9PreferenceActivity { }); pgpHideSignOnly.setEnabled(isPgpConfigured && isKeyConfigured); pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY); pgpHideSignOnly.setChecked(account.getOpenPgpHideSignOnly()); pgpEncryptSubject.setEnabled(isPgpConfigured && isKeyConfigured); pgpEncryptSubject.setChecked(account.getOpenPgpEncryptSubject()); } private void removeListEntry(ListPreference listPreference, String remove) { Loading Loading @@ -872,6 +877,7 @@ public class AccountSettings extends K9PreferenceActivity { account.setOpenPgpKey(pgpCryptoKey.getValue()); } account.setOpenPgpHideSignOnly(pgpHideSignOnly.isChecked()); account.setOpenPgpEncryptSubject(pgpEncryptSubject.isChecked()); account.setAutoExpandFolder(autoExpandFolder.getValue()); 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 Loading
k9mail/src/main/java/com/fsck/k9/Account.java +11 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ public class Account implements BaseAccount, StoreConfig { private long openPgpKey; private boolean autocryptPreferEncryptMutual; private boolean openPgpHideSignOnly; private boolean openPgpEncryptSubject; private boolean markMessageAsReadOnView; private boolean alwaysShowCcBcc; private boolean allowRemoteSearch; Loading Loading @@ -435,6 +436,7 @@ public class Account implements BaseAccount, StoreConfig { openPgpProvider = storage.getString(accountUuid + ".openPgpProvider", ""); openPgpKey = storage.getLong(accountUuid + ".cryptoKey", NO_OPENPGP_KEY); openPgpHideSignOnly = storage.getBoolean(accountUuid + ".openPgpHideSignOnly", true); openPgpEncryptSubject = storage.getBoolean(accountUuid + ".openPgpEncryptSubject", true); autocryptPreferEncryptMutual = storage.getBoolean(accountUuid + ".autocryptMutualMode", false); allowRemoteSearch = storage.getBoolean(accountUuid + ".allowRemoteSearch", false); remoteSearchFullText = storage.getBoolean(accountUuid + ".remoteSearchFullText", false); Loading Loading @@ -703,6 +705,7 @@ public class Account implements BaseAccount, StoreConfig { editor.putBoolean(accountUuid + ".stripSignature", stripSignature); editor.putLong(accountUuid + ".cryptoKey", openPgpKey); editor.putBoolean(accountUuid + ".openPgpHideSignOnly", openPgpHideSignOnly); editor.putBoolean(accountUuid + ".openPgpEncryptSubject", openPgpEncryptSubject); editor.putString(accountUuid + ".openPgpProvider", openPgpProvider); editor.putBoolean(accountUuid + ".autocryptMutualMode", autocryptPreferEncryptMutual); editor.putBoolean(accountUuid + ".allowRemoteSearch", allowRemoteSearch); Loading Loading @@ -1555,6 +1558,14 @@ public class Account implements BaseAccount, StoreConfig { this.openPgpHideSignOnly = openPgpHideSignOnly; } public boolean getOpenPgpEncryptSubject() { return openPgpEncryptSubject; } public void setOpenPgpEncryptSubject(boolean openPgpEncryptSubject) { this.openPgpEncryptSubject = openPgpEncryptSubject; } public boolean allowRemoteSearch() { return allowRemoteSearch; } 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/activity/setup/AccountSettings.java +7 −1 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ public class AccountSettings extends K9PreferenceActivity { private static final String PREFERENCE_CRYPTO_KEY = "openpgp_key"; private static final String PREFERENCE_CRYPTO_HIDE_SIGN_ONLY = "openpgp_hide_sign_only"; private static final String PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT = "autocrypt_prefer_encrypt"; private static final String PREFERENCE_CRYPTO_ENCRYPT_SUBJECT = "openpgp_encrypt_subject"; private static final String PREFERENCE_CLOUD_SEARCH_ENABLED = "remote_search_enabled"; private static final String PREFERENCE_REMOTE_SEARCH_NUM_RESULTS = "account_remote_search_num_results"; private static final String PREFERENCE_REMOTE_SEARCH_FULL_TEXT = "account_remote_search_full_text"; Loading Loading @@ -187,6 +188,7 @@ public class AccountSettings extends K9PreferenceActivity { private OpenPgpKeyPreference pgpCryptoKey; private Preference autocryptPreferEncryptMutual; private SwitchPreference pgpHideSignOnly; private SwitchPreference pgpEncryptSubject; private PreferenceScreen searchScreen; private CheckBoxPreference cloudSearchEnabled; Loading Loading @@ -734,6 +736,7 @@ public class AccountSettings extends K9PreferenceActivity { pgpCryptoKey = (OpenPgpKeyPreference) findPreference(PREFERENCE_CRYPTO_KEY); autocryptPreferEncryptMutual = findPreference(PREFERENCE_AUTOCRYPT_PREFER_ENCRYPT); pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY); pgpEncryptSubject = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_ENCRYPT_SUBJECT); String pgpProvider = account.getOpenPgpProvider(); String pgpProviderName = null; Loading Loading @@ -806,8 +809,10 @@ public class AccountSettings extends K9PreferenceActivity { }); pgpHideSignOnly.setEnabled(isPgpConfigured && isKeyConfigured); pgpHideSignOnly = (SwitchPreference) findPreference(PREFERENCE_CRYPTO_HIDE_SIGN_ONLY); pgpHideSignOnly.setChecked(account.getOpenPgpHideSignOnly()); pgpEncryptSubject.setEnabled(isPgpConfigured && isKeyConfigured); pgpEncryptSubject.setChecked(account.getOpenPgpEncryptSubject()); } private void removeListEntry(ListPreference listPreference, String remove) { Loading Loading @@ -872,6 +877,7 @@ public class AccountSettings extends K9PreferenceActivity { account.setOpenPgpKey(pgpCryptoKey.getValue()); } account.setOpenPgpHideSignOnly(pgpHideSignOnly.isChecked()); account.setOpenPgpEncryptSubject(pgpEncryptSubject.isChecked()); account.setAutoExpandFolder(autoExpandFolder.getValue()); 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