aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2017-01-16 13:09:36 +0100
committerDaniel Gultsch <daniel@gultsch.de>2017-01-16 13:09:36 +0100
commit764026b87e16f0819e4a96f2207c55598339fcbe (patch)
tree893682a514cea4028ac7835ab4f8fed1ee2bd1ce
parent7219e077f42bd6da99a529380b7f0962a2bd7030 (diff)
fixed behaviour with non-default encryption masks
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Conversation.java44
1 files changed, 30 insertions, 14 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index ced48913..fa74c418 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -680,25 +680,41 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
return this.nextCounterpart;
}
- private int getMostRecentlyUsedIncomingEncryption() {
- synchronized (this.messages) {
- for(int i = this.messages.size() -1; i >= 0; --i) {
- final Message m = this.messages.get(i);
- if (m.getStatus() == Message.STATUS_RECEIVED) {
- final int e = m.getEncryption();
- if (e == Message.ENCRYPTION_DECRYPTED || e == Message.ENCRYPTION_DECRYPTION_FAILED) {
- return Message.ENCRYPTION_PGP;
- } else {
- return e;
- }
+ public int getNextEncryption() {
+ return fixAvailableEncryption(this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, getDefaultEncryption()));
}
+
+ private int fixAvailableEncryption(int selectedEncryption) {
+ switch(selectedEncryption) {
+ case Message.ENCRYPTION_NONE:
+ return Config.supportUnencrypted() ? selectedEncryption : getDefaultEncryption();
+ case Message.ENCRYPTION_AXOLOTL:
+ return Config.supportOmemo() ? selectedEncryption : getDefaultEncryption();
+ case Message.ENCRYPTION_OTR:
+ return Config.supportOtr() ? selectedEncryption : getDefaultEncryption();
+ case Message.ENCRYPTION_PGP:
+ case Message.ENCRYPTION_DECRYPTED:
+ case Message.ENCRYPTION_DECRYPTION_FAILED:
+ return Config.supportOpenPgp() ? Message.ENCRYPTION_PGP : getDefaultEncryption();
+ default:
+ return getDefaultEncryption();
}
}
+
+ private int getDefaultEncryption() {
+ AxolotlService axolotlService = account.getAxolotlService();
+ if (Config.supportUnencrypted()) {
+ return Message.ENCRYPTION_NONE;
+ } else if (Config.supportOmemo()
+ && (axolotlService != null && axolotlService.isConversationAxolotlCapable(this) || !Config.multipleEncryptionChoices())) {
+ return Message.ENCRYPTION_AXOLOTL;
+ } else if (Config.supportOtr() && mode == MODE_SINGLE) {
+ return Message.ENCRYPTION_OTR;
+ } else if (Config.supportOpenPgp()) {
+ return Message.ENCRYPTION_PGP;
+ } else {
return Message.ENCRYPTION_NONE;
}
-
- public int getNextEncryption() {
- return Math.max(this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, Message.ENCRYPTION_NONE), Message.ENCRYPTION_NONE);
}
public void setNextEncryption(int encryption) {