Revision: 201031 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:51:11 +0300
branchRCL_3
changeset 25 fa1df4b99609
parent 24 696bfeff199e
child 26 ebe688cedc25
Revision: 201031 Kit: 201033
email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF
email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF
email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h
email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h
email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp
email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp
email/imap4mtm/imapservermtm/inc/cimap4servermtm.h
email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp
email/imap4mtm/imapsettings/src/cimapsettings.cpp
email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp
messagingappbase/mce/group/mce.mmp
messagingappbase/mce/inc/mceui.h
messagingappbase/mce/src/MceMessageListView.cpp
messagingappbase/mce/src/MceOneRowMessageListContainer.cpp
messagingappbase/mce/src/mceui.cpp
messagingappbase/mcesettings/inc/MceSettingsDialog.h
messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp
messagingappbase/mcesettings/src/MceSettingsDialog.cpp
messagingappbase/msgavkon/conf/messaging.confml
messagingappbase/msgavkon/conf/messaging_102824A0.crml
messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h
messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp
messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h
messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h
messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h
messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h
messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp
messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp
messagingappbase/ncnlist/inc/CVoiceMailManager.h
messagingappbase/ncnlist/src/CVoiceMailManager.cpp
messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp
messagingappbase/smilparser/Rom/Gmxml.iby
mobilemessaging/audiomsg/src/audiomessageappui.cpp
mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp
mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h
mobilemessaging/smsmtm/conf/smsmtm_1000102c.crml
mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp
mobilemessaging/smum/group/SMUM.RSS
mobilemessaging/smum/inc/SmumSettingsDialogGSM.h
mobilemessaging/smum/loc/smum.loc
mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp
mobilemessaging/unieditor/application/bld/UniEditor.mmp
mobilemessaging/unieditor/application/inc/UniEditorAppUi.h
mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp
mobilemessaging/unieditor/inc/UniMsvEntry.h
mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp
msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h
--- a/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/bwins/impapprotocolcontrollerU.DEF	Thu Aug 19 09:51:11 2010 +0300
@@ -32,4 +32,5 @@
 	?WaitForBackground@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 31 NONAME ; void CImapProtocolController::WaitForBackground(class TRequestStatus &)
 	?GetAccessPointIdForConnection@CImapProtocolController@@QBEHAAK@Z @ 32 NONAME ; int CImapProtocolController::GetAccessPointIdForConnection(unsigned long &) const
 	?UpdateFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@@Z @ 33 NONAME ; void CImapProtocolController::UpdateFlagL(class TRequestStatus &)
+	?UpdateEntriesFlagL@CImapProtocolController@@QAEXAAVTRequestStatus@@ABVCMsvEntrySelection@@H@Z @ 34 NONAME ; void CImapProtocolController::UpdateEntriesFlagL(class TRequestStatus &, class CMsvEntrySelection const &, int)
 
--- a/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/eabi/impapprotocolcontrollerU.DEF	Thu Aug 19 09:51:11 2010 +0300
@@ -77,4 +77,5 @@
 	_ZTVN4Meta13TMetaVarLen16I6RBuf16EE @ 76 NONAME ABSENT
 	_ZNK23CImapProtocolController29GetAccessPointIdForConnectionERm @ 77 NONAME
 	_ZN23CImapProtocolController11UpdateFlagLER14TRequestStatus @ 78 NONAME
+	_ZN23CImapProtocolController18UpdateEntriesFlagLER14TRequestStatusRK18CMsvEntrySelectioni @ 79 NONAME
 
--- a/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapprotocolcontroller.h	Thu Aug 19 09:51:11 2010 +0300
@@ -115,6 +115,7 @@
 	IMPORT_C TImap4CompoundProgress Progress();
 	IMPORT_C void CancelAndCleanup();
 	IMPORT_C void UpdateFlagL(TRequestStatus& aStatus);
+	IMPORT_C void UpdateEntriesFlagL(TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel, TBool aFlagChanged);
 
 	// mobility API from MImMobileServer
 	void PrepareForNewCarrier(TImMobilityAction aAction, TBool aIsSeamless);
--- a/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapupdateflagoperation.h	Thu Aug 19 09:51:11 2010 +0300
@@ -43,6 +43,12 @@
 						 			  CMsvServerEntry& aServerEntry,
 						 			  CImapSettings& aImapSettings
 						 			  );
+	static CImapUpdateFlagOperation* NewL(CImapSyncManager& aSyncManager,
+	                                      CMsvServerEntry& aServerEntry,
+	                                      CImapSettings& aImapSettings,
+	                                      const CMsvEntrySelection& aSourceSel,
+	                                      TBool aFlagChanged
+	                                      );
 	virtual void StartOperation(TRequestStatus& aStatus, CImapSession& aSession);
 	
 ////////////	virtual void StartOperation(TRequestStatus& aStatus);//
@@ -56,6 +62,7 @@
 						 CImapSettings& aImapSettings
 						 );
 	void ConstructL();
+	void ConstructL(const CMsvEntrySelection& aSourceSel,TBool aFlagChanged);
 
 	TBool DoRunLoopL();
 	void DoCancel();
@@ -67,6 +74,13 @@
 	RArray<TUint> iMessageUids;
 	
 	RArrayMessageFlagInfo iFlagInfoResponseArray;
+	
+	CMsvEntrySelection* iSourceSel;
+	TBool iMarkFlag;
+	TBool iEntrySelection;
+	TInt iProgressMsgsToDo;
+	TInt iProgressMsgsDone;
+
 	};
 
 #endif	// __CIMAPUPDATEFLAGOPERATION_H__
--- a/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/src/cimapprotocolcontroller.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -3510,17 +3510,49 @@
 	__LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateFlagL()");
 	__ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull));
 	ResetProgress();
-	if (!CompleteIfBackgroundOpInProgress(aStatus))	
-		{
-		iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
-												   iEntry,
-												   *iImapSettings
-												   );
-		iRequestedOp = EUpdateFlag;
-		StartPrimaryOperation();
-		Queue(aStatus);
-		SetActive();
-		}
-	}
 	
-
+    if (!CompleteIfBackgroundOpInProgress(aStatus)) 
+            {
+        
+            iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
+                                                       iEntry,
+                                                       *iImapSettings
+                                                       );
+            
+            iRequestedOp = EUpdateFlag;
+            StartPrimaryOperation();
+            Queue(aStatus);
+            SetActive();
+            }
+
+	    }	
+
+
+
+/**
+Updates  the selection of  messages read/unread status from the remote server.
+@param aStatus
+*/  
+EXPORT_C void CImapProtocolController::UpdateEntriesFlagL( TRequestStatus& aStatus,const CMsvEntrySelection& aSourceSel ,TBool aFlagChanged)
+ 
+    {
+    __LOG_TEXT(KDefaultLog, "CImapProtocolController::UpdateEntriesFlagL()");
+    __ASSERT_DEBUG(iImapCompound==NULL, TImapServerPanic::ImapPanic(TImapServerPanic::ECreateCompoundIsNotNull));
+    ResetProgress();
+    
+   if (!CompleteIfBackgroundOpInProgress(aStatus)) 
+        {
+    
+        iImapCompound = CImapUpdateFlagOperation::NewL(*iImapSyncManager,
+                                                   iEntry,
+                                                   *iImapSettings,
+                                                   aSourceSel,
+                                                   aFlagChanged);
+        iRequestedOp = EUpdateFlag;
+        StartPrimaryOperation();
+        Queue(aStatus);
+        SetActive();
+        }
+        
+    }   
+
--- a/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapprotocolcontroller/src/cimapupdateflagoperation.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -66,6 +66,40 @@
 	CActiveScheduler::Add(this);
 	}
 
