when no avatar found show avatar of contact and not the muc user in conferences

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java    | 6 
src/main/java/eu/siacs/conversations/parser/PresenceParser.java  | 5 +
src/main/java/eu/siacs/conversations/services/AvatarService.java | 7 +
3 files changed, 13 insertions(+), 5 deletions(-)

Detailed changes

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

@@ -302,15 +302,15 @@ public class MucOptions {
 		return hasFeature("muc_moderated");
 	}
 
-	public void deleteUser(String name) {
+	public User deleteUser(String name) {
 		synchronized (this.users) {
 			for (int i = 0; i < users.size(); ++i) {
 				if (users.get(i).getName().equals(name)) {
-					users.remove(i);
-					return;
+					return users.remove(i);
 				}
 			}
 		}
+		return null;
 	}
 
 	public void addUser(User user) {

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

@@ -110,7 +110,10 @@ public class PresenceParser extends AbstractParser implements
 						mucOptions.setError(MucOptions.ERROR_UNKNOWN);
 					}
 				} else if (!from.isBareJid()){
-					mucOptions.deleteUser(from.getResourcepart());
+					MucOptions.User user = mucOptions.deleteUser(from.getResourcepart());
+					if (user != null) {
+						mXmppConnectionService.getAvatarService().clear(user);
+					}
 				}
 			} else if (type.equals("error")) {
 				Element error = packet.findChild("error");

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

@@ -77,7 +77,12 @@ public class AvatarService {
 			avatar = mXmppConnectionService.getFileBackend().getAvatar(user.getAvatar(), size);
 		}
 		if (avatar == null) {
-			avatar = get(user.getName(), size, cachedOnly);
+			Contact contact = user.getContact();
+			if (contact != null) {
+				avatar = get(contact, size, cachedOnly);
+			} else {
+				avatar = get(user.getName(), size, cachedOnly);
+			}
 		}
 		this.mXmppConnectionService.getBitmapCache().put(KEY, avatar);
 		return avatar;