Revision: 201013 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 15:53:21 +0300
branchRCL_3
changeset 22 52d61119153d
parent 21 c6838af47512
child 24 e00582ce7ecd
Revision: 201013 Kit: 201015
messagingappbase/mce/inc/MceBitmapResolver.h
messagingappbase/mce/inc/MceIds.hrh
messagingappbase/mce/inc/MceListItem.h
messagingappbase/mce/inc/MceMainViewListItemArray.h
messagingappbase/mce/inc/MceMainViewListView.h
messagingappbase/mce/inc/mceiaupdateutils.h
messagingappbase/mce/inc/mceui.h
messagingappbase/mce/src/MceBitmapResolver.cpp
messagingappbase/mce/src/MceMainViewListItemArray.cpp
messagingappbase/mce/src/MceMainViewListView.cpp
messagingappbase/mce/src/MceMessageListView.cpp
messagingappbase/mce/src/MceOneRowMessageListArrayLoader.cpp
messagingappbase/mce/src/MceOneRowMessageListContainer.cpp
messagingappbase/mce/src/mceiaupdateutils.cpp
messagingappbase/mce/src/mceui.cpp
messagingappbase/mceextraitems/group/ExtraIconlist_Scalable.txt
messagingappbase/mcesettings/inc/MceSettingsDialog.h
messagingappbase/mcesettings/src/MceSettingsEmailSel.cpp
messagingappbase/msgavkon/msgindicatorplugin/inc/msgindicatorpluginimplementation.h
messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h
messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalPSKeys.h
messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h
messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h
messagingappbase/msgavkon/muiu_internal/settingsarray/src/MuiuSettingsArray.cpp
messagingappbase/msgeditor/mediacontrolsrc/MsgVideoControl.cpp
messagingappbase/ncnlist/src/CNcnNotifApiObserver.cpp
messagingappbase/ncnlist/src/NcnOutboxObserver.cpp
messagingappbase/smartmessaging/richbio/src/CRichBio.cpp
messagingappbase/smilparser/GROUP/bld.inf
messagingappbase/smilparser/GROUP/messaging_gmxml.history.xml
messagingappbase/smilparser/GROUP/messaging_gmxml.mrp
mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp
mobilemessaging/unieditor/application/inc/UniEditorDocument.h
mobilemessaging/unieditor/application/inc/UniEditorDocument.inl
mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp
mobilemessaging/unieditor/application/src/UniEditorHeader.cpp
mobilemessaging/unieditor/inc/UniMsvEntry.h
mobilemessaging/unieditor/model/src/UniTextObject.cpp
--- a/messagingappbase/mce/inc/MceBitmapResolver.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/MceBitmapResolver.h	Wed Apr 14 15:53:21 2010 +0300
@@ -58,6 +58,8 @@
     EMceBitmapIndexAlwaysRoaming,
     EMceBitmapIndexPriorityHigh,
     EMceBitmapIndexPriorityLow,
+    EMceBitmapIndexConversation,
+    EMceBitmapIndexConversationNew,
     EMceBitmapIndexReplaceMtmIcon // this MUST be last
     };
 
--- a/messagingappbase/mce/inc/MceIds.hrh	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/MceIds.hrh	Wed Apr 14 15:53:21 2010 +0300
@@ -45,6 +45,8 @@
 
 // Special handling for Mail for exchange
 #define KMceMtmMailForExchangeValue      0x102826F8 
+#define KMceInboxView                   0x00
+#define KMceConversationview            0x01
 #endif
 
 // End of File
--- a/messagingappbase/mce/inc/MceListItem.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/MceListItem.h	Wed Apr 14 15:53:21 2010 +0300
@@ -42,6 +42,7 @@
         TMcePrintableText       iPrintableText;
         TInt                    iIconIndex;
         TMcePrintableText       iSecondaryText;
+        TInt                    iApplicationUid;
 #ifdef RD_MSG_NAVIPANE_IMPROVEMENT
         TInt                    iMessageCount;
 #endif // RD_MSG_NAVIPANE_IMPROVEMENT        
--- a/messagingappbase/mce/inc/MceMainViewListItemArray.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/MceMainViewListItemArray.h	Wed Apr 14 15:53:21 2010 +0300
@@ -269,6 +269,10 @@
         
         TBool MMceUtilsIdleClassStepL();
         void SetListItemArrayObserver( MMceMainViewListItemArrayObserver* aObserver );
+         /* 
+         * Set the Default Message viewing style 
+         */
+        void SetDefaultViewSettings(TBool );
     
     private:
 
@@ -455,6 +459,11 @@
     
         //Calculates the visible count excluding FS email stuff
         TInt FindVisibleCountL(TMsvId serviceId) const;
+         /**
+         * Creates Conversation string for main view listbox. 
+         * @param aIndex: index of the message to be drawn
+         */
+         TPtrC CreateConversationsListItem( TInt aIndex ) const;
     private:    // Data
         CMsvSessionPtr                  iSession;
         CMsvEntry*                      iFolderEntry;
@@ -489,6 +498,10 @@
          * KFeatureIdFfEmailFramework is enabled
          */
         TBool                           iEmailFramework;        
+        /**
+         *  Holds the current default Messagign viewing style type 
+        */
+        TBool                            iDefaultViewSettings;
     };
 
 #endif      // MCEMAINVIEWLISTITEMARRAY_H
