diff --git a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
index 321019305..32d1d5a41 100644
--- a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
+++ b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java
@@ -2056,4 +2056,14 @@ private static StoredProtoContactDescriptor findContactInList(
return null;
}
}
+
+ /**
+ * Indicates that a new avatar is available for a MetaContact.
+ * @param evt the MetaContactAvatarUpdateEvent containing details
+ * of this event
+ */
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt)
+ {
+ // TODO: Store meta contact avatar.
+ }
}
diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java
index a7e15c4cf..d95682f06 100644
--- a/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java
+++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactImpl.java
@@ -619,6 +619,9 @@ void addProtoContact(Contact contact)
this.protoContacts.add(contact);
+ // Re-init the default contact.
+ defaultContact = null;
+
// if this is our firt contact and we don't already have a display
// name, use theirs.
if (this.protoContacts.size() == 1
diff --git a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
index 8086b94b6..598a40e9c 100644
--- a/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/contactlist/MetaContactListServiceImpl.java
@@ -817,10 +817,10 @@ public void changeMetaContactAvatar(MetaContact metaContact,
}
byte[] oldAvatar = metaContact.getAvatar(true);
- ((MetaContactImpl)metaContact).cacheAvatar(protoContact, newAvatar);
+ ((MetaContactImpl) metaContact).cacheAvatar(protoContact, newAvatar);
fireMetaContactEvent(
- new MetaContactAvatarUpdate(metaContact, oldAvatar, newAvatar));
+ new MetaContactAvatarUpdateEvent(metaContact, oldAvatar, newAvatar));
}
/**
@@ -2565,6 +2565,11 @@ else if (event instanceof MetaContactModifiedEvent)
{
listener.metaContactModified( (MetaContactModifiedEvent) event);
}
+ else if (event instanceof MetaContactAvatarUpdateEvent)
+ {
+ listener.metaContactAvatarUpdated(
+ (MetaContactAvatarUpdateEvent) event);
+ }
}
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java
index 73bac3108..92fd7f13b 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java
@@ -398,6 +398,8 @@ public void metaContactMoved(MetaContactMovedEvent evt)
public void metaContactRemoved(MetaContactEvent evt)
{}
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) {}
+
/**
* Implements MetaContactListListener.metaContactRenamed method.
* When a meta contact is renamed, updates all related labels in this
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java
index 5b1837956..73ca46c84 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java
+++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactList.java
@@ -217,6 +217,8 @@ public void metaContactMoved(MetaContactMovedEvent evt)
this.modifyGroup(evt.getOldParent());
}
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt) {}
+
/**
* Handles the MetaContactGroupEvent. Refreshes the list model
* when a new meta contact group has been added.
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java
index 3bc4f2266..8707d7942 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java
+++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java
@@ -328,6 +328,31 @@ public void run()
});
}
+ /**
+ * Notifies the tree model, when the MetaContact avatar has been
+ * modified in the MetaContactListService.
+ * @param evt the MetaContactEvent that notified us
+ */
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt)
+ {
+ final MetaContact metaContact = evt.getSourceMetaContact();
+
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if (currentFilter.isMatching(metaContact))
+ {
+ ContactNode contactNode
+ = treeModel.findContactNodeByMetaContact(metaContact);
+
+ if (contactNode != null)
+ treeModel.nodeChanged(contactNode);
+ }
+ }
+ });
+ }
+
/**
* Adds a contact node corresponding to the parent MetaContact if
* this last is matching the current filter and wasn't previously contained
diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java
similarity index 88%
rename from src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java
rename to src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java
index ff31caf40..173d4363a 100644
--- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdate.java
+++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactAvatarUpdateEvent.java
@@ -13,7 +13,7 @@
*
* @author Emil Ivov
*/
-public class MetaContactAvatarUpdate
+public class MetaContactAvatarUpdateEvent
extends MetaContactPropertyChangeEvent
{
/**
@@ -23,11 +23,11 @@ public class MetaContactAvatarUpdate
* @param oldAvatar the new avatar just of this meta contact.
* @param newAvatar the old avatar that just got replaced or null.
*/
- public MetaContactAvatarUpdate(MetaContact source,
+ public MetaContactAvatarUpdateEvent(MetaContact source,
byte[] oldAvatar,
byte[] newAvatar)
{
- super(source, PROTO_CONTACT_AVATAR_UPDATE, oldAvatar, newAvatar);
+ super(source, META_CONTACT_AVATAR_UPDATE, oldAvatar, newAvatar);
}
/**
diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java
index c5bce07c1..f2b760260 100644
--- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java
+++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactListListener.java
@@ -119,4 +119,10 @@ public interface MetaContactListListener
*/
public void metaContactModified(MetaContactModifiedEvent evt);
+ /**
+ * Indicates that a new avatar is available for a MetaContact.
+ * @param evt the MetaContactAvatarUpdateEvent containing details
+ * of this event
+ */
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt);
}
diff --git a/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java b/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java
index 73a141bf9..602aba1af 100644
--- a/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java
+++ b/src/net/java/sip/communicator/service/contactlist/event/MetaContactPropertyChangeEvent.java
@@ -54,8 +54,8 @@ public abstract class MetaContactPropertyChangeEvent
* Indicates that the MetaContactEvent instance was triggered by the update
* of an Avatar for one of its encapsulated contacts.
*/
- public static final String PROTO_CONTACT_AVATAR_UPDATE
- = "ProtoContactAvatarUpdate";
+ public static final String META_CONTACT_AVATAR_UPDATE
+ = "MetaContactAvatarUpdate";
/**
* Indicates that the meta contact has been modified. The old and new value
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
index 55d96de2e..987aef801 100644
--- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
+++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java
@@ -1235,5 +1235,15 @@ public void childContactsReordered(MetaContactGroupEvent evt)
{
collectedMetaContactGroupEvents.add(evt);
}
+
+ /**
+ * Indicates that the avatar of a MetaContact has been updated.
+ * @param evt the MetaContactAvatarUpdateEvent containing
+ * details of this event
+ */
+ public void metaContactAvatarUpdated(MetaContactAvatarUpdateEvent evt)
+ {
+ collectedMetaContactGroupEvents.add(evt);
+ }
}
}