diff -r 84197e66a4bd -r 35b64624a9e7 messagingapp/msgui/msgapp/src/msgviewmanager.cpp --- 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