--- a/messagingappbase/mce/inc/MceMainViewListView.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/MceMainViewListView.h	Wed Apr 14 15:53:21 2010 +0300
@@ -59,12 +59,6 @@
     {
     public:
         
-        enum TMceDefaultView
-            {
-            EMceInboxview = 0,                   
-            EMceConversationview
-            };
-
     public:  // Constructors and destructor
 
         /**
--- a/messagingappbase/mce/inc/mceiaupdateutils.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/mceiaupdateutils.h	Wed Apr 14 15:53:21 2010 +0300
@@ -57,6 +57,15 @@
     virtual ~CMceIAUpdateUtils();
 
     void StartL( const TUid aAppUid );
+    
+    /**
+     * Is IAD Update requried to do now
+     * @return TBool
+     * ETrue, If the KMceIADUpdateCheckRetryInterval is over after the previous try
+     * EFalse, If the KMceIADUpdateCheckRetryInterval is not over after the previous retry 
+     */
+    TBool IsUpdateRequired();
+    
 protected: 
 
      /**
@@ -156,7 +165,11 @@
     TUid 				 iAppUid;
     
     CMceUi&              iMceUi;
-
+	
+    /**
+	 * Previous IAD update check retry time
+	 */
+    TTime                iPrevIADUpdateCheckTry;
     };
 
 #endif // C_CMCEIAUPDATEUTILS_H
--- a/messagingappbase/mce/inc/mceui.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/inc/mceui.h	Wed Apr 14 15:53:21 2010 +0300
@@ -1149,6 +1149,12 @@
         RFs                             iFs;
         CBufFlat*                       iEncodeBuffer;
         CMmsClientMtm*                  iMmsMtm;
+        /**
+         * Iad Update Feature Flag.
+         * It will be ETrue, if feature is enabled,
+         * otherwise EFalse
+         */
+        TBool                           iIadUpdateVal;
     };
 
 #endif
--- a/messagingappbase/mce/src/MceBitmapResolver.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceBitmapResolver.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -36,7 +36,7 @@
 #include "MceListItem.h"
 #include "MceBitmapResolver.h"
 #include "MceIds.h"         //kmcedocumentsentryid
-
+#include <mceextraicons.mbg>
 // security data caging
 #include <data_caging_path_literals.hrh>
 #include <bldvariant.hrh>
@@ -151,7 +151,13 @@
     CreateAndAppendIconL( KAknsIIDQgnIndiMcePriorityHigh, iFilenameAvkon, EMbmAvkonQgn_indi_mce_priority_high, &listItem );
     CreateAndAppendIconL( KAknsIIDQgnIndiMcePriorityLow, iFilenameAvkon, EMbmAvkonQgn_indi_mce_priority_low, &listItem );
     
+   _LIT( KMceExtraIconsDirAndFile,"MceExtraIcons.mbm" );
+    TParse cvfp;
+    cvfp.Set( KMceExtraIconsDirAndFile, &KDC_APP_BITMAP_DIR , NULL );
 
+    listItem.iExtraItem = ETrue;
+    CreateAndAppendIconL( KAknsIIDQgnPropImIbox,  cvfp.FullName(),  EMbmMceextraiconsQgn_prop_im_ibox , &listItem );
+    CreateAndAppendIconL( KAknsIIDQgnPropImIboxNew,  cvfp.FullName(), EMbmMceextraiconsQgn_prop_im_ibox_new , &listItem );
     // add one dummy item which will be replaced when querying message items icons
     CreateAndAppendIconL( KAknsIIDQgnPropMceUnknownRead, EMbmMuiuQgn_prop_mce_unknown_read );
     
@@ -830,6 +836,29 @@
                 id = KAknsIIDQgnIndiConnectionInactiveAdd;
                 colorSkinnedBitmap = ETrue;
                 break;
+            case EMceBitmapIndexConversation:
+                  {
+                  _LIT( KMceExtraIconsDirAndFile,"MceExtraIcons.mbm" );
+                  TParse cvfp;
+                  cvfp.Set(KMceExtraIconsDirAndFile, &KDC_APP_BITMAP_DIR, NULL );
+                  fileName.Set(cvfp.FullName());
+                  bitmapIndex = EMbmMceextraiconsQgn_prop_im_ibox;
+                  id = KAknsIIDQgnPropImIbox;      
+                  colorSkinnedBitmap = EFalse;
+                  }
+                  break;
+                  
+            case EMceBitmapIndexConversationNew:
+                 {
+                _LIT( KMceExtraIconsDirAndFile,"MceExtraIcons.mbm" );
+                  TParse cvfp;
+                  cvfp.Set(KMceExtraIconsDirAndFile, &KDC_APP_BITMAP_DIR, NULL );
+                  fileName.Set(cvfp.FullName());
+                  bitmapIndex = EMbmMceextraiconsQgn_prop_im_ibox_new;
+                  id = KAknsIIDQgnPropImIboxNew; 
+                  colorSkinnedBitmap = EFalse;
+                 }
+                break;
             case EMceBitmapIndexReplaceMtmIcon:
             default:
                 fileName.Set( iFilenameMuiu );
--- a/messagingappbase/mce/src/MceMainViewListItemArray.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceMainViewListItemArray.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -89,6 +89,7 @@
 
 //cmail update
 #define KUidMsgTypeFsMtmVal               0x2001F406
+#define KConversationUidVal               0x2002A540  //Conversation Application UID
 
 //cmail update
 
@@ -176,6 +177,7 @@
     
     // todo
     iListBoxText = HBufC::NewL( iDescriptionLength*3 ); 
+    iDefaultViewSettings  = KMceConversationview;
     }
 
 // Two-phased constructor.
@@ -431,6 +433,10 @@
             tempText.Copy( item.iPrintableText );
             return tempText;
             }
