diff options
author | Yana Stamcheva <yana@jitsi.org> | 2012-08-16 08:53:01 +0000 |
---|---|---|
committer | Yana Stamcheva <yana@jitsi.org> | 2012-08-16 08:53:01 +0000 |
commit | dcd13596313059829bd57a8d55e74d05fb0f36fc (patch) | |
tree | 8a1825609ec1242cb181d01fad8b7e7ff6442574 | |
parent | 77a2ef87b34ea7b4679e30a4304651c1d011bec7 (diff) | |
download | jitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.zip jitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.tar.gz jitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.tar.bz2 |
Checks if a custom contact action should be shown for a given contact.
3 files changed, 100 insertions, 4 deletions
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 61bd2df..d883f56 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 class MetaContactListSource if (customActionButtons == null) initCustomActionButtons(); - return customActionButtons.values(); + Iterator<ContactAction<Contact>> customActionsIter + = customActionButtons.keySet().iterator(); + + Collection<SIPCommButton> availableCustomActionButtons + = new LinkedList<SIPCommButton>(); + + while (customActionsIter.hasNext()) + { + ContactAction<Contact> contactAction = customActionsIter.next(); + SIPCommButton actionButton = customActionButtons.get(contactAction); + + if (isContactActionVisible(contactAction, + (MetaContact) metaContact.getDescriptor())) + { + availableCustomActionButtons.add(actionButton); + } + } + + return availableCustomActionButtons; + } + + /** + * Indicates if the given <tt>ContactAction</tt> should be visible for the + * given <tt>MetaContact</tt>. + * + * @param contactAction the <tt>ContactAction</tt> to verify + * @param metaContact the <tt>MetaContact</tt> for which we verify if the + * given action should be visible + * @return <tt>true</tt> if the given <tt>ContactAction</tt> is visible for + * the given <tt>MetaContact</tt>, <tt>false</tt> - otherwise + */ + private static boolean isContactActionVisible( + ContactAction<Contact> contactAction, + MetaContact metaContact) + { + Iterator<Contact> 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 ad2b296..95aec4e 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 @@ -437,6 +437,18 @@ public class NotificationContact } /** + * Returns the notification message corresponding to this notification + * contact. + * + * @return the <tt>NotificationMessage</tt> corresponding to this + * <tt>NotificationContact</tt> + */ + public NotificationMessage getNotificationMessage() + { + return notificationMessage; + } + + /** * The implementation of the <tt>UIContactDetail</tt> interface for the * external source <tt>ContactDetail</tt>s. */ 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 746171b..30c3677 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 org.osgi.framework.*; 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 class NotificationContactSource } /** - * 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<SIPCommButton> getContactCustomActionButtons( final NotificationContact notificationContact) @@ -160,7 +161,47 @@ public class NotificationContactSource if (customActionButtons == null) initCustomActionButtons(); - return customActionButtons.values(); + Iterator<ContactAction<NotificationMessage>> customActionsIter + = customActionButtons.keySet().iterator(); + + Collection<SIPCommButton> availableCustomActionButtons + = new LinkedList<SIPCommButton>(); + + while (customActionsIter.hasNext()) + { + ContactAction<NotificationMessage> contactAction + = customActionsIter.next(); + + SIPCommButton actionButton = customActionButtons.get(contactAction); + + if (isContactActionVisible( contactAction, + notificationContact)) + { + availableCustomActionButtons.add(actionButton); + } + } + + return availableCustomActionButtons; + } + + /** + * Indicates if the given <tt>ContactAction</tt> should be visible for the + * given <tt>NotificationContact</tt>. + * + * @param contactAction the <tt>ContactAction</tt> to verify + * @param notifContact the <tt>NotificationContact</tt> for which we verify + * if the given action should be visible + * @return <tt>true</tt> if the given <tt>ContactAction</tt> is visible for + * the given <tt>NotificationContact</tt>, <tt>false</tt> - otherwise + */ + private static boolean isContactActionVisible( + ContactAction<NotificationMessage> contactAction, + NotificationContact notifContact) + { + if (contactAction.isVisible(notifContact.getNotificationMessage())) + return true; + + return false; } /** |