201027_03
authorhgs
Tue, 13 Jul 2010 22:09:22 +0530
changeset 46 b1f0785c289d
parent 41 25fe1fe642e3
child 48 4f501b74aeb1
201027_03
messagingapp/msgservices/msgserviceapp/msgserviceapp.pro
messagingapp/msgservices/msgserviceapp/msgserviceapp.qrc
messagingapp/msgservices/msgserviceapp/resources/messaging_en_GB
messagingapp/msgservices/msgserviceapp/src/main.cpp
messagingapp/msgsettings/msginit/inc/cmobilesignalstrengthhandler.h
messagingapp/msgsettings/msginit/inc/coutboxobserver.h
messagingapp/msgsettings/msginit/inc/coutboxsender.h
messagingapp/msgsettings/msginit/inc/coutboxsendoperation.h
messagingapp/msgsettings/msginit/inc/msignalstrengthhandler.h
messagingapp/msgsettings/msginit/inc/msignalstrengthobserver.h
messagingapp/msgsettings/msginit/inc/simscnumberdetector.h
messagingapp/msgsettings/msginit/msginit.pro
messagingapp/msgsettings/msginit/src/cmobilesignalstrengthhandler.cpp
messagingapp/msgsettings/msginit/src/coutboxobserver.cpp
messagingapp/msgsettings/msginit/src/coutboxsender.cpp
messagingapp/msgsettings/msginit/src/coutboxsendoperation.cpp
messagingapp/msgsettings/msginit/src/simscnumberdetector.cpp
messagingapp/msgsettings/msgsettings.pro
messagingapp/msgsettings/settingsserviceapp/inc/settingsserviceinterface.h
messagingapp/msgsettings/settingsserviceapp/resources/messaging_en_GB
messagingapp/msgsettings/settingsserviceapp/rom/settingsserviceapp.iby
messagingapp/msgsettings/settingsserviceapp/service_conf.xml
messagingapp/msgsettings/settingsserviceapp/settingsserviceapp.pro
messagingapp/msgsettings/settingsserviceapp/settingsserviceapp.qrc
messagingapp/msgsettings/settingsserviceapp/src/main.cpp
messagingapp/msgsettings/settingsserviceapp/src/settingsserviceinterface.cpp
messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp
messagingapp/msgsettings/settingsview/src/msgsettingsview.cpp
messagingapp/msgsettings/settingsview/src/smssettingsprivate.cpp
messagingapp/msgui/appengine/src/conversationsmodel.cpp
messagingapp/msgui/conversationview/inc/msgconversationview.h
messagingapp/msgui/conversationview/src/msgconversationview.cpp
messagingapp/msgui/msgapp/inc/msgviewmanager.h
messagingapp/msgui/msgapp/src/main.cpp
messagingapp/msgui/msgapp/src/msgviewmanager.cpp
messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherwidget.cpp
messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp
messagingapp/msgui/unifiedviewer/src/univiewertextitem.cpp
messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h
messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp
--- a/messagingapp/msgservices/msgserviceapp/msgserviceapp.pro	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgservices/msgserviceapp/msgserviceapp.pro	Tue Jul 13 22:09:22 2010 +0530
@@ -50,8 +50,6 @@
 TARGET.CAPABILITY = ALL -TCB
 TARGET.UID3 = 0x2002E6DA
 
-RESOURCES += msgserviceapp.qrc
-
 LIBS += -lxqservice \
         -lxqserviceutil \
         -lconvergedmessageutils \
