clear muc tiles cache only when necessary

iNPUTmice created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java   | 15 +++
src/main/java/eu/siacs/conversations/parser/PresenceParser.java |  8 +
2 files changed, 22 insertions(+), 1 deletion(-)

Detailed changes

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

@@ -150,6 +150,21 @@ public class MucOptions {
 			}
 		}
 
+		@Override
+		public boolean equals(Object other) {
+			if (this == other) {
+				return true;
+			} else if (!(other instanceof User)) {
+				return false;
+			} else {
+				User o = (User) other;
+				return name != null && name.equals(o.name)
+						&& jid != null && jid.equals(o.jid)
+						&& affiliation == o.affiliation
+						&& role == o.role;
+			}
+		}
+
 		public Affiliation getAffiliation() {
 			return this.affiliation;
 		}

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

@@ -1,5 +1,7 @@
 package eu.siacs.conversations.parser;
 
+import java.util.ArrayList;
+
 import eu.siacs.conversations.crypto.PgpEngine;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Contact;
@@ -27,8 +29,12 @@ public class PresenceParser extends AbstractParser implements
 			final MucOptions mucOptions = conversation.getMucOptions();
 			boolean before = mucOptions.online();
 			int count = mucOptions.getUsers().size();
+			final ArrayList<MucOptions.User> tileUserBefore = new ArrayList<>(mucOptions.getUsers().subList(0,Math.min(mucOptions.getUsers().size(),4)));
 			mucOptions.processPacket(packet, mPgpEngine);
-			mXmppConnectionService.getAvatarService().clear(conversation);
+			final ArrayList<MucOptions.User> tileUserAfter = new ArrayList<>(mucOptions.getUsers().subList(0,Math.min(mucOptions.getUsers().size(),4)));
+			if (!tileUserAfter.equals(tileUserBefore)) {
+				mXmppConnectionService.getAvatarService().clear(conversation);
+			}
 			if (before != mucOptions.online() || (mucOptions.online() && count != mucOptions.getUsers().size())) {
 				mXmppConnectionService.updateConversationUi();
 			} else if (mucOptions.online()) {