diff options
author | lookshe <github@lookshe.org> | 2015-08-24 22:34:53 +0200 |
---|---|---|
committer | lookshe <github@lookshe.org> | 2015-08-24 22:34:53 +0200 |
commit | bceedba4963adea4de14dab4f96635d9fbf2777f (patch) | |
tree | 6044fdbb2bf98bab193c026bfaaf9225ccf5353a /src/main/java/eu/siacs/conversations/entities/Conversation.java | |
parent | ef0f8d4507391dafba2fc9d2b691a117e84b40fc (diff) | |
parent | 5a53ff80fbaafb405f88cb4949bb46d8ffc450cc (diff) |
Merge tag '1.6.3' into trz/rebasetrz/merge_1.6.3
Conflicts:
CHANGELOG.md
README.md
art/render.rb
build.gradle
src/main/java/eu/siacs/conversations/Config.java
src/main/java/eu/siacs/conversations/crypto/OtrService.java
src/main/java/eu/siacs/conversations/crypto/PgpEngine.java
src/main/java/eu/siacs/conversations/entities/Account.java
src/main/java/eu/siacs/conversations/entities/Contact.java
src/main/java/eu/siacs/conversations/entities/DownloadableFile.java
src/main/java/eu/siacs/conversations/entities/Message.java
src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
src/main/java/eu/siacs/conversations/generator/IqGenerator.java
src/main/java/eu/siacs/conversations/generator/MessageGenerator.java
src/main/java/eu/siacs/conversations/http/HttpConnectionManager.java
src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java
src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java
src/main/java/eu/siacs/conversations/parser/AbstractParser.java
src/main/java/eu/siacs/conversations/parser/MessageParser.java
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
src/main/java/eu/siacs/conversations/persistance/FileBackend.java
src/main/java/eu/siacs/conversations/services/NotificationService.java
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
src/main/java/eu/siacs/conversations/ui/XmppActivity.java
src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
src/main/java/eu/siacs/conversations/utils/DNSHelper.java
src/main/java/eu/siacs/conversations/utils/MimeUtils.java
src/main/java/eu/siacs/conversations/utils/UIHelper.java
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java
src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java
src/main/res/layout/account_row.xml
src/main/res/layout/activity_edit_account.xml
src/main/res/layout/activity_muc_details.xml
src/main/res/layout/contact.xml
src/main/res/layout/contact_key.xml
src/main/res/layout/conversation_list_row.xml
src/main/res/layout/fragment_conversation.xml
src/main/res/layout/message_received.xml
src/main/res/layout/message_sent.xml
src/main/res/values-bg/strings.xml
src/main/res/values-ca/strings.xml
src/main/res/values-cs/strings.xml
src/main/res/values-de/strings.xml
src/main/res/values-el/strings.xml
src/main/res/values-es/strings.xml
src/main/res/values-eu/strings.xml
src/main/res/values-id/strings.xml
src/main/res/values-it/strings.xml
src/main/res/values-ja/strings.xml
src/main/res/values-ko/strings.xml
src/main/res/values-nl/strings.xml
src/main/res/values-pl/strings.xml
src/main/res/values-pt/strings.xml
src/main/res/values-ru/strings.xml
src/main/res/values-sk/strings.xml
src/main/res/values-sr/strings.xml
src/main/res/values-sv/strings.xml
src/main/res/values-v21/themes.xml
src/main/res/values-zh-rCN/strings.xml
src/main/res/values/arrays.xml
src/main/res/values/colors.xml
src/main/res/values/dimens.xml
src/main/res/values/strings.xml
src/main/res/xml/preferences.xml
Diffstat (limited to 'src/main/java/eu/siacs/conversations/entities/Conversation.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/entities/Conversation.java | 76 |
1 files changed, 46 insertions, 30 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 6ff0e270..1c985e2f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -179,13 +179,13 @@ public class Conversation extends AbstractEntity implements Blockable { } } - public void findUnsentMessagesWithOtrEncryption(OnMessageFound onMessageFound) { + public void findUnsentMessagesWithEncryption(int encryptionType, OnMessageFound onMessageFound) { synchronized (this.messages) { for (Message message : this.messages) { if ((message.getStatus() == Message.STATUS_UNSEND || message.getStatus() == Message.STATUS_WAITING) - && (message.getEncryption() == Message.ENCRYPTION_OTR)) { + && (message.getEncryption() == encryptionType)) { onMessageFound.onMessageFound(message); - } + } } } } @@ -519,6 +519,13 @@ public class Conversation extends AbstractEntity implements Blockable { return getContact().getOtrFingerprints().contains(getOtrFingerprint()); } + /** + * short for is Private and Non-anonymous + */ + public boolean isPnNA() { + return mode == MODE_SINGLE || (getMucOptions().membersOnly() && getMucOptions().nonanonymous()); + } + public synchronized MucOptions getMucOptions() { if (this.mucOptions == null) { this.mucOptions = new MucOptions(this); @@ -542,42 +549,51 @@ public class Conversation extends AbstractEntity implements Blockable { return this.nextCounterpart; } - public int getLatestEncryption() { - int latestEncryption = this.getLatestMessage().getEncryption(); - if ((latestEncryption == Message.ENCRYPTION_DECRYPTED) - || (latestEncryption == Message.ENCRYPTION_DECRYPTION_FAILED)) { - return Message.ENCRYPTION_PGP; - } else { - return latestEncryption; + private int getMostRecentlyUsedOutgoingEncryption() { + synchronized (this.messages) { + for(int i = this.messages.size() -1; i >= 0; --i) { + final Message m = this.messages.get(i); + if (!m.isCarbon() && 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(boolean force) { - int next = this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, -1); - if (next == -1) { - int latest = this.getLatestEncryption(); - if (latest == Message.ENCRYPTION_NONE) { - if (force && getMode() == MODE_SINGLE) { - return Message.ENCRYPTION_OTR; - } else if (getContact().getPresences().size() == 1) { - if (getContact().getOtrFingerprints().size() >= 1) { - return Message.ENCRYPTION_OTR; + 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 latest; + return e; } - } else { - return latest; } - } else { - return latest; } } - if (next == Message.ENCRYPTION_NONE && force - && getMode() == MODE_SINGLE) { - return Message.ENCRYPTION_OTR; - } else { - return next; + return Message.ENCRYPTION_NONE; + } + + public int getNextEncryption() { + int next = this.getIntAttribute(ATTRIBUTE_NEXT_ENCRYPTION, -1); + if (next == -1) { + int outgoing = this.getMostRecentlyUsedOutgoingEncryption(); + if (outgoing == Message.ENCRYPTION_NONE) { + return this.getMostRecentlyUsedIncomingEncryption(); + } else { + return outgoing; + } } + return next; } public void setNextEncryption(int encryption) { |