+     else if(  item.iApplicationUid == KConversationUidVal )
+            {          
+            return CreateConversationsListItem( aIndex );
+            }
         else
             {
             return item.iPrintableText;
@@ -458,7 +464,15 @@
         if ( item.iIconIndex <= KErrNone || item.iIconIndex >= iBitmapResolver.MtmIconIndex() )
             {
             TInt messageCount = 0;
-            CONST_CAST( TMceListItem*, &item)->iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );
+            TMsvId id = entry.Id();
+            if(iDefaultViewSettings == KMceConversationview && id == KMsvGlobalInBoxIndexEntryId )
+                {
+                CONST_CAST( TMceListItem*, &item)->iIconIndex = EMceBitmapIndexInbox;
+                }
+            else
+                {
+                CONST_CAST( TMceListItem*, &item)->iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );
+                }
             CONST_CAST( TMceListItem*, &item)->iMessageCount = messageCount;
             }
         tempText.AppendNum( item.iIconIndex );
@@ -1014,7 +1028,15 @@
             if ( iSession->GetEntry( item.iMsvId, serviceId, entry ) == KErrNone )
                 {
                 TInt messageCount = 0;
-                item.iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );
+                TMsvId id = entry.Id();
+                if(iDefaultViewSettings == KMceConversationview && id == KMsvGlobalInBoxIndexEntryId )
+                    {
+                    item.iIconIndex = EMceBitmapIndexInbox;
+                    }
+                else
+                    {
+                    item.iIconIndex = iBitmapResolver.BitmapIndex( entry, messageCount );     
+                    }              
                 item.iMessageCount = messageCount;
 //                        item.iUnreadMessageCount = unreadMessageCount;
                 if ( iListItemArrayObserver )
@@ -1145,6 +1167,7 @@
         tempItem.iMsvId = extraItem.iCommandId;
        	tempItem.iPrintableText.Copy( extraItem.iPrintableText );
        	tempItem.iSecondaryText.Copy(extraItem.iSecondaryText);
+       	tempItem.iApplicationUid = extraItem.iApplicationUid; 
        	TUid appUid;
        	appUid.iUid = extraItem.iApplicationUid;
        	AddExtraItemWithIconL( tempItem, Count(), extraItem.iIconIndex, appUid );
@@ -1249,4 +1272,41 @@
     CleanupStack::PopAndDestroy( entry );
     return visiblecount; 
     }
+// ----------------------------------------------------
+// CMceMainViewListItemArray::CreateConversationsListItem()
+// ----------------------------------------------------
+TPtrC CMceMainViewListItemArray::CreateConversationsListItem( TInt aIndex ) const
+    {
+    const TMceListItem& item = At( aIndex );
+    TPtr tempText = iListBoxText->Des();        
+    tempText.Zero();
+    TInt bitmapidx = EMceBitmapIndexConversation;
+    if(iDefaultViewSettings == KMceConversationview )
+       {
+       TInt msgCount = 0;
+       TInt unreadCount = 0;
+       iBitmapResolver.HasUnreadMessagesL(KMsvGlobalInBoxIndexEntryId,msgCount,unreadCount);
+       if( unreadCount > 0 ) 
+           {
+           bitmapidx =  EMceBitmapIndexConversationNew ;
+           }
+       }    
+   tempText.AppendNum(bitmapidx);
+   TPtrC Ptr(item.iPrintableText); 
+   TInt len = Ptr.Length();
+   TInt  pos = Ptr.Locate(KColumnListSeparator);
+   TPtrC Ptr1(Ptr.Mid(pos));
+   tempText.Append(Ptr1);                
+   return tempText;    
+   }
+
+// ----------------------------------------------------
+// CMceMainViewListItemArray::SetDefaultViewSettings()
+// ----------------------------------------------------
+void CMceMainViewListItemArray::SetDefaultViewSettings(TBool aVal)
+    {
+    iDefaultViewSettings = aVal;   
+    Reset();
+    TRAP_IGNORE(AddFoldersL());
+    }
 //  End of File
--- a/messagingappbase/mce/src/MceMainViewListView.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceMainViewListView.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -51,7 +51,8 @@
 #include <MNcnInternalNotification.h>
 #include <NcnNotificationDefs.h>
 #include "MceListItem.h"
-
+#include "MceIds.hrh"
+#include "MceIds.h"
 #include <ImumInternalApi.h>
 #include <ImumInHealthServices.h>
 #include <muiumsvuiserviceutilitiesinternal.h>
@@ -331,8 +332,13 @@
         iMsgListContainer->ListItems()->SetListItemArrayObserver( this );
         ResetBitmapsL();
         iMsgListContainer->SetMskL();
+        TInt defaultview = KMceConversationview;
+        defaultview =    GetMceDefaultViewL();
+        if(defaultview != KErrNotFound)
+            {
+            iMsgListContainer->ListItems()->SetDefaultViewSettings(defaultview);
+            }
         }
-
     if ( !iDrawListbox )
         {
         return;
@@ -492,14 +498,14 @@
         case EAknCmdHideInBackground:
             break;
         case EMceDefaultConversationsView:
-            if ( SetMceDefaultViewL(EMceConversationview) )
+            if ( SetMceDefaultViewL(KMceConversationview) )
                 {
                 ShowConfirmationNoteL(R_DEFAULTVIEW_CONVERSATION_SELECTED);  
                 }
              break;
              
         case EMceDefaultInboxView:     
-            if ( SetMceDefaultViewL(EMceInboxview) )
+            if ( SetMceDefaultViewL(KMceInboxView) )
                 {
                 ShowConfirmationNoteL(R_DEFAULTVIEW_INBOX_SELECTED);
                 }
@@ -797,12 +803,12 @@
        {
        TInt defaultview = KErrGeneral;
        defaultview = GetMceDefaultViewL();
-       if(defaultview == EMceInboxview )
+       if(defaultview == KMceInboxView )
            {
            aMenuPane->SetItemButtonState( EMceDefaultInboxView,
                     EEikMenuItemSymbolOn );
            }
-       if(defaultview == EMceConversationview )
+       else if(defaultview == KMceConversationview )
            {
            aMenuPane->SetItemButtonState( EMceDefaultConversationsView,
                     EEikMenuItemSymbolOn );
@@ -1163,6 +1169,11 @@
        CleanupStack::PushL( repository );
        repository->Set(KMuiuMceDefaultView,aVal);
        CleanupStack::PopAndDestroy( repository );
+      if(iMsgListContainer)
+          {
+          iMsgListContainer->ListItems()->SetDefaultViewSettings(aVal);
+          iMsgListContainer->ListBox()->DrawDeferred();  
+          }
        return ETrue;
        }
     else
--- a/messagingappbase/mce/src/MceMessageListView.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceMessageListView.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -158,6 +158,7 @@
     delete iDateTimeNotifier;
 	delete iAiwServiceHandler;
 	RProperty::Delete( KPSUidMuiu, KMceTemplatesDialog ); 	
+	RProperty::Delete( KPSUidMuiu, KMuiuOneRowListPopulated );
     iSessionHolder.RemoveClient();
     }
 
@@ -187,7 +188,17 @@
         }        
     iListboxMailTypeObserver = CMceListboxTypeObserver::NewL( *this, KMuiuMailMessageListType );
     iListboxInboxTypeObserver = CMceListboxTypeObserver::NewL( *this, KMuiuInboxMessageListType );
