diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 9203a5d9d98a719c975ff73275078788da8e459d..1feecbea87f585e2160bfbb3b3f6119a392c035a 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -449,6 +449,18 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable return null; } + public boolean isAttention() { + if (this.payloads == null) return false; + + for (Element el : this.payloads) { + if (el.getName().equals("attention") && el.getNamespace().equals("urn:xmpp:attention:0")) { + return true; + } + } + + return false; + } + public String getConversationUuid() { return conversationUuid; } diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index e919f3f3cd66e87e9a82a9d117a8e7315df2def4..d42ff49be9da15ff229d1b30ea8e546bcf09e80b 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -671,6 +671,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece if (el.getName().equals("reply") && el.getNamespace() != null && el.getNamespace().equals("urn:xmpp:reply:0")) { message.addPayload(el); } + if (el.getName().equals("attention") && el.getNamespace() != null && el.getNamespace().equals("urn:xmpp:attention:0")) { + message.addPayload(el); + } } if (conversationMultiMode) { message.setMucUser(conversation.getMucOptions().findUserByFullJid(counterpart)); diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 497e510667bdeb6c3ee56201e1a5592df1c0b6b9..86e41b0717afc9cd5eda87b87d06ab735b11e21e 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -72,6 +72,7 @@ import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversational; import eu.siacs.conversations.entities.Message; +import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.ui.ConversationsActivity; import eu.siacs.conversations.ui.EditAccountActivity; @@ -1744,6 +1745,11 @@ public class NotificationService { private boolean wasHighlightedOrPrivate(final Message message) { if (message.getConversation() instanceof Conversation) { Conversation conversation = (Conversation) message.getConversation(); + final MucOptions.User sender = conversation.getMucOptions().findUserByFullJid(message.getCounterpart()); + if (sender != null && sender.getAffiliation().ranks(MucOptions.Affiliation.MEMBER) && message.isAttention()) { + return true; + } + final String nick = conversation.getMucOptions().getActualNick(); final Pattern highlight = generateNickHighlightPattern(nick); if (message.getBody() == null || nick == null) {