+// NewL for Selection
+CImapUpdateFlagOperation* CImapUpdateFlagOperation::NewL(CImapSyncManager& aSyncManager,
+                                                         CMsvServerEntry& aServerEntry,
+                                                         CImapSettings& aImapSettings, 
+                                                         const CMsvEntrySelection& aSourceSel , TBool aFlagChanged)
+
+    {
+    
+    CImapUpdateFlagOperation* self = new (ELeave) CImapUpdateFlagOperation(aSyncManager,
+                                                                     aServerEntry,
+                                                                     aImapSettings);
+    CleanupStack::PushL(self);
+    self->ConstructL(aSourceSel,aFlagChanged);
+    CleanupStack::Pop(self);
+    return self;
+    }
+//// ConstructL for Selection   
+void CImapUpdateFlagOperation::ConstructL(const CMsvEntrySelection& aSourceSel, TBool aFlagChanged)
+    {
+  
+    iSourceSel=new (ELeave) CMsvEntrySelection;
+    CheckSelectionL(aSourceSel, iSourceSel, ETrue, EFalse, EFalse, ETrue);
+
+    // Initialise the progress counters 
+    iProgressMsgsToDo=iSourceSel->Count();
+    iProgressMsgsDone=0;
+    iMarkFlag = aFlagChanged;
+    iEntrySelection = ETrue;
+    // Add to the active scheduler
+    CActiveScheduler::Add(this);
+    }
+
+
+
 void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus, CImapSession& aSession)
 //void CImapUpdateFlagOperation::StartOperation(TRequestStatus& aStatus)
 	{
@@ -89,37 +123,79 @@
 		{
 	
 	case EUpdateFlag:
-		{		
-		TMsvEmailEntry entry = iServerEntry.Entry();
-		TUint id = entry.UID();
-		iMessageUids.AppendL(id);
-		if(entry.Unread())
-			{
-			entry.SetSeenIMAP4Flag(EFalse);
-			}
-		else
-			{
-			entry.SetSeenIMAP4Flag(ETrue);	
-			}
-				
-				
-		User::LeaveIfError(iServerEntry.ChangeEntry(entry));
+		{
+		HBufC8* uidSeq = NULL;
+        if(!iEntrySelection) //Entry iMarkFlag is Flase
+            {
+            TMsvEmailEntry entry = iServerEntry.Entry();
+            TUint id = entry.UID();
+            iMessageUids.AppendL(id);
+            if(entry.Unread())
+                {
+                entry.SetSeenIMAP4Flag(EFalse);
+                }
+            else
+                {
+                entry.SetSeenIMAP4Flag(ETrue);	
+                }
+                    
+                    
+            User::LeaveIfError(iServerEntry.ChangeEntry(entry));
+    
+            uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
+    
+            // finished with the UID array. Clear it.
+            iMessageUids.Reset();
+            if(entry.SeenIMAP4Flag())
+                {
+                // issue the store command
+                iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+                
+                }
+            else
+                {
+                // issue the store command
+                iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+                }
+            }
+        else  //Selection iMarkFlag is Trure
+            {
+            TMsvEntry *aNewEntry1;
+			
+			TInt  count = iSourceSel->Count();
+			while (count--)
+				{
+				iServerEntry.GetEntryFromId(iSourceSel->At(count), aNewEntry1);
+				TMsvEmailEntry entry(*aNewEntry1);
+				iMessageUids.AppendL(entry.UID());
+					
+				if(iMarkFlag) // True  means  Unread
+					 {
+					 entry.SetSeenIMAP4Flag(EFalse);
+					 }
+				 else
+					 {
+					 entry.SetSeenIMAP4Flag(ETrue);  
+					 }
+				SetEntryL((*iSourceSel)[count]);
+				User::LeaveIfError(iServerEntry.ChangeEntry(entry));
+				}// end of while
 
-		HBufC8* uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
-
-		// finished with the UID array. Clear it.
-		iMessageUids.Reset();
-		if(entry.SeenIMAP4Flag())
-			{
-			// issue the store command
-			iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
-			
-			}
-		else
-			{
-			// issue the store command
-			iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
-			}
+			uidSeq = CImapSession::CreateSequenceSetLC(iMessageUids);
+	
+			// finished with the UID array. Clear it.
+			iMessageUids.Reset();
+			if(!iMarkFlag) //read
+				{
+				// issue the store command
+				iSession->StoreL(iStatus, uidSeq->Des(), KImapAddFlags, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+				}
+			else   //Unread
+				{
+				// issue the store command
+				iSession->StoreL(iStatus, uidSeq->Des(), KStoreFlagsClearCommand, KImapFlagSeen, ETrue, iFlagInfoResponseArray);
+				}
+             } //End of else (Selection)
 	
 		iProgressState = TImap4GenericProgress::EBusy;
 		CleanupStack::PopAndDestroy(uidSeq);
--- a/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapservermtm/inc/cimap4servermtm.h	Thu Aug 19 09:51:11 2010 +0300
@@ -119,7 +119,7 @@
 						TRequestStatus& aStatus );
 	TBool CommandExpected();
 	const TDesC8& Progress();
-	
+	TInt ChangeEntriesL(const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus);
 protected:
 	IMPORT_C TInt Extension_(TUint aExtensionId, TAny *&a0, TAny *a1);
 
--- a/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapservermtm/src/cimap4servermtm.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -504,6 +504,65 @@
 
 
 /**
+ChangeEntriesL update the message read/Unread status in  Local and remote, 
+using the IMAP COPY command.
+
+@param aSelection The selection of message TMsvIds that are changed.
+@param aMark The selection marked as read  or unread.If 1 is Unread 0 for read.
+@param aStatus The request status to be completed when the operation has finished.
+*/
+
+TInt CImap4ServerMtm::ChangeEntriesL( const CMsvEntrySelection& aSelection, TInt aMark, TRequestStatus& aStatus ) 
+    {
+    __LOG_TEXT(KDefaultLog, "CImap4ServerMtm::ChangeEntriesL()");
+   
+    TMsvEntry* aNewEntry1 = new (ELeave) TMsvEntry;
+    CleanupStack::PushL(aNewEntry1);
+    
+    TBool flagChanged;
+    
+    if(aMark ==  0) 
+        flagChanged = EFalse; //Selection to update as Read.
+    else
+        flagChanged = ETrue; ////Selection to update as UnRead.
+    
+    TInt count  = aSelection.Count();
+    while(count--)
+        { 
+        iServerEntry->GetEntryFromId(aSelection[count],aNewEntry1);
+        TMsvEmailEntry entry(*aNewEntry1);
+        if(flagChanged)
+             {
+            entry.SetSeenIMAP4Flag(EFalse);
+             }
+         else
+             {
+             entry.SetSeenIMAP4Flag(ETrue);  
+             }
+        //Local Updation.
+        User::LeaveIfError(iServerEntry->SetEntry(entry.Id()));
+        User::LeaveIfError(iServerEntry->ChangeEntry(entry));
+        }
+     //if not offline
+     if (iImapProtocolController->Connected())
+        {
+        //to update read/unread flags at remote server
+        iImapProtocolController->UpdateEntriesFlagL(iStatus,aSelection,flagChanged);    
+        iState= EMtmStateUpdateFlag;
+        Queue(aStatus);
+        SetActive(); 
+        }
+    else
+        {
+        Queue(aStatus);
+        User::RequestComplete(iRequest, KErrNone);
+        }
+    CleanupStack::PopAndDestroy(1); //aNewEntry1
+	return KErrNone;
+    }
+
+
+/**
 Performs the IMAP specific MTM commands.
 
 @param aSelection A selection of messages. The use is dependant upon 
--- a/email/imap4mtm/imapsettings/src/cimapsettings.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/imap4mtm/imapsettings/src/cimapsettings.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of "Eclipse Public License v1.0"
@@ -170,7 +170,7 @@
 void CImapSettings::ReadResourceFileL()
 	{
 	RFs fs;
-	fs.Connect();
+	User::LeaveIfError(fs.Connect());
 	CleanupClosePushL(fs);
 	
 	//	NB need to check on all drives - won't necessarily be on
--- a/email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/email/pop3andsmtpmtm/servermtmutils/src/imcvrecv.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -415,11 +415,9 @@
 	iStore8BitData = reader.ReadInt8();
 	CleanupStack::PopAndDestroy(buf);
 	
-	//read iStorePlainBodyText flag for writing bodytext chunk bu chunk.
-	buf = resFile.AllocReadLC( STORE_PLAIN_BODY_TEXT );
-	reader.SetBuffer(buf);
-	iStorePlainBodyText = reader.ReadInt8();
-	CleanupStack::PopAndDestroy(buf);
+	//read iStorePlainBodyText flag for writing bodytext chunk by chunk.
+	//For Pop case, it always writes bodytext chunk by chunk
+	iStorePlainBodyText = 1;
 
 
 	buf = resFile.AllocReadLC( REMOVED_ATTACHMENT_TAG );
--- a/messagingappbase/mce/group/mce.mmp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mce/group/mce.mmp	Thu Aug 19 09:51:11 2010 +0300
@@ -26,7 +26,12 @@
 
 TARGET          mce.exe
 EPOCSTACKSIZE   0x6000
-EPOCHEAPSIZE    0x1000 0x2000000
+
+// Not allowing emulator to allocation 0x2000000  Maximum head size for messaging, making emulator more stable.
+#ifndef WINSCW
+    EPOCHEAPSIZE    0x1000 0x2000000
+#endif
+
 TARGETTYPE      exe
 UID             0x100039CE 0x100058C5
 
--- a/messagingappbase/mce/inc/mceui.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mce/inc/mceui.h	Thu Aug 19 09:51:11 2010 +0300
@@ -1154,6 +1154,8 @@
          * otherwise EFalse
          */
         TBool                           iIadUpdateVal;
+		//To check if simdialog is open or not
+        TBool                           iSimDialogOpen;
     };
 
 #endif
--- a/messagingappbase/mce/src/MceMessageListView.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mce/src/MceMessageListView.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -92,8 +92,11 @@
 const TUid KMailTechnologyTypeUid = { 0x10001671 };
 
 // These are for opening the viewer in inbox. 
-// We need to wait possible opened editor to be closed before opening received message.
-const TInt KMceLaunchViewerStartTime = 1; // try to open viewer immediately
+// try to open viewer immediately if there is no other viewer is open
+const TInt KMceLaunchViewerStartTime = 1; 
+//0.3 sec delay is taken to ensure previously launched viewer is closed as to avoid the crashes and KErrCancel/KErrInUse errors due to launching of new viewer when currently running 
+//viewer is still in the process of exiting
+const TInt KMceLaunchViewerStartTimeWhenEditorOpen = 300000; 
 const TInt KMceLaunchViewerRetryTime = 500000; // wait 0.5 secs for the next trial
 const TInt KMceLaunchViewerRetryCounter = 20; // so editors have approx 10 secs to save...
 
@@ -2453,6 +2456,12 @@
 // ----------------------------------------------------
 TBool CMceMessageListView::FindUnreadMessageAndOpenItL( const TMsvId aId )
     {
+    TInt launchViewerStartTime = KMceLaunchViewerStartTime;
+    if(iMceUi->IsEditorOpen())
+        {
+        launchViewerStartTime = KMceLaunchViewerStartTimeWhenEditorOpen;
+        }
+    
 // TODO: how to simplify this ?
     TMsvId firstUnreadMessageId = KErrNotFound;
     TBool oneUnreadMessage = EFalse;
@@ -2504,7 +2513,7 @@
                 iLocalScreenClearer = NULL;
                 iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse );
                 MCELOGGER_WRITE("FindUnreadMessageAndOpenItL: start viewer launcher");
-                const TTimeIntervalMicroSeconds32 startTimeInterval = KMceLaunchViewerStartTime;
+                TTimeIntervalMicroSeconds32 startTimeInterval = launchViewerStartTime;
                 const TTimeIntervalMicroSeconds32 retryTimeInterval = KMceLaunchViewerRetryTime;
                 iLaunchViewerCounter = 0;
                 iMessageViewerLauncher->Start( 
--- a/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -1332,7 +1332,7 @@
                 return EKeyWasNotConsumed;
                 }
 
-            if ( aKeyEvent.iCode == EKeyBackspace )
+            if ( iOwningView.MenuBar()->ItemSpecificCommandsEnabled() && aKeyEvent.iCode == EKeyBackspace )
                 {
                 MarkItemSelectionL();
                 SetAnchorItemIdL(
--- a/messagingappbase/mce/src/mceui.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mce/src/mceui.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -22,6 +22,7 @@
 // INCLUDE FILES
 #include <bldvariant.hrh>
 #include <featmgr.h>
+#include <mtmuidef.hrh> 
 
 #include <messagingvariant.hrh>
 #include <centralrepository.h>
@@ -204,7 +205,7 @@
 _LIT( KMmsMessageDumpDirectory, "C:\\Private\\1000484b\\mmsvar");
 _LIT( KRootPath, "C:\\" );
 const TInt KMmsCodecClientChunkSize = 1024;
-
+#define KMtmUiFunctionSimDialog  ( KMtmFirstFreeMtmUiFunctionId + 1 )
 // LOCAL FUNCTION PROTOTYPES
 
 //  ==================== LOCAL FUNCTIONS ====================
@@ -232,7 +233,8 @@
     iAnchorId( NULL ),
     iEmailClientIntegration(EFalse),
     iSelectableEmail(EFalse),
-    iEmailFramework(EFalse)
+    iEmailFramework(EFalse),
+    iSimDialogOpen(EFalse)
     {
     iMceUiFlags.SetMceFlag( EMceUiFlagsExitOnMsvMediaAvailableEvent );
     }
@@ -831,6 +833,7 @@
     switch (aCommand)
         {
         case EEikCmdExit:
+            iSimDialogOpen = EFalse;
             Exit();
             break;
         case EMceCmdExit:
@@ -2556,21 +2559,26 @@
     const TInt numAccounts=sel->Count();
     for (TInt cc=0; cc<numAccounts; cc++)
         {
-        uid.iUid=sel->At(cc);
-        const TMsvEntry& tentry=iRootEntry->ChildDataL(uid.iUid);
-
-        TRAPD(error, ( uiData=GetMtmUiDataL(tentry.iMtm) ) );
-        if (error==KErrNone && uiData)
-            {
-            TInt rid;
-            if (uiData->QueryCapability(connectCapability, rid)==KErrNone)
-                {
-                if (tentry.Connected())
-                    {
-                    connectedAccounts->AppendL( sel->At(cc) );
-                    }
-                }
-            }
+         uid.iUid=sel->At(cc);
+         const TMsvEntry& tentry=iRootEntry->ChildDataL(uid.iUid);
+         // if cmail  feature is enabled, no need to add cmail account in connectedAccounts.
+         if ( !( iEmailFramework && 
+               ( tentry.iMtm == KSenduiMtmImap4Uid || tentry.iMtm == KSenduiMtmPop3Uid ||
+                 tentry.iMtm.iUid == KUidMsgTypeFsMtmVal )))
+             {
+              TRAPD(error, ( uiData=GetMtmUiDataL(tentry.iMtm) ) );
+              if (error==KErrNone && uiData)
+                 {
+                  TInt rid;
+                  if (uiData->QueryCapability(connectCapability, rid)==KErrNone)
+                     {
+                      if (tentry.Connected())
+                         {
+                          connectedAccounts->AppendL( sel->At(cc) );
+                         }
+                     }
+                 }
+             }  
         }
     CleanupStack::PopAndDestroy( sel );
     MCELOGGER_LEAVEFN("ConnectedServicesLC()");
@@ -4484,6 +4492,10 @@
     TBuf8<1> buf;
     if (!(aFunction.iFlags&EMtudAsynchronous))
         {
+        if(aFunction.iFuncId == KMtmUiFunctionSimDialog)
+            {
+            iSimDialogOpen = ETrue;
+            }
         mtmUi.InvokeSyncFunctionL(aFunction.iFuncId, *sel, buf);
         }
     else
@@ -6649,13 +6661,24 @@
 // ----------------------------------------------------
 void CMceUi::ResetAndHide()
     {
-	if (!MceViewActive( EMceMainViewActive ))
+    // To close embedded MsgEditor
+    if ( IsEditorOpen() )
+        {
+        CloseEditorApp();
+        }
+    // Messaging was not exiting properly when "exit" is pressed from settings dialog.
+    // iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) will be true 
+    // when we exit from any of the settings Dialog. 
+    // Closing of Settings dialogs will be taken care by AVKON. 
+	if (!(MceViewActive( EMceMainViewActive) && IsForeground()) || 
+	      iMceUiFlags.MceFlag( EMceUiFlagsSettingsDialogOpen ) || iSimDialogOpen )
         {
         SetCustomControl(1);    // Disable bring-to-foreground on view activation
         TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( \
             KMessagingCentreMainViewUid, \
             TUid::Uid(KMceHideInBackground), \
             KNullDesC8 ) ) ;
+        iSimDialogOpen = EFalse;
         }
     else
         {
--- a/messagingappbase/mcesettings/inc/MceSettingsDialog.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mcesettings/inc/MceSettingsDialog.h	Thu Aug 19 09:51:11 2010 +0300
@@ -25,7 +25,7 @@
 
 #include <ConeResLoader.h>
 #include <msvapi.h>
-#include "mcesettingstitlepanehandlerdialog.h"
+#include "MceSettingsTitlePaneHandlerDialog.h"
 #include <MsgArrays.h>
 
 
--- a/messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mcesettings/mcesettingsgsplugin/src/MceSettingsGSPluginContainer.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -190,13 +190,15 @@
 
     TUid uid;
     uid.iUid = KMceSettingsCBSUid;
+	if(iCbs)
+	{
+    	HBufC* text = StringLoader::LoadL( R_MCEUI_CBS_SETTINGS_TEXT, iEikonEnv );
+    	TUidNameInfo cbsSettings( uid, *text );
+    	delete text;
+    	iMsgTypesSettings->AppendL( cbsSettings );
+	}
 
-    HBufC* text = StringLoader::LoadL( R_MCEUI_CBS_SETTINGS_TEXT, iEikonEnv );
-    TUidNameInfo cbsSettings( uid, *text );
-    delete text;
-    iMsgTypesSettings->AppendL( cbsSettings );
-
-    text = StringLoader::LoadL( R_MCEUI_GENERAL_SETTINGS_TEXT, iEikonEnv );
+    HBufC* text = StringLoader::LoadL( R_MCEUI_GENERAL_SETTINGS_TEXT, iEikonEnv );
     TUidNameInfo generalSettings( uid, *text );
     delete text;
     iMsgTypesSettings->AppendL( generalSettings );
--- a/messagingappbase/mcesettings/src/MceSettingsDialog.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/mcesettings/src/MceSettingsDialog.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -360,12 +360,15 @@
     TUid uid;
     uid.iUid = KMceSettingsCBSUid;
 
-    HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv );
-    TUidNameInfo cbsSettings( uid, *text );
-    delete text;
-    iMsgTypesSettings->AppendL( cbsSettings );
+	if(iCbs)
+	{
+    	HBufC* text = StringLoader::LoadL( R_MCE_CBS_SETTINGS_TEXT, iEikonEnv );
+    	TUidNameInfo cbsSettings( uid, *text );
+    	delete text;
+    	iMsgTypesSettings->AppendL( cbsSettings );
+	}
 
-    text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv );
+    HBufC* text = StringLoader::LoadL( R_MCE_GENERAL_SETTINGS_TEXT, iEikonEnv );
     TUidNameInfo generalSettings( uid, *text );
     delete text;
     iMsgTypesSettings->AppendL( generalSettings );
Binary file messagingappbase/msgavkon/conf/messaging.confml has changed
Binary file messagingappbase/msgavkon/conf/messaging_102824A0.crml has changed
--- a/messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/msgindicatorplugin/inc/MsgWaitingObserver.h	Thu Aug 19 09:51:11 2010 +0300
@@ -49,6 +49,10 @@
         virtual ~CWaitingObserver();
         
         TInt GetMsgCount(const TIndicatorMessageType aMsgType);
+		/**
+         * Check the KMuiuSupressAllNotificationConfiguration value
+         */        
+        TBool CheckSupressNotificationSettingL();
                 
     public: // From CActive
     
--- a/messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -18,6 +18,7 @@
 
 
 #include <etelmm.h>
+#include <MessagingDomainCRKeys.h>
 #include "MsgWaitingObserver.h"
 #include "msgindicatorpluginlog.h"
 #include "msgindicatorpluginimplementation.h"
@@ -169,19 +170,21 @@
     MSGPLUGINLOGGER_WRITE_FORMAT( "::UpdateIndicatorStatus: Fax count %d", iMsgWaiting.iFaxMsgs );
 
     iMsgWaiting = iMsgWaitingPckg();
-
-    if(iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayVoicemailActive)
+    if(!CheckSupressNotificationSettingL())
         {
-        if ( !iIndicatorPlugin.IsALSSupported() )
-            {
-            MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaiting )");
-            iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaiting );
-            }
-        else
-            {
-            MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine1 )");
-            iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine1 );
-            }
+    	if(iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayVoicemailActive)
+        	{
+        	if ( !iIndicatorPlugin.IsALSSupported() )
+            	{
+            	MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaiting )");
+            	iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaiting );
+            	}
+        	else
+            	{
+            	MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine1 )");
+            	iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine1 );
+            	}
+        	}
         }
     if ( iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayAuxVoicemailActive )
         {
@@ -194,5 +197,29 @@
         iIndicatorPlugin.UpdateL( EAknIndicatorFaxMessage );
         }
 	}	    
