--- a/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Fri Jun 11 13:35:48 2010 +0300
+++ b/messagingapp/msgui/msgapp/src/msgviewmanager.cpp Wed Jun 23 18:09:17 2010 +0300
@@ -39,6 +39,9 @@
#include "ringbc.h"
#include "unidatamodelloader.h"
#include "unidatamodelplugininterface.h"
+#include "msgcontacthandler.h"
+#include "debugtraces.h"
+#include "msgaudiofetcherview.h"
// LOCALIZATION
#define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
@@ -49,10 +52,10 @@
const qint64 NULL_CONVERSATIONID = -1;
-MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent) :
+MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent,int activityMsgId) :
QObject(parent), mMainWindow(mainWindow), mUniEditor(0), mListView(0), mConversationView(0),
- mUniViewer(0), mDraftsListView(0), mSettingsView(0), mBackAction(0), mServiceRequest(
- serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
+ mUniViewer(0), mDraftsListView(0), mSettingsView(0), mAudioFetcherView(0), mBackAction(0),
+ mServiceRequest(serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
{
//creating back action.
mBackAction = new HbAction(Hb::BackNaviAction, this);
@@ -60,10 +63,18 @@
//create clv as first view if not a service request.
if (!mServiceRequest) {
+
+ if(activityMsgId == NULL_CONVERSATIONID)
+ {
QVariantList param;
param << MsgBaseView::CLV;
param << MsgBaseView::CLV;
switchView(param);
+ }
+ else
+ {
+ openUniEditorActivity(activityMsgId);
+ }
}
else
{
@@ -77,6 +88,7 @@
MsgViewManager::~MsgViewManager()
{
// TODO Auto-generated destructor stub
+ mEditorData.clear();
}
void MsgViewManager::onBackAction()
@@ -110,7 +122,7 @@
// reset the conversation id published
mConversationView->setPSCVId(false);
-
+
//clearing content of cv.
mConversationView->clearContent();
@@ -202,6 +214,18 @@
switchView(param);
break;
}
+ case MsgBaseView::AUDIOFETCHER:
+ {
+ // switch to CV.
+ QVariantList param;
+ param << mPreviousView;
+ param << MsgBaseView::AUDIOFETCHER;
+ if(mPreviousView == MsgBaseView::CV)
+ {
+ param << mConversationId;
+ }
+ switchView(param);
+ }
default:
{
break;
@@ -211,9 +235,10 @@
void MsgViewManager::switchView(const QVariantList& data)
{
+ QCRITICAL_WRITE("MsgViewManager::switchView start.");
int viewId = data.at(0).toInt();
-
+
switch (viewId) {
case MsgBaseView::DEFAULT:
{
@@ -256,7 +281,13 @@
switchToMsgSettings(data);
break;
}
+ case MsgBaseView::AUDIOFETCHER:
+ {
+ switchToAudioFetcher(data);
+ break;
}
+ }
+ QCRITICAL_WRITE("MsgViewManager::switchView end.");
}
void MsgViewManager::deletePreviousView()
@@ -267,7 +298,6 @@
mMainWindow->removeView(v);
delete v;
}
- disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
}
@@ -366,7 +396,7 @@
if (conversationId < 0) {
param << MsgBaseView::CLV;
param << MsgBaseView::SERVICE;
-
+
if( mCurrentView == MsgBaseView::CV && mConversationView)
{
mConversationView->setPSCVId(false);
@@ -450,12 +480,26 @@
mCurrentView = MsgBaseView::CLV;
mPreviousView = data.at(1).toInt();
- // delete case from viewer service
+ // delete case from viewer service
if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
- // quit the application
+ // quit the application
HbApplication::quit();
}
+ //delete UniEditor
+ if (mUniEditor)
+ {
+ appendViewToBeDeleted(mUniEditor);
+ mUniEditor = NULL;
+ }
+
+ //delete UniViewer
+ if (mUniViewer)
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
if (mConversationView) {
mConversationView->saveContentToDrafts();
//clearing content of cv.
@@ -471,20 +515,6 @@
}
mMainWindow->setCurrentView(mListView);
-
- //delete UniEditor
- if (mUniEditor)
- {
- appendViewToBeDeleted(mUniEditor);
- mUniEditor = NULL;
- }
-
- //delete UniViewer
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
}
void MsgViewManager::switchToCv(const QVariantList& data)
@@ -495,44 +525,64 @@
// delete case from viewer service
if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
- // quit the application
+ // quit the application
HbApplication::quit();
}
+ // delete Audio Fetcher view
+ if(mAudioFetcherView)
+ {
+ appendViewToBeDeleted(mAudioFetcherView);
+ mAudioFetcherView = NULL;
+ }
+
+ //delete UniEditor
+ if (mUniEditor)
+ {
+ appendViewToBeDeleted(mUniEditor);
+ mUniEditor = NULL;
+ }
+
+ //delete UniViewer
+ if (mUniViewer)
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
QVariant var = data.at(2);
qint64 conversationId;
if (var.type() == QVariant::String) {
QString phoneNumber = var.toString();
- conversationId = findConversationId(phoneNumber);
+ qint32 contactId = findContactId(phoneNumber);
+ if (contactId != -1) {
+ conversationId = ConversationsEngine::instance()->getConversationIdFromContactId(contactId);
+ }
+ else {
+ conversationId = findConversationId(phoneNumber);
+ }
if (conversationId == NULL_CONVERSATIONID) {
QVariantList param;
param << MsgBaseView::CLV;
param << MsgBaseView::CV;
-
+
if( mCurrentView == MsgBaseView::CV && mConversationView){
mConversationView->setPSCVId(false);
}
-
+
switchView(param);
return;
}
}
else if (var.type() == QVariant::Invalid) {
- // this case comes when a message is deleted from
- // Unified viewer set curent view as conversation view
+ // this case comes when a message is deleted from
+ // Unified viewer set curent view as conversation view
// and return
mMainWindow->setCurrentView(mConversationView);
-
+
// publish already opened conversation's id
mConversationView->setPSCVId(true);
-
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
-
return;
}
else {
@@ -554,30 +604,10 @@
mConversationView->saveContentToDrafts();
//clearing content of current cv.
mConversationView->clearContent();
- }
+ }
mConversationView->openConversation(conversationId);
-
- if (mServiceRequest) {
- mMainWindow->setCurrentView(mConversationView);
- }
- else {
- mMainWindow->setCurrentView(mConversationView);
- }
-
- //delete UniEditor
- if (mUniEditor)
- {
- appendViewToBeDeleted(mUniEditor);
- mUniEditor = NULL;
- }
-
- //delete UniViewer
- if (mUniViewer)
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
+ mMainWindow->setCurrentView(mConversationView);
}
void MsgViewManager::switchToDlv(const QVariantList& data)
@@ -603,24 +633,40 @@
* Editor is tried to open again before exiting the previously
* opened editor. Multi taping in DLV or Forward.
*/
- if (mUniEditor) {
+ if (mUniEditor && !mAudioFetcherView)
+ {
return;
}
mCurrentView = MsgBaseView::UNIEDITOR;
mPreviousView = data.at(1).toInt();
- if (mConversationView) {
+ // delete Audio Fetcher view
+ if(mAudioFetcherView)
+ {
+ appendViewToBeDeleted(mAudioFetcherView);
+ mAudioFetcherView = NULL;
+ }
+
+ // delete UniViewer
+ if (mUniViewer )
+ {
+ appendViewToBeDeleted(mUniViewer);
+ mUniViewer = NULL;
+ }
+
+ if (mConversationView)
+ {
//clearing content of cv.
mConversationView->clearContent();
}
- // reset conversation id published
- if(mPreviousView == MsgBaseView::CV && mConversationView)
- {
- mConversationView->setPSCVId(false);
- }
-
+ // reset conversation id published
+ if(mPreviousView == MsgBaseView::CV && mConversationView)
+ {
+ mConversationView->setPSCVId(false);
+ }
+
//swich to unieditor.
if (!mUniEditor) {
mUniEditor = new MsgUnifiedEditorView();
@@ -639,25 +685,15 @@
}
if (MsgBaseView::DLV == mPreviousView) {
- mUniEditor->openDraftsMessage(editorData);
+ //Populate editor after view ready indication
+ populateUniEditorAfterViewReady(editorData);
}
else {
mUniEditor->populateContent(editorData);
}
}
- if (mServiceRequest) {
- mMainWindow->setCurrentView(mUniEditor);
- }
- else {
- mMainWindow->setCurrentView(mUniEditor);
- }
- //delete UniViewer
- if (mUniViewer )
- {
- appendViewToBeDeleted(mUniViewer);
- mUniViewer = NULL;
- }
+ mMainWindow->setCurrentView(mUniEditor);
}
void MsgViewManager::switchToUniViewer(const QVariantList& data)
@@ -679,7 +715,7 @@
qint32 messageId = data.at(3).toInt();
int msgCount = data.at(4).toInt();
int canForwardMessage = data.at(5).toInt();
-
+
if (!mUniViewer) {
mUniViewer = new UnifiedViewer(messageId, canForwardMessage);
mUniViewer->setNavigationAction(mBackAction);
@@ -687,14 +723,14 @@
connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
SLOT(switchView(const QVariantList&)));
}
- mUniViewer->populateContent(messageId, true, msgCount);
+ mUniViewer->populateContent(messageId, true, msgCount);
}
-
+
if(mPreviousView==MsgBaseView::CV && mConversationView)
{
mConversationView->setPSCVId(false);
}
-
+
mMainWindow->setCurrentView(mUniViewer);
}
void MsgViewManager::switchToMsgSettings(const QVariantList& data)
@@ -703,14 +739,14 @@
mPreviousView = data.at(1).toInt();
if (!mSettingsView) {
-
+
MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
== MsgBaseView::CV)
{
- view = (MsgSettingsView::SettingsView)data.at(2).toInt();
+ view = (MsgSettingsView::SettingsView)data.at(2).toInt();
}
-
+
mSettingsView = new MsgSettingsView(view);
mSettingsView->setNavigationAction(mBackAction);
mMainWindow->addView(mSettingsView);
@@ -881,7 +917,7 @@
{
mMainWindow->setInteractive(true);
}
-
+
disconnect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
}
@@ -890,11 +926,38 @@
if (view)
{
mViewTobeDeleted << view;
- connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
+ connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()), Qt::UniqueConnection);
}
}
// ----------------------------------------------------------------------------
+// MsgViewManager::populateEditorAfterViewReady
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::populateUniEditorAfterViewReady(const QVariantList& editorData)
+ {
+ //Save the editor data and use it in ViewReady handler
+ mEditorData = editorData;
+ connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(populateUniEditorView()));
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::populateUniEditorView
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::populateUniEditorView()
+ {
+ if (mUniEditor)
+ {
+ mUniEditor->openDraftsMessage(mEditorData);
+ }
+ mEditorData.clear();
+
+ disconnect(mMainWindow, SIGNAL(viewReady()), this,
+ SLOT(populateUniEditorView()));
+}
+
+// ----------------------------------------------------------------------------
// MsgViewManager::onDialogDeleteMsg
// @see header
// ----------------------------------------------------------------------------
@@ -949,3 +1012,111 @@
{
return mCurrentView;
}
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::switchToAudioFetcher
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::switchToAudioFetcher(const QVariantList& data)
+ {
+ /**
+ * Audio Fetcher is tried to open again before exiting
+ * opened editor.
+ */
+ if(mAudioFetcherView)
+ {
+ return;
+ }
+
+ //switch to Audio Fetcher view
+ mCurrentView = MsgBaseView::AUDIOFETCHER;
+ mPreviousView = data.at(1).toInt();
+
+ mAudioFetcherView = new MsgAudioFetcherView();
+ mAudioFetcherView->setNavigationAction(mBackAction);
+ connect(mAudioFetcherView, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+
+ if(mPreviousView==MsgBaseView::CV && mConversationView)
+ {
+ mConversationView->setPSCVId(false);
+ }
+
+ mMainWindow->addView(mAudioFetcherView);
+ mMainWindow->setCurrentView(mAudioFetcherView);
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::saveContentToDraft
+// @see header
+// ----------------------------------------------------------------------------
+int MsgViewManager::saveContentToDraft()
+ {
+ int msgId = NULL_CONVERSATIONID;
+ if( mCurrentView == MsgBaseView::CV )
+ {
+ msgId = mConversationView->saveContentToDrafts();
+ }
+ else if( mCurrentView ==MsgBaseView::UNIEDITOR)
+ {
+ msgId = mUniEditor->saveContentToDrafts();
+ }
+ return msgId;
+ }
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::saveContentToDraft
+// @see header
+// ----------------------------------------------------------------------------
+void MsgViewManager::openUniEditorActivity(int activityMsgId)
+{
+ int msgType;
+ int msgSubType;
+
+ qint32 messageId(activityMsgId);
+ // get the message type
+ ConversationsEngine::instance()->markAsReadAndGetType(messageId, msgType, msgSubType);
+
+ if (!mUniEditor) {
+ mUniEditor = new MsgUnifiedEditorView();
+ mMainWindow->addView(mUniEditor);
+ mUniEditor->setNavigationAction(mBackAction);
+ connect(mUniEditor, SIGNAL(switchView(const QVariantList&)), this,
+ SLOT(switchView(const QVariantList&)));
+ }
+
+ // buffer data to open the draft message
+ ConvergedMessageId convergedMsgId(activityMsgId);
+ ConvergedMessage message;
+ message.setMessageType((ConvergedMessage::MessageType) msgType);
+ message.setMessageId(convergedMsgId);
+
+ // Launch uni-editor view
+ QByteArray dataArray;
+ QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
+ message.serialize(messageStream);
+
+ QVariantList editorData;
+ editorData << dataArray;
+ mUniEditor->openDraftsMessage(editorData);
+
+ // set the current view
+ mCurrentView = MsgBaseView::UNIEDITOR;
+ mMainWindow->setCurrentView(mUniEditor);
+}
+
+// ----------------------------------------------------------------------------
+// MsgViewManager::findContactId
+// @see header
+// ----------------------------------------------------------------------------
+qint32 MsgViewManager::findContactId(QString address)
+ {
+ QString displayLabel;
+ int count;
+ int localId =
+ MsgContactHandler::resolveContactDisplayName(address,
+ displayLabel,
+ count);
+
+ return localId;
+ }
\ No newline at end of file