diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java index 61bd2df48..d883f56c1 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java @@ -976,7 +976,50 @@ public static Collection getContactCustomActionButtons( if (customActionButtons == null) initCustomActionButtons(); - return customActionButtons.values(); + Iterator> customActionsIter + = customActionButtons.keySet().iterator(); + + Collection availableCustomActionButtons + = new LinkedList(); + + while (customActionsIter.hasNext()) + { + ContactAction contactAction = customActionsIter.next(); + SIPCommButton actionButton = customActionButtons.get(contactAction); + + if (isContactActionVisible(contactAction, + (MetaContact) metaContact.getDescriptor())) + { + availableCustomActionButtons.add(actionButton); + } + } + + return availableCustomActionButtons; + } + + /** + * Indicates if the given ContactAction should be visible for the + * given MetaContact. + * + * @param contactAction the ContactAction to verify + * @param metaContact the MetaContact for which we verify if the + * given action should be visible + * @return true if the given ContactAction is visible for + * the given MetaContact, false - otherwise + */ + private static boolean isContactActionVisible( + ContactAction contactAction, + MetaContact metaContact) + { + Iterator contactDetails = metaContact.getContacts(); + + while (contactDetails.hasNext()) + { + if (contactAction.isVisible(contactDetails.next())) + return true; + } + + return false; } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java index ad2b296b8..95aec4e55 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java @@ -436,6 +436,18 @@ public void setReadMessageCount(int count) this.readMessageCount = count; } + /** + * Returns the notification message corresponding to this notification + * contact. + * + * @return the NotificationMessage corresponding to this + * NotificationContact + */ + public NotificationMessage getNotificationMessage() + { + return notificationMessage; + } + /** * The implementation of the UIContactDetail interface for the * external source ContactDetails. diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java index 746171b99..30c3677b3 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java @@ -17,6 +17,7 @@ import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.main.contactlist.*; +import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.customcontactactions.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.OperationSetMessageWaiting.MessageType; @@ -148,9 +149,9 @@ public Iterator getNotifications(UIGroup group) } /** - * Returns all custom action buttons for this meta contact. + * Returns all custom action buttons for this notification contact. * - * @return a list of all custom action buttons for this meta contact + * @return a list of all custom action buttons for this notification contact */ public static Collection getContactCustomActionButtons( final NotificationContact notificationContact) @@ -160,7 +161,47 @@ public static Collection getContactCustomActionButtons( if (customActionButtons == null) initCustomActionButtons(); - return customActionButtons.values(); + Iterator> customActionsIter + = customActionButtons.keySet().iterator(); + + Collection availableCustomActionButtons + = new LinkedList(); + + while (customActionsIter.hasNext()) + { + ContactAction contactAction + = customActionsIter.next(); + + SIPCommButton actionButton = customActionButtons.get(contactAction); + + if (isContactActionVisible( contactAction, + notificationContact)) + { + availableCustomActionButtons.add(actionButton); + } + } + + return availableCustomActionButtons; + } + + /** + * Indicates if the given ContactAction should be visible for the + * given NotificationContact. + * + * @param contactAction the ContactAction to verify + * @param notifContact the NotificationContact for which we verify + * if the given action should be visible + * @return true if the given ContactAction is visible for + * the given NotificationContact, false - otherwise + */ + private static boolean isContactActionVisible( + ContactAction contactAction, + NotificationContact notifContact) + { + if (contactAction.isVisible(notifContact.getNotificationMessage())) + return true; + + return false; } /**