M src/main/java/eu/siacs/conversations/entities/Message.java => src/main/java/eu/siacs/conversations/entities/Message.java +12 -0
@@ 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;
}
M src/main/java/eu/siacs/conversations/parser/MessageParser.java => src/main/java/eu/siacs/conversations/parser/MessageParser.java +3 -0
@@ 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));
M src/main/java/eu/siacs/conversations/services/NotificationService.java => src/main/java/eu/siacs/conversations/services/NotificationService.java +6 -0
@@ 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) {