-    
+    TInt r = RProperty::Define( KPSUidMuiu, KMuiuOneRowListPopulated, RProperty::EInt );
+    if ( r != KErrAlreadyExists || r != KErrNone)
+        {
+        User::LeaveIfError( r );
+        }
+	// Initialisation		
+     r = RProperty::Set( KPSUidMuiu, KMuiuOneRowListPopulated, EFalse );
+     if ( r != KErrNone )
+         {
+         User::LeaveIfError( r );
+         }          
     MCELOGGER_LEAVEFN("CMceMessageListView::ConstructL");   
     }
 
@@ -2283,6 +2294,16 @@
 // ----------------------------------------------------
 void CMceMessageListView::EditMenuL( CEikMenuPane* aMenuPane ) const
     {
+    TInt listPopulated =1;
+    //Get the value, accordingly we can dim/undim mark all for one row list only
+    if(!iCurrentListType)
+        {
+        TInt r = RProperty::Get( KPSUidMuiu, KMuiuOneRowListPopulated, listPopulated );
+        if ( r != KErrNone )
+        	{
+            User::LeaveIfError( r );
+            }
+        }
     // This function is not called if empty folder because in that case
     // EditMenu is hidden
     aMenuPane->SetItemDimmed( EAknCmdMarkReadMsgs, ETrue );
@@ -2305,7 +2326,7 @@
             }
        }   
 
-    if ( ( count + SubfolderCount() ) == iMsgListContainer->Count() )
+    if ( ( count + SubfolderCount() ) == iMsgListContainer->Count() || !listPopulated)
        {
        //if all selected, disable markall
        aMenuPane->SetItemDimmed( EAknMarkAll, ETrue );
--- a/messagingappbase/mce/src/MceOneRowMessageListArrayLoader.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceOneRowMessageListArrayLoader.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -32,6 +32,7 @@
 #include <SenduiMtmUids.h>  // mtm uids
 #include <eikenv.h>
 #include <gulicon.h>
+#include <e32property.h>
 
 #include "MceOneRowMessageListArray.h"
 #include "MceLogText.h"
@@ -61,6 +62,7 @@
 #include "MceCommands.hrh"
 #include "MceOneRowMessageListArrayLoader.h"
 #include <smuthdr.h>
+#include <messaginginternalpskeys.h> 
 
 
 // CONSTANTS
@@ -176,6 +178,12 @@
 //
 void CMceOneRowListItemArrayLoader::StartL()
     {
+    //Before Starting to prepare the list, set the value to zero.
+    TInt r = RProperty::Set( KPSUidMuiu, KMuiuOneRowListPopulated, EFalse );
+    if ( r != KErrNone )
+        {
+        User::LeaveIfError( r );
+        }
     Cancel();
     InitialiseSearch();
     delete iEntriesToBeAdded;
@@ -539,6 +547,15 @@
             CreateTimeBasedArrayL();
             break;
         }
+    if(iEntriesToBeAdded->Count() == 0)
+        {
+	//all the entries are populated successfully
+        TInt r = RProperty::Set( KPSUidMuiu, KMuiuOneRowListPopulated, ETrue );
+        if ( r != KErrNone )
+            {
+            User::LeaveIfError( r );
+            }
+        }
     }
 
 
--- a/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/MceOneRowMessageListContainer.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -414,8 +414,8 @@
         {
         SetCurrentItemIdL( iSelectedItemWaitingIndex );
         }
-
-    iTreeListBox->Sort( iListItems, CAknTreeList::ESaveFocus, ETrue );
+    //progressive draw for every 200 entries.
+    iTreeListBox->DrawNow();
     }
 
 
--- a/messagingappbase/mce/src/mceiaupdateutils.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/mceiaupdateutils.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -28,6 +28,12 @@
 #include "mceiaupdateutils.h"
 #include "MceLogText.h"
 
+// CONSTANT 
+
+// Defines the time span in hours for the next IAD update check event 
+// which will be trigered.
+const TInt KMceIADUpdateCheckRetryInterval = 24;
+
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -47,14 +53,10 @@
 //
 void CMceIAUpdateUtils::ConstructL()
     {
-    if( FeatureManager::FeatureSupported( KFeatureIdIAUpdate ) )
-        {
-        iUpdate = CIAUpdate::NewL( *this );
-        if( iUpdate )
-            {
-            iParameters = CIAUpdateParameters::NewL();
-            }
-        }
+    iUpdate = NULL;
+    iParameters = NULL;
+    // set it to current time.
+    iPrevIADUpdateCheckTry.UniversalTime();
     }
 
 