-	    
+// -------------------------------------------------------------------
+// Check the KMuiuSupressAllNotificationConfiguration value
+// -------------------------------------------------------------------
+//
+TBool CWaitingObserver::CheckSupressNotificationSettingL()
+{
+    TBool result = EFalse; 
+    TInt value = 0;
+    CRepository* repository = NULL;
+   
+   TRAPD( err, repository = CRepository::NewL( KCRUidMuiuMessagingConfiguration ) );
+   if( err == KErrNone && repository != NULL )
+       {
+       CleanupStack::PushL( repository ); 
+       err = repository->Get( KMuiuSupressAllNotificationConfiguration, value );
+       
+       if(err == KErrNone && (value & KMuiuNotificationSupressedForVoiceMail ))
+           {
+           result = ETrue;
+           }
+        } 
+       MSGPLUGINLOGGER_WRITE_FORMAT( "CWaitingObserver:  SupressNotification %d", result );
+       CleanupStack::PopAndDestroy( repository );
+       return result;
+}	    
 //  End of File
--- a/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h	Thu Aug 19 09:51:11 2010 +0300
@@ -22,7 +22,7 @@
 #define CMUIUFLAGGER_H
 
 //  INCLUDES
-#include "muiuflags.h"
+#include "MuiuFlags.h"
 #include <e32cmn.h>
 
 // CONSTANTS
