Detailed changes
@@ -877,16 +877,8 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
return this.replyTo;
}
- public boolean isRead() {
- synchronized (this.messages) {
- for(final Message message : Lists.reverse(this.messages)) {
- if (message.isRead() && message.getType() == Message.TYPE_RTP_SESSION) {
- continue;
- }
- return message.isRead();
- }
- return true;
- }
+ public boolean isRead(XmppConnectionService xmppConnectionService) {
+ return unreadCount(xmppConnectionService) < 1;
}
public List<Message> markRead(final String upToUuid) {
@@ -1372,11 +1364,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
}
- public int unreadCount() {
+ public int unreadCount(XmppConnectionService xmppConnectionService) {
synchronized (this.messages) {
int count = 0;
for(final Message message : Lists.reverse(this.messages)) {
if (message.getSubject() != null && !message.isOOb() && (message.getRawBody() == null || message.getRawBody().length() == 0)) continue;
+ final boolean muted = xmppConnectionService != null && message.getStatus() == Message.STATUS_RECEIVED && getMode() == Conversation.MODE_MULTI && xmppConnectionService.isMucUserMuted(new MucOptions.User(null, getJid(), message.getOccupantId(), null, null));
+ if (muted) continue;
if (message.isRead()) {
if (message.getType() == Message.TYPE_RTP_SESSION) {
continue;
@@ -1473,7 +1467,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
public int getCurrentTab() {
if (mCurrentTab >= 0) return mCurrentTab;
- if (!isRead() || getContact().resourceWhichSupport(Namespace.COMMANDS) == null) {
+ if (!isRead(null) || getContact().resourceWhichSupport(Namespace.COMMANDS) == null) {
return 0;
}
@@ -5008,7 +5008,7 @@ public class XmppConnectionService extends Service {
public int unreadCount() {
int count = 0;
for (Conversation conversation : getConversations()) {
- count += conversation.unreadCount();
+ count += conversation.unreadCount(this);
}
return count;
}
@@ -3335,7 +3335,7 @@ public class ConversationFragment extends XmppFragment
stopScrolling();
Log.d(Config.LOGTAG, "reInit(hasExtras=" + hasExtras + ")");
- if (this.conversation.isRead() && hasExtras) {
+ if (this.conversation.isRead(activity == null ? null : activity.xmppConnectionService) && hasExtras) {
Log.d(Config.LOGTAG, "trimming conversation");
this.conversation.trim();
}
@@ -211,7 +211,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
final var selectedAccount = selectedAccount();
populateWithOrderedConversations(conversations, false, false);
for (final var c : conversations) {
- final var unread = c.unreadCount();
+ final var unread = c.unreadCount(xmppConnectionService);
if (selectedAccount == null || selectedAccount.getUuid().equals(c.getAccount().getUuid())) {
totalUnread += unread;
if (c.getMode() == Conversation.MODE_MULTI) {
@@ -227,7 +227,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
filterByMainFilter(conversations);
for (final var c : conversations) {
if (selectedAccount == null || selectedAccount.getUuid().equals(c.getAccount().getUuid())) {
- final var unread = c.unreadCount();
+ final var unread = c.unreadCount(xmppConnectionService);
for (final var tag : c.getTags(this)) {
if ("Channel".equals(tag.getName())) continue;
var count = tags.get(tag);
@@ -644,7 +644,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
list.remove(c);
} else if (mainFilter == DRAWER_DIRECT_MESSAGES && c.getMode() == Conversation.MODE_MULTI) {
list.remove(c);
- } else if (mainFilter == DRAWER_UNREAD_CHATS && c.unreadCount() < 1) {
+ } else if (mainFilter == DRAWER_UNREAD_CHATS && c.unreadCount(xmppConnectionService) < 1) {
list.remove(c);
}
}
@@ -191,7 +191,7 @@ public class ConversationsOverviewFragment extends XmppFragment {
}
final Conversation conversation = swipedConversation.pop();
if(conversation != null){
- if (!conversation.isRead() && conversation.getMode() == Conversation.MODE_SINGLE) {
+ if (!conversation.isRead(activity.xmppConnectionService) && conversation.getMode() == Conversation.MODE_SINGLE) {
return;
}
activity.xmppConnectionService.archiveConversation(c);
@@ -482,7 +482,7 @@ public class ConversationsOverviewFragment extends XmppFragment {
this.activity.populateWithOrderedConversations(this.conversations);
Conversation removed = this.swipedConversation.peek();
if (removed != null) {
- if (removed.isRead()) {
+ if (removed.isRead(activity == null ? null : activity.xmppConnectionService)) {
this.conversations.remove(removed);
} else {
pendingActionHelper.execute();
@@ -88,8 +88,8 @@ public class ConversationAdapter
final Message message = conversation.getLatestMessage();
final int status = message.getStatus();
- final int unreadCount = conversation.unreadCount();
- final boolean isRead = conversation.isRead();
+ final int unreadCount = conversation.unreadCount(activity.xmppConnectionService);
+ final boolean isRead = unreadCount < 1;
final @DrawableRes Integer messageStatusDrawable =
MessageAdapter.getMessageStatusAsDrawable(message, status);
if (message.getType() == Message.TYPE_RTP_SESSION) {