messagingapp/msgui/conversationview/src/msgconversationview.cpp
changeset 70 a15d9966050f
parent 52 12db4185673b
child 72 6f657153cbc5
--- 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 <hbapplication.h>
 #include <HbMenu>
 #include <HbAction>
 #include <HbListView>
 #include <HbMessageBox>
 #include <HbNotificationDialog>
 #include <HbFrameBackground>
-#include <xqservicerequest.h>
 #include <HbStaticVkbHost>
 #include <HbStyleLoader>
 #include <xqaiwrequest.h>
 #include <xqappmgr.h>
 #include <HbMainWindow>
 
+#include <QInputContext>
 #include <QDir>
 #include <QDateTime>
 #include <QGraphicsLinearLayout>
@@ -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<QVariant> 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<QVariant> 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<XQAiwRequest> request(appManager.create(service, interface, operation, false));
+    if (request) {
+        QList<QVariant> args;
+        args << address;
+        request->setArguments(args);
+        request->send();
+    }
+}
+
 // EOF