diff -r ebfee66fde93 -r 84197e66a4bd messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp --- a/messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp Fri Jun 04 10:25:39 2010 +0100 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp Fri Jun 11 13:35:48 2010 +0300 @@ -34,13 +34,14 @@ // USER INCLUDES #include "debugtraces.h" #include "msgunieditoraddress.h" -#include "msgunifiededitorlineedit.h" -#include "msgmonitor.h" -#include "unieditorgenutils.h" +#include "msgunieditorlineedit.h" +#include "msgunieditormonitor.h" +#include "UniEditorGenUtils.h" const QString PBK_ICON("qtg_mono_contacts"); const QString SEND_ICON("qtg_mono_send"); -const QString replacementStr("; "); +const QString REPLACEMENT_STR("; "); +const QString COMMA_SEPERATOR(","); // Constants const int KDefaultGsmNumberMatchLength = 7; //matching unique ph numbers @@ -49,6 +50,12 @@ #define LOC_DIALOG_OK hbTrId("txt_common_button_ok") #define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel") #define LOC_INVALID_RECIPIENT hbTrId("txt_messaging_dialog_invalid_recipient_found") +#define LOC_INVALID_RECIPIENT_NOT_ADDED hbTrId("txt_messaging_dialog_invalid_recipient_not_added") +#define LOC_INVALID_RECIPIENTS_NOT_ADDED hbTrId("txt_messaging_dialog_invalid_recipients_not_added") + + + + MsgUnifiedEditorAddress::MsgUnifiedEditorAddress( const QString& label, QGraphicsItem *parent ) : @@ -90,6 +97,8 @@ void MsgUnifiedEditorAddress::fetchContacts() { + mLaunchBtn->blockSignals(true); + QList args; QString serviceName("com.nokia.services.phonebookservices"); QString operation("fetch(QString,QString,QString)"); @@ -112,6 +121,9 @@ request->setArguments(args); request->send(); delete request; + + //unblock click signal after some delay. + QTimer::singleShot(250,this,SLOT(unblockSignals())); } void MsgUnifiedEditorAddress::handleOk(const QVariant& value) @@ -197,37 +209,64 @@ // first, we check if MMS max-recipient count will exceed int count = addrlist.count(); - int futureCount = count + MsgMonitor::msgAddressCount(); - if(futureCount > MsgMonitor::maxMmsRecipients()) + int futureCount = count + MsgUnifiedEditorMonitor::msgAddressCount(); + if(futureCount > MsgUnifiedEditorMonitor::maxMmsRecipients()) { mAboutToExceedMaxMmsRecipients = true; mExceedsMaxMmsRecipientsBy = - futureCount - MsgMonitor::maxMmsRecipients(); + futureCount - MsgUnifiedEditorMonitor::maxMmsRecipients(); } // else, check if SMS max-recipient count will exceed else if(!mSkipMaxRecipientQuery) { futureCount = count + addressCount(); - if( (addressCount() <= MsgMonitor::maxSmsRecipients()) && - (futureCount > MsgMonitor::maxSmsRecipients()) ) + if( (addressCount() <= MsgUnifiedEditorMonitor::maxSmsRecipients()) && + (futureCount > MsgUnifiedEditorMonitor::maxSmsRecipients()) ) { mAboutToExceedMaxSmsRecipients = true; } } - + int invalidCount= 0; + QString invalidContacts; for(int i = 0; i < count; i++ ) - { - mAddressMap.insertMulti(addrlist[i]->address(), addrlist[i]->alias()); - if(!addrlist[i]->alias().isEmpty()) { - mAddressEdit->setText(addrlist[i]->alias()); - } - else + bool isValid = false; + isValid = checkValidAddress(addrlist.at(i)->address()); + if(!isValid) + { + invalidCount ++; + // append the comma till last but one contact. + // add the invalid ocntacts to the " , " seperated string. + if(invalidCount > 1) + { + invalidContacts.append(COMMA_SEPERATOR); + } + invalidContacts.append(addrlist.at(i)->alias()); + } + else + { + mAddressMap.insertMulti(addrlist[i]->address(), addrlist[i]->alias()); + if(!addrlist[i]->alias().isEmpty()) + { + mAddressEdit->setText(addrlist[i]->alias()); + } + else + { + mAddressEdit->setText(addrlist[i]->address(), false); + } + } + + } + if(invalidCount) { - mAddressEdit->setText(addrlist[i]->address(), false); + QString invalidStr; + (invalidCount == 1)?(invalidStr = QString(LOC_INVALID_RECIPIENT_NOT_ADDED)) :(invalidStr = QString(LOC_INVALID_RECIPIENTS_NOT_ADDED)); + // append line seperator + invalidStr.append("
"); + invalidStr.append(invalidContacts); + HbMessageBox::information(invalidStr); } - } // addition operation complete, reset flags mAboutToExceedMaxSmsRecipients = false; @@ -256,7 +295,7 @@ { // Max MMS recipient count check if( mAboutToExceedMaxMmsRecipients || - (MsgMonitor::msgAddressCount() >= MsgMonitor::maxMmsRecipients()) ) + (MsgUnifiedEditorMonitor::msgAddressCount() >= MsgUnifiedEditorMonitor::maxMmsRecipients()) ) { if(mAboutToExceedMaxMmsRecipients) {// show discreet note only once @@ -272,7 +311,7 @@ { // update monitor data emit contentChanged(); - if(MsgMonitor::msgAddressCount() > MsgMonitor::maxMmsRecipients()) + if(MsgUnifiedEditorMonitor::msgAddressCount() > MsgUnifiedEditorMonitor::maxMmsRecipients()) { HbNotificationDialog::launchDialog( LOC_MMS_RECIPIENT_LIMIT_REACHED); @@ -290,8 +329,8 @@ // Max SMS recipient count check if( !mSkipMaxRecipientQuery && - (MsgMonitor::messageType() == ConvergedMessage::Sms) && - (mAddressEdit->addresses().count() > MsgMonitor::maxSmsRecipients()) ) + (MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms) && + (mAddressEdit->addresses().count() > MsgUnifiedEditorMonitor::maxSmsRecipients()) ) { // when we show this dialog, we don't want the intermediate states // to be signalled to us @@ -414,7 +453,7 @@ this, SLOT(onContentsChanged(const QString&))); mAddressEdit->clearContent(); - QStringList list = mPrevBuffer.split(replacementStr, + QStringList list = mPrevBuffer.split(REPLACEMENT_STR, QString::SkipEmptyParts); int count = list.count(); QStringList valList = mAddressMap.values(); @@ -467,27 +506,15 @@ // get the list of contacts in address-field QStringList fieldAddresses(mAddressEdit->addresses()); - bool allValid = true; + bool isValid = true; foreach(QString addr, fieldAddresses) { // run address validation only if address is unmapped // (i.e. user-inserted) if(mAddressMap.contains(addr)) { - // 1. perform number validation - allValid = CommonPhoneParser::IsValidPhoneNumber( - *XQConversions::qStringToS60Desc(addr), - CommonPhoneParser::ESMSNumber ); - - // 2. if number validity fails, then perform email addr validation - if( !allValid && - (MsgMonitor::messageType() == ConvergedMessage::Mms) ) - { // additional check for MMS only - allValid = genUtils->IsValidEmailAddress( - *XQConversions::qStringToS60Desc(addr) ); - } - - if(!allValid) + isValid = checkValidAddress(addr); + if(!isValid) { mAddressEdit->highlightInvalidString(addr); QString invalidAddrStr = @@ -502,9 +529,32 @@ } } } + + return isValid; +} +// ---------------------------------------------------------------------------- +// MsgUnifiedEditorAddress::checkValidAddress +// @see header +// ---------------------------------------------------------------------------- +bool MsgUnifiedEditorAddress::checkValidAddress(const QString& addr) + { + bool isValid = false; + // 1. perform number validation + isValid = CommonPhoneParser::IsValidPhoneNumber( + *XQConversions::qStringToS60Desc(addr), + CommonPhoneParser::ESMSNumber ); + + // 2. if number validity fails, then perform email addr validation + UniEditorGenUtils* genUtils = new UniEditorGenUtils; + if( !isValid && + ( MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms) ) + { // additional check for MMS only + isValid = genUtils->IsValidEmailAddress( + *XQConversions::qStringToS60Desc(addr) ); + } delete genUtils; - return allValid; -} + return isValid; + } void MsgUnifiedEditorAddress::handleInvalidContactDialog( HbAction* act) @@ -513,6 +563,11 @@ QTimer::singleShot(250, this, SLOT(setFocus())); } +void MsgUnifiedEditorAddress::unblockSignals() +{ + mLaunchBtn->blockSignals(false); +} + Q_IMPLEMENT_USER_METATYPE(CntServicesContact) Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)