diff -r 8ba0afbb4637 -r a15d9966050f messagingapp/msgui/conversationview/src/msgconversationview.cpp --- a/messagingapp/msgui/conversationview/src/msgconversationview.cpp Thu Sep 02 20:23:03 2010 +0300 +++ b/messagingapp/msgui/conversationview/src/msgconversationview.cpp Fri Sep 17 08:28:39 2010 +0300 @@ -18,19 +18,20 @@ #include "msgconversationview.h" // SYSTEM INCLUDES +#include #include #include #include #include #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -57,9 +58,9 @@ #include "ringbc.h" #include "mmsconformancecheck.h" #include "msgsettingsview.h" -#include "msgaudiofetcherview.h" #include "unieditorpluginloader.h" #include "unieditorplugininterface.h" +#include "msgaudiofetcherdialog.h" //Item specific menu. @@ -106,6 +107,7 @@ mContactCardWidget(contactCardWidget), mSendUtil(NULL), mVkbHost(NULL), + mDialog(NULL), mVisibleIndex(), mModelPopulated(false), mViewReady(false) @@ -133,7 +135,8 @@ //--------------------------------------------------------------- MsgConversationView::~MsgConversationView() { - + //delete the popup dialog + delete mDialog; } //--------------------------------------------------------------- // MsgConversationView::setupView @@ -485,6 +488,15 @@ } } deactivateInputBlocker(); + + // make sure virtual keyboard is closed + QInputContext *ic = qApp->inputContext(); + if (ic) { + QEvent *closeEvent = new QEvent(QEvent::CloseSoftwareInputPanel); + ic->filterEvent(closeEvent); + delete closeEvent; + } + if( sendResult == KErrNotFound) { HbMessageBox::question(LOC_DIALOG_SMS_SETTINGS_INCOMPLETE, this, @@ -523,12 +535,12 @@ if(!action) return; - QList args; - QString serviceName("com.nokia.services.phonebookservices"); - QString operation("fetch(QString,QString,QString)"); + QString service("phonebookservices"); + QString interface("com.nokia.symbian.IContactsFetch"); + QString operation("multiFetch(QString,QString)"); XQAiwRequest* request; XQApplicationManager appManager; - request = appManager.create(serviceName, "Fetch", operation, true); //embedded + request = appManager.create(service, interface, operation, true); //embedded if ( request == NULL ) { return; @@ -549,6 +561,7 @@ connect (request, SIGNAL(requestError(int,const QString&)), this, SLOT(serviceRequestError(int,const QString&))); + QList args; args << QString(tr("Phonebook")); args << KCntActionAll; args << KCntFilterDisplayAll; @@ -569,13 +582,15 @@ XQAiwRequest* request = NULL; XQApplicationManager appManager; request = appManager.create(service,interface, operation, true); // embedded - request->setSynchronous(true); // synchronous + if(!request) { QDEBUG_WRITE("AIW-ERROR: NULL request"); return; } + request->setSynchronous(true); // synchronous + connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(imagesFetched(const QVariant&))); connect(request, SIGNAL(requestError(int,const QString&)), @@ -595,25 +610,18 @@ //--------------------------------------------------------------- void MsgConversationView::fetchAudio() { - // Launch Audio fetcher view - QVariantList params; - QByteArray dataArray; - QDataStream messageStream - (&dataArray, QIODevice::WriteOnly | QIODevice::Append); + // Launch Audio fetcher dialog + if (!mDialog) + { + mDialog = new MsgAudioFetcherDialog(); + bool b = connect(mDialog, + SIGNAL(audioSelected(QString&)), + this, + SLOT(onAudioSelected(QString&))); + } - ConvergedMessage message; - message.setBodyText(mEditorWidget->content()); - // add address from contact-card to to-field - ConvergedMessageAddress address; - address.setAlias(mContactCardWidget->address().at(0)->alias()); - address.setAddress(mContactCardWidget->address().at(0)->address()); - message.addToRecipient(address); - message.serialize(messageStream); - - params << MsgBaseView::AUDIOFETCHER; // target view - params << MsgBaseView::CV; // source view - params << dataArray; - emit switchView(params); + //show the dialog + mDialog->show(); } //--------------------------------------------------------------- @@ -841,7 +849,7 @@ args << QVariant(messageId); request->setSynchronous(true); - + request->setEmbedded(true); request->setArguments(args); request->send(); delete request; @@ -976,7 +984,7 @@ // For suspended message both short tap and long tap needs to show the same // context menu..... if(direction == ConvergedMessage::Outgoing - &&sendingState == ConvergedMessage::Suspended ) + && ((sendingState == ConvergedMessage::Suspended) || (sendingState == ConvergedMessage::Failed))) { handleShortTap(); return; @@ -1105,7 +1113,6 @@ if(!data2.isNull()) params << data2; - clearEditors(); emit switchView(params); } @@ -1488,4 +1495,79 @@ return shared; } +//--------------------------------------------------------------- +// MsgConversationView::onAudioSelected +// @see header file +//--------------------------------------------------------------- +void MsgConversationView::onAudioSelected(QString& filePath) +{ + QVariantList params; + QByteArray dataArray; + QDataStream messageStream + (&dataArray, QIODevice::WriteOnly | QIODevice::Append); + + ConvergedMessage message; + message.setBodyText(mEditorWidget->content()); + // add address from contact-card to to-field + ConvergedMessageAddress address; + address.setAlias(mContactCardWidget->address().at(0)->alias()); + address.setAddress(mContactCardWidget->address().at(0)->address()); + message.addToRecipient(address); + + //add the attachment as selected from audio picker + ConvergedMessageAttachment* attachment = + new ConvergedMessageAttachment(filePath); + ConvergedMessageAttachmentList attachmentList; + attachmentList.append(attachment); + message.addAttachments(attachmentList); + message.serialize(messageStream); + + params << MsgBaseView::UNIEDITOR; // target view + params << MsgBaseView::CV; // source view + params << dataArray; + params << MsgBaseView::ADD_AUDIO; + emit switchView(params); +} + +//--------------------------------------------------------------- +// MsgConversationView::handleKeyEvent +// @see header file +//--------------------------------------------------------------- +bool MsgConversationView::handleKeyEvent(int key) +{ + bool eventHandled = false; + if (Qt::Key_Yes == key) { + //getting address of last sent/received msg. + const int rowCount = mMessageModel->rowCount(); + QModelIndex index = mMessageModel->index(rowCount - 1, 0); + QString address = index.data(ConversationAddress).toString(); + + if (!address.isEmpty()) { + call(address); + eventHandled = true; + } + } + return eventHandled; +} + +//--------------------------------------------------------------- +// MsgConversationView::call +// @see header +//--------------------------------------------------------------- +void MsgConversationView::call(const QString& address) +{ + QString service("phoneui"); + QString interface("com.nokia.symbian.ICallDial"); + QString operation("dial(QString)"); + + XQApplicationManager appManager; + QScopedPointer request(appManager.create(service, interface, operation, false)); + if (request) { + QList args; + args << address; + request->setArguments(args); + request->send(); + } +} + // EOF