diff -r ecf6a73a9186 -r 60a8a215b0ec messagingapp/msgui/unifiedviewer/src/univieweraddresswidget.cpp --- a/messagingapp/msgui/unifiedviewer/src/univieweraddresswidget.cpp Tue Oct 05 13:58:47 2010 +0530 +++ b/messagingapp/msgui/unifiedviewer/src/univieweraddresswidget.cpp Tue Oct 19 11:30:16 2010 +0530 @@ -30,10 +30,10 @@ #include #include +#include +#include #include #include -#include -#include #include "msgcontacthandler.h" // LOCAL CONSTANTS @@ -41,13 +41,14 @@ const QString ADDRESS_OPEN(" ("); const QString ADDRESS_CLOSE(")"); const QString SPACE(" "); +const QChar AT_SIGN('@'); //localization #define LOC_CONTACT_INFO hbTrId("txt_messaging_menu_contact_info") #define LOC_CALL hbTrId("txt_common_menu_call_verb") #define LOC_SEND_MESSAGE hbTrId("txt_common_menu_send_message") -#define LOC_SAVE_TO_CONTACTS hbTrId("txt_common_menu_save_to_contacts") #define LOC_COPY hbTrId("txt_common_menu_copy") +#define LOC_CREATE_EMAIL hbTrId("txt_messaging_menu_create_mail") const QString BG_FRAME_GRAPHICS("qtg_fr_lineedit_normal"); @@ -349,6 +350,7 @@ if(!anchor.isEmpty() && !this->textCursor().hasSelection()) { + // Secondary Actions populateMenu(contextMenu,anchor); } } @@ -357,63 +359,48 @@ { HbAction* action = NULL; - int contactId = MsgContactHandler::resolveContactDisplayName( - data, - QContactPhoneNumber::DefinitionName, - QContactPhoneNumber::FieldNumber); - - if(contactId > 0) - { + // Finding if the data is an Email Address + QBool isEmail = data.contains(AT_SIGN, Qt::CaseInsensitive); + + if (isEmail) { + action = contextMenu->addAction(LOC_CREATE_EMAIL, this, SLOT(createEmail())); + action->setData(data); + action = contextMenu->addAction(LOC_CONTACT_INFO, this, SLOT(openContactInfo())); action->setData(data); } - else - { - action = contextMenu->addAction(LOC_SAVE_TO_CONTACTS, this, SLOT(saveToContacts())); - action->setData(data); - } + else { + action = contextMenu->addAction(LOC_CONTACT_INFO, this, SLOT(openContactInfo())); + action->setData(data); - action = contextMenu->addAction(LOC_CALL, this, SLOT(call())); - action->setData(data); + action = contextMenu->addAction(LOC_CALL, this, SLOT(call())); + action->setData(data); - action = contextMenu->addAction(LOC_SEND_MESSAGE, this, SLOT(sendMessage())); - action->setData(data); + action = contextMenu->addAction(LOC_SEND_MESSAGE, this, SLOT(sendMessage())); + action->setData(data); + } action = contextMenu->addAction(LOC_COPY, this, SLOT(copyToClipboard())); action->setData(data); - - connect(contextMenu,SIGNAL(aboutToClose()),this,SLOT(menuClosed())); + + connect(contextMenu, SIGNAL(aboutToClose()), this, SLOT(menuClosed())); } void UniViewerAddressWidget::shortTapAction(QString anchor,const QPointF& pos) { + Q_UNUSED(pos) + + // Primary Actions + HbAction action; action.setData(anchor); - - int contactId = MsgContactHandler::resolveContactDisplayName( - anchor, - QContactPhoneNumber::DefinitionName, - QContactPhoneNumber::FieldNumber); - - if(contactId > 0 ) - { - //if resolved conatct open contact card - connect(&action,SIGNAL(triggered()),this,SLOT(openContactInfo())); + if (anchor.contains(AT_SIGN, Qt::CaseInsensitive)) { + // Email address + connect(&action, SIGNAL(triggered()), this, SLOT(createEmail())); } - else - { - //unresolved contact show popup. - highlightText(true); - - HbMenu* contextMenu = new HbMenu(); - contextMenu->setDismissPolicy(HbPopup::TapAnywhere); - contextMenu->setAttribute(Qt::WA_DeleteOnClose, true); - contextMenu->setPreferredPos(pos); - - populateMenu(contextMenu,anchor); - - contextMenu->show(); + else { + connect(&action, SIGNAL(triggered()), this, SLOT(openContactInfo())); } action.trigger(); @@ -452,7 +439,10 @@ connect(serviceRequest, SIGNAL(requestError(int)), this, SLOT(onServiceRequestCompleted())); - *serviceRequest << phoneNumber; + QList args; + args << phoneNumber; + + serviceRequest->setArguments(args); serviceRequest->send(); } } @@ -471,63 +461,52 @@ void UniViewerAddressWidget::openContactInfo() { - HbAction* action = qobject_cast(sender()); - - if(action) - { - QString data = action->data().toString(); - - int contactId = MsgContactHandler::resolveContactDisplayName( - data, - QContactPhoneNumber::DefinitionName, - QContactPhoneNumber::FieldNumber); + HbAction* action = qobject_cast (sender()); + + if (action) { + QString data = action->data().toString(); + int contactId = -1; + QVariant contactType; - // if contact is unresolved on phone number field - // then, try resolving it on email address field - if(contactId <= 0) - { - contactId = MsgContactHandler::resolveContactDisplayName( - data, - QContactEmailAddress::DefinitionName, - QContactEmailAddress::FieldEmailAddress); + if (data.contains(AT_SIGN, Qt::CaseInsensitive)) { + // Email address + contactId = MsgContactHandler::resolveContactDisplayName(data, + QContactEmailAddress::DefinitionName, QContactEmailAddress::FieldEmailAddress); + contactType = QContactEmailAddress::DefinitionName; + } + else { + contactId = MsgContactHandler::resolveContactDisplayName(data, + QContactPhoneNumber::DefinitionName, QContactPhoneNumber::FieldNumber); + contactType = QContactPhoneNumber::DefinitionName; } //service stuff. - QString service("phonebookservices"); - QString interface; - QString operation; QList args; + XQAiwRequest* request = NULL; + XQApplicationManager appManager; - if(contactId > 0) - { - //open contact card - interface = QString("com.nokia.symbian.IContactsView"); - operation = QString("openContactCard(int)"); + if (contactId > 0) { + // open existing contact card + request = appManager.create(XQI_CONTACTS_VIEW, XQOP_CONTACTS_VIEW_CONTACT_CARD, true); // Embedded args << contactId; } - else - { - //save to contacts with phone number field prefilled. - interface = QString("com.nokia.symbian.IContactsEdit"); - operation = QString("editCreateNew(QString,QString)"); - QString type = QContactPhoneNumber::DefinitionName; - args << type; - args << data; + else { + // open temp contact card + request = appManager.create(XQI_CONTACTS_VIEW, + XQOP_CONTACTS_VIEW_TEMP_CONTACT_CARD_WITH_DETAIL, true); // Embedded + args << contactType; // Type + args << data; // Actual data } - XQAiwRequest* request; - XQApplicationManager appManager; - request = appManager.create(service, interface, operation, true); // embedded - if ( request == NULL ) - { - return; - } + + if (request == NULL) { + return; + } // Result handlers - connect (request, SIGNAL(requestOk(const QVariant&)), - this, SLOT(handleOk(const QVariant&))); - connect (request, SIGNAL(requestError(const QVariant&)), - this, SLOT(handleError(const QVariant&))); - + connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&))); + connect(request, SIGNAL(requestError(const QVariant&)), this, + SLOT(handleError(const QVariant&))); + request->setArguments(args); request->send(); delete request; @@ -535,19 +514,14 @@ } void UniViewerAddressWidget::handleOk(const QVariant& result) - { +{ Q_UNUSED(result) - } +} void UniViewerAddressWidget::handleError(int errorCode, const QString& errorMessage) - { +{ Q_UNUSED(errorMessage) Q_UNUSED(errorCode) - } - -void UniViewerAddressWidget::saveToContacts() -{ - openContactInfo(); } void UniViewerAddressWidget::sendMessage() @@ -585,4 +559,45 @@ } } +//--------------------------------------------------------------- +// UniViewerAddressWidget::createEmail +// @see header file +//--------------------------------------------------------------- +void UniViewerAddressWidget::createEmail() +{ + HbAction* action = qobject_cast (sender()); + + if (action) { + QString emailId = action->data().toString(); + + // Launch email editor + QString interfaceName("com.nokia.symbian.IEmailMessageSend"); + QString operation("send(QVariant)"); + XQApplicationManager appManager; + XQAiwRequest* request = appManager.create(interfaceName, operation, true); + if (request == NULL) { + return; + } + + // Fill args + QStringList recipients; + recipients.append(emailId); + + QMap map; + map.insert(QString("to"), recipients); + + QList args; + args.append(map); + + // Result handlers + connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&))); + connect(request, SIGNAL(requestError(const QVariant&)), this, + SLOT(handleError(const QVariant&))); + + request->setArguments(args); + request->send(); + delete request; + } +} + // EOF