--- a/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalCRKeys.h	Thu Aug 19 09:51:11 2010 +0300
@@ -132,7 +132,9 @@
 const TUint32 KSmumPreviousSimSmscNumber            = 0x00000018;
 const TUint32 KSmumShowSMSCTimeStamp                = 0x00000019;
 const TUint32 KSmsSettingsDiscardUnknownPortMsgs    = 0x0000001A;
-
+// REQ:417-48417 Message forward with sender info
+const TUint32 KForwardWithSenderInfo                = 0x0000001B;
+// End REQ:417-48417
 //
 // Send UI Settings API
 const TUid KCRUidSendUi = {0x101F8873};
--- a/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h	Thu Aug 19 09:51:11 2010 +0300
@@ -21,7 +21,7 @@
 #define MUIUCONTACTSERVICE_H
 
 #include <e32base.h> // CBase
-#include "muiumsvuiserviceutilitiesinternal.h"
+#include "MuiuMsvUiServiceUtilitiesInternal.h"
 
 class CMuiuContactAddressMatcher;
 class CMsgVoIPExtension;
--- a/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h	Thu Aug 19 09:51:11 2010 +0300
@@ -22,7 +22,7 @@
 
 class CRepository;
 
-#include "messaginginternalcrkeys.h"
+#include "MessagingInternalCRKeys.h"
 
 
 // Lock identifier for messaging settings access
