respond to chat marker request only when mutual presence subscription exists

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java  | 2 
src/main/java/eu/siacs/conversations/entities/Contact.java               | 4 
src/main/java/eu/siacs/conversations/entities/Message.java               | 2 
src/main/java/eu/siacs/conversations/parser/MessageParser.java           | 6 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 5 
5 files changed, 13 insertions(+), 6 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java 🔗

@@ -665,7 +665,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
 			final List<Jid> jids = getCryptoTargets(conversation);
 			for(Jid jid : jids) {
 				if (!hasAny(jid) && (!deviceIds.containsKey(jid) || deviceIds.get(jid).isEmpty())) {
-					if (conversation.getAccount().getRoster().getContact(jid).trusted()) {
+					if (conversation.getAccount().getRoster().getContact(jid).mutualPresenceSubscription()) {
 						return new Pair<>(AxolotlCapability.MISSING_KEYS,jid);
 					} else {
 						return new Pair<>(AxolotlCapability.MISSING_PRESENCE,jid);

src/main/java/eu/siacs/conversations/entities/Contact.java 🔗

@@ -118,7 +118,7 @@ public class Contact implements ListItem, Blockable {
 			return this.systemName;
 		} else if (this.serverName != null) {
 			return this.serverName;
-		} else if (this.presenceName != null && trusted()) {
+		} else if (this.presenceName != null && mutualPresenceSubscription()) {
 			return this.presenceName;
 		} else if (jid.hasLocalpart()) {
 			return jid.getLocalpart();
@@ -487,7 +487,7 @@ public class Contact implements ListItem, Blockable {
 		}
 	}
 
-	public boolean trusted() {
+	public boolean mutualPresenceSubscription() {
 		return getOption(Options.FROM) && getOption(Options.TO);
 	}
 

src/main/java/eu/siacs/conversations/entities/Message.java 🔗

@@ -542,7 +542,7 @@ public class Message extends AbstractEntity {
 
 	public boolean trusted() {
 		Contact contact = this.getContact();
-		return (status > STATUS_RECEIVED || (contact != null && contact.trusted()));
+		return (status > STATUS_RECEIVED || (contact != null && contact.mutualPresenceSubscription()));
 	}
 
 	public boolean fixCounterpart() {

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -539,7 +539,11 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
 				mXmppConnectionService.updateConversationUi();
 			}
 
-			if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) {
+			if (mXmppConnectionService.confirmMessages()
+					&& message.trusted()
+					&& remoteMsgId != null
+					&& !isForwarded
+					&& !isTypeGroupChat) {
 				sendMessageReceipts(account, packet);
 			}
 

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -3115,7 +3115,10 @@ public class XmppConnectionService extends Service {
 		if (this.markRead(conversation)) {
 			updateConversationUi();
 		}
-		if (confirmMessages() && markable != null && markable.getRemoteMsgId() != null) {
+		if (confirmMessages()
+				&& markable != null
+				&& markable.trusted()
+				&& markable.getRemoteMsgId() != null) {
 			Log.d(Config.LOGTAG, conversation.getAccount().getJid().toBareJid() + ": sending read marker to " + markable.getCounterpart().toString());
 			Account account = conversation.getAccount();
 			final Jid to = markable.getCounterpart();