Loading k9mail/src/main/java/com/fsck/k9/activity/MessageCompose.java +2 −2 Original line number Diff line number Diff line Loading @@ -966,11 +966,11 @@ public class MessageCompose extends K9Activity implements OnClickListener, recipientPresenter.onMenuAddFromContacts(); break; case R.id.openpgp_encrypt_disable: recipientPresenter.onMenuSetEnableEncryption(false); recipientPresenter.onMenuToggleEncryption(); updateMessageFormat(); break; case R.id.openpgp_encrypt_enable: recipientPresenter.onMenuSetEnableEncryption(true); recipientPresenter.onMenuToggleEncryption(); updateMessageFormat(); break; case R.id.openpgp_inline_enable: Loading k9mail/src/main/java/com/fsck/k9/activity/compose/ComposeCryptoStatus.java +33 −43 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ public class ComposeCryptoStatus { private String[] recipientAddresses; private boolean enablePgpInline; private boolean preferEncryptMutual; private boolean isReplyToEncrypted; private CryptoMode cryptoMode; private RecipientAutocryptStatus recipientAutocryptStatus; Loading Loading @@ -60,48 +61,20 @@ public class ComposeCryptoStatus { return CryptoStatusDisplayType.ERROR; } switch (cryptoMode) { case CHOICE_ENABLED: if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.CHOICE_ENABLED_TRUSTED; if (isEncryptionEnabled()) { if (!recipientAutocryptStatusType.canEncrypt()) { return CryptoStatusDisplayType.ENABLED_ERROR; } else if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.ENABLED_TRUSTED; } else { return CryptoStatusDisplayType.CHOICE_ENABLED_UNTRUSTED; } } else { return CryptoStatusDisplayType.CHOICE_ENABLED_ERROR; } case CHOICE_DISABLED: if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.CHOICE_DISABLED_TRUSTED; } else { return CryptoStatusDisplayType.CHOICE_DISABLED_UNTRUSTED; } } else { return CryptoStatusDisplayType.CHOICE_DISABLED_UNAVAILABLE; } case NO_CHOICE: if (recipientAutocryptStatusType == RecipientAutocryptStatusType.NO_RECIPIENTS) { return CryptoStatusDisplayType.NO_CHOICE_EMPTY; } else if (canEncryptAndIsMutualDefault()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.NO_CHOICE_MUTUAL_TRUSTED; } else { return CryptoStatusDisplayType.NO_CHOICE_MUTUAL; return CryptoStatusDisplayType.ENABLED; } } else if (isSigningEnabled()) { return CryptoStatusDisplayType.SIGN_ONLY; } else if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.NO_CHOICE_AVAILABLE_TRUSTED; return CryptoStatusDisplayType.AVAILABLE; } else { return CryptoStatusDisplayType.NO_CHOICE_AVAILABLE; } } return CryptoStatusDisplayType.NO_CHOICE_UNAVAILABLE; case SIGN_ONLY: return CryptoStatusDisplayType.SIGN_ONLY; default: throw new AssertionError("all CryptoModes must be handled!"); return CryptoStatusDisplayType.UNAVAILABLE; } } Loading Loading @@ -137,7 +110,8 @@ public class ComposeCryptoStatus { boolean isExplicitlyEnabled = (cryptoMode == CryptoMode.CHOICE_ENABLED); boolean isMutualAndNotDisabled = (cryptoMode != CryptoMode.CHOICE_DISABLED && canEncryptAndIsMutualDefault()); return isExplicitlyEnabled || isMutualAndNotDisabled; boolean isReplyAndNotDisabled = (cryptoMode != CryptoMode.CHOICE_DISABLED && isReplyToEncrypted()); return isExplicitlyEnabled || isMutualAndNotDisabled || isReplyAndNotDisabled; } boolean isSignOnly() { Loading Loading @@ -176,6 +150,10 @@ public class ComposeCryptoStatus { return recipientAutocryptStatus.type.isMutual(); } public boolean isReplyToEncrypted() { return isReplyToEncrypted; } boolean canEncryptAndIsMutualDefault() { return allRecipientsCanEncrypt() && isSenderPreferEncryptMutual() && isRecipientsPreferEncryptMutual(); } Loading @@ -196,6 +174,7 @@ public class ComposeCryptoStatus { private List<Recipient> recipients; private Boolean enablePgpInline; private Boolean preferEncryptMutual; private Boolean isReplyToEncrypted; public ComposeCryptoStatusBuilder setOpenPgpProviderState(OpenPgpProviderState openPgpProviderState) { this.openPgpProviderState = openPgpProviderState; Loading Loading @@ -227,6 +206,11 @@ public class ComposeCryptoStatus { return this; } public ComposeCryptoStatusBuilder setIsReplyToEncrypted(boolean isReplyToEncrypted) { this.isReplyToEncrypted = isReplyToEncrypted; return this; } public ComposeCryptoStatus build() { if (openPgpProviderState == null) { throw new AssertionError("cryptoProviderState must be set!"); Loading @@ -243,6 +227,9 @@ public class ComposeCryptoStatus { if (preferEncryptMutual == null) { throw new AssertionError("preferEncryptMutual must be set!"); } if (isReplyToEncrypted == null) { throw new AssertionError("isReplyToEncrypted must be set!"); } ArrayList<String> recipientAddresses = new ArrayList<>(); for (Recipient recipient : recipients) { Loading @@ -254,6 +241,7 @@ public class ComposeCryptoStatus { result.cryptoMode = cryptoMode; result.recipientAddresses = recipientAddresses.toArray(new String[0]); result.openPgpKeyId = openPgpKeyId; result.isReplyToEncrypted = isReplyToEncrypted; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; return result; Loading @@ -265,8 +253,10 @@ public class ComposeCryptoStatus { result.openPgpProviderState = openPgpProviderState; result.cryptoMode = cryptoMode; result.recipientAddresses = recipientAddresses; result.isReplyToEncrypted = isReplyToEncrypted; result.openPgpKeyId = openPgpKeyId; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.recipientAutocryptStatus = recipientAutocryptStatusType; return result; } Loading k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientMvpView.java +5 −12 Original line number Diff line number Diff line Loading @@ -442,18 +442,11 @@ public class RecipientMvpView implements OnFocusChangeListener, OnClickListener UNCONFIGURED(VIEW_INDEX_HIDDEN), UNINITIALIZED(VIEW_INDEX_HIDDEN), SIGN_ONLY(R.id.crypto_status_disabled), NO_CHOICE_EMPTY(VIEW_INDEX_HIDDEN), NO_CHOICE_UNAVAILABLE(VIEW_INDEX_HIDDEN), NO_CHOICE_AVAILABLE(R.id.crypto_status_disabled), NO_CHOICE_AVAILABLE_TRUSTED(R.id.crypto_status_disabled), NO_CHOICE_MUTUAL(R.id.crypto_status_enabled), NO_CHOICE_MUTUAL_TRUSTED(R.id.crypto_status_trusted), CHOICE_ENABLED_UNTRUSTED(R.id.crypto_status_enabled), CHOICE_ENABLED_TRUSTED(R.id.crypto_status_trusted), CHOICE_ENABLED_ERROR(R.id.crypto_status_error), CHOICE_DISABLED_UNTRUSTED(R.id.crypto_status_disabled), CHOICE_DISABLED_TRUSTED(R.id.crypto_status_disabled), CHOICE_DISABLED_UNAVAILABLE(VIEW_INDEX_HIDDEN), UNAVAILABLE(VIEW_INDEX_HIDDEN), ENABLED(R.id.crypto_status_enabled), ENABLED_ERROR(R.id.crypto_status_error), ENABLED_TRUSTED(R.id.crypto_status_trusted), AVAILABLE(R.id.crypto_status_disabled), ERROR(R.id.crypto_status_error); Loading k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientPresenter.java +45 −60 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ public class RecipientPresenter { private RecipientType lastFocusedType = RecipientType.TO; private CryptoMode currentCryptoMode = CryptoMode.NO_CHOICE; private boolean cryptoEnablePgpInline = false; private boolean isReplyToEncryptedMessage = false; public RecipientPresenter(Context context, LoaderManager loaderManager, Loading Loading @@ -170,8 +171,7 @@ public class RecipientPresenter { cryptoEnablePgpInline = true; } boolean shouldEnablePgpByDefault = composePgpEnableByDefaultDecider.shouldEncryptByDefault(message); currentCryptoMode = shouldEnablePgpByDefault ? CryptoMode.CHOICE_ENABLED : CryptoMode.NO_CHOICE; isReplyToEncryptedMessage = composePgpEnableByDefaultDecider.shouldEncryptByDefault(message); } public void initFromTrustIdAction(String trustId) { Loading Loading @@ -393,6 +393,7 @@ public class RecipientPresenter { .setCryptoMode(currentCryptoMode) .setEnablePgpInline(cryptoEnablePgpInline) .setPreferEncryptMutual(account.getAutocryptPreferEncryptMutual()) .setIsReplyToEncrypted(isReplyToEncryptedMessage) .setRecipients(getAllRecipients()) .setOpenPgpKeyId(accountCryptoKey) .build(); Loading Loading @@ -617,6 +618,20 @@ public class RecipientPresenter { Timber.e("click on crypto status while unconfigured - this should not really happen?!"); return; case OK: toggleEncryptionState(false); return; case UI_REQUIRED: // TODO show openpgp settings PendingIntent pendingIntent = openPgpApiManager.getUserInteractionPendingIntent(); recipientMvpView.launchUserInteractionPendingIntent(pendingIntent, OPENPGP_USER_INTERACTION); break; case UNINITIALIZED: case ERROR: openPgpApiManager.refreshConnection(); } } private void toggleEncryptionState(boolean showGotIt) { ComposeCryptoStatus currentCryptoStatus = getCurrentCachedCryptoStatus(); if (currentCryptoStatus == null) { Timber.e("click on crypto status while crypto status not available - should not really happen?!"); Loading @@ -633,35 +648,25 @@ public class RecipientPresenter { return; } boolean isEncryptOnNoChoice = currentCryptoStatus.canEncryptAndIsMutualDefault() || currentCryptoStatus.isReplyToEncrypted(); if (currentCryptoMode == CryptoMode.NO_CHOICE) { if (currentCryptoStatus.hasAutocryptPendingIntent()) { recipientMvpView.launchUserInteractionPendingIntent( currentCryptoStatus.getAutocryptPendingIntent(), REQUEST_CODE_AUTOCRYPT); } else if (currentCryptoStatus.canEncryptAndIsMutualDefault()) { } else if (isEncryptOnNoChoice) { // TODO warning dialog if we override, especially from reply! onCryptoModeChanged(CryptoMode.CHOICE_DISABLED); } else { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); if (showGotIt) { recipientMvpView.showOpenPgpEncryptExplanationDialog(); } return; } if (currentCryptoMode == CryptoMode.CHOICE_DISABLED && !currentCryptoStatus.canEncryptAndIsMutualDefault()) { } else if (currentCryptoMode == CryptoMode.CHOICE_DISABLED && !isEncryptOnNoChoice) { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); return; } } else { onCryptoModeChanged(CryptoMode.NO_CHOICE); return; case UI_REQUIRED: // TODO show openpgp settings PendingIntent pendingIntent = openPgpApiManager.getUserInteractionPendingIntent(); recipientMvpView.launchUserInteractionPendingIntent(pendingIntent, OPENPGP_USER_INTERACTION); break; case UNINITIALIZED: case ERROR: openPgpApiManager.refreshConnection(); } } Loading Loading @@ -751,28 +756,8 @@ public class RecipientPresenter { } } public void onMenuSetEnableEncryption(boolean enableEncryption) { if (cachedCryptoStatus == null) { Timber.e("Received crypto button press while status wasn't initialized?"); return; } if (enableEncryption) { if (!cachedCryptoStatus.allRecipientsCanEncrypt()) { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); recipientMvpView.showOpenPgpEnabledErrorDialog(true); } else if (cachedCryptoStatus.canEncryptAndIsMutualDefault()) { onCryptoModeChanged(CryptoMode.NO_CHOICE); } else { recipientMvpView.showOpenPgpEncryptExplanationDialog(); onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); } } else { if (cachedCryptoStatus.canEncryptAndIsMutualDefault()) { onCryptoModeChanged(CryptoMode.CHOICE_DISABLED); } else { onCryptoModeChanged(CryptoMode.NO_CHOICE); } } public void onMenuToggleEncryption() { toggleEncryptionState(true); } public void onCryptoPgpClickDisable() { Loading k9mail/src/test/java/com/fsck/k9/activity/compose/RecipientPresenterTest.java +8 −8 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_EMPTY, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -169,7 +169,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_AVAILABLE, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -182,7 +182,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_AVAILABLE_TRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -195,7 +195,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_UNAVAILABLE, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -210,7 +210,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_ENABLED_ERROR, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.ENABLED_ERROR, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -225,7 +225,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_DISABLED_UNTRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -240,7 +240,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_ENABLED_UNTRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.ENABLED, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -267,7 +267,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_EMPTY, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.isPgpInlineModeEnabled()); } Loading Loading
k9mail/src/main/java/com/fsck/k9/activity/MessageCompose.java +2 −2 Original line number Diff line number Diff line Loading @@ -966,11 +966,11 @@ public class MessageCompose extends K9Activity implements OnClickListener, recipientPresenter.onMenuAddFromContacts(); break; case R.id.openpgp_encrypt_disable: recipientPresenter.onMenuSetEnableEncryption(false); recipientPresenter.onMenuToggleEncryption(); updateMessageFormat(); break; case R.id.openpgp_encrypt_enable: recipientPresenter.onMenuSetEnableEncryption(true); recipientPresenter.onMenuToggleEncryption(); updateMessageFormat(); break; case R.id.openpgp_inline_enable: Loading
k9mail/src/main/java/com/fsck/k9/activity/compose/ComposeCryptoStatus.java +33 −43 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ public class ComposeCryptoStatus { private String[] recipientAddresses; private boolean enablePgpInline; private boolean preferEncryptMutual; private boolean isReplyToEncrypted; private CryptoMode cryptoMode; private RecipientAutocryptStatus recipientAutocryptStatus; Loading Loading @@ -60,48 +61,20 @@ public class ComposeCryptoStatus { return CryptoStatusDisplayType.ERROR; } switch (cryptoMode) { case CHOICE_ENABLED: if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.CHOICE_ENABLED_TRUSTED; if (isEncryptionEnabled()) { if (!recipientAutocryptStatusType.canEncrypt()) { return CryptoStatusDisplayType.ENABLED_ERROR; } else if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.ENABLED_TRUSTED; } else { return CryptoStatusDisplayType.CHOICE_ENABLED_UNTRUSTED; } } else { return CryptoStatusDisplayType.CHOICE_ENABLED_ERROR; } case CHOICE_DISABLED: if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.CHOICE_DISABLED_TRUSTED; } else { return CryptoStatusDisplayType.CHOICE_DISABLED_UNTRUSTED; } } else { return CryptoStatusDisplayType.CHOICE_DISABLED_UNAVAILABLE; } case NO_CHOICE: if (recipientAutocryptStatusType == RecipientAutocryptStatusType.NO_RECIPIENTS) { return CryptoStatusDisplayType.NO_CHOICE_EMPTY; } else if (canEncryptAndIsMutualDefault()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.NO_CHOICE_MUTUAL_TRUSTED; } else { return CryptoStatusDisplayType.NO_CHOICE_MUTUAL; return CryptoStatusDisplayType.ENABLED; } } else if (isSigningEnabled()) { return CryptoStatusDisplayType.SIGN_ONLY; } else if (recipientAutocryptStatusType.canEncrypt()) { if (recipientAutocryptStatusType.isConfirmed()) { return CryptoStatusDisplayType.NO_CHOICE_AVAILABLE_TRUSTED; return CryptoStatusDisplayType.AVAILABLE; } else { return CryptoStatusDisplayType.NO_CHOICE_AVAILABLE; } } return CryptoStatusDisplayType.NO_CHOICE_UNAVAILABLE; case SIGN_ONLY: return CryptoStatusDisplayType.SIGN_ONLY; default: throw new AssertionError("all CryptoModes must be handled!"); return CryptoStatusDisplayType.UNAVAILABLE; } } Loading Loading @@ -137,7 +110,8 @@ public class ComposeCryptoStatus { boolean isExplicitlyEnabled = (cryptoMode == CryptoMode.CHOICE_ENABLED); boolean isMutualAndNotDisabled = (cryptoMode != CryptoMode.CHOICE_DISABLED && canEncryptAndIsMutualDefault()); return isExplicitlyEnabled || isMutualAndNotDisabled; boolean isReplyAndNotDisabled = (cryptoMode != CryptoMode.CHOICE_DISABLED && isReplyToEncrypted()); return isExplicitlyEnabled || isMutualAndNotDisabled || isReplyAndNotDisabled; } boolean isSignOnly() { Loading Loading @@ -176,6 +150,10 @@ public class ComposeCryptoStatus { return recipientAutocryptStatus.type.isMutual(); } public boolean isReplyToEncrypted() { return isReplyToEncrypted; } boolean canEncryptAndIsMutualDefault() { return allRecipientsCanEncrypt() && isSenderPreferEncryptMutual() && isRecipientsPreferEncryptMutual(); } Loading @@ -196,6 +174,7 @@ public class ComposeCryptoStatus { private List<Recipient> recipients; private Boolean enablePgpInline; private Boolean preferEncryptMutual; private Boolean isReplyToEncrypted; public ComposeCryptoStatusBuilder setOpenPgpProviderState(OpenPgpProviderState openPgpProviderState) { this.openPgpProviderState = openPgpProviderState; Loading Loading @@ -227,6 +206,11 @@ public class ComposeCryptoStatus { return this; } public ComposeCryptoStatusBuilder setIsReplyToEncrypted(boolean isReplyToEncrypted) { this.isReplyToEncrypted = isReplyToEncrypted; return this; } public ComposeCryptoStatus build() { if (openPgpProviderState == null) { throw new AssertionError("cryptoProviderState must be set!"); Loading @@ -243,6 +227,9 @@ public class ComposeCryptoStatus { if (preferEncryptMutual == null) { throw new AssertionError("preferEncryptMutual must be set!"); } if (isReplyToEncrypted == null) { throw new AssertionError("isReplyToEncrypted must be set!"); } ArrayList<String> recipientAddresses = new ArrayList<>(); for (Recipient recipient : recipients) { Loading @@ -254,6 +241,7 @@ public class ComposeCryptoStatus { result.cryptoMode = cryptoMode; result.recipientAddresses = recipientAddresses.toArray(new String[0]); result.openPgpKeyId = openPgpKeyId; result.isReplyToEncrypted = isReplyToEncrypted; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; return result; Loading @@ -265,8 +253,10 @@ public class ComposeCryptoStatus { result.openPgpProviderState = openPgpProviderState; result.cryptoMode = cryptoMode; result.recipientAddresses = recipientAddresses; result.isReplyToEncrypted = isReplyToEncrypted; result.openPgpKeyId = openPgpKeyId; result.enablePgpInline = enablePgpInline; result.preferEncryptMutual = preferEncryptMutual; result.recipientAutocryptStatus = recipientAutocryptStatusType; return result; } Loading
k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientMvpView.java +5 −12 Original line number Diff line number Diff line Loading @@ -442,18 +442,11 @@ public class RecipientMvpView implements OnFocusChangeListener, OnClickListener UNCONFIGURED(VIEW_INDEX_HIDDEN), UNINITIALIZED(VIEW_INDEX_HIDDEN), SIGN_ONLY(R.id.crypto_status_disabled), NO_CHOICE_EMPTY(VIEW_INDEX_HIDDEN), NO_CHOICE_UNAVAILABLE(VIEW_INDEX_HIDDEN), NO_CHOICE_AVAILABLE(R.id.crypto_status_disabled), NO_CHOICE_AVAILABLE_TRUSTED(R.id.crypto_status_disabled), NO_CHOICE_MUTUAL(R.id.crypto_status_enabled), NO_CHOICE_MUTUAL_TRUSTED(R.id.crypto_status_trusted), CHOICE_ENABLED_UNTRUSTED(R.id.crypto_status_enabled), CHOICE_ENABLED_TRUSTED(R.id.crypto_status_trusted), CHOICE_ENABLED_ERROR(R.id.crypto_status_error), CHOICE_DISABLED_UNTRUSTED(R.id.crypto_status_disabled), CHOICE_DISABLED_TRUSTED(R.id.crypto_status_disabled), CHOICE_DISABLED_UNAVAILABLE(VIEW_INDEX_HIDDEN), UNAVAILABLE(VIEW_INDEX_HIDDEN), ENABLED(R.id.crypto_status_enabled), ENABLED_ERROR(R.id.crypto_status_error), ENABLED_TRUSTED(R.id.crypto_status_trusted), AVAILABLE(R.id.crypto_status_disabled), ERROR(R.id.crypto_status_error); Loading
k9mail/src/main/java/com/fsck/k9/activity/compose/RecipientPresenter.java +45 −60 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ public class RecipientPresenter { private RecipientType lastFocusedType = RecipientType.TO; private CryptoMode currentCryptoMode = CryptoMode.NO_CHOICE; private boolean cryptoEnablePgpInline = false; private boolean isReplyToEncryptedMessage = false; public RecipientPresenter(Context context, LoaderManager loaderManager, Loading Loading @@ -170,8 +171,7 @@ public class RecipientPresenter { cryptoEnablePgpInline = true; } boolean shouldEnablePgpByDefault = composePgpEnableByDefaultDecider.shouldEncryptByDefault(message); currentCryptoMode = shouldEnablePgpByDefault ? CryptoMode.CHOICE_ENABLED : CryptoMode.NO_CHOICE; isReplyToEncryptedMessage = composePgpEnableByDefaultDecider.shouldEncryptByDefault(message); } public void initFromTrustIdAction(String trustId) { Loading Loading @@ -393,6 +393,7 @@ public class RecipientPresenter { .setCryptoMode(currentCryptoMode) .setEnablePgpInline(cryptoEnablePgpInline) .setPreferEncryptMutual(account.getAutocryptPreferEncryptMutual()) .setIsReplyToEncrypted(isReplyToEncryptedMessage) .setRecipients(getAllRecipients()) .setOpenPgpKeyId(accountCryptoKey) .build(); Loading Loading @@ -617,6 +618,20 @@ public class RecipientPresenter { Timber.e("click on crypto status while unconfigured - this should not really happen?!"); return; case OK: toggleEncryptionState(false); return; case UI_REQUIRED: // TODO show openpgp settings PendingIntent pendingIntent = openPgpApiManager.getUserInteractionPendingIntent(); recipientMvpView.launchUserInteractionPendingIntent(pendingIntent, OPENPGP_USER_INTERACTION); break; case UNINITIALIZED: case ERROR: openPgpApiManager.refreshConnection(); } } private void toggleEncryptionState(boolean showGotIt) { ComposeCryptoStatus currentCryptoStatus = getCurrentCachedCryptoStatus(); if (currentCryptoStatus == null) { Timber.e("click on crypto status while crypto status not available - should not really happen?!"); Loading @@ -633,35 +648,25 @@ public class RecipientPresenter { return; } boolean isEncryptOnNoChoice = currentCryptoStatus.canEncryptAndIsMutualDefault() || currentCryptoStatus.isReplyToEncrypted(); if (currentCryptoMode == CryptoMode.NO_CHOICE) { if (currentCryptoStatus.hasAutocryptPendingIntent()) { recipientMvpView.launchUserInteractionPendingIntent( currentCryptoStatus.getAutocryptPendingIntent(), REQUEST_CODE_AUTOCRYPT); } else if (currentCryptoStatus.canEncryptAndIsMutualDefault()) { } else if (isEncryptOnNoChoice) { // TODO warning dialog if we override, especially from reply! onCryptoModeChanged(CryptoMode.CHOICE_DISABLED); } else { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); if (showGotIt) { recipientMvpView.showOpenPgpEncryptExplanationDialog(); } return; } if (currentCryptoMode == CryptoMode.CHOICE_DISABLED && !currentCryptoStatus.canEncryptAndIsMutualDefault()) { } else if (currentCryptoMode == CryptoMode.CHOICE_DISABLED && !isEncryptOnNoChoice) { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); return; } } else { onCryptoModeChanged(CryptoMode.NO_CHOICE); return; case UI_REQUIRED: // TODO show openpgp settings PendingIntent pendingIntent = openPgpApiManager.getUserInteractionPendingIntent(); recipientMvpView.launchUserInteractionPendingIntent(pendingIntent, OPENPGP_USER_INTERACTION); break; case UNINITIALIZED: case ERROR: openPgpApiManager.refreshConnection(); } } Loading Loading @@ -751,28 +756,8 @@ public class RecipientPresenter { } } public void onMenuSetEnableEncryption(boolean enableEncryption) { if (cachedCryptoStatus == null) { Timber.e("Received crypto button press while status wasn't initialized?"); return; } if (enableEncryption) { if (!cachedCryptoStatus.allRecipientsCanEncrypt()) { onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); recipientMvpView.showOpenPgpEnabledErrorDialog(true); } else if (cachedCryptoStatus.canEncryptAndIsMutualDefault()) { onCryptoModeChanged(CryptoMode.NO_CHOICE); } else { recipientMvpView.showOpenPgpEncryptExplanationDialog(); onCryptoModeChanged(CryptoMode.CHOICE_ENABLED); } } else { if (cachedCryptoStatus.canEncryptAndIsMutualDefault()) { onCryptoModeChanged(CryptoMode.CHOICE_DISABLED); } else { onCryptoModeChanged(CryptoMode.NO_CHOICE); } } public void onMenuToggleEncryption() { toggleEncryptionState(true); } public void onCryptoPgpClickDisable() { Loading
k9mail/src/test/java/com/fsck/k9/activity/compose/RecipientPresenterTest.java +8 −8 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_EMPTY, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -169,7 +169,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_AVAILABLE, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -182,7 +182,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_AVAILABLE_TRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -195,7 +195,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_UNAVAILABLE, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -210,7 +210,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_ENABLED_ERROR, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.ENABLED_ERROR, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -225,7 +225,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_DISABLED_UNTRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.AVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -240,7 +240,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.CHOICE_ENABLED_UNTRUSTED, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.ENABLED, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.shouldUsePgpMessageBuilder()); } Loading @@ -267,7 +267,7 @@ public class RecipientPresenterTest extends K9RobolectricTest { runBackgroundTask(); ComposeCryptoStatus status = recipientPresenter.getCurrentCachedCryptoStatus(); assertEquals(CryptoStatusDisplayType.NO_CHOICE_EMPTY, status.getCryptoStatusDisplayType()); assertEquals(CryptoStatusDisplayType.UNAVAILABLE, status.getCryptoStatusDisplayType()); assertTrue(status.isProviderStateOk()); assertTrue(status.isPgpInlineModeEnabled()); } Loading