aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/gui/main/contactlist
diff options
context:
space:
mode:
authorYana Stamcheva <yana@jitsi.org>2012-08-16 08:53:01 +0000
committerYana Stamcheva <yana@jitsi.org>2012-08-16 08:53:01 +0000
commitdcd13596313059829bd57a8d55e74d05fb0f36fc (patch)
tree8a1825609ec1242cb181d01fad8b7e7ff6442574 /src/net/java/sip/communicator/impl/gui/main/contactlist
parent77a2ef87b34ea7b4679e30a4304651c1d011bec7 (diff)
downloadjitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.zip
jitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.tar.gz
jitsi-dcd13596313059829bd57a8d55e74d05fb0f36fc.tar.bz2
Checks if a custom contact action should be shown for a given contact.
Diffstat (limited to 'src/net/java/sip/communicator/impl/gui/main/contactlist')
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/MetaContactListSource.java45
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContact.java12
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/notifsource/NotificationContactSource.java47
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;
}
/**