--- a/messagingapp/msgservices/msgserviceapp/msgserviceapp.qrc	Fri Jul 09 14:46:10 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/translations">
-        <file alias="messaging_en_GB">resources/messaging_en_GB</file>
-    </qresource>
-</RCC>
Binary file messagingapp/msgservices/msgserviceapp/resources/messaging_en_GB has changed
--- a/messagingapp/msgservices/msgserviceapp/src/main.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgservices/msgserviceapp/src/main.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -77,17 +77,15 @@
 {
     HbApplication app( argc, argv );
     
-    //TODO: Uncomment the lines when actual 
-    //translation files are available in sdk and remove loading locally.
+   //installing translator.
     QString locale = QLocale::system().name();
     QString path = "z:/resource/qt/translations/";
     QTranslator translator;
-    //QTranslator translator_comm;
-    //translator.load(path + QString("messaging_") + locale);
-    //translator_comm.load(path + QString("common_") + locale);
-    translator.load( "messaging_en_GB", ":/translations" );
+    QTranslator translator_comm;
+    translator.load(path + "messaging_" + locale);
+    translator_comm.load(path + "common_" + locale);
     app.installTranslator(&translator);
-    //app.installTranslator(&translator_comm);
+    app.installTranslator(&translator_comm);
 
     app.setApplicationName(LOC_TITLE);
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/cmobilesignalstrengthhandler.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 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"
+* 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:   Signal strength handler implementation over telephony API
+*
+*/
+
+
+
+#ifndef MOBILESIGNALSTRENGTHHANDLER_H
+#define MOBILESIGNALSTRENGTHHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <etelmm.h>
+#include "msignalstrengthhandler.h"
+
+// FORWARD DECLARATIONS
+class MSignalStrengthObserver;
+
+// CLASS DECLARATION
+
+/**
+* Class implementing a signal strength handler over the telephony API
+*/
+
+class CMobileSignalStrengthHandler : public CActive, public MSignalStrengthHandler
+{
+    public:
+        /**
+         * Two-phased constructor.
+         */
+        static CMobileSignalStrengthHandler* NewL( );
+
+        /**
+         * Destructor.
+         */
+        ~CMobileSignalStrengthHandler();
+
+    private:
+        /**
+         * C++ default constructor.
+         */
+        CMobileSignalStrengthHandler();
+
+        /**
+         * By default Symbian 2nd phase constructor is private.
+         */
+        void ConstructL();
+
+    public: // from CActive
+        /**
+         * RunL
+         */
+        void RunL();
+
+        /**
+         * RunError
+         * @param aError the error returned
+         *  @return error
+         */
+        TInt RunError( TInt aError );
+
+        /**
+         * DoCancel
+         */
+        void DoCancel();
+
+    public:
+        /**
+         * Returns ETrue if signal observing is supported, EFalse otherwise.
+         * @return ETrue if signal observing is supported, EFalse otherwise.
+         */
+        TBool ObservingSupported();
+        
+        /**
+         * Returns ETrue if signal strength requests are supported, EFalse otherwise.
+         * @return ETrue if signal strength requests are supported, EFalse otherwise.
+         */
+        TBool RequestsSupported();
+
+        /**
+         * Sets the signal strength observer. May leave with KErrNotSupported
+         * if signal strength observing is not supported.
+         * @param aObserver Observer for signal strength. Ownership is not passed.
+         */
+        void SetSignalStrengthObserverL( MSignalStrengthObserver* aObserver );
+
+        /**
+         * Starts observing the signal strength. May leave with KErrNotSupported
+         * if signal strength observing is not supported.
+         */
+        void StartObservingL();
+ 
+        /**
+         * Stops the signal strength observing.
+         */
+        void StopObservingL();
+
+        /**
+         * Returns the current signal strength. May leave with KErrNotSupported
+         * if signal strength requests are not supported.
+         * @return The current signal strength.
+         */
+        TInt SignalStrengthL();
+        
+        /**
+         * Returns the current bar value. May leave with KErrNotSupported
+         * if bar value requests are not supported.
+         * @return The current signal strength.
+         */
+        TInt BarValueL();
+
+    private: // New methods
+
+        /**
+         * Initializes server sessions.
+         */
+        void InitializeSessionsL();
+        
+        /**
+         * Updates the current value of the signal strength.
+         */
+        void UpdateSignalStrengthL();
+        
+        /**
+         * Notifiers observer about signal strength.
+         */
+        void NotifyObserver();
+
+    private: 
+    	/**
+         * Pointer to signal strength observer, may be NULL. Also not owned by the instance.
+         */
+        MSignalStrengthObserver* iObserver;
+        
+        /**
+         * State variable for observation.
+         */
+        TBool iObserving;
+
+        /**
+         * Current value of the signal strength.
+         */
+        TInt32 iSignalStrength;
+        
+        /**
+         * Network bars value.
+         */
+        TInt8 iBars;
+        
+        /**
+         * Mobile phone.
+         */
+        RMobilePhone iMobilePhone;
+
+        /**
+         * Telephony server session.
+         */
+        RTelServer iTelServer;
+};
+
+
+#endif // MOBILESIGNALSTRENGTHHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/coutboxobserver.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 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"
+ * 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:   
+ *       The purpose of this class is to observe if there are messages 
+ *       in the outbox.
+ *
+ */
+
+#ifndef OUTBOXOBSERVER_H
+#define OUTBOXOBSERVER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <msvapi.h>         // for MMsvSessionObserver
+#include "msignalstrengthobserver.h"
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class COutboxSender;
+class MSignalStrengthHandler;
+
+// CLASS DECLARATION
+
+/**
+ *  Observes if there are messages in the OutBox..
+ */
+class COutboxObserver: public CBase, public MMsvEntryObserver, public MSignalStrengthObserver
+{
+public:
+    // Constructors and destructor
+
+    /**
+     *   A Two-phased constructor.
+     */
+    static COutboxObserver* NewL();
+
+    /**
+     *   Destructor.
+     */
+    virtual ~COutboxObserver();
+
+private:
+    // From MSignalStrengthObserver
+
+    void SignalStrengthAndBarUpdatedL(TInt aNewSignalValue, TInt aNewBarValue);
+
+public:
+
+    void HandleMsvSessionReadyL(CMsvSession& aMsvSession);
+    void HandleMsvSessionClosedL();
+
+public:
+
+    /**
+     *   The messaging server sends notifications of changes in the
+     *   observed entry to CNcnOutboxObserver by calling this method.
+     */
+    void
+        HandleEntryEventL(TMsvEntryEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/);
+
+public:
+    // New functions
+
+    /**
+     *  Informs the networkstatus to Outbox Sender
+     */
+    void InformOutboxSenderL(const TInt& aNetworkBars);
+
+private:
+
+    /**
+     *   A C++ constructor.
+     */
+    COutboxObserver();
+
+    /**
+     *   By default Symbian OS constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     *   By default, prohibit copy constructor
+     */
+    COutboxObserver(const COutboxObserver&);
+
+    /**
+     *   Prohibit assigment operator
+     */
+    COutboxObserver& operator=(const COutboxObserver&);
+
+    /**
+     * Creates the Msv Session and sets the outbox 
+     * observer and outbox sender.
+     * @param aMsvSession The Msv session to use.
+     */
+    void StartSessionsL(CMsvSession& aMsvSession);
+
+    /**
+     *   Delete session, outbox observer and outbox sender.
+     */
+    void EndSessions();
+
+private:
+    // In-box folder entry. Note that the entry is not owned by this class.
+    CMsvEntry* iOutboxFolder;
+    // Pointer to Outbox Sender.
+    COutboxSender* iOutboxSender;
+    // Signal strength handler. Owned.
+    MSignalStrengthHandler* iSignalStrengthHandler;
+};
+
+#endif      // OUTBOXOBSERVER_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/coutboxsender.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 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"
+ * 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:  
+ *       This class follows the offline status of the phone. When the mode is
+ *       changed from online to offline, the sending operation is started. When
+ *       the mode is changed from online to offline, the current sending
+ *       operation is cancelled.
+ *
+ */
+
+#ifndef __OUTBOXSENDER_H__
+#define __OUTBOXSENDER_H__
+
+//  INCLUDES
+#include <msvapi.h>
+#include <MuiuMsvSingleOpWatcher.h>
+#include <cenrepnotifyhandler.h>
+
+// FORWARD DECLARATIONS
+class CRepository;
+
+// CLASS DECLARATION
+/**
+ * COutboxSender
+ * Sends sms messages from the outbox when offline is changed back to online.
+ * It only tries to send message once. If sending fails due to other reasons
+ * than offline mode, then it is up to the user to go to outbox and send it.
+ * Note: At the moment only sms'es are sent. MMS messages are sent by mms mtm
+ * and emails are saved to outbox as 'During next connection' and those must
+ * not be sent.
+ */
+class COutboxSender: public CBase, public MMsvSingleOpWatcher, public MCenRepNotifyHandlerCallback
+{
+public:
+    // Constructors and destructor
+
+    /**
+     *   A two-phased constructor.
+     */
+    static COutboxSender* NewL(CMsvSession& aMsvSession);
+
+    /**
+     *   A destructor.
+     */
+    virtual ~COutboxSender();
+
+public:
+    // New functions
+
+    /**
+     *   Starts the message sending operation for sms-messages.
+     */
+    void StartSendingL();
+
+    /**
+     *   Cancels current message sending operation.
+     */
+    void CancelSending();
+
+    /**
+     *   Checks if the sending operation is currently active.
+     */
+    TBool IsSending() const;
+
+    /**
+     *  Confirms the network status and starts sending messages
+     */
+    void CheckAndStartSendingL(const TInt& aNetworkBars);
+
+public:
+    // Functions from base classes
+
+    /**
+     *   From MMsvSingleOpWatcher. Deletes the sending operation.
+     */
+    virtual void OpCompleted(CMsvSingleOpWatcher& aOpWatcher, TInt aCompletionCode);
+
+    /**
+     *   From MCentRepNotifyHandlerCallback.
+     */
+    void HandleNotifyInt(TUint32 aId, TInt aNewValue);
+
+    /**
+     *   From MCentRepNotifyHandlerCallback.
+     */
+    void HandleNotifyError(TUint32 aId, TInt aError, CCenRepNotifyHandler* aHandler);
+
+    /**
+     *   From MCentRepNotifyHandlerCallback.
+     */
+    void HandleNotifyGeneric(TUint32 aId);
+
+private:
+    /**
+     *   A C++ Constructor
+     */
+    COutboxSender(CMsvSession& aMsvSession);
+
+    /**
+     *   Creates the connection to shared data and
+     *   begins listening the KGSNetworkConnectionAllowed-key.
+     */
+    void ConstructL();
+
+    /**
+     * Checks whether SMS sending is needed in boot-phase and
+     * launches the sending operation
+     */
+    void CheckBootPhaseL();
+
+private:
+    enum TCleanupFlags
+    {
+        EUserSettingsConnected = 0x01,
+        EUserSettingsNotifierSet = 0x02,
+        EOffllineSendingNeeded = 0x10
+    };
+
+private:
+    // Reference to Msv Session
+    CMsvSession& iMsvSession;
+    // Pointer to sending operation
+    CMsvSingleOpWatcher* iRunningOperation;
+    CCenRepNotifyHandler* iNotifyHandler;
+    CRepository* iSession;
+    // Flags to indicate status of Outbox Sender
+    TInt8 iFlags;
+    // Last known network coverage
+    TInt iNetworkBars;
+
+};
+
+#endif // __OUTBOXSENDER_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/coutboxsendoperation.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 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"
+* 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:  
+*       When the phone mode is changed from offline to online mode, this class
+*       sends the messages in outbox, that are in suspended or failed state
+*       because of the offline mode. When phone is changed from online to
+*       offline mode, the currently running sending operation will be
+*       cancelled.
+*
+*/
+
+
+
+#ifndef __COUTBOXSENDOPERATION_H__
+#define __COUTBOXSENDOPERATION_H__
+
+//  INCLUDES
+#include <msvapi.h>
+#include <MuiuMsvSingleOpWatcher.h>
+
+
+// FORWARD DECLARATIONS
+class CMsvEntrySelection;
+
+// CLASS DECLARATION
+
+/**
+*  Sends messages from Outbox when user selects "Start" in Outbox.
+*/
+class COutboxSendOperation : public CMsvOperation
+    {
+    public: 
+
+       /**
+        *   A two-phased constructor.
+        */
+        static COutboxSendOperation* NewL(
+            CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus);
+
+       /**
+        *   A destructor.
+        */
+        virtual ~COutboxSendOperation();
+
+       /**
+        *   Returns the current operation.
+        */
+        virtual const TDesC8& ProgressL();
+
+    private:
+
+       /**
+        *   A C++ constructor
+        */
+        COutboxSendOperation(
+            CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus);
+
+       /**
+        *   Creates the sending operation session.
+        */
+        void ConstructL();
+
+    private:    // Functions from base classes
+
+       /**
+        *   Cancels sending operation.
+        */
+        void DoCancel();
+
+       /**
+        *   Keeps the message sending operaion active until all
+        *   messages are sent.
+        */
+        void RunL();
+
+       /**
+        *  Handles the runtime error events
+        */
+        TInt RunError( TInt aError );
+
+    private:    // New functions
+
+       /**
+        *   Starts sending operation for  next selection.
+        */
+        void StartSendingL();
+
+       /**
+        *   Sets the selected messages to sending state.
+        */
+        void SendWaitingSMSMessages();
+
+       /**
+        *   Sets the selected messages to sending state.
+        */
+        void SendWaitingSMSMessagesL();
+
+       /**
+        *   Creates selection of spesified type of messages in outbox
+        */
+        void CreateSelectionL(
+            const TUid& aUidForSel,
+            const TMsvId& aServiceId,
+            CMsvEntrySelection*& aSelection );
+
+       /**
+        *   Checks if MTM is available and creates selection
+        */
+        TBool CheckAndCreateSelectionL();
+
+       /**
+        * Completes operation and cancels notify
+        */
+        void CompleteObserver( TInt aStatus );
+
+       /**
+        * Deletes the selection
+        */
+        void RemoveSelection();
+
+        /**
+        * Checks if there is need to continue sending operation
+        */
+        TBool IsSendingNeeded( TUid& aMtm ) const;
+
+        /**
+        * Removes the sending flag
+        */
+        void RemoveSendingFlag( const TUid& aMtm );
+        
+        /**
+        * Complete own request
+        */
+        void CompleteSelf( TInt aValue );
+
+
+    private:    // Data
+        enum
+        {
+            ESupportsSmsSending      = 0x01,
+            ESendSms                 = 0x10,
+        };
+
+        // Selection queue
+        CArrayPtrFlat<CMsvEntrySelection> iSelections;
+        // Services selection
+        CMsvEntrySelection      iServices;
+        // Pointer to Msv Operation
+        CMsvOperation*          iOperation;
+        // Entry pointer
+        CMsvEntry*              iEntry;
+        // Supported message types
+        TUint                   iSupportedMsgs;
+    };
+
+
+#endif // __COUTBOXSENDOPERATION_H__
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/msignalstrengthhandler.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 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"
+* 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:   Interface for signal strength handler.
+*
+*/
+
+
+
+#ifndef MSIGNALSTRENGTHHANDLER_H
+#define MSIGNALSTRENGTHHANDLER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class MSignalStrengthObserver;
+
+// CLASS DECLARATION
+
+/**
+*  Interface for a class which handles changes
+*  in phone signal strength.
+*/
+class MSignalStrengthHandler
+    {
+    public:     // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        virtual ~MSignalStrengthHandler() {};
+
+    public:     // New functions
+
+        /**
+         * Returns ETrue if signal observing is supported, EFalse otherwise.
+         * @return ETrue if signal observing is supported, EFalse otherwise.
+         */
+        virtual TBool ObservingSupported() = 0;
+        
+        /**
+         * Returns ETrue if signal strength requests are supported, EFalse otherwise.
+         * @return ETrue if signal strength requests are supported, EFalse otherwise.
+         */
+        virtual TBool RequestsSupported() = 0;
+
+        /**
+         * Sets the signal strength observer. May leave with KErrNotSupported
+         * if signal strength observing is not supported.
+         * @param aObserver Observer for signal strength. Ownership is not passed.
+         */
+        virtual void SetSignalStrengthObserverL( MSignalStrengthObserver* aObserver ) = 0;
+
+        /**
+         * Starts observing the signal strength. May leave with KErrNotSupported
+         * if signal strength observing is not supported.
+         */
+        virtual void StartObservingL() = 0;
+ 
+        /**
+         * Stops the signal strength observing.
+         */
+        virtual void StopObservingL() = 0;
+
+        /**
+         * Returns the current signal strength. May leave with KErrNotSupported
+         * if signal strength requests are not supported.
+         * @return The current signal strength.
+         */
+        virtual TInt SignalStrengthL() = 0;
+        
+        /**
+         * Returns the current bar value. May leave with KErrNotSupported
+         * if bar value requests are not supported.
+         * @return The current signal strength.
+         */
+        virtual TInt BarValueL() = 0;
+        
+    };
+
+#endif      // MSIGNALSTRENGTHHANDLER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/inc/msignalstrengthobserver.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 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"
+* 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:   Observer for signal strength handler
+*
+*/
+
+
+
+#ifndef MSIGNALSTRENGTHOBSERVER_H
+#define MSIGNALSTRENGTHOBSERVER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+*  Interface for a class which observes if there are any changes
+*  in phone signal strength.
+*/
+class MSignalStrengthObserver
+    {
+    public:     // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        virtual ~MSignalStrengthObserver() {};
+
+    public:     // New functions
+
+        /**
+         * Notifies about updates in signal bars and strength.
+         * @param aNewSignalValue New value for the signal strength.
+         * @param aNewBarValue New value for the signal bars.
+         */
+        virtual void SignalStrengthAndBarUpdatedL( TInt aNewSignalValue, TInt aNewBarValue ) = 0;
+    };
+
+#endif      // MSIGNALSTRENGTHOBSERVER_H
+
+// End of File
--- a/messagingapp/msgsettings/msginit/inc/simscnumberdetector.h	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/msginit/inc/simscnumberdetector.h	Tue Jul 13 22:09:22 2010 +0530
@@ -49,6 +49,7 @@
 class CClientMtmRegistry;
 class CStartUpMonitor;
 class CRepository;
+class COutboxObserver;
 
 /**
  * Observer to indicate when SIM operation has been completed.
@@ -200,7 +201,7 @@
     CStartUpMonitor* iStartupMonitor;
     MSimOperationObserver& iObserver;
     CRepository* iCenRepSession;
-
+    COutboxObserver* iOutBoxObserver;
 
 };
 
--- a/messagingapp/msgsettings/msginit/msginit.pro	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/msginit/msginit.pro	Tue Jul 13 22:09:22 2010 +0530
@@ -59,14 +59,27 @@
 
 HEADERS += inc/startupmonitor.h \
 					 inc/simscnumberdetector.h \
-					 inc/msgsimnumberdetector.h
+					 inc/msgsimnumberdetector.h \
+					 inc/cmobilesignalstrengthhandler.h \
+					 inc/coutboxobserver.h \
+					 inc/coutboxsender.h \
+					 inc/coutboxsendoperation.h \
+					 inc/msignalstrengthhandler.h \
+					 inc/msignalstrengthobserver.h
 					
 SOURCES += src/startupmonitor.cpp \
 					 src/simscnumberdetector.cpp \
-					 src/msgsimnumberdetector.cpp
-
+					 src/msgsimnumberdetector.cpp \
+					 src/cmobilesignalstrengthhandler.cpp \
+					 src/coutboxobserver.cpp \
+					 src/coutboxsendoperation.cpp \
+					 src/coutboxsender.cpp
+					 
 LIBS += -lsmcm \
 		    -lmsgs \	
         -lcentralrepository \
         -lcenrepnotifhandler \
-        -letelmm
+        -letelmm \
+        -letel \
+        -lmuiuutils
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/cmobilesignalstrengthhandler.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,297 @@
+/*
+* Copyright (c) 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"
+* 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:   Mobile signal strength handler implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <mmtsy_names.h>
+#include "cmobilesignalstrengthhandler.h"
+#include "msignalstrengthobserver.h"
+#include "debugtraces.h"
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::NewL
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler* CMobileSignalStrengthHandler::NewL( )
+    {
+    CMobileSignalStrengthHandler* self = new (ELeave) CMobileSignalStrengthHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::~CMobileSignalStrengthHandler
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler::~CMobileSignalStrengthHandler()
+    {
+    Cancel();
+    iMobilePhone.Close();
+    iTelServer.Close();    
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::CMobileSignalStrengthHandler
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler::CMobileSignalStrengthHandler() :
+    CActive( EPriorityNormal )
+    {
+ 
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::ConstructL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::ConstructL()
+    {
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::ConstructL - Enter ");    
+    CActiveScheduler::Add( this );
+    InitializeSessionsL();
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::ConstructL - Exit");
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RunL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::RunL()
+    {
+    // if operation completed successfully
+    if( iStatus.Int() == KErrNone )
+        {
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::RunL - Signal strength updated ",iSignalStrength );
+        NotifyObserver();
+        }
+        
+    // if observing is still active reissue the notification request    
+    if( iObserving )
+        {
+        QDEBUG_WRITE( "CMobileSignalStrengthHandler::RunL - NotifySignalStrengthChange" );
+        // reissue the request 
+        iMobilePhone.NotifySignalStrengthChange( iStatus, iSignalStrength, iBars );
+        SetActive();
+        }
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RunError
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::RunError( TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::DoCancel
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::DoCancel()
+    {
+    if( iObserving )
+        {
+        iMobilePhone.CancelAsyncRequest( EMobilePhoneNotifySignalStrengthChange );
+        }    
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::ObservingSupported
+// -----------------------------------------------------------------
+TBool CMobileSignalStrengthHandler::ObservingSupported()
+    {
+    TUint32 caps;
+    iMobilePhone.GetSignalCaps( caps );
+    return ( caps & RMobilePhone::KCapsNotifySignalStrengthChange );
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RequestsSupported
+// -----------------------------------------------------------------    
+TBool CMobileSignalStrengthHandler::RequestsSupported()
+    {
+    TUint32 caps;
+    iMobilePhone.GetSignalCaps( caps );
+    return ( caps & RMobilePhone::KCapsGetSignalStrength );
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::SetSignalStrengthObserverL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::SetSignalStrengthObserverL(
+    MSignalStrengthObserver* aObserver )
+    {
+    // leave if observing is not supported
+    if( !ObservingSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    iObserver = aObserver;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::StartObservingL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::StartObservingL()
+    {
+    // leave if observing is not supported
+    if( !ObservingSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }        
+    
+    // update signal str
+    TRAPD( err, UpdateSignalStrengthL() );
+    
+    // check operation
+    if( err != KErrNone )
+        {        
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::StartObservingL - Failed to initialize signal strength (err = )",err );
+        iSignalStrength = 0;
+        }
+    else
+        {
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::StartObservingL - Signal strength initialized to ",iSignalStrength );
+        }
+    
+    // update state
+    iObserving = ETrue;
+    
+    // Notify current observer about signal strength
+    NotifyObserver();
+    
+    // request for notification    
+    iMobilePhone.NotifySignalStrengthChange( iStatus, iSignalStrength, iBars );
+    SetActive();                            
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::StopObservingL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::StopObservingL()
+    {
+    if( !iObserving )
+        {
+        User::Leave( KErrGeneral );
+        }
+        
+    // cancel the request    
+    Cancel();
+        
+    // update state
+    iObserving = EFalse;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::SignalStrengthL
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::SignalStrengthL()
+    {
+    // leave if requests are not supported
+    if( !RequestsSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    // if we're not observing we have to update the value manually,
+    // otherwise value is up-to-date    
+    if( !iObserving )
+        {
+        UpdateSignalStrengthL();
+        }
+ 
+    // return the current value
+    return iSignalStrength;        
+    }
+    
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::BarValueL
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::BarValueL()
+    {
+    // leave if requests are not supported
+    if( !RequestsSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    if( !iObserving )
+        {
+        UpdateSignalStrengthL();
+        }
+    
+    // return the current value
+    return iBars;      
+    }
+    
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::InitializeSessionsL
+// -----------------------------------------------------------------    
+void CMobileSignalStrengthHandler::InitializeSessionsL()
+    {
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::InitializeSessionsL - Enter");
+  
+    User::LeaveIfError( iTelServer.Connect() );
+     
+    RTelServer::TPhoneInfo phoneInfo;
+    TInt numPhone;
+    
+    // load tsy module and get number of phones
+    User::LeaveIfError( iTelServer.LoadPhoneModule( KMmTsyModuleName ) );
+    User::LeaveIfError( iTelServer.EnumeratePhones( numPhone) );
+  
+    // find the correct phone
+    for (TInt i(0); i < numPhone; i++)
+        {
+        TName tsyName;
+        User::LeaveIfError( iTelServer.GetPhoneInfo( i, phoneInfo ) );
+        User::LeaveIfError( iTelServer.GetTsyName( i,tsyName ) );
+  
+        if ( tsyName.CompareF( KMmTsyModuleName ) == 0)
+            {
+            break;
+            }
+        }
+    // open mobile phone session    
+    User::LeaveIfError( iMobilePhone.Open( iTelServer, phoneInfo.iName ) ); 
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::InitializeSessionsL - Exit");
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::UpdateSignalStrengthL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::UpdateSignalStrengthL()
+    {
+    // only update the value if requests are supported
+    if( RequestsSupported() )
+        {
+        TRequestStatus status;                
+        iMobilePhone.GetSignalStrength( status, iSignalStrength, iBars );
+        User::WaitForRequest( status );
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::UpdateSignalStrengthL - GetSignalStrength returned with", status.Int() );
+        User::LeaveIfError( status.Int() );
+        }
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::NotifyObserver
+// -----------------------------------------------------------------    
+void CMobileSignalStrengthHandler::NotifyObserver()
+    {
+    // notify observer, if set
+    if( iObserver )
+        {
+        TRAP_IGNORE( iObserver->SignalStrengthAndBarUpdatedL( iSignalStrength, iBars ) );
+        }
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/coutboxobserver.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 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"
+ * 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:   Implements the class
+ *
+ */
+
+// INCLUDE FILES
+#include <e32def.h>
+#include <msvids.h>              // Entry Ids
+#include <e32property.h>
+#include <PSVariables.h>
+#include "coutboxsender.h"
+#include "coutboxobserver.h"
+#include "cmobilesignalstrengthhandler.h"
+#include "debugtraces.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// COutboxObserver::COutboxObserver
+// ---------------------------------------------------------
+//
+COutboxObserver::COutboxObserver(){}
+
+// ---------------------------------------------------------
+// COutboxObserver::ConstructL
+// ---------------------------------------------------------
+//
+void COutboxObserver::ConstructL()
+{
+    QDEBUG_WRITE( "COutboxObserver::ConstructL Enter" );
+    // instantiate the signal strength handler
+    iSignalStrengthHandler = CMobileSignalStrengthHandler::NewL();
+
+    if (iSignalStrengthHandler->ObservingSupported()) 
+    {
+        iSignalStrengthHandler->SetSignalStrengthObserverL(this);
+        iSignalStrengthHandler->StartObservingL();
+    }
+    else 
+    {
+        QDEBUG_WRITE( "COutboxObserver::ConstructL else part" );
+    }
+    QDEBUG_WRITE( "COutboxObserver::ConstructL Exit" );
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::NewL
+// ---------------------------------------------------------
+//
+COutboxObserver* COutboxObserver::NewL()
+{
+    // Create the instance of the outbox observer
+    COutboxObserver* self = new (ELeave) COutboxObserver();
+    // Push it to stack while executing the constructor
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::~COutboxObserver
+// ---------------------------------------------------------
+//
+COutboxObserver::~COutboxObserver()
+{
+    delete iSignalStrengthHandler;
+    EndSessions();
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::SignalStrengthUpdatedL
+// ---------------------------------------------------------
+//
+void COutboxObserver::SignalStrengthAndBarUpdatedL(TInt /*aNewSignalValue*/, TInt aNewBarValue)
+{
+    QDEBUG_WRITE_FORMAT( "COutboxObserver::SignalStrengthUpdatedL - Signal bars ", aNewBarValue );
+    // pass new bar value to outbox sender
+    InformOutboxSenderL(aNewBarValue);
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::InformOutboxSenderL
+// ---------------------------------------------------------
+//
+void COutboxObserver::InformOutboxSenderL(const TInt& aNetworkBars)
+{
+    if (iOutboxSender) {
+        QDEBUG_WRITE( "COutboxObserver::InformOutboxSenderL - Informing outbox sender." );
+
+        iOutboxSender->CheckAndStartSendingL(aNetworkBars);
+    }
+    else {
+        QDEBUG_WRITE( "COutboxObserver::InformOutboxSenderL - Outbox sender not initialized." );
+    }
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::StartSessionsL
+// ---------------------------------------------------------
+//
+void COutboxObserver::StartSessionsL(CMsvSession& aMsvSession)
+{
+    // Set outbox folder
+    iOutboxFolder = aMsvSession.GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+    iOutboxFolder->AddObserverL(*this);
+
+    // Remove the Sender, if it exists
+    delete iOutboxSender;
+    iOutboxSender = NULL;
+
+    QDEBUG_WRITE("COutboxObserver::StartSessionsL - Initializing outbox sender.." );
+    iOutboxSender = COutboxSender::NewL(aMsvSession);
+
+    QDEBUG_WRITE( "COutboxObserver::StartSessionsL - Informing outbox sender of network status.." );
+
+    // get current signal bar value
+    TInt signalBars = 0;
+    TRAPD( err, signalBars = iSignalStrengthHandler->BarValueL() );
+
+    // check error
+    if (err == KErrNone) 
+    {
+        QDEBUG_WRITE_FORMAT("COutboxObserver::StartSessionsL - Got signal bar value notifying..", signalBars );
+        iOutboxSender->CheckAndStartSendingL(signalBars);
+    }
+    else 
+    {
+        QDEBUG_WRITE_FORMAT( "COutboxObserver::StartSessionsL - Failed to get signal bar value (err = )", err );
+    }
+
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::EndSessions
+// ---------------------------------------------------------
+//
+void COutboxObserver::EndSessions()
+{
+    // Delete Outbox sender
+    delete iOutboxSender;
+    iOutboxSender = NULL;
+
+    if (iOutboxFolder) {
+        // Delete outbox folder
+        iOutboxFolder->RemoveObserver(*this);
+        delete iOutboxFolder;
+        iOutboxFolder = NULL;
+    }
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::HandleMsvSessionReadyL
+// ---------------------------------------------------------
+//    
+void COutboxObserver::HandleMsvSessionReadyL(CMsvSession& aMsvSession)
+{
+    StartSessionsL(aMsvSession);
+}
+// ---------------------------------------------------------
+// COutboxObserver::HandleMsvSessionClosedL
+// ---------------------------------------------------------
+//    
+void COutboxObserver::HandleMsvSessionClosedL()
+{
+    EndSessions();
+}
+
+// ---------------------------------------------------------
+// COutboxObserver::HandleEntryEventL
+// ---------------------------------------------------------
+//
+void COutboxObserver::HandleEntryEventL(TMsvEntryEvent /*aEvent*/, TAny* /*aArg1*/,
+    TAny* /*aArg2*/, TAny* /*aArg3*/)
+{
+
+}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/coutboxsender.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 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"
+ * 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:   Implements class
+ *
+ */
+
+// INCLUDE FILES
+
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <msvuids.h>                 // Entry Uids
+#include "coutboxsendoperation.h"
+#include "coutboxsender.h"
+#include "debugtraces.h"
+
+// CONSTANTS
+const TInt KListBar0(0);
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+//  COutboxSender::NewL
+// ----------------------------------------------------
+//
+COutboxSender* COutboxSender::NewL(CMsvSession& aMsvSession)
+{
+    COutboxSender* self = new (ELeave) COutboxSender(aMsvSession);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+// ----------------------------------------------------
+//  COutboxSender::COutboxSender
+// ----------------------------------------------------
+//
+COutboxSender::COutboxSender(CMsvSession& aMsvSession) :
+ iMsvSession(aMsvSession)
+{
+}
+
+// ----------------------------------------------------
+//  COutboxSender::~COutboxSender
+// ----------------------------------------------------
+//
+COutboxSender::~COutboxSender()
+{
+    // Stop and delete the sending operation
+    delete iRunningOperation;
+
+    // Check if notification is set
+    if (iFlags & EUserSettingsNotifierSet) 
+    {
+        // Remove the notification from list
+        if (iNotifyHandler) 
+        {
+            iNotifyHandler->StopListening();
+            delete iNotifyHandler;
+        }
+
+        delete iSession;
+    }
+
+}
+
+// ----------------------------------------------------
+//  COutboxSender::ConstructL
+// ----------------------------------------------------
+//
+void COutboxSender::ConstructL()
+{
+    iNetworkBars = KListBar0;
+    iSession = CRepository::NewL(KCRUidCoreApplicationUIs);
+    iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iSession, CCenRepNotifyHandler::EIntKey,
+        KCoreAppUIsNetworkConnectionAllowed);
+    iNotifyHandler->StartListeningL();
+
+    // Turn flag on for possible error handling cases
+    iFlags |= EUserSettingsNotifierSet;
+
+    CheckBootPhaseL();
+}
+
+// ----------------------------------------------------
+//  COutboxSender::StartSendingL
+// ----------------------------------------------------
+//
+void COutboxSender::StartSendingL()
+{
+    // Check if the sending is already in progress
+    if (!IsSending()) 
+    {
+        // Create instance of Single Operation Watcher
+        CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL(*this);
+
+        // Push to cleanup stack while creating sending operation
+        CleanupStack::PushL(singleOpWatcher);
+        CMsvOperation* op = COutboxSendOperation::NewL(iMsvSession, singleOpWatcher->iStatus);
+        CleanupStack::Pop(singleOpWatcher);
+
+        // Set operation
+        singleOpWatcher->SetOperation(op); // takes immediately ownership
+        iRunningOperation = singleOpWatcher;
+    }
+}
+
+// ----------------------------------------------------
+//  COutboxSender::CancelSending
+// ----------------------------------------------------
+//
+void COutboxSender::CancelSending()
+{
+    // Remove the running operation
+    delete iRunningOperation;
+    iRunningOperation = NULL;
+}
+
+// ----------------------------------------------------
+//  COutboxSender::IsSending
+// ----------------------------------------------------
+//
+TBool COutboxSender::IsSending() const
+{
+    return (iRunningOperation != NULL);
+}
+
+// ----------------------------------------------------
+//  COutboxSender::OpCompleted
+// ----------------------------------------------------
+//
+void COutboxSender::OpCompleted(CMsvSingleOpWatcher& /*aOpWatcher*/, TInt /*aCompletionCode*/)
+{
+    delete iRunningOperation;
+    iRunningOperation = NULL;
+}
+
+// ----------------------------------------------------
+//  COutboxSender::HandleNotifyInt
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyInt(const TUint32 aID, const TInt aNewValue)
+{
+    QDEBUG_WRITE(("COutboxSender::HandleNotifyInt"));
+    // Check if key is for offline-connecton
+    if (aID == KCoreAppUIsNetworkConnectionAllowed) 
+    {
+        QDEBUG_WRITE(("COutboxSender::HandleNotifyInt KCoreAppUIsNetworkConnectionAllowed"));
+        // Check if connection is established
+        if (aNewValue == ECoreAppUIsNetworkConnectionAllowed) 
+        {
+            QDEBUG_WRITE(("COutboxSender::HandleNotifyInt ECoreAppUIsNetworkConnectionAllowed 1"));
+            // Phone switched on again!
+            iFlags |= EOffllineSendingNeeded;
+
+            QDEBUG_WRITE_FORMAT(("COutboxSender::HandleNotifyInt iNetworkBars = %d"), iNetworkBars );
+            if (iNetworkBars > KListBar0) 
+            {
+                QDEBUG_WRITE_FORMAT(("COutboxSender::HandleNotifyInt sending now, iNetworkBars = %d"), iNetworkBars );
+                TRAP_IGNORE( StartSendingL() );
+            }
+        }
+        else 
+        {
+            QDEBUG_WRITE("COutboxSender::HandleNotifyInt ECoreAppUIsNetworkConnectionAllowed 0");
+            // Clear flag
+            iFlags &= ~EOffllineSendingNeeded;
+            // Stop sending
+            CancelSending();
+            // Set the coverage to 0 in case it didn't come from network in time
+            iNetworkBars = KListBar0;
+        }
+    }
+}
+
+// ----------------------------------------------------
+//  COutboxSender::HandleNotifyGeneric
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyGeneric(const TUint32 /*aID*/)
+{
+    //NO OPERATION
+}
+
+// ----------------------------------------------------
+//  COutboxSender::HandleNotifyError
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyError(const TUint32 /*aID*/, const TInt /*aError*/,
+    CCenRepNotifyHandler* /*aHandler*/)
+{
+    //NO OPERATION
+}
+
+// ----------------------------------------------------
+//  COutboxSender::CheckAndStartSendingL
+// ----------------------------------------------------
+//
+void COutboxSender::CheckAndStartSendingL(const TInt& aNetworkBars)
+{
+    QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL aNetworkBars = ", aNetworkBars );
+    iNetworkBars = aNetworkBars;
+    // Check if sending is needed and network is available
+    if (aNetworkBars > KListBar0) 
+    {
+        QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL sending now, iNetworkBars ", iNetworkBars );
+        // Start sending
+        StartSendingL();
+    }
+    else 
+    {
+        QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL not sending, iNetworkBars = ", iNetworkBars );
+    }
+}
+
+// ----------------------------------------------------
+//  COutboxSender::CheckBootPhaseL
+// ----------------------------------------------------
+//
+void COutboxSender::CheckBootPhaseL()
+{
+    TInt connection;
+
+    TInt err = iSession->Get(KCoreAppUIsNetworkConnectionAllowed, connection);
+
+    if (err == KErrNone) 
+    {
+        // Check if connection is established
+        if (connection) 
+        {
+            QDEBUG_WRITE("COutboxSender::CheckBootPhaseL KGSNetworkConnectionAllowed 1");
+            // Phone switched on again!            
+            iFlags |= EOffllineSendingNeeded;
+
+            if (iNetworkBars > KListBar0) 
+            {
+                QDEBUG_WRITE_FORMAT("COutboxSender::CheckBootPhaseL sending now, iNetworkBars = ", iNetworkBars );
+                StartSendingL();
+            }
+        }
+    }
+    else 
+    {
+        QDEBUG_WRITE("COutboxSender::CheckBootPhaseL Cannot access shared data");
+    }
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/coutboxsendoperation.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,409 @@
+/*
+* Copyright (c) 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"
+* 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:   Implements class
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "coutboxsendoperation.h"   // header
+
+#include <SendUiConsts.h>           // MTM Uids
+#include <msvids.h>                  // Entry Ids
+#include <gsmerror.h>                // SMS sending failure error codes
+#include <smutset.h>
+#include "debugtraces.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+COutboxSendOperation* COutboxSendOperation::NewL(
+    CMsvSession& aMsvSession,
+    TRequestStatus& aObserverRequestStatus )
+    {
+    // Create the instance of sending operation
+    COutboxSendOperation* self =
+        new (ELeave) COutboxSendOperation(
+            aMsvSession, aObserverRequestStatus );
+
+    // Push self into cleanup stack during construction
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    // Return the object
+    return self;
+    }
+
+// C++ default constructor can NOT contain any code that
+// might leave.
+//
+COutboxSendOperation::COutboxSendOperation(
+    CMsvSession& aMsvSession,
+    TRequestStatus& aObserverRequestStatus )
+    :
+    CMsvOperation( aMsvSession, CActive::EPriorityStandard, aObserverRequestStatus ),
+    iSelections( 4 ),
+    iServices(),
+    iSupportedMsgs( COutboxSendOperation::ESupportsSmsSending )
+    {
+    // Start scheduler
+    CActiveScheduler::Add(this);
+    }
+
+//destructor
+COutboxSendOperation::~COutboxSendOperation()
+    {
+    // Cancel sending
+    Cancel();
+
+    // Delete sending operation
+    delete iOperation;
+    iOperation = NULL;
+
+    // Delete entry
+    delete iEntry;
+    iEntry = NULL;
+
+    // Remove services from queue and destroy message selections
+    iServices.Reset();
+    iSelections.ResetAndDestroy();
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::ConstructL
+// ----------------------------------------------------
+//
+void COutboxSendOperation::ConstructL()
+    {
+    // Get rootindex entry
+    iEntry = iMsvSession.GetEntryL( KMsvRootIndexEntryId );
+    iEntry->SetSortTypeL(
+        TMsvSelectionOrdering( KMsvNoGrouping, EMsvSortByNone, ETrue ) );
+
+    // Set sending flags
+    iSupportedMsgs |= ESendSms;
+
+    // Start sending
+    StartSendingL();
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::RunL
+// ----------------------------------------------------
+//
+void COutboxSendOperation::RunL()
+    {
+    QDEBUG_WRITE("COutboxSendOperation::RunL");
+    User::LeaveIfError( iStatus.Int() );
+
+    // Check and start sending, if needed
+    TUid sendMtm;
+
+    // Check if messages needs to be sent
+    if( IsSendingNeeded( sendMtm ) )
+        {
+        StartSendingL();
+        }
+    // Nothing to send, complete operation
+    else
+        {
+        CompleteObserver( iStatus.Int() );
+        }
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::RunError
+// ----------------------------------------------------
+//
+TInt COutboxSendOperation::RunError( TInt aError )
+    {   
+    CompleteObserver( aError );
+    return aError;
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::DoCancel
+// ----------------------------------------------------
+//
+void COutboxSendOperation::DoCancel()
+    {
+    // Check if sending operation is running
+    if( iOperation )
+        {
+        // Cancel it
+        iOperation->Cancel();
+        }
+
+    // Complete operation with current status
+    CompleteObserver( iStatus.Int() );
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::ProgressL
+// ----------------------------------------------------
+//
+const TDesC8& COutboxSendOperation::ProgressL()
+    {
+    // Check if operation exists
+    if( iOperation )
+        {
+        // Return the operation
+        return iOperation->ProgressL();
+        }
+
+    // If no operation, return blank information
+    return KNullDesC8();
+    }
+
+// ---------------------------------------------------------
+// COutboxSendOperation::CompleteOperation
+// ---------------------------------------------------------
+//
+void COutboxSendOperation::CompleteObserver( TInt aStatus )
+    {
+    // Get the observer status
+    TRequestStatus* status = &iObserverRequestStatus;
+    User::RequestComplete( status, aStatus );
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::StartSendingL
+// ----------------------------------------------------
+//
+void COutboxSendOperation::StartSendingL()
+    {
+    // Remove any sending operation that currently may be running
+    delete iOperation;
+    iOperation = NULL;
+
+
+    // Check if there was errors with creating selection
+    if  ( CheckAndCreateSelectionL() )
+        {
+        // Create new operation and trap any errors
+        SendWaitingSMSMessages();
+        RemoveSelection();
+        }
+    else
+        {
+        CompleteSelf( KErrNone );
+        }
+    }
+
+    // if error, then complete this pass with the error code
+void COutboxSendOperation::SendWaitingSMSMessages()
+    {
+    TRAPD( err, SendWaitingSMSMessagesL() );
+    if  ( err != KErrNone )
+        {
+        ASSERT( !IsActive() );
+        CompleteSelf( err );
+        }
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::SendWaitingSMSMessagesL
+// ----------------------------------------------------
+//
+void COutboxSendOperation::SendWaitingSMSMessagesL()
+    {
+    // Get first selection from queue
+    CMsvEntrySelection& selection = ( *iSelections[0] );
+
+    // Get count of messages in queue
+    TInt count = selection.Count();
+
+    // Go through all messages
+    while( count-- )
+        {
+        // Select message
+        iEntry->SetEntryL( selection[count] );
+        TMsvEntry entry( iEntry->Entry() );
+
+        // Check if the message is tried to send when in offline
+        if( ( entry.SendingState() == KMsvSendStateSuspended ||
+              entry.SendingState() == KMsvSendStateFailed) &&
+            ( entry.iError == KErrGsmOfflineOpNotAllowed ||
+              entry.iError == KErrGsmOfflineSimOpNotAllowed) )
+            {
+            // Set message to wait sending
+            entry.SetSendingState( KMsvSendStateWaiting );
+            iEntry->ChangeL( entry );
+            }
+		else
+			{
+			selection.Delete( count );
+			}
+        }
+    selection.Compress();
+
+    // Set entry to outbox
+    iMtm = iEntry->Entry().iMtm;
+    iEntry->SetEntryL( KMsvGlobalOutBoxIndexEntryId );
+	if ( selection.Count() )
+		{
+		iOperation = iEntry->CopyL( selection, iServices[0], iStatus );
+        SetActive();
+		}
+    else
+        {
+        // Nothing to send, but we must complete the observer via our RunL callback
+        CompleteSelf( KErrNone );
+        }
+    }
+
+
+// ----------------------------------------------------
+// COutboxSendOperation::RemoveSelection
+// ----------------------------------------------------
+//
+void COutboxSendOperation::RemoveSelection()
+    {
+    // Clear the the current selection.
+    iServices.Delete(0);
+
+    // Delete selection object and index
+    delete iSelections[0];
+    iSelections.Delete(0);
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::CreateSelectionL
+// ----------------------------------------------------
+//
+void COutboxSendOperation::CreateSelectionL(
+    const TUid &aUidForSel,
+    const TMsvId& aServiceId,
+    CMsvEntrySelection*& aSelection )
+    {
+    // Set entry to outbox and get messages from outbox
+    iEntry->SetEntryL( KMsvGlobalOutBoxIndexEntryId );
+    aSelection = iEntry->ChildrenWithMtmL( *&aUidForSel );
+
+    // Check if there is anything to put into array
+    if( aSelection->Count() )
+        {
+        // Put selection to queue
+        CleanupStack::PushL( aSelection );
+        iSelections.AppendL( aSelection );
+        CleanupStack::Pop( aSelection );
+
+        // Put service to queue
+        iServices.AppendL( aServiceId );
+        }
+    else
+        {
+        // Remove selection
+        delete aSelection;
+        aSelection = NULL;
+        }
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::CheckAndCreateSelectionL
+// ----------------------------------------------------
+//
+TBool COutboxSendOperation::CheckAndCreateSelectionL()
+    {
+    // Get root index
+    iEntry->SetEntryL( KMsvRootIndexEntryId );
+
+    // MTM, for which the selection is collected
+    TUid sendMtm;
+
+    // Selection of messages for sending
+    CMsvEntrySelection* smsSelection = NULL;
+
+    // While MTM's available for sending
+    while( smsSelection == NULL && IsSendingNeeded( sendMtm ) )
+        {
+        // Find default SMS service
+        TMsvId serviceId =0;
+        TSmsUtilities::ServiceIdL(*iEntry, serviceId);
+        QDEBUG_WRITE_FORMAT("COutboxSendOperation::CheckAndCreateSelectionL ",serviceId );
+        // Check if the service ID is found
+        if( serviceId != KMsvNullIndexEntryId )
+            {
+            // Create selection of messages of specified MTM
+            CreateSelectionL( sendMtm, serviceId, smsSelection );
+            }
+        // Selection has been created, remove the flag
+        RemoveSendingFlag( *&sendMtm );
+        }
+
+    const TBool selectionAvailable = ( smsSelection != NULL );
+    return selectionAvailable;
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::RemoveSendingFlag
+// ----------------------------------------------------
+//
+void COutboxSendOperation::RemoveSendingFlag( const TUid& aMtm )
+    {
+    // Decide actions by mtm
+    switch( aMtm.iUid )
+        {
+        // SMS-messages
+        case KSenduiMtmSmsUidValue:
+            iSupportedMsgs &= ~ESendSms;
+            break;        
+        default:
+            break;
+        }
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::IsSendingNeeded
+// ----------------------------------------------------
+//
+TBool COutboxSendOperation::IsSendingNeeded(
+    TUid& aMtm ) const
+    {
+    // Set starting condition
+    TBool needSending = EFalse;
+
+    // Check if sms-sending is supported and messages need to be sent
+    if( iSupportedMsgs & ESupportsSmsSending &&
+        iSupportedMsgs & ESendSms )
+        {
+        aMtm = KSenduiMtmSmsUid;
+        needSending = ETrue;
+        }
+    // Otherwise nothing needs to be done
+    else
+        {
+        aMtm.iUid = 0;
+        needSending = EFalse;
+        }
+
+    // Return the result
+    return needSending;
+    }
+
+// ----------------------------------------------------
+// COutboxSendOperation::CompleteSelf
+// ----------------------------------------------------
+//
+void COutboxSendOperation::CompleteSelf( TInt aValue )
+    {
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, aValue );
+    SetActive();
+    }
+    
+// End of file
--- a/messagingapp/msgsettings/msginit/src/simscnumberdetector.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/msginit/src/simscnumberdetector.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -28,6 +28,7 @@
 #include <startupdomainpskeys.h>
 #include <rcustomerserviceprofilecache.h>
 
+#include "coutboxobserver.h"
 #include "simscnumberdetector.h"
 #include "startupmonitor.h"
 
@@ -67,6 +68,8 @@
 
     // initialise
     iMsvSession = CMsvSession::OpenSyncL(*this);
+   
+    iOutBoxObserver = COutboxObserver::NewL();
 
     // Create the SMS Service	
     TMsvId serviceId = CreateSmsServiceL();
@@ -80,6 +83,9 @@
 
     // Start the System state monitor
     iStartupMonitor = CStartUpMonitor::NewL(this);
+    
+    // Start the Auto-send AO, to handle offline SMS messages
+    iOutBoxObserver->HandleMsvSessionReadyL(*iMsvSession);
 
     QDEBUG_WRITE("CMsgSimOperation::ConstructL exit")
     }
@@ -297,6 +303,10 @@
     delete iSimOperation;
     delete iSmsClientMtm;
     delete iClientRegistry;
+    
+    delete iOutBoxObserver;
+    iOutBoxObserver = NULL;
+    
     delete iMsvSession;
     delete iStartupMonitor;
     iStartupMonitor = NULL;
@@ -487,7 +497,11 @@
 
         delete iClientRegistry;
         iClientRegistry = NULL;
-
+        
+        iOutBoxObserver->HandleMsvSessionClosedL();
+        delete iOutBoxObserver;
+        iOutBoxObserver = NULL;
+        
         delete iMsvSession;
         iMsvSession = NULL;
 
--- a/messagingapp/msgsettings/msgsettings.pro	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/msgsettings.pro	Tue Jul 13 22:09:22 2010 +0530
@@ -21,3 +21,4 @@
 
 SUBDIRS += settingsview/settingsview.pro
 SUBDIRS += msginit/msginit.pro
+SUBDIRS += settingsserviceapp/settingsserviceapp.pro
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/inc/settingsserviceinterface.h	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,61 @@
+/*
+ * 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: Interface for launching settings view as 
+ * Qthighway service
+ *
+ */
+
+#ifndef __SETTINGS_VIEW_INTERFACE_H__
+#define __SETTINGS_VIEW_INTERFACE_H__
+
+#include <QObject>
+#include <xqserviceprovider.h>
+
+class HbMainWindow;
+class HbAction;
+
+class SettingsViewInterface : public XQServiceProvider
+    {
+    Q_OBJECT
+    
+public:
+    /**
+     * Constructor
+     */
+    SettingsViewInterface(HbMainWindow *mainWindow,QObject* parent=0);
+    
+    /**
+     * Destructor
+     */
+    ~SettingsViewInterface();
+    
+public slots:
+    /**
+     * Function which launches the settings view
+     * @param view, holds MsgSettingsView::SettingsView enum
+     */
+    void launchSettings(int view);
+
+private:    
+    /**
+     * Main Window instance
+     * Not owned
+     */
+    HbMainWindow *mMainWindow;
+    
+    HbAction* mBackAction;
+
+    };
+
+#endif /* __SETTINGS_VIEW_INTERFACE_H__ */
Binary file messagingapp/msgsettings/settingsserviceapp/resources/messaging_en_GB has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/rom/settingsserviceapp.iby	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,25 @@
+/*
+ * 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:  
+ *
+ */
+
+#ifndef __SETTINGS_SERVICEAPP_IBY__
+#define __SETTINGS_SERVICEAPP_IBY__
+
+file=ABI_DIR\UREL\settingsserviceapp.exe          SHARED_LIB_DIR\settingsserviceapp.exe
+data=DATAZ_\resource\apps\settingsserviceapp.rsc  resource\apps\settingsserviceapp.rsc
+data=DATAZ_\private\10003a3f\import\apps\settingsserviceapp_reg.rsc   private\10003a3f\import\apps\settingsserviceapp_reg.rsc
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/service_conf.xml	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>  
+<service>
+  <name>messagesettings</name>
+  <filepath>No path</filepath>
+  <description>Messaging services</description>
+  <interface>
+      <name>com.nokia.symbian.IMessageSettings</name>
+     <version>1.0</version>
+     <description>Message Settings Interface</description>
+  </interface>  
+</service>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/settingsserviceapp.pro	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,50 @@
+# 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:
+
+TEMPLATE = app
+TARGET = settingsserviceapp
+
+CONFIG += hb service
+
+DEPENDPATH += . inc src
+SERVICE.FILE = service_conf.xml
+SERVICE.OPTIONS = embeddable
+SERVICE.OPTIONS += hidden
+
+INCLUDEPATH += inc
+INCLUDEPATH += ../../../inc
+INCLUDEPATH += ../../msgui/inc
+INCLUDEPATH += ../settingsview/inc
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+# Input
+HEADERS += inc/settingsserviceinterface.h 
+			
+SOURCES += src/main.cpp \
+           src/settingsserviceinterface.cpp 
+			
+# Capability
+TARGET.CAPABILITY = ALL -TCB
+TARGET.UID3 = 0x2001FE6A 
+
+RESOURCES += settingsserviceapp.qrc
+
+TRANSLATIONS = messaging.ts
+
+
+LIBS += -lxqservice \
+        -lxqserviceutil \
+        -lsettingsview
+	
+
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+                             ".\rom\settingsserviceapp.iby CORE_APP_LAYER_IBY_EXPORT_PATH(settingsserviceapp.iby)"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/settingsserviceapp.qrc	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/translations">
+        <file alias="messaging_en_GB">resources/messaging_en_GB</file>
+    </qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/src/main.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,114 @@
+/*
+* 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: Messaging service application startup main().
+*
+*/
+
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+#include <QTranslator>
+#include <QLocale>
+#include <QFile>
+#include <QPointer>
+#include <QDateTime>
+
+#include "settingsserviceinterface.h"
+#include "debugtraces.h"
+
+//Localised constants
+#define LOC_TITLE hbTrId("txt_messaging_title_messaging")
+
+const QString debugFileName("c:/settingsservice_app.txt");
+
+#ifdef _DEBUG_TRACES_
+void debugInit(QtMsgType type, const char *msg)
+{
+
+    QFile ofile(debugFileName);
+    if (!ofile.open(QIODevice::Append | QIODevice::Text))
+    {
+        qFatal("error opening results file");
+        return;
+    }
+    QDateTime dt = QDateTime::currentDateTime();
+
+    QTextStream out(&ofile);
+    switch (type)
+    {
+        case QtDebugMsg:
+            out << " DEBUG:";
+            out << msg;
+            break;
+        case QtWarningMsg:
+            out << " WARN:";
+            out << msg;
+            break;
+        case QtCriticalMsg:
+            out << "\n ";
+            out << dt.toString("dd/MM/yyyy hh:mm:ss.zzz:ap");
+            out << " CRITICAL:";
+            out << msg;
+            break;
+        case QtFatalMsg:
+            out << " FATAL:";
+            out << msg;
+            abort();
+            break;
+        default:
+            out << " No Log Selection Type:";
+            out << msg;
+            break;
+
+    }
+}
+#endif
+
+int main(int argc, char **argv)
+{
+    HbApplication app( argc, argv );
+    
+    //TODO: Uncomment the lines when actual translation files are available in sdk and remove loading locally.
+    QString locale = QLocale::system().name();
+    QString path = "z:/resource/qt/translations/";
+    QTranslator translator;
+    QTranslator translator_comm;
+    translator.load(path + QString("messaging_") + locale);
+    translator_comm.load(path + QString("common_") + locale);
+    app.installTranslator(&translator);
+    app.installTranslator(&translator_comm);
+
+    app.setApplicationName(LOC_TITLE);
+
+#ifdef _DEBUG_TRACES_
+    //Debug Logs
+    QFile ofile;
+    if (ofile.exists(debugFileName))
+    {
+        ofile.remove(debugFileName);
+    }
+    qInstallMsgHandler(debugInit);
+#endif
+    
+   
+    HbMainWindow *window = new HbMainWindow();
+    
+    SettingsViewInterface *settingsViewInterface = new SettingsViewInterface(window);
+    window->show();
+    
+    int rv = app.exec();
+    delete window;
+    delete settingsViewInterface;
+    return rv;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/settingsserviceapp/src/settingsserviceinterface.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,69 @@
+/*
+ * 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: Interface for launching settings view as 
+ * Qthighway service
+ *
+ */
+
+#include "settingsserviceinterface.h"
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbapplication.h>
+
+#include "msgsettingsview.h"
+#include "debugtraces.h"
+
+//----------------------------------------------------------------------------
+// SettingsViewInterface::SettingsViewInterface
+// @see header
+//----------------------------------------------------------------------------
+SettingsViewInterface::SettingsViewInterface(HbMainWindow *mainWindow,QObject* parent)
+:XQServiceProvider(QLatin1String("messagesettings.com.nokia.symbian.IMessageSettings"),parent),
+mMainWindow(mainWindow)
+    {
+    publishAll();    
+
+    //creating back action.
+    mBackAction = new HbAction(Hb::BackNaviAction, this);
+    connect(mBackAction, SIGNAL(triggered()), qApp, SLOT(quit()));
+
+    }
+
+//----------------------------------------------------------------------------
+// SettingsViewInterface::~SettingsViewInterface
+// @see header
+//----------------------------------------------------------------------------
+SettingsViewInterface::~SettingsViewInterface()
+    {
+    }
+
+//----------------------------------------------------------------------------
+// SettingsViewInterface::launchSettings
+// @see header
+//----------------------------------------------------------------------------
+void SettingsViewInterface::launchSettings(int view)
+    {   
+    QDEBUG_WRITE("Entered launchSettings")
+        MsgSettingsView* settingsView = new MsgSettingsView((MsgSettingsView::SettingsView)view);
+        settingsView->setNavigationAction(mBackAction);
+        mMainWindow->addView(settingsView);
+        
+        if(view != MsgSettingsView::SMSView)
+        {
+            mMainWindow->setCurrentView(settingsView);
+        }        
+    }
+
+//EOF
+
--- a/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -157,8 +157,7 @@
     if (settingsView == MsgSettingsView::MMSView)
     {
         //set MMS Settings as expanded
-        //TODO: dataform issue on expanding one group item
-//        expandGroup(mmsGroup,true);
+        expandGroup(mmsGroup,true);
     }
     
 }
--- a/messagingapp/msgsettings/settingsview/src/msgsettingsview.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/settingsview/src/msgsettingsview.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -101,11 +101,18 @@
     //remove the view 
     mMainWindow->removeView(mSMSCenterView);
     
-    //refresh the form
-    mSettingsForm->refreshViewForm();
-
-    //add the current view on top
-    mMainWindow->setCurrentView(this);
+    // This check is needed in case when smsc center view is 
+    // launched directly 
+    if(mMainWindow->views().count() > 0)
+    {
+        QCRITICAL_WRITE("MsgViewManager::onSmsCenterEditViewClosed count>0");
+        
+        //refresh the form
+        mSettingsForm->refreshViewForm();
+        
+        //add the current view on top
+        mMainWindow->setCurrentView(this);
+    }
 }
 
 //eof
--- a/messagingapp/msgsettings/settingsview/src/smssettingsprivate.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgsettings/settingsview/src/smssettingsprivate.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -170,9 +170,7 @@
     {
         flag = true;
     }
-
-    //remove the service center
-    //smsSettings->RemoveServiceCenter(index);
+       
     //add a new service center
     smsSettings->AddServiceCenterL(name->Des(), address->Des());
     
@@ -182,15 +180,10 @@
                smsSettings->ServiceCenterCount()- 1);
     }
     
-    smsAccount->SaveSettingsL(*smsSettings);
-
-    smsAccount->LoadSettingsL(*smsSettings);
-    if (flag == true)
-    {
-        smsSettings->RemoveServiceCenter(index);
-    }
+    //remove the service center
+    smsSettings->RemoveServiceCenter(index);
     
-    smsAccount->SaveSettingsL(*smsSettings);
+    smsAccount->SaveSettingsL(*smsSettings);  
     
     CleanupStack::PopAndDestroy(2);
 }
--- a/messagingapp/msgui/appengine/src/conversationsmodel.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/appengine/src/conversationsmodel.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -555,7 +555,14 @@
                 {
                     QFile file(objectList[index]->path());
                     file.open(QIODevice::ReadOnly);
-                    textContent = file.readAll();
+                    QByteArray textArray;
+                    textArray = file.readAll();
+                    char *data = new char[textArray.size()+1];
+                    strcpy(data,textArray.data());
+                    //This is needed since MMS text content 
+                    //is stored in UTF8 format
+                    textContent = textContent.fromUtf8(data,strlen(data));
+                    delete []data;
                     item.setData(textContent, BodyText);
                     isBodyTextSet = true;
                     file.close();
--- a/messagingapp/msgui/conversationview/inc/msgconversationview.h	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/conversationview/inc/msgconversationview.h	Tue Jul 13 22:09:22 2010 +0530
@@ -330,6 +330,13 @@
      */
     void saveVCard();
     
+    /**
+     * Tells is mms is shared among conversations.
+     * @param messageId, message id.
+     * @return true is shared among conversations.
+     */
+    bool isSharedMessage(qint32 messageId);
+    
 signals:
     /**
      * Signal emitted to inform close the conversation view.
--- a/messagingapp/msgui/conversationview/src/msgconversationview.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/conversationview/src/msgconversationview.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -58,6 +58,8 @@
 #include "mmsconformancecheck.h"
 #include "msgsettingsview.h"
 #include "msgaudiofetcherview.h"
+#include "unieditorpluginloader.h"
+#include "unieditorplugininterface.h"
 
 //Item specific menu.
 
@@ -69,6 +71,7 @@
 #define LOC_COMMON_SAVE  hbTrId("txt_common_menu_save")
 
 #define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message")
+#define LOC_DELETE_SHARED_MESSAGE hbTrId("txt_messaging_dialog_same_message_exists_in_multip")
 #define LOC_SAVE_TO_CONTACTS hbTrId("txt_messaging_menu_save_to_contacts")
 
 //main menu
@@ -362,7 +365,7 @@
     if( ((direction == ConvergedMessage::Outgoing) &&
         (messageSubType != ConvergedMessage::VCard))&&
         ((sendingState == ConvergedMessage::Resend ) ||
-        (sendingState == ConvergedMessage::Suspended )||
+        
         (sendingState == ConvergedMessage::Failed )))
     {
         HbAction *contextItem = contextMenu->addAction(LOC_COMMON_SEND);
@@ -400,6 +403,7 @@
     if( ((sendingState == ConvergedMessage::SentState) ||
         (sendingState == ConvergedMessage::Resend) ||
         (sendingState == ConvergedMessage::Failed) ||
+        (sendingState == ConvergedMessage::Suspended )||
         (direction == ConvergedMessage::Incoming) ) &&
         canForwardMessage)
     {
@@ -731,8 +735,29 @@
 // Deletes the message
 //---------------------------------------------------------------
 void MsgConversationView::deleteItem()
+{
+    QString str = LOC_DELETE_MESSAGE;
+
+    QModelIndex index = mConversationList->currentIndex();
+    if(index.isValid())
     {
-    HbMessageBox::question(LOC_DELETE_MESSAGE,this,SLOT(onDialogdeleteMsg(HbAction*)),
+        int messageType = index.data(MessageType).toInt();        
+        int direction = index.data(Direction).toInt();
+
+        if ( direction == ConvergedMessage::Outgoing &&
+            messageType == ConvergedMessage::Mms )
+        {
+            qint32 messageId = index.data(ConvergedMsgId).toLongLong();
+
+            if(isSharedMessage(messageId))
+            {
+                str = LOC_DELETE_SHARED_MESSAGE;  
+            }
+        }
+    }
+
+
+    HbMessageBox::question(str,this,SLOT(onDialogdeleteMsg(HbAction*)),
                            HbMessageBox::Delete | HbMessageBox::Cancel);
 }
 
@@ -954,6 +979,15 @@
     int location = index.data(MessageLocation).toInt();
     int sendingState = index.data(SendingState).toInt();
     
+    // For suspended message both short tap and long tap needs to show the same
+    // context menu.....
+    if(direction == ConvergedMessage::Outgoing 
+        	&&sendingState == ConvergedMessage::Suspended )
+    {
+        handleShortTap();
+        return;
+    }
+    
     //If message is in any other state other than 'Sent'
     //do not open the message
     if(direction == ConvergedMessage::Outgoing 
@@ -1446,4 +1480,39 @@
         }
     } 
 }
+
+//---------------------------------------------------------------
+// MsgConversationView::isSharedMessage
+// @see header file
+//---------------------------------------------------------------
+bool MsgConversationView::isSharedMessage(qint32 messageId)
+{
+    bool shared = false;
+
+    UniEditorPluginLoader* pluginLoader = new UniEditorPluginLoader();
+    
+    UniEditorPluginInterface* pluginInterface =
+        pluginLoader->getUniEditorPlugin(ConvergedMessage::Mms);
+
+    ConvergedMessage* msg = pluginInterface->convertFrom(messageId);    
+    if(msg)
+    {
+        int count = 0;
+        count += msg->toAddressList().count();
+        count += msg->ccAddressList().count();
+        count += msg->bccAddressList().count();
+
+        if(count > 1)
+        {
+            shared = true;
+        }
+        
+        delete msg;
+    }
+
+    delete pluginLoader;    
+
+    return shared;
+}
+
 // EOF
--- a/messagingapp/msgui/msgapp/inc/msgviewmanager.h	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/msgapp/inc/msgviewmanager.h	Tue Jul 13 22:09:22 2010 +0530
@@ -261,6 +261,7 @@
     int mMessageId;
     
     QVariantList mEditorData;
+    QVariantList mViewerData;
 };
 
 #endif /* MSGVIEWMANAGER_H_ */
--- a/messagingapp/msgui/msgapp/src/main.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/msgapp/src/main.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -110,7 +110,7 @@
 
     app.setApplicationName(LOC_TITLE);
     
-    #ifdef _DEBUG_TRACES_
+#ifdef _DEBUG_TRACES_
     //Debug Logs
     QFile ofile;
     if (ofile.exists(debugFileName))
--- a/messagingapp/msgui/msgapp/src/msgviewmanager.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/msgapp/src/msgviewmanager.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -179,10 +179,31 @@
             completeServiceRequest();
         }
         else {
-            //switch to clv.
+            //switch to previous view.
             QVariantList param;
-            param << MsgBaseView::CLV;
+            param << mPreviousView;
             param << MsgBaseView::UNIEDITOR;
+            
+            if(mPreviousView == MsgBaseView::CV) {
+                param << mConversationId;
+                }
+            else if(mPreviousView == MsgBaseView::UNIVIEWER){
+                qint32 contactId = mViewerData.at(0).toLongLong();
+                qint32 messageId = mViewerData.at(1).toInt();
+                int msgCount = mViewerData.at(2).toInt();
+                int canForwardMessage = mViewerData.at(3).toInt();
+                
+                param << contactId;
+                param << messageId;
+                param << msgCount;
+                param << canForwardMessage;
+            }
+            else if(mPreviousView == MsgBaseView::UNIEDITOR){
+                //TODO: Remove error handling once Audio fetcher 
+                //becomes dialog
+                param[0] = MsgBaseView::CLV;
+                }
+            
             switchView(param);
         }
 
@@ -256,16 +277,15 @@
     }
     case MsgBaseView::CLV:
     {
-            switchToClv(data);
-            break;
-        }
+         switchToClv(data);
+         break;
+    }
 
-        case MsgBaseView::CV:
-        {
-
-            switchToCv(data);
-            break;
-        }
+    case MsgBaseView::CV:
+    {
+         switchToCv(data);
+         break;
+    }
 
     case MsgBaseView::DLV:
     {
@@ -545,6 +565,8 @@
 
 void MsgViewManager::switchToCv(const QVariantList& data)
 {
+    QCRITICAL_WRITE("MsgViewManager::switchToCv start.");
+    
     //switch to CV.
     mCurrentView = MsgBaseView::CV;
     mPreviousView = data.at(1).toInt();
@@ -634,10 +656,19 @@
 
     mConversationView->openConversation(conversationId);
     mMainWindow->setCurrentView(mConversationView);
+    
+    QCRITICAL_WRITE("MsgViewManager::switchToCv end.");
 }
 
 void MsgViewManager::switchToDlv(const QVariantList& data)
 {
+    //delete UniEditor
+    if (mUniEditor)
+    {
+        appendViewToBeDeleted(mUniEditor);
+        mUniEditor = NULL;
+    }
+    
     //switch to DLV.
     mCurrentView = MsgBaseView::DLV;
     mPreviousView = data.at(1).toInt();
@@ -655,6 +686,8 @@
 
 void MsgViewManager::switchToUniEditor(const QVariantList& data)
 {
+    QCRITICAL_WRITE("MsgViewManager::switchToUniEditor start.");
+    
     /**
      * Editor is tried to open again before exiting the previously
      * opened editor. Multi taping in DLV or Forward.
@@ -723,6 +756,8 @@
     }
 
     mMainWindow->setCurrentView(mUniEditor);
+    
+    QCRITICAL_WRITE("MsgViewManager::switchToUniEditor end.");
 }
 
 void MsgViewManager::switchToUniViewer(const QVariantList& data)
@@ -735,6 +770,9 @@
         return;
     }
 
+    //Clear the old viewer data
+    mViewerData.clear();
+    
     mCurrentView = MsgBaseView::UNIVIEWER;
     mPreviousView = data.at(1).toInt();
 
@@ -745,6 +783,12 @@
         int msgCount = data.at(4).toInt();
         int canForwardMessage = data.at(5).toInt();
 
+        //Save the viewer data to be used when u come back from Editor
+        mViewerData << contactId;
+        mViewerData << messageId;
+        mViewerData << msgCount;
+        mViewerData << canForwardMessage;
+        
         if (!mUniViewer) {
             mUniViewer = new UnifiedViewer(messageId, canForwardMessage);
             mUniViewer->setNavigationAction(mBackAction);
@@ -764,29 +808,45 @@
 }
 void MsgViewManager::switchToMsgSettings(const QVariantList& data)
 {
-    mCurrentView = MsgBaseView::MSGSETTINGS;
-    mPreviousView = data.at(1).toInt();
-
-    if (!mSettingsView) {
-
-        MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
-        if (mPreviousView == MsgBaseView::UNIEDITOR || mPreviousView
-                        == MsgBaseView::CV)
-                {
-                    view = (MsgSettingsView::SettingsView)data.at(2).toInt();
-                }
+    int previousView = data.at(1).toInt();
+    
+    MsgSettingsView::SettingsView view = MsgSettingsView::DefaultView;
+    if (previousView == MsgBaseView::UNIEDITOR || previousView
+            == MsgBaseView::CV)
+        {
+        view = (MsgSettingsView::SettingsView)data.at(2).toInt();
+        }
 
-        mSettingsView = new MsgSettingsView(view);
-        mSettingsView->setNavigationAction(mBackAction);
-        mMainWindow->addView(mSettingsView);
-        
-        if(view != MsgSettingsView::SMSView)
+    //launch settings service
+    QList<QVariant> args;
+    QString serviceName("messagesettings");
+    QString interfaceName("com.nokia.symbian.IMessageSettings");
+    QString operation("launchSettings(int)");
+    XQAiwRequest* request;
+    XQApplicationManager appManager;
+    request = appManager.create(serviceName, interfaceName, operation, true); //embedded
+    if ( request == NULL )
         {
-            mMainWindow->setCurrentView(mSettingsView);
+        return;       
+        }
+ 
+    args <<  view;
+
+    request->setArguments(args);
+
+    if(previousView==MsgBaseView::CV && mConversationView){
+        mConversationView->setPSCVId(false);
         }
-    }
-    if(mPreviousView==MsgBaseView::CV && mConversationView){
-        mConversationView->setPSCVId(false);
+
+    if(!request->send())
+        {
+        QDEBUG_WRITE("launchSettings failed")
+        }
+    delete request;
+
+    
+    if(previousView==MsgBaseView::CV && mConversationView){
+        mConversationView->setPSCVId(true);
         }
 }
 
@@ -970,9 +1030,11 @@
 // ----------------------------------------------------------------------------
 void MsgViewManager::populateUniEditorAfterViewReady(const QVariantList& editorData)
 	{
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorAfterViewReady start.");
 	 //Save the editor data and use it in ViewReady handler
 	 mEditorData = editorData;	 
 	 connect(mMainWindow, SIGNAL(viewReady()), this, SLOT(populateUniEditorView()));
+	QCRITICAL_WRITE("MsgViewManager::populateUniEditorAfterViewReady end.");
 	}
 
 // ----------------------------------------------------------------------------
@@ -981,6 +1043,7 @@
 // ----------------------------------------------------------------------------
 void MsgViewManager::populateUniEditorView()
     {
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorView start.");
     if (mUniEditor)
         {
         mUniEditor->openDraftsMessage(mEditorData);
@@ -989,6 +1052,7 @@
     
     disconnect(mMainWindow, SIGNAL(viewReady()), this,
             SLOT(populateUniEditorView()));
+    QCRITICAL_WRITE("MsgViewManager::populateUniEditorView end.");
 }
 
 // ----------------------------------------------------------------------------
--- a/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherwidget.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudiofetcherwidget.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -33,7 +33,7 @@
 
 
 MsgAudioFetcherWidget::MsgAudioFetcherWidget()
-    : HbWidget(this),
+    : HbWidget(NULL),
       mLabel(0),
       mListView(0),
       mLayout(0),
--- a/messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -199,7 +199,16 @@
         if (mimeType.contains(TEXT_MIMETYPE)) {
             QFile file(info->path());
             if (file.open(QIODevice::ReadOnly)) {
-                QString textContent(file.readAll());
+                QString textContent;
+                QByteArray textArray;
+                textArray = file.readAll();
+                char *data = new char[textArray.size()+1];
+                strcpy(data,textArray.data());
+                //This is needed since MMS text content 
+                //is stored in UTF8 format
+                textContent = textContent.fromUtf8(data,strlen(data));
+                file.close();
+                delete []data;
                 setText(textContent);
             }
         }
--- a/messagingapp/msgui/unifiedviewer/src/univiewertextitem.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgui/unifiedviewer/src/univiewertextitem.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -42,7 +42,7 @@
 
 const QString EMAIL_PATTERN("[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?");
 
-const QString URL_PATTERN("(((ht|f|rt)(tp|sp)(s?)\\:\\/\\/)|(www|wap)(?:\\.))(([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&amp;%\\$#_=~]*)(\\.)([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\\,\'\\/\\\\+&amp;%\\$#_=~]*))+[a-zA-Z0-9/]");
+const QString URL_PATTERN("(((ht|f|rt)(tp|sp)(s?)\\:\\/\\/)|(www|wap)(?:\\.))(([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\'\\/\\\\+&amp;%\\$#_=~]*)(\\.)([-\\w]*[0-9a-zA-Z])+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\?\'\\/\\\\+&amp;%\\$#_=~]*))+[a-zA-Z0-9/]");
 
 //rules
 const QString URL_RULE("0_URL_RULE");
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/inc/unieditormmsplugin_p.h	Tue Jul 13 22:09:22 2010 +0530
@@ -225,6 +225,11 @@
      * Populates converged message for replyAll case
      */
     void convertFromReplyAllHandlerL(ConvergedMessage* aMessage);
+    
+    /**
+     * Populates converged message for default case
+     */
+    void convertFromDefaultHandlerL(ConvergedMessage* aMessage);
 
 private:
     // Data
--- a/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp	Fri Jul 09 14:46:10 2010 +0530
+++ b/messagingapp/msgutils/unieditorutils/unieditorplugins/unieditormmsplugin/src/unieditormmsplugin_p.cpp	Tue Jul 13 22:09:22 2010 +0530
@@ -149,6 +149,10 @@
     {
         convertFromReplyAllHandlerL(msg);
     }
+    else if(aOperation == UniEditorPluginInterface::Default)
+    {
+        convertFromDefaultHandlerL(msg);
+    }
     CleanupStack::Pop(msg);
     QDEBUG_WRITE("Exit convertFromL");
     return msg;
@@ -285,11 +289,18 @@
             if( slideContentList.at(i)->mimetype().contains("text") )
             {
                 QString textContent;
+                QByteArray textArray;
                 QFile file(slideContentList.at(i)->path());
                 if (file.open(QIODevice::ReadOnly)) {
-                    textContent = file.readAll();
+                    textArray = file.readAll();
+                    char *data = new char[textArray.size()+1];
+                    strcpy(data,textArray.data());
+                    //This is needed since MMS text content 
+                    //is stored in UTF8 format
+                    textContent = textContent.fromUtf8(data,strlen(data));
                     aMessage.setBodyText(textContent);
                     file.close();
+                    delete []data;
                 }
                 else {
                     return;
@@ -1109,4 +1120,60 @@
     aMessage->setSubject(subject);
     }
 
+// -----------------------------------------------------------------------------
+// convertFromDefaultHandlerL
+// @see Header
+// -----------------------------------------------------------------------------
+void CUniEditorMmsPluginPrivate::convertFromDefaultHandlerL(ConvergedMessage* aMessage)
+{
+    QDEBUG_WRITE("Enter convertFromDefaultHandlerL");
+
+    TMsvEntry entry = MmsMtmL()->Entry().Entry();
+    
+    if( entry.Parent() == KMsvGlobalInBoxIndexEntryIdValue )
+        {
+        // get sender address    
+        HBufC* fromAddress = (MmsMtmL()->Sender()).AllocLC();
+        HBufC* pureAddr = TMmsGenUtils::PureAddress(*fromAddress).AllocLC();
+        HBufC* aliasAddr = TMmsGenUtils::Alias(*fromAddress).AllocLC();
+
+        if(pureAddr->Length() > 0)
+            {
+            ConvergedMessageAddress messageAddress(
+                    XQConversions::s60DescToQString(*pureAddr),
+                    XQConversions::s60DescToQString(*aliasAddr));
+            aMessage->addFromRecipient(messageAddress);
+            }
+        CleanupStack::PopAndDestroy(3, fromAddress );
+        }
+    else
+        {
+        populateRecipientsL(*aMessage);
+        }
+
+    //populate convergedmessage with the subject prepended with FW:
+    QString subject = XQConversions::s60DescToQString(MmsMtmL()->SubjectL());
+    aMessage->setSubject(subject);
+
+    // Priority
+    TMsvPriority priority = entry.Priority();
+    if( EMsvHighPriority == priority )
+    {
+        aMessage->setPriority(ConvergedMessage::High);
+    }
+    else if( EMsvLowPriority == priority )
+    {
+        aMessage->setPriority(ConvergedMessage::Low);
+    }
+    else if( EMsvMediumPriority == priority )
+    {
+        aMessage->setPriority(ConvergedMessage::Normal);
+    }
+
+    //Populate body and attachments
+    //The region info inside slides is not maintained
+    populateMessageBodyL(*aMessage);
+    
+    QDEBUG_WRITE("Exit convertFromDefaultHandlerL");
+}
 //  End of File