--- 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 <xqservicerequest.h>
#include <xqappmgr.h>
+#include <xqaiwdecl.h>
+#include <xqaiwrequest.h>
#include <cntservicescontact.h>
#include <qtcontacts.h>
-#include <xqservicerequest.h>
-#include <xqaiwrequest.h>
#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<QVariant> args;
+ args << phoneNumber;
+
+ serviceRequest->setArguments(args);
serviceRequest->send();
}
}
@@ -471,63 +461,52 @@
void UniViewerAddressWidget::openContactInfo()
{
- HbAction* action = qobject_cast<HbAction*>(sender());
-
- if(action)
- {
- QString data = action->data().toString();
-
- int contactId = MsgContactHandler::resolveContactDisplayName(
- data,
- QContactPhoneNumber::DefinitionName,
- QContactPhoneNumber::FieldNumber);
+ HbAction* action = qobject_cast<HbAction*> (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<QVariant> 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<HbAction*> (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<QString, QVariant> map;
+ map.insert(QString("to"), recipients);
+
+ QList<QVariant> 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