fixed behaviour with non-default encryption masks

This commit is contained in:
Daniel Gultsch 2017-01-16 13:09:36 +01:00
parent 7219e077f4
commit 764026b87e
1 changed files with 33 additions and 17 deletions

View File

@ -680,25 +680,41 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
return this.nextCounterpart; return this.nextCounterpart;
} }
private int getMostRecentlyUsedIncomingEncryption() { public int getNextEncryption() {
synchronized (this.messages) { return fixAvailableEncryption(this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, getDefaultEncryption()));
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;
}
}
}
}
return Message.ENCRYPTION_NONE;
} }
public int getNextEncryption() { private int fixAvailableEncryption(int selectedEncryption) {
return Math.max(this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, Message.ENCRYPTION_NONE), Message.ENCRYPTION_NONE); 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 void setNextEncryption(int encryption) { public void setNextEncryption(int encryption) {