Fix session logic: enforce same type of encryption
This commit is contained in:
parent
1ed550b5c5
commit
74ab36fda2
|
@ -709,4 +709,35 @@ public class Message extends AbstractEntity {
|
|||
return conversation.getAccount().getAxolotlService().getFingerprintTrust(axolotlFingerprint)
|
||||
== SQLiteAxolotlStore.Trust.TRUSTED;
|
||||
}
|
||||
|
||||
private int getPreviousEncryption() {
|
||||
for (Message iterator = this.prev(); iterator != null; iterator = iterator.prev()){
|
||||
if( iterator.isCarbon() || iterator.getStatus() == STATUS_RECEIVED ) {
|
||||
continue;
|
||||
}
|
||||
return iterator.getEncryption();
|
||||
}
|
||||
return ENCRYPTION_NONE;
|
||||
}
|
||||
|
||||
private int getNextEncryption() {
|
||||
for (Message iterator = this.next(); iterator != null; iterator = iterator.next()){
|
||||
if( iterator.isCarbon() || iterator.getStatus() == STATUS_RECEIVED ) {
|
||||
continue;
|
||||
}
|
||||
return iterator.getEncryption();
|
||||
}
|
||||
return conversation.getNextEncryption(false);
|
||||
}
|
||||
|
||||
public boolean isValidInSession() {
|
||||
int pastEncryption = this.getPreviousEncryption();
|
||||
int futureEncryption = this.getNextEncryption();
|
||||
|
||||
boolean inUnencryptedSession = pastEncryption == ENCRYPTION_NONE
|
||||
|| futureEncryption == ENCRYPTION_NONE
|
||||
|| pastEncryption != futureEncryption;
|
||||
|
||||
return inUnencryptedSession || this.getEncryption() == pastEncryption;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -569,32 +569,10 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
|||
}
|
||||
|
||||
if (type == RECEIVED) {
|
||||
boolean wasEncrypted = false;
|
||||
for (Message iterator = message.prev(); iterator != null; iterator = iterator.prev()){
|
||||
if (iterator.getEncryption() != Message.ENCRYPTION_NONE) {
|
||||
wasEncrypted = true;
|
||||
break;
|
||||
}
|
||||
if (!iterator.isCarbon() && iterator.getType() == SENT) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
boolean willBeEncrypted = conversation.getNextEncryption(false) != Message.ENCRYPTION_NONE;
|
||||
for (Message iterator = message.next(); iterator != null; iterator = iterator.next()){
|
||||
if (iterator.getEncryption() != Message.ENCRYPTION_NONE) {
|
||||
willBeEncrypted = true;
|
||||
break;
|
||||
}
|
||||
if (!iterator.isCarbon() && iterator.getType() == SENT) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( willBeEncrypted && wasEncrypted
|
||||
&& message.getEncryption() == Message.ENCRYPTION_NONE) {
|
||||
viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_warning);
|
||||
} else {
|
||||
if(message.isValidInSession()) {
|
||||
viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received);
|
||||
} else {
|
||||
viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_warning);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue