phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp
changeset 37 fd64c38c277d
parent 31 2a11b5b00470
child 40 b46a585f6909
--- a/phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp	Fri May 14 15:42:23 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp	Thu May 27 12:45:19 2010 +0300
@@ -51,12 +51,12 @@
             actions << d.actionName();
             }
         
-        if ( actions.contains("call", Qt::CaseInsensitive) )
+        if ( actions.contains("call", Qt::CaseInsensitive) && isSupportedDetails("call", aContact))
             {
             createCallAction( *menu, aContact );
             }
         
-        if ( actions.contains("message", Qt::CaseInsensitive) )
+        if ( actions.contains("message", Qt::CaseInsensitive) && isSupportedDetails("message", aContact) )
             {
             createMessageAction( *menu, aContact );
             }
@@ -80,8 +80,9 @@
     return menu;
     }
 
-HbMenu* CntActionMenuBuilder::actionMenu( QContact& aContact )
+HbMenu* CntActionMenuBuilder::actionMenu( QContact& aContact, QContactLocalId myCardId)
 {
+    iMyCardId = myCardId;
     mContact = new QContact( aContact );
     return buildActionMenu( aContact );
 }
@@ -143,5 +144,29 @@
     
     aMenu.addAction(hbTrId("txt_phob_menu_send_message"), this, SLOT(emitSmsContact()));
     }
+
+bool CntActionMenuBuilder::isSupportedDetails( const QString &actionName, const QContact &contact )
+    {
+    QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
+    if (actionDescriptors.isEmpty())
+        {
+        return false;
+        }
+    
+    QContactAction* contactAction = QContactAction::action(actionDescriptors.first()); 
+    QList<QContactDetail> details = contactAction->supportedDetails(contact);
+
+    delete contactAction;
+    
+    for (int i = 0; i < details.count(); i++)
+        {
+        if (contact.details().contains(details[i]))
+            {
+            return true;
+            }
+        }
+    
+    return false;
+    }
     
 // End of File