Suppress notify and preview from muted also

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java   |  2 
src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java |  2 
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java      |  2 
src/main/java/eu/siacs/conversations/utils/UIHelper.java                 | 10 
4 files changed, 11 insertions(+), 5 deletions(-)

Detailed changes

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

@@ -1824,6 +1824,8 @@ public class NotificationService {
         if (message.getConversation() instanceof Conversation) {
             Conversation conversation = (Conversation) message.getConversation();
             final MucOptions.User sender = conversation.getMucOptions().findUserByFullJid(message.getCounterpart());
+            final boolean muted = message.getStatus() == Message.STATUS_RECEIVED && mXmppConnectionService.isMucUserMuted(new MucOptions.User(null, conversation.getJid(), message.getOccupantId(), null, null));
+            if (muted) return false;
             if (sender != null && sender.getAffiliation().ranks(MucOptions.Affiliation.MEMBER) && message.isAttention()) {
                 return true;
             }

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java 🔗

@@ -1093,7 +1093,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
             } else if (transferable != null && transferable.getStatus() == Transferable.STATUS_OFFER_CHECK_FILESIZE) {
                 displayDownloadableMessage(viewHolder, message, activity.getString(R.string.check_x_filesize, UIHelper.getFileDescriptionString(activity, message)), darkBackground, type);
             } else {
-                displayInfoMessage(viewHolder, UIHelper.getMessagePreview(activity, message).first, darkBackground, message, type);
+                displayInfoMessage(viewHolder, UIHelper.getMessagePreview(activity.xmppConnectionService, message).first, darkBackground, message, type);
             }
         } else if (message.isFileOrImage() && message.getEncryption() != Message.ENCRYPTION_PGP && message.getEncryption() != Message.ENCRYPTION_DECRYPTION_FAILED) {
             if (message.getFileParams().width > 0 && message.getFileParams().height > 0) {

src/main/java/eu/siacs/conversations/utils/UIHelper.java 🔗

@@ -36,6 +36,7 @@ import eu.siacs.conversations.entities.Presence;
 import eu.siacs.conversations.entities.RtpSessionStatus;
 import eu.siacs.conversations.entities.Transferable;
 import eu.siacs.conversations.services.ExportBackupService;
+import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.ui.util.MyLinkify;
 import eu.siacs.conversations.ui.util.QuoteHelper;
 import eu.siacs.conversations.xmpp.Jid;
@@ -268,14 +269,17 @@ public class UIHelper {
         }
     }
 
-    public static Pair<CharSequence, Boolean> getMessagePreview(final Context context, final Message message) {
+    public static Pair<CharSequence, Boolean> getMessagePreview(final XmppConnectionService context, final Message message) {
         return getMessagePreview(context, message, 0);
     }
 
-    public static Pair<CharSequence, Boolean> getMessagePreview(final Context context, final Message message, @ColorInt int textColor) {
+    public static Pair<CharSequence, Boolean> getMessagePreview(final XmppConnectionService context, final Message message, @ColorInt int textColor) {
         final Transferable d = message.getTransferable();
         final boolean moderated = message.getModerated() != null;
-        if (d != null && !moderated) {
+        final boolean muted = message.getStatus() == Message.STATUS_RECEIVED && message.getConversation().getMode() == Conversation.MODE_MULTI && context.isMucUserMuted(new MucOptions.User(null, message.getConversation().getJid(), message.getOccupantId(), null, null));
+        if (muted) {
+            return new Pair<>("Muted", false);
+        } else if (d != null && !moderated) {
             switch (d.getStatus()) {
                 case Transferable.STATUS_CHECKING:
                     return new Pair<>(context.getString(R.string.checking_x,