clear muc tiles when avatar of member changes

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java            |  6 
src/main/java/eu/siacs/conversations/services/AvatarService.java         |  3 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 11 
3 files changed, 19 insertions(+), 1 deletion(-)

Detailed changes

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

@@ -449,7 +449,7 @@ public class MucOptions {
 		return null;
 	}
 
-	public User findUserByRealJid(Jid jid) {
+	private User findUserByRealJid(Jid jid) {
 		if (jid == null) {
 			return null;
 		}
@@ -463,6 +463,10 @@ public class MucOptions {
 		return null;
 	}
 
+	public boolean isContactInRoom(Contact contact) {
+		return findUserByRealJid(contact.getJid().toBareJid()) != null;
+	}
+
 	public boolean isUserInRoom(Jid jid) {
 		return findUserByFullJid(jid) != null;
 	}

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

@@ -99,6 +99,9 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
 						key(contact, size));
 			}
 		}
+		for(Conversation conversation : mXmppConnectionService.findAllConferencesWith(contact)) {
+			clear(conversation);
+		}
 	}
 
 	private String key(Contact contact, int size) {

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

@@ -1352,6 +1352,17 @@ public class XmppConnectionService extends Service {
 		return this.accounts;
 	}
 
+	public List<Conversation> findAllConferencesWith(Contact contact) {
+		ArrayList<Conversation> results = new ArrayList<>();
+		for(Conversation conversation : conversations) {
+			if (conversation.getMode() == Conversation.MODE_MULTI
+					&& conversation.getMucOptions().isContactInRoom(contact)) {
+				results.add(conversation);
+			}
+		}
+		return results;
+	}
+
 	public Conversation find(final Iterable<Conversation> haystack, final Contact contact) {
 		for (final Conversation conversation : haystack) {
 			if (conversation.getContact() == contact) {