--- a/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -425,28 +425,31 @@
         //We should not create iterator here  navi pane iterator
         //will be refered  in  CMsgEditorAppUi
          
-        __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) );
+
         // Next is ETrue if layout is EAknLayoutIdABRW,
         // EFalse if EAknLayoutIdELAF or EAknLayoutIdAPAC
         if ( AknLayoutUtils::LayoutMirrored() )
             {
             aForward = !aForward;
             }
-
-        if ( aForward )
-            {
-            if ( iIterator->NextMessageExists() )
-                {
-                ret = ETrue;
-                }
-            }
-        else
-            {
-            if ( iIterator->PreviousMessageExists() )
-                {
-                ret = ETrue;
-                }
-            }
+		if(iIterator)
+		{
+        	if ( aForward )
+            	{
+            	if ( iIterator->NextMessageExists() )
+                	{
+                	ret = ETrue;
+                	}
+            	}
+        	else
+            	{
+            	if ( iIterator->PreviousMessageExists() )
+                	{
+                	ret = ETrue;
+                	}
+            	}
+		}
+	
         }
         
     return ret;
@@ -466,10 +469,11 @@
         CMsgEditorDocument* doc = Document();
         //We should not create iterator here, navi pane iterator
         //will be refered  in  CMsgEditorAppUi
-        __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) );
-
-        aCurrentIndex = iIterator->CurrentMessageIndex();
-        aMsgsInFolder = iIterator->MessagesInFolder();
+        if(iIterator)
+            {
+        	aCurrentIndex = iIterator->CurrentMessageIndex();
+        	aMsgsInFolder = iIterator->MessagesInFolder();
+            }
         }
     else
         {
--- a/messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/msgeditor/mediacontrolsrc/MsgAudioControl.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -343,6 +343,11 @@
             SetState( EMsgAsyncControlStateNoRights );
             break;
             }
+		case KErrInUse: // To handle if head phone is removed from the jack while playing audio.
+            {
+            Stop();
+            break;
+            }
         case KErrNoMemory:
         case KErrNotSupported:
         case KErrCorrupt:
--- a/messagingappbase/ncnlist/inc/CVoiceMailManager.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/ncnlist/inc/CVoiceMailManager.h	Thu Aug 19 09:51:11 2010 +0300
@@ -99,6 +99,11 @@
          */
 		void NotifyAboutSIMChange();
 		