@@ -87,6 +89,16 @@
 //
 void CMceIAUpdateUtils::DoStartL( const TUid aAppUid )
     {
+    if(!iUpdate)
+        {
+        iUpdate = CIAUpdate::NewL( *this );
+        }
+
+    if( !iParameters )
+        {
+        iParameters = CIAUpdateParameters::NewL();
+        }
+        
     if( iUpdate && iParameters )
         {
         iParameters->SetUid( aAppUid );
@@ -98,6 +110,10 @@
         MCELOGGER_WRITE("StartL --- check updates");
         iUpdate->CheckUpdates( *iParameters );
         }
+    else
+        {
+        Delete(); //Delete session with IAD server
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -127,6 +143,8 @@
 void CMceIAUpdateUtils::CheckUpdatesComplete( TInt aErrorCode,
         TInt aAvailableUpdates )
     {
+    TBool bContinue = EFalse;
+    
     if ( aErrorCode == KErrNone )
         {
         if ( aAvailableUpdates > 0 )
@@ -136,6 +154,7 @@
                     // There were some updates available.
                     MCELOGGER_WRITE("CheckUpdatesComplete --- updates available");
                     iUpdate->UpdateQuery();
+                    bContinue = ETrue;
                     }
                 else
                     {
@@ -148,6 +167,11 @@
             MCELOGGER_WRITE("CheckUpdatesComplete --- no updates available");
             }
         }
+    if(!bContinue)
+        {
+        Delete(); //Delete session with IAD server
+        }
+     
     }
 
 // -----------------------------------------------------------------------------
@@ -184,6 +208,7 @@
 //
 void CMceIAUpdateUtils::UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow )
     {
+    TBool bContinue = EFalse;
     if ( aErrorCode == KErrNone )
         {
         if ( aUpdateNow )
@@ -191,6 +216,7 @@
             // User choosed to update now, so let's launch the IAUpdate UI.
             MCELOGGER_WRITE("UpdateQueryComplete --- now");
             iUpdate->ShowUpdates( *iParameters );
+            bContinue = ETrue;
             }
         else
             {
@@ -198,6 +224,10 @@
             MCELOGGER_WRITE("UpdateQueryComplete --- later");
             }
         }
+    if(!bContinue)
+        {
+        Delete(); //Delete session with IAD server
+        }
     }
 // -----------------------------------------------------------------------------
 // From class MIAUpdateObserver.
@@ -244,4 +274,42 @@
     
     }
 
+// ---------------------------------------------------------------------------
+// Is IAD Update requried to do now
+// YES, If the KMceIADUpdateCheckRetryInterval is over after the previous try
+// NO, If the KMceIADUpdateCheckRetryInterval is not over after the previous retry 
+// ---------------------------------------------------------------------------
+//
+TBool CMceIAUpdateUtils::IsUpdateRequired()
+    {
+    TBool required = EFalse;
+    TTime currTime;
+    TTimeIntervalHours hourInterval;
+    TInt err = KErrNone;
+    
+    currTime.UniversalTime();
+    
+    err = currTime.HoursFrom(iPrevIADUpdateCheckTry,hourInterval);
+    
+    // KErrNone-> successful case, 
+    // reset the iPrevIADUpdateCheckTry to current time, 
+    // start IAD check update
+    
+    // KErrOverflow ->  if the calculated interval 
+    // is too large for a 32-bit integer
+    // reset the iPrevIADUpdateCheckTry to current time
+    // start IAD check update
+    
+    // in all other cases don't do any thing.
+    
+    if(((err == KErrNone)&& 
+        (hourInterval.Int() >= KMceIADUpdateCheckRetryInterval ))
+        ||(err == KErrOverflow))        
+        {
+        iPrevIADUpdateCheckTry.UniversalTime();
+        required = ETrue; 
+        }
+    
+    return required;
+    }
 // EOF
--- a/messagingappbase/mce/src/mceui.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mce/src/mceui.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -286,8 +286,12 @@
     delete iEmailApi;
     delete iEmailNotifHandler;
     delete iCancelExitFlagOperation;
