messagingapp/msgui/msgapp/src/msgviewmanager.cpp
branchGCC_SURGE
changeset 47 5b14749788d7
parent 27 e4592d119491
parent 44 36f374c67aa8
equal deleted inserted replaced
35:a32b19fb291e 47:5b14749788d7
    23 #include <xqserviceutil.h>
    23 #include <xqserviceutil.h>
    24 #include <QSqlQuery>
    24 #include <QSqlQuery>
    25 #include <QSqlError>
    25 #include <QSqlError>
    26 #include <HbApplication>
    26 #include <HbApplication>
    27 #include <xqappmgr.h>
    27 #include <xqappmgr.h>
    28 #include <HbMessageBox.h>
    28 #include <hbmessagebox.h>
    29 #include <HbView>
    29 #include <HbView>
    30 
    30 
    31 #include "conversationsengine.h"
    31 #include "conversationsengine.h"
    32 #include "msglistview.h"
    32 #include "msglistview.h"
    33 #include "msgunieditorview.h"
    33 #include "msgunieditorview.h"
    37 #include "msgsettingsview.h"
    37 #include "msgsettingsview.h"
    38 #include "convergedmessageid.h"
    38 #include "convergedmessageid.h"
    39 #include "ringbc.h"
    39 #include "ringbc.h"
    40 #include "unidatamodelloader.h"
    40 #include "unidatamodelloader.h"
    41 #include "unidatamodelplugininterface.h"
    41 #include "unidatamodelplugininterface.h"
       
    42 #include "msgcontacthandler.h"
       
    43 #include "debugtraces.h"
       
    44 #include "msgaudiofetcherview.h"
    42 
    45 
    43 // LOCALIZATION
    46 // LOCALIZATION
    44 #define LOC_BUTTON_DELETE hbTrId("txt_common_button_delete")
       
    45 #define LOC_BUTTON_CANCEL hbTrId("txt_common_button_cancel")
       
    46 #define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
    47 #define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
    47 #define LOC_DIALOG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone")
    48 #define LOC_DIALOG_SAVE_RINGTONE hbTrId("txt_conversations_dialog_save_ringing_tone")
    48 #define LOC_COMMON_SAVE  hbTrId("txt_common_menu_save")
       
    49 
    49 
    50 const qint64 NULL_CONVERSATIONID = -1;
    50 const qint64 NULL_CONVERSATIONID = -1;
    51 
    51 
    52 MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent) :
    52 MsgViewManager::MsgViewManager(bool serviceRequest, HbMainWindow* mainWindow, QObject* parent,int activityMsgId) :
    53     QObject(parent), mMainWindow(mainWindow), mUniEditor(0), mListView(0), mConversationView(0),
    53     QObject(parent), mMainWindow(mainWindow), mUniEditor(0), mListView(0), mConversationView(0),
    54         mUniViewer(0), mDraftsListView(0), mSettingsView(0), mBackAction(0), mServiceRequest(
    54         mUniViewer(0), mDraftsListView(0), mSettingsView(0), mAudioFetcherView(0), mBackAction(0),
    55             serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
    55         mServiceRequest(serviceRequest), mConversationId(-1), mViewServiceRequest(false),mMessageId(-1)
    56 {
    56 {
    57     //creating back action.
    57     //creating back action.
    58     mBackAction = new HbAction(Hb::BackNaviAction, this);
    58     mBackAction = new HbAction(Hb::BackNaviAction, this);
    59     connect(mBackAction, SIGNAL(triggered()), this, SLOT(onBackAction()));
    59     connect(mBackAction, SIGNAL(triggered()), this, SLOT(onBackAction()));
    60 
    60 
    61     //create clv as first view if not a service request.
    61     //create clv as first view if not a service request.
    62     if (!mServiceRequest) {
    62     if (!mServiceRequest) {
       
    63     
       
    64     if(activityMsgId == NULL_CONVERSATIONID)
       
    65         {
    63         QVariantList param;
    66         QVariantList param;
    64         param << MsgBaseView::CLV;
    67         param << MsgBaseView::CLV;
    65         param << MsgBaseView::CLV;
    68         param << MsgBaseView::CLV;
    66         switchView(param);
    69         switchView(param);
       
    70         }
       
    71     else 
       
    72         {
       
    73         openUniEditorActivity(activityMsgId);
       
    74         }
    67     }
    75     }
    68     else
    76     else
    69     {
    77     {
    70         mDummyview = new HbView();
    78         mDummyview = new HbView();
    71         mMainWindow->addView(mDummyview);
    79         mMainWindow->addView(mDummyview);
    75 }
    83 }
    76 
    84 
    77 MsgViewManager::~MsgViewManager()
    85 MsgViewManager::~MsgViewManager()
    78 {
    86 {
    79     // TODO Auto-generated destructor stub
    87     // TODO Auto-generated destructor stub
       
    88     mEditorData.clear();
    80 }
    89 }
    81 
    90 
    82 void MsgViewManager::onBackAction()
    91 void MsgViewManager::onBackAction()
    83 {
    92 {
    84     switch (mCurrentView) {
    93     switch (mCurrentView) {
   100         break;
   109         break;
   101     }
   110     }
   102 
   111 
   103     case MsgBaseView::CV:
   112     case MsgBaseView::CV:
   104     {
   113     {
       
   114 	    mConversationId = -1; //reset the conversation view id since its closed
       
   115 		
   105         //Save content to drafts before switching to clv
   116         //Save content to drafts before switching to clv
   106         mConversationView->saveContentToDrafts();
   117         mConversationView->saveContentToDrafts();
   107 
   118 
   108         //marking messages as red in CV.
   119         //marking messages as red in CV.
   109         mConversationView->markMessagesAsRead();
   120         mConversationView->markMessagesAsRead();
   110 
   121 
   111         // reset the conversation id published
   122         // reset the conversation id published
   112         mConversationView->setPSCVId(false);
   123         mConversationView->setPSCVId(false);
   113         
   124 
   114         //clearing content of cv.
   125         //clearing content of cv.
   115         mConversationView->clearContent();
   126         mConversationView->clearContent();
   116 
   127 
   117         // if service request for veiwer the just switch to univiewer.
   128         // if service request for veiwer the just switch to univiewer.
   118         if (mViewServiceRequest) {
   129         if (mViewServiceRequest) {
   184         if (mViewServiceRequest) {
   195         if (mViewServiceRequest) {
   185             HbApplication::quit();
   196             HbApplication::quit();
   186         }
   197         }
   187         else {
   198         else {
   188             QVariantList param;
   199             QVariantList param;
   189             param << MsgBaseView::CV;
   200             if (mConversationId != -1)
   190             param << MsgBaseView::UNIVIEWER;
   201                 {
   191             param << mConversationId;
   202                     //this means CV is till open then just open the fresh CV
       
   203                     param << MsgBaseView::CV;
       
   204                     param << MsgBaseView::UNIVIEWER;
       
   205                     param << mConversationView->conversationId();
       
   206                 }
       
   207                 else
       
   208                 {
       
   209                     param << MsgBaseView::CLV;
       
   210                     param << MsgBaseView::UNIVIEWER;
       
   211                 }
   192             switchView(param);
   212             switchView(param);
   193 
   213 
   194         }
   214         }
   195         break;
   215         break;
   196     }
   216     }
   200         param << MsgBaseView::DEFAULT;
   220         param << MsgBaseView::DEFAULT;
   201         param << MsgBaseView::MSGSETTINGS;
   221         param << MsgBaseView::MSGSETTINGS;
   202         switchView(param);
   222         switchView(param);
   203         break;
   223         break;
   204     }
   224     }
       
   225     case MsgBaseView::AUDIOFETCHER:
       
   226     {
       
   227         // switch back to previous view
       
   228         QVariantList param;
       
   229         param << mPreviousView;
       
   230         param << MsgBaseView::AUDIOFETCHER;
       
   231         if(mPreviousView == MsgBaseView::CV)
       
   232         {
       
   233             param << mConversationId;
       
   234         }
       
   235         switchView(param);
       
   236         break;
       
   237     }
   205     default:
   238     default:
   206     {
   239     {
   207         break;
   240         break;
   208     }
   241     }
   209     }
   242     }
   210 }
   243 }
   211 
   244 
   212 void MsgViewManager::switchView(const QVariantList& data)
   245 void MsgViewManager::switchView(const QVariantList& data)
   213 {
   246 {
   214    
   247     QCRITICAL_WRITE("MsgViewManager::switchView start.");
   215     connect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
       
   216     mMainWindow->setInteractive(false);
       
   217     
   248     
   218     int viewId = data.at(0).toInt();
   249     int viewId = data.at(0).toInt();
   219     
   250 
   220     switch (viewId) {
   251     switch (viewId) {
   221     case MsgBaseView::DEFAULT:
   252     case MsgBaseView::DEFAULT:
   222     {
   253     {
   223         handleDefault(data);
   254         handleDefault(data);
   224         break;
   255         break;
   257     case MsgBaseView::MSGSETTINGS:
   288     case MsgBaseView::MSGSETTINGS:
   258     {
   289     {
   259         switchToMsgSettings(data);
   290         switchToMsgSettings(data);
   260         break;
   291         break;
   261     }
   292     }
   262     }
   293     case MsgBaseView::AUDIOFETCHER:
       
   294     {
       
   295         switchToAudioFetcher(data);
       
   296         break;
       
   297     }
       
   298     }
       
   299     QCRITICAL_WRITE("MsgViewManager::switchView end.");
   263 }
   300 }
   264 
   301 
   265 void MsgViewManager::deletePreviousView()
   302 void MsgViewManager::deletePreviousView()
   266 {
   303 {
   267     while(mViewTobeDeleted.count())
   304     while(mViewTobeDeleted.count())
   268     {
   305     {
   269         HbView* v = mViewTobeDeleted.takeAt(0);
   306         HbView* v = mViewTobeDeleted.takeAt(0);
   270         mMainWindow->removeView(v);
   307         mMainWindow->removeView(v);
   271         delete v;
   308         delete v;
   272     }
   309     }
   273     disconnect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
       
   274 }
   310 }
   275 
   311 
   276 
   312 
   277 void MsgViewManager::send(const qint32 contactId, const QString phoneNumber,
   313 void MsgViewManager::send(const qint32 contactId, const QString phoneNumber,
   278     const QString displayName)
   314     const QString displayName)
   367     QVariantList param;
   403     QVariantList param;
   368 
   404 
   369     if (conversationId < 0) {
   405     if (conversationId < 0) {
   370         param << MsgBaseView::CLV;
   406         param << MsgBaseView::CLV;
   371         param << MsgBaseView::SERVICE;
   407         param << MsgBaseView::SERVICE;
   372         
   408 
   373         if( mCurrentView == MsgBaseView::CV && mConversationView)
   409         if( mCurrentView == MsgBaseView::CV && mConversationView)
   374             {
   410             {
   375             mConversationView->setPSCVId(false);
   411             mConversationView->setPSCVId(false);
   376             }
   412             }
   377     }
   413     }
   447     switchToLastSavedView();
   483     switchToLastSavedView();
   448 }
   484 }
   449 
   485 
   450 void MsgViewManager::switchToClv(const QVariantList& data)
   486 void MsgViewManager::switchToClv(const QVariantList& data)
   451 {
   487 {
   452     //switch to CLV.
       
   453     mCurrentView = MsgBaseView::CLV;
       
   454     mPreviousView = data.at(1).toInt();
   488     mPreviousView = data.at(1).toInt();
   455 
   489 
   456     // delete case from viewer service  
   490     // delete case from viewer service
   457     if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
   491     if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
   458         // quit the application 
   492         // quit the application
   459         HbApplication::quit();
   493         HbApplication::quit();
       
   494     }
       
   495 
       
   496     // this is the case when viewer/editor is opened and contacts update takes
       
   497     // place resulting in CV close, the view should directly come to CLV 
       
   498     // bypassing the CV
       
   499     if ((mCurrentView == MsgBaseView::UNIVIEWER 
       
   500             && mPreviousView != MsgBaseView::UNIVIEWER)
       
   501             || (mCurrentView == MsgBaseView::UNIEDITOR
       
   502                     && mPreviousView != MsgBaseView::UNIEDITOR))
       
   503     {
       
   504         //dont do anything
       
   505         //wait for the back from viewer/editor
       
   506         //and reset the open CV id
       
   507         mConversationId = -1;
       
   508         return;
       
   509     }
       
   510     
       
   511     //delete UniEditor
       
   512     if (mUniEditor)
       
   513     {
       
   514         appendViewToBeDeleted(mUniEditor);
       
   515         mUniEditor = NULL;
       
   516     }
       
   517 
       
   518     //delete UniViewer
       
   519     if (mUniViewer)
       
   520     {
       
   521         appendViewToBeDeleted(mUniViewer);
       
   522         mUniViewer = NULL;
   460     }
   523     }
   461 
   524 
   462     if (mConversationView) {
   525     if (mConversationView) {
   463         mConversationView->saveContentToDrafts();
   526         mConversationView->saveContentToDrafts();
   464         //clearing content of cv.
   527         //clearing content of cv.
   465         mConversationView->clearContent();
   528         mConversationView->clearContent();
   466     }
   529         //reset the open CV id
   467 
   530         mConversationId = -1;
       
   531     }
       
   532     
       
   533     //switch to CLV.
       
   534     mCurrentView = MsgBaseView::CLV;
   468     if (!mListView) {
   535     if (!mListView) {
   469         mListView = new MsgListView();
   536         mListView = new MsgListView();
   470         mListView->setNavigationAction(mBackAction);
   537         mListView->setNavigationAction(mBackAction);
   471         connect(mListView, SIGNAL(switchView(const QVariantList&)), this,
   538         connect(mListView, SIGNAL(switchView(const QVariantList&)), this,
   472             SLOT(switchView(const QVariantList&)));
   539             SLOT(switchView(const QVariantList&)));
   473         mMainWindow->addView(mListView);
   540         mMainWindow->addView(mListView);
   474     }
   541     }
   475 
   542 
   476     mMainWindow->setCurrentView(mListView);
   543     mMainWindow->setCurrentView(mListView);
   477     
       
   478     //delete UniEditor
       
   479     if (mUniEditor)
       
   480     {
       
   481         appendViewToBeDeleted(mUniEditor);
       
   482         mUniEditor = NULL;
       
   483     }
       
   484     
       
   485     //delete UniViewer
       
   486     if (mUniViewer)
       
   487     {
       
   488         appendViewToBeDeleted(mUniViewer);
       
   489         mUniViewer = NULL;
       
   490     }
       
   491 }
   544 }
   492 
   545 
   493 void MsgViewManager::switchToCv(const QVariantList& data)
   546 void MsgViewManager::switchToCv(const QVariantList& data)
   494 {
   547 {
   495     //switch to CV.
   548     //switch to CV.
   496     mCurrentView = MsgBaseView::CV;
   549     mCurrentView = MsgBaseView::CV;
   497     mPreviousView = data.at(1).toInt();
   550     mPreviousView = data.at(1).toInt();
   498 
   551 
   499     // delete case from viewer service
   552     // delete case from viewer service
   500     if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
   553     if (mViewServiceRequest && (mPreviousView == MsgBaseView::UNIVIEWER)) {
   501         // quit the application 
   554         // quit the application
   502         HbApplication::quit();
   555         HbApplication::quit();
       
   556     }
       
   557 
       
   558     // delete Audio Fetcher view
       
   559     if(mAudioFetcherView)
       
   560     {
       
   561         appendViewToBeDeleted(mAudioFetcherView);
       
   562         mAudioFetcherView = NULL;
       
   563     }
       
   564 
       
   565     //delete UniEditor
       
   566     if (mUniEditor)
       
   567     {
       
   568         appendViewToBeDeleted(mUniEditor);
       
   569         mUniEditor = NULL;
       
   570     }
       
   571 
       
   572     //delete UniViewer
       
   573     if (mUniViewer)
       
   574     {
       
   575         appendViewToBeDeleted(mUniViewer);
       
   576         mUniViewer = NULL;
   503     }
   577     }
   504 
   578 
   505     QVariant var = data.at(2);
   579     QVariant var = data.at(2);
   506     qint64 conversationId;
   580     qint64 conversationId;
   507     if (var.type() == QVariant::String) {
   581     if (var.type() == QVariant::String) {
   508         QString phoneNumber = var.toString();
   582         QString phoneNumber = var.toString();
   509         conversationId = findConversationId(phoneNumber);
   583         qint32 contactId = findContactId(phoneNumber);
       
   584         if (contactId != -1) {
       
   585             conversationId = ConversationsEngine::instance()->getConversationIdFromContactId(contactId);
       
   586         }
       
   587         else {
       
   588             conversationId = findConversationId(phoneNumber);
       
   589         }
   510 
   590 
   511         if (conversationId == NULL_CONVERSATIONID) {
   591         if (conversationId == NULL_CONVERSATIONID) {
   512             QVariantList param;
   592             QVariantList param;
   513             param << MsgBaseView::CLV;
   593             param << MsgBaseView::CLV;
   514             param << MsgBaseView::CV;
   594             param << MsgBaseView::CV;
   515             
   595 
   516             if( mCurrentView == MsgBaseView::CV && mConversationView){
   596             if( mCurrentView == MsgBaseView::CV && mConversationView){
   517                 mConversationView->setPSCVId(false);
   597                 mConversationView->setPSCVId(false);
   518                 }
   598                 }
   519             
   599 
   520             switchView(param);
   600             switchView(param);
   521             return;
   601             return;
   522         }
   602         }
   523     }
   603     }
   524     else if (var.type() == QVariant::Invalid) {
   604     else if (var.type() == QVariant::Invalid) {
   525         // this case comes when a message is deleted from 
   605         // this case comes when a message is deleted from
   526         // Unified viewer  set curent view as conversation view 
   606         // Unified viewer  set curent view as conversation view
   527         // and return
   607         // and return
   528         mMainWindow->setCurrentView(mConversationView);
   608         mMainWindow->setCurrentView(mConversationView);
   529 		
   609 
   530 		// publish already opened conversation's id
   610 		// publish already opened conversation's id
   531         mConversationView->setPSCVId(true);
   611         mConversationView->setPSCVId(true);
   532 		
       
   533         if (mUniViewer)
       
   534         {
       
   535             appendViewToBeDeleted(mUniViewer);
       
   536             mUniViewer = NULL;
       
   537         }
       
   538 
       
   539         return;
   612         return;
   540     }
   613     }
   541     else {
   614     else {
   542         conversationId = var.toLongLong();
   615         conversationId = var.toLongLong();
   543     }
   616     }
   555     else if (mConversationView->conversationId() != mConversationId){
   628     else if (mConversationView->conversationId() != mConversationId){
   556   		//Save content to drafts before switching to different CV
   629   		//Save content to drafts before switching to different CV
   557         mConversationView->saveContentToDrafts();
   630         mConversationView->saveContentToDrafts();
   558         //clearing content of current cv.
   631         //clearing content of current cv.
   559         mConversationView->clearContent();
   632         mConversationView->clearContent();
   560   	}	
   633     }
   561 
   634 
   562     mConversationView->openConversation(conversationId);
   635     mConversationView->openConversation(conversationId);
   563 
   636     mMainWindow->setCurrentView(mConversationView);
   564     if (mServiceRequest) {
       
   565         mMainWindow->setCurrentView(mConversationView);
       
   566     }
       
   567     else {
       
   568         mMainWindow->setCurrentView(mConversationView);
       
   569     }
       
   570     
       
   571     //delete UniEditor
       
   572     if (mUniEditor)
       
   573     {
       
   574         appendViewToBeDeleted(mUniEditor);
       
   575         mUniEditor = NULL;
       
   576     }
       
   577     
       
   578     //delete UniViewer
       
   579     if (mUniViewer)
       
   580     {
       
   581         appendViewToBeDeleted(mUniViewer);
       
   582         mUniViewer = NULL;
       
   583     }
       
   584 }
   637 }
   585 
   638 
   586 void MsgViewManager::switchToDlv(const QVariantList& data)
   639 void MsgViewManager::switchToDlv(const QVariantList& data)
   587 {
   640 {
   588     //switch to DLV.
   641     //switch to DLV.
   604 {
   657 {
   605     /**
   658     /**
   606      * Editor is tried to open again before exiting the previously
   659      * Editor is tried to open again before exiting the previously
   607      * opened editor. Multi taping in DLV or Forward.
   660      * opened editor. Multi taping in DLV or Forward.
   608      */
   661      */
   609     if (mUniEditor) {
   662     if (mUniEditor && !mAudioFetcherView)
       
   663     {
   610         return;
   664         return;
   611     }
   665     }
   612 
   666 
   613     mCurrentView = MsgBaseView::UNIEDITOR;
   667     mCurrentView = MsgBaseView::UNIEDITOR;
   614     mPreviousView = data.at(1).toInt();
   668     if(MsgBaseView::AUDIOFETCHER != data.at(1).toInt())
   615 
   669     {
   616     if (mConversationView) {
   670         mPreviousView = data.at(1).toInt();
       
   671     }
       
   672 
       
   673     // delete Audio Fetcher view
       
   674     if(mAudioFetcherView)
       
   675     {
       
   676         appendViewToBeDeleted(mAudioFetcherView);
       
   677         mAudioFetcherView = NULL;
       
   678     }
       
   679 
       
   680     // delete UniViewer
       
   681 	if (mUniViewer )
       
   682 	{
       
   683 	    appendViewToBeDeleted(mUniViewer);
       
   684 	    mUniViewer = NULL;
       
   685 	}
       
   686 
       
   687     if (mConversationView)
       
   688     {
   617         //clearing content of cv.
   689         //clearing content of cv.
   618         mConversationView->clearContent();
   690         mConversationView->clearContent();
   619     }
   691     }
   620 
   692 
   621      // reset conversation id published
   693     // reset conversation id published
   622      if(mPreviousView == MsgBaseView::CV && mConversationView)
   694     if(mPreviousView == MsgBaseView::CV && mConversationView)
   623          {
   695     {
   624          mConversationView->setPSCVId(false);
   696         mConversationView->setPSCVId(false);
   625          }
   697     }
   626      
   698 
   627     //swich to unieditor.
   699     //swich to unieditor.
   628     if (!mUniEditor) {
   700     if (!mUniEditor) {
   629         mUniEditor = new MsgUnifiedEditorView();
   701         mUniEditor = new MsgUnifiedEditorView();
   630         mMainWindow->addView(mUniEditor);
   702         mMainWindow->addView(mUniEditor);
   631         mUniEditor->setNavigationAction(mBackAction);
   703         mUniEditor->setNavigationAction(mBackAction);
   640         for (int i = 2; i < data.length(); i++) {
   712         for (int i = 2; i < data.length(); i++) {
   641             editorData << data.at(i);
   713             editorData << data.at(i);
   642         }
   714         }
   643 
   715 
   644         if (MsgBaseView::DLV == mPreviousView) {
   716         if (MsgBaseView::DLV == mPreviousView) {
   645             mUniEditor->openDraftsMessage(editorData);
   717             //Populate editor after view ready indication 
       
   718             populateUniEditorAfterViewReady(editorData);
   646         }
   719         }
   647         else {
   720         else {
   648             mUniEditor->populateContent(editorData);
   721             mUniEditor->populateContent(editorData);
   649         }
   722         }
   650     }
   723     }
   651 
   724 
   652     if (mServiceRequest) {
   725     mMainWindow->setCurrentView(mUniEditor);
   653         mMainWindow->setCurrentView(mUniEditor);
       
   654     }
       
   655     else {
       
   656         mMainWindow->setCurrentView(mUniEditor);
       
   657     }
       
   658     //delete UniViewer
       
   659     if (mUniViewer )
       
   660     {
       
   661         appendViewToBeDeleted(mUniViewer);
       
   662         mUniViewer = NULL;
       
   663     }
       
   664 }
   726 }
   665 
   727 
   666 void MsgViewManager::switchToUniViewer(const QVariantList& data)
   728 void MsgViewManager::switchToUniViewer(const QVariantList& data)
   667 {
   729 {
   668     /**
   730     /**
   677     mPreviousView = data.at(1).toInt();
   739     mPreviousView = data.at(1).toInt();
   678 
   740 
   679     //switch to univiewer.
   741     //switch to univiewer.
   680     if (data.length() > 2) {
   742     if (data.length() > 2) {
   681         qint32 contactId = data.at(2).toLongLong();
   743         qint32 contactId = data.at(2).toLongLong();
   682         QByteArray dataArray = data.at(3).toByteArray();
   744         qint32 messageId = data.at(3).toInt();
   683         int msgCount = data.at(4).toInt();
   745         int msgCount = data.at(4).toInt();
   684 
   746         int canForwardMessage = data.at(5).toInt();
   685         ConvergedMessage *message = new ConvergedMessage;
   747 
   686         QDataStream stream(&dataArray, QIODevice::ReadOnly);
       
   687         message->deserialize(stream);
       
   688         qint32 messageId = message->id()->getId();
       
   689         if (!mUniViewer) {
   748         if (!mUniViewer) {
   690             mUniViewer = new UnifiedViewer(messageId);
   749             mUniViewer = new UnifiedViewer(messageId, canForwardMessage);
   691             mUniViewer->setNavigationAction(mBackAction);
   750             mUniViewer->setNavigationAction(mBackAction);
   692             mMainWindow->addView(mUniViewer);
   751             mMainWindow->addView(mUniViewer);
   693             connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
   752             connect(mUniViewer, SIGNAL(switchView(const QVariantList&)), this,
   694                 SLOT(switchView(const QVariantList&)));
   753                 SLOT(switchView(const QVariantList&)));
   695         }
   754         }
   696         mUniViewer->populateContent(messageId, true, msgCount);
   755         mUniViewer->populateContent(messageId, true, msgCount);
   697         delete message;
   756     }
   698     }
   757 
   699     
       
   700     if(mPreviousView==MsgBaseView::CV && mConversationView)
   758     if(mPreviousView==MsgBaseView::CV && mConversationView)
   701         {
   759         {
   702         mConversationView->setPSCVId(false);
   760         mConversationView->setPSCVId(false);
   703         }
   761         }
   704     
   762 
   705     mMainWindow->setCurrentView(mUniViewer);
   763     mMainWindow->setCurrentView(mUniViewer);
   706 }
   764 }
   707 void MsgViewManager::switchToMsgSettings(const QVariantList& data)
   765 void MsgViewManager::switchToMsgSettings(const QVariantList& data)
   708 {
   766 {
   709     mCurrentView = MsgBaseView::MSGSETTINGS;
   767     mCurrentView = MsgBaseView::MSGSETTINGS;
   710     mPreviousView = data.at(1).toInt();
   768     mPreviousView = data.at(1).toInt();
   711 
   769 
   712     if (!mSettingsView) {
   770     if (!mSettingsView) {
   713         
   771 
   714         MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
   772         MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
   715         if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
   773         if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
   716                         == MsgBaseView::CV)
   774                         == MsgBaseView::CV)
   717                 {
   775                 {
   718                     view = (MsgSettingsView::SettingsView)data.at(2).toInt();         
   776                     view = (MsgSettingsView::SettingsView)data.at(2).toInt();
   719                 }
   777                 }
   720         
   778 
   721         mSettingsView = new MsgSettingsView(view);
   779         mSettingsView = new MsgSettingsView(view);
   722         mSettingsView->setNavigationAction(mBackAction);
   780         mSettingsView->setNavigationAction(mBackAction);
   723         mMainWindow->addView(mSettingsView);
   781         mMainWindow->addView(mSettingsView);
   724         mMainWindow->setCurrentView(mSettingsView);
   782         mMainWindow->setCurrentView(mSettingsView);
   725     }
   783     }
   807         break;
   865         break;
   808     }
   866     }
   809     default:
   867     default:
   810     {
   868     {
   811         // for un supported message show delete option
   869         // for un supported message show delete option
   812         HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogDeleteMsg(HbAction*)),
   870         HbMessageBox::question(LOC_DELETE_MESSAGE,this,
   813             LOC_BUTTON_DELETE,
   871                                SLOT(onDialogDeleteMsg(HbAction*)),
   814             LOC_BUTTON_CANCEL);
   872                                HbMessageBox::Delete | HbMessageBox::Cancel);
   815         break;
   873         break;
   816     }
   874     }
   817     }
   875     }
   818 }
   876 }
   819 
   877 
   845 // ----------------------------------------------------------------------------
   903 // ----------------------------------------------------------------------------
   846 void MsgViewManager::handleRingtoneMsg(int msgId)
   904 void MsgViewManager::handleRingtoneMsg(int msgId)
   847 {
   905 {
   848     mMessageId = msgId;
   906     mMessageId = msgId;
   849     HbMessageBox::question(LOC_DIALOG_SAVE_RINGTONE, this,
   907     HbMessageBox::question(LOC_DIALOG_SAVE_RINGTONE, this,
   850         SLOT(onDialogSaveTone(HbAction*)), LOC_COMMON_SAVE, LOC_BUTTON_CANCEL);
   908                            SLOT(onDialogSaveTone(HbAction*)), 
       
   909                            HbMessageBox::Save | HbMessageBox::Cancel);
   851 }
   910 }
   852 
   911 
   853 // ----------------------------------------------------------------------------
   912 // ----------------------------------------------------------------------------
   854 // MsgViewManager::handleProvisoningMsg
   913 // MsgViewManager::handleProvisoningMsg
   855 // @see header
   914 // @see header
   886 {
   945 {
   887     if(!mMainWindow->isInteractive())
   946     if(!mMainWindow->isInteractive())
   888     {
   947     {
   889         mMainWindow->setInteractive(true);
   948         mMainWindow->setInteractive(true);
   890     }
   949     }
       
   950 
       
   951     disconnect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
       
   952 }
       
   953 
       
   954 void  MsgViewManager::appendViewToBeDeleted(HbView* view)
       
   955 {
       
   956     if (view)
       
   957     {
       
   958         mViewTobeDeleted << view;
       
   959         connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()), Qt::UniqueConnection);
       
   960     }
       
   961 }
       
   962 
       
   963 // ----------------------------------------------------------------------------
       
   964 // MsgViewManager::populateEditorAfterViewReady
       
   965 // @see header
       
   966 // ----------------------------------------------------------------------------
       
   967 void MsgViewManager::populateUniEditorAfterViewReady(const QVariantList& editorData)
       
   968 	{
       
   969 	 //Save the editor data and use it in ViewReady handler
       
   970 	 mEditorData = editorData;	 
       
   971 	 connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(populateUniEditorView()));
       
   972 	}
       
   973 
       
   974 // ----------------------------------------------------------------------------
       
   975 // MsgViewManager::populateUniEditorView
       
   976 // @see header
       
   977 // ----------------------------------------------------------------------------
       
   978 void MsgViewManager::populateUniEditorView()
       
   979     {
       
   980     if (mUniEditor)
       
   981         {
       
   982         mUniEditor->openDraftsMessage(mEditorData);
       
   983         }
       
   984     mEditorData.clear();
   891     
   985     
   892     disconnect(mMainWindow, SIGNAL(viewReady()),this,SLOT(setViewInteractive()));
   986     disconnect(mMainWindow, SIGNAL(viewReady()), this,
   893 }
   987             SLOT(populateUniEditorView()));
   894 
       
   895 void  MsgViewManager::appendViewToBeDeleted(HbView* view)
       
   896 {
       
   897     if (view)
       
   898     {
       
   899         mViewTobeDeleted << view;
       
   900         connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(deletePreviousView()));
       
   901     }
       
   902 }
   988 }
   903 
   989 
   904 // ----------------------------------------------------------------------------
   990 // ----------------------------------------------------------------------------
   905 // MsgViewManager::onDialogDeleteMsg
   991 // MsgViewManager::onDialogDeleteMsg
   906 // @see header
   992 // @see header
   946 
  1032 
   947         // close the application once its handled
  1033         // close the application once its handled
   948         HbApplication::quit();
  1034         HbApplication::quit();
   949 }
  1035 }
   950 
  1036 
       
  1037 // ----------------------------------------------------------------------------
       
  1038 // MsgViewManager::currentView
       
  1039 // @see header
       
  1040 // ----------------------------------------------------------------------------
       
  1041 int MsgViewManager::currentView()
       
  1042     {
       
  1043     return mCurrentView;
       
  1044     }
       
  1045 
       
  1046 // ----------------------------------------------------------------------------
       
  1047 // MsgViewManager::switchToAudioFetcher
       
  1048 // @see header
       
  1049 // ----------------------------------------------------------------------------
       
  1050 void MsgViewManager::switchToAudioFetcher(const QVariantList& data)
       
  1051     {
       
  1052     /**
       
  1053      * Audio Fetcher is tried to open again
       
  1054      */
       
  1055     if(mAudioFetcherView)
       
  1056         {
       
  1057         return;
       
  1058         }
       
  1059 
       
  1060     //switch to Audio Fetcher view
       
  1061     mCurrentView = MsgBaseView::AUDIOFETCHER;
       
  1062     mPreviousView = data.at(1).toInt();
       
  1063     QVariantList editorData;
       
  1064     // i=2 because view manager consumed first two args
       
  1065     for (int i = 2; i < data.length(); i++) {
       
  1066         editorData << data.at(i);
       
  1067     }
       
  1068     mAudioFetcherView = new MsgAudioFetcherView(editorData);
       
  1069     mAudioFetcherView->setNavigationAction(mBackAction);
       
  1070     connect(mAudioFetcherView, SIGNAL(switchView(const QVariantList&)), this,
       
  1071             SLOT(switchView(const QVariantList&)));
       
  1072 
       
  1073     if(mPreviousView==MsgBaseView::CV && mConversationView)
       
  1074         {
       
  1075         mConversationView->setPSCVId(false);
       
  1076         }
       
  1077 
       
  1078     mMainWindow->addView(mAudioFetcherView);
       
  1079     mMainWindow->setCurrentView(mAudioFetcherView);
       
  1080     }
       
  1081 
       
  1082 // ----------------------------------------------------------------------------
       
  1083 // MsgViewManager::saveContentToDraft
       
  1084 // @see header
       
  1085 // ----------------------------------------------------------------------------
       
  1086 int MsgViewManager::saveContentToDraft()
       
  1087     {
       
  1088     int msgId = NULL_CONVERSATIONID;
       
  1089     if( mCurrentView == MsgBaseView::CV )
       
  1090         {
       
  1091         msgId = mConversationView->saveContentToDrafts();
       
  1092         }
       
  1093     else if( mCurrentView ==MsgBaseView::UNIEDITOR)
       
  1094         {
       
  1095         msgId  = mUniEditor->saveContentToDrafts();
       
  1096         }
       
  1097     return msgId;
       
  1098     }
       
  1099 
       
  1100 // ----------------------------------------------------------------------------
       
  1101 // MsgViewManager::saveContentToDraft
       
  1102 // @see header
       
  1103 // ----------------------------------------------------------------------------
       
  1104 void MsgViewManager::openUniEditorActivity(int activityMsgId)
       
  1105 {
       
  1106     int msgType;
       
  1107     int msgSubType;
       
  1108   
       
  1109     qint32 messageId(activityMsgId);
       
  1110     // get the message type
       
  1111     ConversationsEngine::instance()->markAsReadAndGetType(messageId, msgType, msgSubType);
       
  1112     
       
  1113     if (!mUniEditor) {
       
  1114            mUniEditor = new MsgUnifiedEditorView();
       
  1115            mMainWindow->addView(mUniEditor);
       
  1116            mUniEditor->setNavigationAction(mBackAction);
       
  1117            connect(mUniEditor, SIGNAL(switchView(const QVariantList&)), this,
       
  1118                SLOT(switchView(const QVariantList&)));
       
  1119        }
       
  1120     
       
  1121     // buffer data to open the draft message
       
  1122     ConvergedMessageId convergedMsgId(activityMsgId);
       
  1123     ConvergedMessage message;
       
  1124     message.setMessageType((ConvergedMessage::MessageType) msgType);
       
  1125     message.setMessageId(convergedMsgId);
       
  1126 
       
  1127     // Launch uni-editor view
       
  1128     QByteArray dataArray;
       
  1129     QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append);
       
  1130     message.serialize(messageStream);
       
  1131     
       
  1132     QVariantList editorData;
       
  1133     editorData << dataArray;
       
  1134     mUniEditor->openDraftsMessage(editorData);
       
  1135     
       
  1136     // set the current view
       
  1137     mCurrentView = MsgBaseView::UNIEDITOR;
       
  1138     mMainWindow->setCurrentView(mUniEditor);
       
  1139 }
       
  1140 
       
  1141 // ----------------------------------------------------------------------------
       
  1142 // MsgViewManager::findContactId
       
  1143 // @see header
       
  1144 // ----------------------------------------------------------------------------
       
  1145 qint32 MsgViewManager::findContactId(QString address)
       
  1146     {
       
  1147     QString displayLabel;
       
  1148     int count;
       
  1149     int localId =
       
  1150             MsgContactHandler::resolveContactDisplayName(address,
       
  1151                                                          displayLabel,
       
  1152                                                          count);
       
  1153 
       
  1154         return localId;
       
  1155     }
       
  1156 
       
  1157 //EOF