+        /**
+         * Check the KMuiuSupressAllNotificationConfiguration value
+         */		
+		TBool CheckSupressNotificationSettingL();
+		
     private:
 
         /**
--- a/messagingappbase/ncnlist/src/CVoiceMailManager.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/ncnlist/src/CVoiceMailManager.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -26,6 +26,7 @@
 #include  <NcnListInternalCRKeys.h>		// For CR key handling
 #include  <RSSSettings.h>				// For ALS detection
 #include  <startupdomainpskeys.h>
+#include  <MessagingDomainCRKeys.h>
 
 #include "NcnDebug.h"
 #include "NcnCRHandler.h"
@@ -76,7 +77,12 @@
 	//Clear soft notifications	that might be drawn automatically by avkon
 	//TSW Error TWOK-6PNT26	
 	ClearVoiceMailSoftNotes();
-			
+	//clear Voicemail indicators only when KMuiuSupressAllNotificationConfiguration(VVM) is enabled.
+	if(CheckSupressNotificationSettingL())
+		{	
+     	iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, EFalse );
+     	iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, EFalse );
+		}
  	//Get SIM change status at the startup. If the SIM will change after
  	//boot-up we get notifed by the Model so no need to subscribe for this key
  	//TSW ID EHCN-6NRAZE
@@ -179,13 +185,16 @@
     NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 1 (ALS supported)"), aVoiceMailsInLine1 );
     NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 2 (ALS supported)"), aVoiceMailsInLine2 );
     
-    iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine1Notification, aVoiceMailsInLine1 );
-    iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine2Notification, aVoiceMailsInLine2 );
-    
-    // Indications
-    // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported
-    iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, aVoiceMailsInLine1 ? ETrue : EFalse );
-    iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, aVoiceMailsInLine2 ? ETrue : EFalse );      
+    if(!CheckSupressNotificationSettingL())
+        {
+        iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine1Notification, aVoiceMailsInLine1 );
+        iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailOnLine2Notification, aVoiceMailsInLine2 );
+        NCN_RDEBUG( _L("CVoiceMailManager: UpdateNoteAndIndicationWithALS With VVM off") );
+        // Indications
+        // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported
+        iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, aVoiceMailsInLine1 ? ETrue : EFalse );
+        iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine2, aVoiceMailsInLine2 ? ETrue : EFalse );
+        }
     }
             
 // ---------------------------------------------------------
@@ -243,12 +252,16 @@
 		{
 		NCN_RDEBUG_INT(_L("CVoiceMailManager : %d voice mails in line 1 (ALS not supported)"), voiceMailsInLine1 );
 		
-		//Soft notification. The SN must not contain any reference to line numbers
-		iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailNotification, voiceMailsInLine1 );	
-
-		// SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported
-		// ENcnIndicatorVMLine1 is mapped to KDisplayVoicemailActive in CNcnMsgWaitingManager
-		iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, ETrue );
+		 if(!CheckSupressNotificationSettingL())
+            {
+			NCN_RDEBUG( _L("CVoiceMailManager:SetIndicator and Notification ALS not supported With VVM off") );
+            //Soft notification. The SN must not contain any reference to line numbers
+            iModel.NcnNotifier().SetNotification( MNcnNotifier::ENcnVoiceMailNotification, voiceMailsInLine1 );	
+    
+            // SysApp checks ALS support and decides whether to use o_o or O_o (left O full), if ALS supported
+            // ENcnIndicatorVMLine1 is mapped to KDisplayVoicemailActive in CNcnMsgWaitingManager
+            iModel.MsgWaitingManager().SetIndicator( MNcnMsgWaitingManager::ENcnIndicatorVMLine1, ETrue );
+            }
 		}
 	else if( iIsALSSupported == TRUE )		
 	    {
@@ -315,4 +328,30 @@
 		return EFalse;		
 		}
 	}
+
+// -------------------------------------------------------------------
+// Check the KMuiuSupressAllNotificationConfiguration value
+// -------------------------------------------------------------------
+//
+TBool CVoiceMailManager::CheckSupressNotificationSettingL()
+{
+    TBool result = EFalse; 
+    TInt value = 0;
+    CRepository* repository = NULL;
+   
+   TRAPD( err, repository = CRepository::NewL( KCRUidMuiuMessagingConfiguration ) );
+   if( err == KErrNone && repository != NULL )
+       {
+       CleanupStack::PushL( repository ); 
+       err = repository->Get( KMuiuSupressAllNotificationConfiguration, value );
+       
+       if(err == KErrNone && (value & KMuiuNotificationSupressedForVoiceMail ))
+           {
+           result = ETrue;
+           }
+        }  
+       NCN_RDEBUG_INT( _L("CNcnNotifier::CheckSupressNotificationSetting() -  result: %d"), result );
+       CleanupStack::PopAndDestroy( repository );
+       return result;
+}
 //  End of File
--- a/messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/smartmessaging/vcardbc/src/vcardvpbutil.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -246,15 +246,25 @@
 MVPbkStoreContact* CVCardVpbUtil::ContactData() const
 	{
 	__ASSERT_DEBUG( iContactsToShow.Count() > 0, Panic( ENoContactImported ) );
+	// If iContactsToShow.Count() is zero, then it is not possible to parse the fields,so it has to return from here..
+	if ( iContactsToShow.Count() == 0 )
+		{
+	    return NULL;
+		}
 	return iContactsToShow[0];
 	}
 
 TBool CVCardVpbUtil::IsContactItemEmpty()
 	{
-	const MVPbkStoreContactFieldCollection& fields = ContactData()->Fields();
+	TBool ret( ETrue );
+	MVPbkStoreContact* storeContact = ContactData();
+	if ( !storeContact )
+		{
+	    return ret;
+		}
+	const MVPbkStoreContactFieldCollection& fields = storeContact->Fields();
     TInt count = fields.FieldCount();
 
-    TBool ret( ETrue );
     while( count )
         {
         __ASSERT_DEBUG( count <= fields.FieldCount() && count > 0,
--- a/messagingappbase/smilparser/Rom/Gmxml.iby	Thu Jul 15 18:34:37 2010 +0300
+++ b/messagingappbase/smilparser/Rom/Gmxml.iby	Thu Aug 19 09:51:11 2010 +0300
@@ -19,7 +19,7 @@
 #define __GMXML_IBY__
 
 #include <legacyminidomparser.iby>
-file=ABI_DIR\BUILD_DIR\SMILDTD.dll	System\libs\SMILDTD.dll
+file=ABI_DIR\BUILD_DIR\smildtd.dll	System\libs\smildtd.dll
 
 
 #endif
--- a/mobilemessaging/audiomsg/src/audiomessageappui.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/audiomsg/src/audiomessageappui.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -50,6 +50,7 @@
 
 // Common components
 #include <commonphoneparser.h> //Common phone number validity checker
+#include <PhCltTypes.h>                 // PhCltTypes
 #include <CommonUiInternalCRKeys.h>
 #include <DocumentHandler.h>
 #include <featmgr.h>
@@ -1333,7 +1334,15 @@
             break;
         case R_AUDIOMESSAGE_VIEWER_CONTEXT_MENU://call, reply fw, delete
           	{
+          	TPhCltTelephoneNumber  number;          // phoneclient
+          	number.Zero();
           	const TPtrC details = iMtm->Entry().Entry().iDetails;
+          	
+          	if(CommonPhoneParser::IsValidPhoneNumber( 
+          	                  details, CommonPhoneParser::ESMSNumber ))
+                {
+             number = details;
+                }   
             if( (FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) )
                 {
                 iFindItemMenu->SetSenderHighlightStatus( ETrue );
@@ -1348,7 +1357,7 @@
         		aMenuPane,
               	EFindItemContextMenuPlaceHolder,
               	TMmsGenUtils::PureAddress( iMtm->Sender() ),
-        		( details.Length() == 0 ), //"Is sender known"
+        		( KErrNotFound == number.Match( details ) ), //"Is sender known"
             	ETrue );
             // no items dimmed for now
           	if ( iMtm->Sender().Length() <= 0 )
--- a/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/mmsui/viewersrc/UniMmsViewerAppUi.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -1105,6 +1105,7 @@
     if ( !iFindItemMenu )
         {
         iFindItemMenu = CFindItemMenu::NewL( EFindItemMenuPlaceHolder );
+        iFindItemMenu->SetCallSubMenuVisibility ( EFalse ); // Click-To-Call
         if ( iHeader->SenderType( ) == EMuiuAddressTypeEmail )
             {
             // Set sender type to find menu
--- a/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smsmtm/clientmtm/inc/tmsvsmsentry.h	Thu Aug 19 09:51:11 2010 +0300
@@ -23,6 +23,7 @@
 #define __TMSVSMSENTRY_H__
 
 #include <gsmuelem.h>
+#include <smutset.h>
 
 /**
 A specialisation of the message server index class for SMS message entries.
Binary file mobilemessaging/smsmtm/conf/smsmtm_1000102c.crml has changed
--- a/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smsui/viewersrc/MsgSmsViewerAppUi.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -763,6 +763,17 @@
                 EMsgHeader );
             // take the number
             iNumber = iSmsHeader->FromAddress();
+            if ( !iFlags.iIsEmailMessage )
+                {
+                iFlags.iValidSenderNumber = CommonPhoneParser::IsValidPhoneNumber(
+                    iNumber, CommonPhoneParser::ESMSNumber );
+                }
+            else
+                {
+                iFlags.iValidSenderNumber =
+                    MsvUiServiceUtilities::IsValidEmailAddressL(
+                        iRecipientstring );
+                }
             break;
         default:
 #if defined ( _DEBUG )
@@ -884,6 +895,7 @@
             {
             // Prepare FindItem
             iFindItemMenu = CFindItemMenu::NewL( EFindItemMenuPlaceHolder );
+            iFindItemMenu->SetCallSubMenuVisibility ( EFalse ); // Click-To-Call
             iFindItemMenu->AttachItemFinderMenuL( R_SMSV_OPTIONSMENUPANE );
             }
         }
@@ -3118,6 +3130,17 @@
               }            
             // take the number
             iNumber = iSmsHeader->FromAddress();
+            if ( !iFlags.iIsEmailMessage )
+                {
+                iFlags.iValidSenderNumber = CommonPhoneParser::IsValidPhoneNumber(
+                    iNumber, CommonPhoneParser::ESMSNumber );
+                }
+            else
+                {
+                iFlags.iValidSenderNumber =
+                    MsvUiServiceUtilities::IsValidEmailAddressL(
+                        iRecipientstring );
+                }
             break;
         default:
 #if defined ( _DEBUG )
--- a/mobilemessaging/smum/group/SMUM.RSS	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smum/group/SMUM.RSS	Thu Aug 19 09:51:11 2010 +0300
@@ -324,6 +324,15 @@
             type = EMuiuSettingsSelectionList;
             array_id = r_sms_settings_message_conversion;
             },
+        // REQ:417-48417 Message forward with sender info
+        // must pay attention to the order: order of item in rss file is same with the enum defined in head file.
+        MUIU_SETTINGS_ITEM
+            {
+            title = qtn_mce_setting_sms_forward;
+            type = EMuiuSettingsSelectionList;
+            array_id = r_sms_settings_yes_no;
+            },
+        // End REQ:417-48417
         MUIU_SETTINGS_ITEM
             {
             title = qtn_mce_settings_sms_connection;
--- a/mobilemessaging/smum/inc/SmumSettingsDialogGSM.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smum/inc/SmumSettingsDialogGSM.h	Thu Aug 19 09:51:11 2010 +0300
@@ -72,8 +72,11 @@
     ESmumCharSupportInUseLBI,    //= 3
     ESmumDeliveryReportLBI,      //= 4
     ESmumValidityPeriodLBI,      //= 5
-    ESmumPreferredConnectionLBI, //= 6
-    ESmumReplyViaSameCentreLBI   //= 7
+    // REQ:417-48417 Message forward with sender info
+    ESmumForwardWithSenderInfoLBI, //= 6
+    // End REQ:417-48417
+    ESmumPreferredConnectionLBI, //= 7
+    ESmumReplyViaSameCentreLBI   //= 8
     };
 
 enum TSmumMainSmsSendingOptSettingLBIndex
@@ -329,6 +332,9 @@
         TInt 					iRemoveReplyScSetting;
         TInt					iStoreSettingsIndex;
         TInt                    iMskId;
+        // REQ:417-48417 Message forward with sender info
+        TBool                   iForwardWithSenderSupported;
+        // End REQ:417-48417
     };
 
 #endif      // SMUMSETTINGSDIALOGGSM_H   
--- a/mobilemessaging/smum/loc/smum.loc	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smum/loc/smum.loc	Thu Aug 19 09:51:11 2010 +0300
@@ -631,3 +631,9 @@
 //d:queued when the phone is outside coverage area
 //l:list_setting_pane_t1
 #define qtn_mce_settings_sms_queuing		"Message queuing"
+
+//d:REQ:417-48417 Message forward with sender info
+//l:list_setting_pane_t1
+//r:9.2
+#define qtn_mce_setting_sms_forward       "Forward with sender info"
+// End REQ:417-48417
--- a/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -150,6 +150,9 @@
     // Prepare FeatureManager, read values to members and uninitialize FeatureManager
     FeatureManager::InitializeLibL();
     iHelpFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );
+    // REQ:417-48417 Message forward with sender info
+    iForwardWithSenderSupported = FeatureManager::FeatureSupported(KFeatureIdMsgForwardWithSender);     
+    // End REQ:417-48417
     FeatureManager::UnInitializeLib();
     // Read the supported settings
     iEmailFeatureSupported = SmumUtil::CheckEmailOverSmsSupportL();
@@ -624,6 +627,23 @@
             SetItem( index, iSettings.ReplyPath() ? ESmumSettingsYes : ESmumSettingsNo );
             }
         }
+    
+    // REQ:417-48417 Message forward with sender info
+       if (!iTypeOfSettings && iForwardWithSenderSupported)
+        {  
+        if ( !iSettingsArrayIndex->Find ( ESmumForwardWithSenderInfoLBI, key, index ) )
+            {
+            TInt forwardWithSenderInfo;
+            if ( iCentralRapository->Get( KForwardWithSenderInfo, forwardWithSenderInfo ) != KErrNone )
+                {
+                //In case of any error,set the default value to 0
+                forwardWithSenderInfo = 0;            
+                }
+            SetItem(index, forwardWithSenderInfo? ESmumSettingsYes : ESmumSettingsNo);
+            }                
+        }
+    // End REQ:417-48417
+
     SMUMLOGGER_LEAVEFN(" CSmumMainSettingsDialogGSM::OpeningDialogL");
     }
 
@@ -766,6 +786,17 @@
             iSettings.SetReplyPath( Item( index ) == ESmumSettingsYes );
             }
         }
+        
+    // REQ:417-48417 Message forward with sender info
+    if (!iTypeOfSettings && iForwardWithSenderSupported)
+        {        
+        if (!iSettingsArrayIndex->Find ( ESmumForwardWithSenderInfoLBI, key, index ))
+            {        
+            iCentralRapository->Set(KForwardWithSenderInfo , Item( index ) == ESmumSettingsYes);
+            }
+        }        
+    // End REQ:417-48417
+    
     SMUMLOGGER_LEAVEFN(" CSmumMainSettingsDialogGSM::ClosingDialogL");
     }
 
@@ -1091,6 +1122,15 @@
 	            }					// ServiceCentreInUseLBI are removed
             }
         }
+    // REQ:417-48417 Message forward with sender info
+    if (!iTypeOfSettings)
+        {
+        if (!iForwardWithSenderSupported && variatedValue >= ESmumForwardWithSenderInfoLBI)
+            {
+            variatedValue ++; // if not support this feature, ESmumForwardWithSenderInfoLBI is removed
+            }
+        }
+    // End REQ:417-48417
     return variatedValue;    
     }
 
@@ -1150,6 +1190,21 @@
         	 ESmumSendOptServiceCentreInUseLBI : ESmumServiceCentreInUseLBI );
         needToBeCompressed = ETrue;
         }
+        
+    // REQ:417-48417 Message forward with sender info    
+    if (!iForwardWithSenderSupported && !iTypeOfSettings)
+        {
+        TInt index;
+        TKeyArrayFix key(0, ECmpTInt); 
+        TInt found = iSettingsArrayIndex->Find(ESmumForwardWithSenderInfoLBI, key, index);
+        if (0 == found)
+            {
+            DeleteSettingItemFromArrays(index);
+            needToBeCompressed = ETrue;
+            }
+        }
+    // End REQ:417-48417
+        
     if ( needToBeCompressed )
         {
         iSettingsArray->Compress();
--- a/mobilemessaging/unieditor/application/bld/UniEditor.mmp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/unieditor/application/bld/UniEditor.mmp	Thu Aug 19 09:51:11 2010 +0300
@@ -131,6 +131,12 @@
 LIBRARY	        peninputclient.lib
 LIBRARY         cenrepnotifhandler.lib
 
+// for CEikRichTextEditor to show global warning note
+LIBRARY          eikctl.lib  
+LIBRARY         uiklaf.lib 
+LIBRARY         form.lib 
+
+
 #ifdef RD_MSG_XHTML_SUPPORT 
 LIBRARY         xhtmlparser.lib
 #endif
--- a/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h	Thu Aug 19 09:51:11 2010 +0300
@@ -1249,6 +1249,12 @@
          *     Notification from central repository
          */
        	void HandleNotifyInt( TUint32 aId, TInt aNewValue );