-    delete iMceIAUpdate;
-
+    
+    if(iMceIAUpdate)
+	    {
+	    delete iMceIAUpdate;
+	    }
+    
     if ( iIdArray )
         {
         delete iIdArray;
@@ -427,8 +431,13 @@
     iMailAccountItemArray = new(ELeave) CMceMailAccountItemArray(
         KMceArrayGranularity );
 
-    iMceIAUpdate = CMceIAUpdateUtils::NewL(*this);
-
+    iMceIAUpdate = NULL;
+    iIadUpdateVal  = EFalse;
+    if(FeatureManager::FeatureSupported( KFeatureIdIAUpdate ))
+        {
+        iIadUpdateVal = ETrue;
+        }
+        
     if ( iAlwaysOnline )
         {
         iConnectionMonitor.ConnectL();
@@ -2682,6 +2691,10 @@
             {
             CleanupStack::PopAndDestroy(); // TCleanupItem - will show tabs again
             }
+        if ( iMceUiFlags.MceFlag( EMceUiFlagsTabsActive )  && (!tabsToCleanupStack) )
+            {
+            ShowTabsL( iMceListView->ListContainer()->CurrentFolderId() );
+            }
         }
     else
         {
@@ -5556,13 +5569,29 @@
     TBool newAudioMsgVal = EFalse;
     newAudioMsgVal = FeatureManager::FeatureSupported( KFeatureIdAudioMessaging );
     newPostcardVal = FeatureManager::FeatureSupported( KFeatureIdMmsPostcard );
+    
     if ( newAudioMsgVal != iAudioMsgEnabled || newPostcardVal != iPostcardEnabled )
         {
         TRAP_IGNORE( HandleMTMChangeL() );
         }
-    if ( MceViewActive( EMceMainViewActive ) )
-        {
-        CheckIAUpdate();
+    
+    if ( MceViewActive( EMceMainViewActive ) && iIadUpdateVal)
+        {      
+        if(!iMceIAUpdate) // first time messaging view is activated
+            {
+            TRAP_IGNORE(iMceIAUpdate = CMceIAUpdateUtils::NewL(*this));     
+            if(iMceIAUpdate)
+                {
+                CheckIAUpdate();
+                }
+            }
+        else
+            {
+            if(iMceIAUpdate->IsUpdateRequired())
+                {
+                CheckIAUpdate();
+                }
+            }
         }
     }
 
--- a/messagingappbase/mceextraitems/group/ExtraIconlist_Scalable.txt	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mceextraitems/group/ExtraIconlist_Scalable.txt	Wed Apr 14 15:53:21 2010 +0300
@@ -2,3 +2,4 @@
 /c8,8 qgn_menu_smsvo.svg
 /c8,8 qgn_menu_wml.svg
 /c8,8 qgn_prop_im_ibox.svg
+/c8,8 qgn_prop_im_ibox_new.svg
--- a/messagingappbase/mcesettings/inc/MceSettingsDialog.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mcesettings/inc/MceSettingsDialog.h	Wed Apr 14 15:53:21 2010 +0300
@@ -25,7 +25,7 @@
 
 #include <ConeResLoader.h>
 #include <msvapi.h>
-#include "mcesettingstitlepanehandlerdialog.h"
+#include "MceSettingsTitlePaneHandlerDialog.h"
 #include <MsgArrays.h>
 
 
--- a/messagingappbase/mcesettings/src/MceSettingsEmailSel.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/mcesettings/src/MceSettingsEmailSel.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -730,7 +730,8 @@
                       // services.                    
                       entryUid.iUid = tentry2.Id();    
                       //If cmail box add to the hash table and cmaillist
-                      if(tentry2.iMtm.iUid == KUidMsgTypeFsMtmVal )
+                      if(tentry2.iMtm.iUid == KUidMsgTypeFsMtmVal 
+                              && timeItems != NULL && cmaillist != NULL)
                           {
                           TTimeIntervalMicroSeconds difference = timeNow.MicroSecondsFrom( tentry2.iDate.Int64() );
                           TInt ret = iCmailBoxes->Insert(difference.Int64() , cc );
@@ -738,7 +739,7 @@
                           cmaillist->AppendL(tentry2.iDetails);
                           }
                       //Add Non Cmail
-                      else
+                      else if( tentry2.iMtm.iUid != KSenduiMtmImap4UidValue && tentry2.iMtm.iUid != KSenduiMtmSmtpUidValue && tentry2.iMtm.iUid != KSenduiMtmPop3UidValue)
                           {
                           aListItemUids.AppendL( entryUid );
                           aListItems.AppendL( tentry2.iDetails );
--- a/messagingappbase/msgavkon/msgindicatorplugin/inc/msgindicatorpluginimplementation.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/msgindicatorplugin/inc/msgindicatorpluginimplementation.h	Wed Apr 14 15:53:21 2010 +0300
@@ -24,7 +24,7 @@
 // Until aknstylusactivatedpopupcontent.h is fixed
 
 //  INCLUDES
-#include <AknLayout2ScalableDef.h>
+#include <aknlayout2scalabledef.h>
 #include <AknIndicatorPlugin.h> // CAknIndicatorPlugin
 #include <AknPreviewPopUpController.h> // Controlling the preview pop-up component
 #include <aknstylusactivatedpopupcontent.h> // Stylus activated pop-up conten
--- a/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/flagger/inc/MuiuFlagger.h	Wed Apr 14 15:53:21 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/MessagingInternalPSKeys.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/inc/MessagingInternalPSKeys.h	Wed Apr 14 15:53:21 2010 +0300
@@ -43,6 +43,10 @@
 // Tells whether Msg Sent as settings to be removed from Text settings view
 const TUint32 KMuiuRemoveMsgSentSettings = 0x00000004;
 
+// The New PSK introduced from 9.2
+// Tells whether If one row list is populated or not, 1- list is populated, 0 - list population is in progress
+const TUint32 KMuiuOneRowListPopulated = 0x00000005;
+
 // The New PSK introduced from 5.0
 
 const TUid KPSUidMsgEditor	=	{0x101F87FF};
--- a/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuContactService.h	Wed Apr 14 15:53:21 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	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/servicesinternal/inc/MuiuLock.h	Wed Apr 14 15:53:21 2010 +0300
@@ -22,7 +22,7 @@
 
 class CRepository;
 
-#include "messaginginternalcrkeys.h"
+#include "MessagingInternalCRKeys.h"
 
 
 // Lock identifier for messaging settings access
--- a/messagingappbase/msgavkon/muiu_internal/settingsarray/src/MuiuSettingsArray.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgavkon/muiu_internal/settingsarray/src/MuiuSettingsArray.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -30,7 +30,7 @@
 #include <muiu_internal.rsg>
 #include "MuiuSettingsArray.h"
 #include <e32property.h>
-#include <MessagingInternalPSkeys.h>
+#include <messaginginternalpskeys.h>
 #include <StringLoader.h>
 
 // CONSTANTS
--- a/messagingappbase/msgeditor/mediacontrolsrc/MsgVideoControl.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/msgeditor/mediacontrolsrc/MsgVideoControl.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -637,6 +637,8 @@
         MSGMEDIACONTROLLOGGER_WRITEF( _L("MsgVideoControl:: SizeChanged(): cliRect (%d,%d),( %d,%d)"),  clipRect.iTl.iX, clipRect.iTl.iY, clipRect.iBr.iX, clipRect.iBr.iY);
 	    }
 	
+    iVideoAreaControl->SetRect( iVideoFrameArea );
+
 	// iVideoAreaControl is relative to screen coordinates.
     iVideoPlayer->SetDisplayWindowL(
         ControlEnv()->WsSession(),
@@ -644,7 +646,6 @@
         *iVideoAreaControl->DrawableWindow(),
         rect,
         clipRect );
-    iVideoAreaControl->SetRect( iVideoFrameArea );
     
     MSGMEDIACONTROLLOGGER_LEAVEFN( "MsgVideoControl : DoSizeChangedL()" );
     }
--- a/messagingappbase/ncnlist/src/CNcnNotifApiObserver.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/ncnlist/src/CNcnNotifApiObserver.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -38,7 +38,7 @@
 #include <NcnListInternalCRKeys.h>
 #include <muiumsvuiserviceutilitiesinternal.h> // Messaging utilites
 #include <messaginginternalcrkeys.h>
-#include <MIUTSET.H>
+#include <miutset.h>
 
 const TUid KUidMsgTypeCmailMtmVal = {0x2001F406};
 
--- a/messagingappbase/ncnlist/src/NcnOutboxObserver.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/ncnlist/src/NcnOutboxObserver.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -33,7 +33,7 @@
 #include    "NcnModelBase.h"
 #include    "CNcnMsvSessionHandler.h"
 #include    "CNcnMobileSignalStrengthHandler.h"
-#include <MIUTSET.H>
+#include <miutset.h>
 
 const TUid KUidMsgTypeCmailMtmVal = {0x2001F406};
 // ================= MEMBER FUNCTIONS =======================
--- a/messagingappbase/smartmessaging/richbio/src/CRichBio.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/messagingappbase/smartmessaging/richbio/src/CRichBio.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -25,7 +25,7 @@
 #include <calslbs.h>                        // Fonts
 #include <MsgExpandableControlEditor.h>     // CMsgExpandableControlEditor
 #include <MsgEditorCommon.h>                // MaxBodyHeight
-#include <AknLayoutDef.h>       // TAknLayoutId
+#include <aknlayoutdef.h>       // TAknLayoutId
 #include <AknUtils.h>
 
 #include    <applayout.cdl.h> // LAF
--- a/messagingappbase/smilparser/GROUP/bld.inf	Wed Mar 31 21:25:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-// Copyright (c) 2002-2009 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"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// Messaging - GMXML
-// Generic XML parser and composer
-// 
-//
-
-/**
- @file
-*/
-
-
-PRJ_PLATFORMS
-DEFAULT
-
-// Subproject builds
-#include "../SMILdtd/GROUP/bld.inf"
-#include "../Rom/BLD.INF"
-
-PRJ_MMPFILES
--- a/messagingappbase/smilparser/GROUP/messaging_gmxml.history.xml	Wed Mar 31 21:25:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<relnotes name="SMIL Parser">
-  <purpose>
-    SMIL parsing implemented via generic XML Parser / Composer with a "mini-DOM" API able to perform syntax checking against simple DTDs. Replaces SMIL Translater implementation of 7.0s.
-  </purpose>
-
-  <deliverystep number="1842" name="CR1934: Messaging: Moving XML Parser" osproject="SymTB9.2" revision="012">
-  <cr number="1934" title="Restructuring of the MCL">Adding SMIL parser into webservices-xml package.</cr> 
-  <milestone project="GT0539" number="3.4" /> 
-  </deliverystep>
-  
-   
-  <defect number="DEF142365" title="GCC-E: Simple syntax error" revision="011">
-      syntax error in function declaration
-    </defect>
-
-  <defect number="DEF138034" title="GMXML parser could cause stray event panics" revision="010">
-      stray scanner defect.
-    </defect>
-
-  <deliverystep number="1462" name="Splitting mixed header files for Messaging" osproject="SymTB92" revision="009">
-   <preq number="2510" title=" Splitting mixed header files for Messaging">
-    Mixed header files will now contain only published All or published Partner or internal
-   </preq>
-    <milestone project="GT0465" number="3.5"/>
-  </deliverystep>
-  
-  <defect number="DEF128078" title="@prototype tags in messaging" revision="008">
-      Added IM tag message server.
-    </defect>
-  <defect number="PDEF126520" title="[Folder name missing characters" revision="007">
-    written a new api which handles the case when there is quotation in file name.
-  </defect>
-
-  <defect number="DEF125067" title="[coverity] - CHECKED_RETURN - messaging/gmxml/xmlparser/src/gmxmlparser.cpp" revision="006">
-    Checked the if condition is not false for the AppendChild function.
-  </defect>
-
-  <defect number="PDEF115899" title="xmlparser panics when out of memory" revision="005">
-    Added a new exported leaving function. This is BR approved and BR number is BR2302.3
-  </defect>
-
-  <defect number="DEF108002" title="Warnings generated with checksource build  " revision="004">
-    Added condition to differentiate the winscw and armv5 def files for case sensitive 
-  </defect>
-
-  <defect number="DEF105400" title="Add missing IM tags to Messaging public header files" revision="003">
-    Added IM tag for all given header files.
-  </defect>
-
-  <defect number="INC105134" title="GmXML consumes whitespace characters" revision="002">
-    Now GmXML component restrict for eating white spaces
-  </defect>
-
-  <deliverystep number="500" name="Messaging file name changes to support GNU compiler for Linux" osproject="Oghma" revision="001">
-    <preq number="1182" title="GNU Make-based build system">
-    GNU Make-based build system
-  </preq>
-    <milestone project="GT0342" number="3.3"/>
-  </deliverystep>
-</relnotes>
--- a/messagingappbase/smilparser/GROUP/messaging_gmxml.mrp	Wed Mar 31 21:25:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#
-# Copyright (c) 2009 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"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-component	messaging_gmxml
-source	\sf\app\messaging\messagingappbase\smilparser
-binary	\sf\app\messaging\messagingappbase\smilparser\GROUP	all
-exports	\sf\app\messaging\messagingappbase\smilparser\GROUP
-
-notes_source	\component_defs\release.src
-
-
-ipr E 
-ipr T \sf\app\messaging\messagingappbase\smilparser\SMILdtd\SMIL_Test_Files
-ipr T \sf\app\messaging\messagingappbase\smilparser\SMILdtd\tinc
-ipr T \sf\app\messaging\messagingappbase\smilparser\SMILdtd\tsrc
-
-
--- a/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/smum/src/SmumSettingsDialogGSM.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -40,7 +40,7 @@
 #include <RCustomerServiceProfileCache.h>
 #include <centralrepository.h>          // CRepository
 #include <messaginginternalcrkeys.h>    // Keys
-#include <MessagingInternalPSKeys.h>
+#include <messaginginternalpskeys.h>
 
 // locals
 #include "smsui.pan"    				// for panics
--- a/mobilemessaging/unieditor/application/inc/UniEditorDocument.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/application/inc/UniEditorDocument.h	Wed Apr 14 15:53:21 2010 +0300
@@ -523,6 +523,11 @@
          */
         inline TInt SmsSizeWarningBytes();
         
+        /* Set the Attachemnt flag ELaunchFromCvAttachment */
+        inline  void SetLaunchFromCvAttachment(TBool); 
+        
+         /* Verify is the  flag ELaunchFromCvAttachment is set */
+        inline TBool IsLaunchFromCvAttachment() ;
     private:
 
         /**
@@ -554,7 +559,8 @@
             EUniDocumentRestrictedReplySms = 0x10,
             EUniDocumentRestrictedReplyMms = 0x20,
             EUniDocumentCSPBitsSupported = 0x40,
-            EUniDocumentUnicodeCharacterMode = 0x80
+            EUniDocumentUnicodeCharacterMode = 0x80,
+            ELaunchFromCvAttachment = 0x100
             };
         
         CEikonEnv*          iEnvironment;
--- a/mobilemessaging/unieditor/application/inc/UniEditorDocument.inl	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/application/inc/UniEditorDocument.inl	Wed Apr 14 15:53:21 2010 +0300
@@ -422,4 +422,32 @@
     return iSmsSizeWarningBytes;
     }
 
+// ---------------------------------------------------------
+// CUniEditorDocument:: SetLaunchFromCvAttachment
+// Set/Reset the  attachment Flag 
+//  ---------------------------------------------------------
+
+inline void  CUniEditorDocument::SetLaunchFromCvAttachment(TBool aVal)
+    {
+    if(aVal)
+        {
+        iFlags |=  ELaunchFromCvAttachment;
+        }
+    else
+        {
+        iFlags &= ~ELaunchFromCvAttachment;
+        }
+    }
+
+// ---------------------------------------------------------
+// CUniEditorDocument:: IsLaunchFromCvAttachment
+// Verify is attachment Flag set and reset it.
+//---------------------------------------------------------
+     
+ inline TBool CUniEditorDocument::IsLaunchFromCvAttachment()
+   {
+   TBool x =iFlags & ELaunchFromCvAttachment;
+   iFlags &= ~ELaunchFromCvAttachment;
+   return(x);
+   }
 // End of file
--- a/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -6592,6 +6592,11 @@
     else
         {
         FinalizeLaunchL();
+     // check is Unieditor is launched from conversation by Addachemnt option 
+        if( Document()->IsLaunchFromCvAttachment())
+            {
+            iFixedToolbar->ToolbarExtension()->SetShown(ETrue);
+            }
         }
     }
 
--- a/mobilemessaging/unieditor/application/src/UniEditorHeader.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/application/src/UniEditorHeader.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -56,7 +56,7 @@
 // CONSTANTS
 const TInt KUniCharAt = '@';
 const TInt  KUniMaxSubject  = 40;
-
+const TUint KZeroWidthNonJoiner = 0x200C;
 // MACROS
 
 // LOCAL CONSTANTS AND MACROS
@@ -115,6 +115,18 @@
     iAddDelayed = EUniFeatureTo;
     
     iDoc.DataModel()->AttachmentList().SetListObserver( this );
+    TPtrC cvsubject = iMtm.SubjectL();
+    TUint value = 0;  
+    if( cvsubject.Length() != 0 )
+       {         
+        TLex Cv( cvsubject);
+        Cv.Val( value );
+        if(value == KZeroWidthNonJoiner)
+            {
+            iDoc.SetLaunchFromCvAttachment(ETrue);
+            iMtm.SetSubjectL(KNullDesC());           
+            }
+       }
         
     const TPtrC subject = iMtm.SubjectL();
     
--- a/mobilemessaging/unieditor/inc/UniMsvEntry.h	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/inc/UniMsvEntry.h	Wed Apr 14 15:53:21 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/model/src/UniTextObject.cpp	Wed Mar 31 21:25:02 2010 +0300
+++ b/mobilemessaging/unieditor/model/src/UniTextObject.cpp	Wed Apr 14 15:53:21 2010 +0300
@@ -370,12 +370,15 @@
     {
     if ( iTextEditor && iTextEditor->Text()->DocumentLength() )
         {
-    	TPtrC ptr = iTextEditor->Text()->Read( 0, KMaxFilenameLenghtForAttachment );        
+    	HBufC *ptr = iTextEditor->GetTextInHBufL();
+        CleanupStack::PushL( ptr );
         MsgAttachmentUtils::GetFileNameFromBuffer( 
             aFileName, 
-            ptr, 
+            *ptr, 
             KMaxFilenameLenghtForAttachment, 
             &KExtTextPlain_16 );
+        CleanupStack::PopAndDestroy( ptr );
+        
         }
     if ( aFileName.Length() == 0 ||
         !iFs.IsValidName( aFileName ) )