+
+       	/**
+       	 *  Shows the Popup note in ITUT, when message size exceeds or deceeds
+       	 *  a certain limit or it changes from sms to mms and vice versa
+       	 */
+       	void ShowDiscreetPopUpL(const TDesC& aMessage);
        	
        	/**
        	 * Is Inserted objects path are valid.
--- a/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -141,6 +141,8 @@
 #include <UniEditor.rsg>
 #include <MsgEditorAppUi.rsg>
 
+#include <akndiscreetpopup.h>
+#include <aknsconstants.hrh>
 
 #include "UniSendingSettings.h"
 #include "UniPluginApi.h"
@@ -265,6 +267,8 @@
     iWaitResId( -1 ),
     iOriginalSlide( -1 ),
     iNextFocus( EMsgComponentIdNull ),
+    iPopupChangedMmsBuffer(NULL),
+    iPopupChangedSmsBuffer(NULL),
     iEditorFlags( EShowInfoPopups ),
     iMskResId( R_UNIEDITOR_OPTIONS_CLOSE ),
     iOptimizedFlow(EFalse),
@@ -451,6 +455,18 @@
 		iLongTapDetector->SetTimeDelayBeforeAnimation( KUniLongTapStartDelay );
 		iLongTapDetector->SetLongTapDelay( KUniLongTapTimeDelay );
 		iTapConsumed = EFalse;
+
+		//Korean Req: 415-5434
+		if ( iEditorFlags & EShowInfoPopups )
+     		{
+	        iPopupNote = CAknInfoPopupNoteController::NewL();
+            iPopupNote->SetTimeDelayBeforeShow( 0 );
+            iPopupNote->SetTimePopupInView( 3000 );
+
+			iPopupSmsSizeAboveLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_ABOVE_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );
+			iPopupSmsSizeBelowLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_UNDER_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );		
+	    	}
+
     }
 
 
@@ -794,16 +810,8 @@
         
     if ( iEditorFlags & EShowInfoPopups )
         {
-        iPopupNote = CAknInfoPopupNoteController::NewL();
-        iPopupNote->SetTimeDelayBeforeShow( 0 );
-        iPopupNote->SetTimePopupInView( 3000 );
-
         iPopupChangedMmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_MMS, iCoeEnv );
-        iPopupChangedSmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_SMS, iCoeEnv );
-
-        //Korean Req: 415-5434        
-        iPopupSmsSizeAboveLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_ABOVE_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );
-        iPopupSmsSizeBelowLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_UNDER_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );
+		iPopupChangedSmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_SMS, iCoeEnv );
 
         }
 
@@ -1184,7 +1192,17 @@
                     {
                     // No absolute maximum characters defined -> Calculate
                     // character maximum using maximum SMS part limit.
-                    maxSmsCharacters = maxSmsParts * lengthMany;
+
+                    if( maxSmsParts > 1 )
+                        {
+                        maxSmsCharacters = maxSmsParts * lengthMany;
+                        }
+                    else
+                        {
+						// for korean variant
+                        maxSmsCharacters = lengthOne;
+                        }
+
                     }
                 CalculateSMSMsgLen(charsLeft,msgsParts);
                 if( model->ObjectList().Count() == 0 &&
@@ -6337,8 +6355,15 @@
                 {
                 case EMsgMediaImage:
                     {
-                    // Set focus always first to the image control...
-                    iView->SetFocus( EMsgComponentIdImage );
+                    // Set the focus to Text field so that user will be able to
+					// Type the text when image height is too big
+                    CMsgBodyControl* bodyCtrl = BodyCtrl();
+                    if ( bodyCtrl )
+                        {
+						// Put the cursor at the end of Text.
+                        bodyCtrl->SetCursorPosL( bodyCtrl->Editor().TextLength() );
+                        iView->SetFocus( EMsgComponentIdBody );                           
+                        }
                     break;
                     }
                 case EMsgMediaAudio:
@@ -7876,8 +7901,7 @@
                     iEditorFlags |= ESmsSizeWarningNoteShown;
                     if( iPopupNote )
                         {
-                        iPopupNote->SetTextL( iPopupSmsSizeAboveLimitBuffer->Des() );
-                        iPopupNote->ShowInfoPopupNote();
+						ShowDiscreetPopUpL(iPopupSmsSizeAboveLimitBuffer->Des());
                         }
                     }
                 }
@@ -7890,8 +7914,7 @@
                     iEditorFlags &= ~ESmsSizeWarningNoteShown;
                     if( iPopupNote )
                         {
-                        iPopupNote->SetTextL( iPopupSmsSizeBelowLimitBuffer->Des() );
-                        iPopupNote->ShowInfoPopupNote();
+                        ShowDiscreetPopUpL(iPopupSmsSizeBelowLimitBuffer->Des());
                         }                
                     }
                 }          
@@ -8589,11 +8612,12 @@
 //
 void CUniEditorAppUi::ShowPopupNoteL( TBool aMms )
     {
-    if( iPopupNote )
-        {
-        iPopupNote->SetTextL( aMms? iPopupChangedMmsBuffer->Des():
-                                    iPopupChangedSmsBuffer->Des() );
-        iPopupNote->ShowInfoPopupNote();
+    if( iPopupNote && iPopupChangedMmsBuffer )
+        {
+        // additional check  iPopupChangedMmsBuffer is required as iPopupNote
+        // will be intialized in ConstructL but not iPopupChangedMmsBuffer.
+        // This change is done as part of Korean req.
+            ShowDiscreetPopUpL(aMms? iPopupChangedMmsBuffer->Des(): iPopupChangedSmsBuffer->Des());
         }
     }
  
@@ -10026,5 +10050,35 @@
     return bCanSave;
     }
 
+// ---------------------------------------------------------
+// CUniEditorAppUi::ShowDiscreetPopUpL
+// Shows the Popup note in ITUT, when message size exceeds or deceeds 
+// a certain limit or it changes from sms to mms and vice versa
+// ---------------------------------------------------------
+//
+void CUniEditorAppUi::ShowDiscreetPopUpL(const TDesC& aMessage)
+	{
+	TInt  bitmapId = KErrNotFound;
+	TInt  maskId = KErrNotFound;
+   
+   // No discreet popup => Uid 0
+   const TUid KDiscreetPopupUidNone =
+	   {
+	   0x0
+	   };
+	
+	CAknDiscreetPopup::ShowGlobalPopupL(aMessage, // 1st text row
+			KNullDesC, // second text row
+			KAknsIIDDefault, // icon skin id
+			KNullDesC, // bitmap file path
+			bitmapId, // bitmap id
+			maskId, // mask id
+			KAknDiscreetPopupDurationLong, // flags
+			0, // command id
+			NULL, // command observer
+			KDiscreetPopupUidNone, // application to be launched
+			KDiscreetPopupUidNone); // view to be activated
+	}
+
 // End of file
 
--- a/mobilemessaging/unieditor/inc/UniMsvEntry.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/unieditor/inc/UniMsvEntry.h	Thu Aug 19 09:51:11 2010 +0300
@@ -24,7 +24,7 @@
 
 #include <msvstd.h>
 #include <mmsconst.h>
-#include <UniEditorConsts.h>
+#include <unieditorconsts.h>
 
 // CONSTANTS
 
@@ -112,7 +112,7 @@
 
     };
 
-#include <UniMsvEntry.inl>
+#include <unimsventry.inl>
 
 #endif      // __UNIMSVENTRY_H
             
--- a/mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp	Thu Jul 15 18:34:37 2010 +0300
+++ b/mobilemessaging/unieditor/utils/src/UniObjectsViewDialog.cpp	Thu Aug 19 09:51:11 2010 +0300
@@ -924,7 +924,7 @@
                         aMenuPane->SetItemDimmed( EMsgViewAttachmentCmdSave, ETrue );
                         showSendMenu = EFalse;
                         }
-                    if ( index != -1 )
+                    if ( index != -1 && !iBusy)
                         {
                         // Catch this leave. If something peculiar coming in msg headers
                         // and atta not natively handled by viewer CanSave might leave.
--- a/msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h	Thu Jul 15 18:34:37 2010 +0300
+++ b/msg_plat/messaging_center_ui_utilities_api/inc/MessagingDomainCRKeys.h	Thu Aug 19 09:51:11 2010 +0300
@@ -56,4 +56,11 @@
 const TUint32 KMuiuDLNewEmailFlag       = 8;
 const TUint32 KMuiuDLInstantMessageFlag = 16;
 const TUint32 KMuiuDLAudioMessageFlag   = 32;
+
+//
+// The field controlling the value that takes the decision to supress 
+// the whole notification/indicator for voice mail
+const TUint32 KMuiuSupressAllNotificationConfiguration = 0x00000004;
+const TUint32 KMuiuNotificationSupressedForVoiceMail = 1;
+
 #endif // MESSAGINGDOMAINCRKEYS_H
\ No newline at end of file