mobilemessaging/mmsui/settingssrc/MmsSettingsDialog.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/settingssrc/MmsSettingsDialog.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,1418 @@
+/*
+* Copyright (c) 2002-2004 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:  
+*       Provides MMS Settings Dialog methods.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <barsread.h>
+#include <mtclreg.h>
+
+#include <eiktxlbx.h>
+#include <aknnavi.h>
+#include <akntitle.h>
+#include <aknsettingpage.h>
+#include <aknradiobuttonsettingpage.h>
+#include <aknnotewrappers.h> 
+
+#include <mmssettings.h> // MMS Engine settings
+
+#include <MmsSettings.rsg>
+#include <mmssettingsdefs.h>    // image size definitions
+
+#include <ApSettingsHandlerUI.h>
+#include <ApSettingsHandlerCommons.h>
+#include <ApEngineConsts.h>
+#include <ApUtils.h>
+#include <ApDataHandler.h>
+#include <ApAccessPointItem.h>
+#include <ApSelect.h> //CApSelect
+
+#include <muiusettingsarray.h>
+#include <StringLoader.h>
+
+#include <centralrepository.h>    // link against centralrepository.lib
+#include <messaginginternalcrkeys.h> // for Central Repository keys
+
+#include <mmsclient.h>
+#include <mmsconst.h>
+
+// Features
+#include <featmgr.h>    
+#include <bldvariant.hrh>
+#include <messagingvariant.hrh>
+#include <csxhelp/mce.hlp.hrh>
+#include <hlplch.h>   // For HlpLauncher
+
+#include "unieditorfeatures.h"  // EUniFeaturePriority
+
+#include "MmsMtmConst.h" 
+
+#include "MmsApSelect.h"
+#include "MmsSettingsDialog.h"
+#include "MmsSettingsPanic.h"
+#include "MmsSettings.hrh"
+
+// CONSTANTS
+
+const TUid KUidMce = {0x100058C5};
+
+// Possible values for mms validity period in seconds
+const TInt32 KMmsValidityPeriod1h = 3600;
+const TInt32 KMmsValidityPeriod6h = 21600;
+const TInt32 KMmsValidityPeriod24h = 86400;
+const TInt32 KMmsValidityPeriod3Days = 259200;
+const TInt32 KMmsValidityPeriodWeek = 604800;
+const TInt32 KMmsValidityPeriodMax = 0;
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog
+// C++ constructor
+// ---------------------------------------------------------
+//
+CMmsSettingsDialog::CMmsSettingsDialog(
+    //CMmsClientMtm *aClientMtm,
+    CMmsSettings* aMmsSettings,
+    TMmsExitCode& aExitCode ) :
+    //iMmsClient( aClientMtm ),
+    iMmsSettings( aMmsSettings ),
+    iExitCode( aExitCode ),
+    iSettingsFlags( 0 )
+    {
+    iExitCode = EMmsExternalInterrupt; // reference -> cannot be initialized above
+    }
+
+
+// ---------------------------------------------------------
+// ~CMmsSettingsDialog()
+// Destructor
+// ---------------------------------------------------------
+//
+CMmsSettingsDialog::~CMmsSettingsDialog()
+    {
+    delete iPreviousTitleText;
+    delete iCommsDb;
+
+    // remove default navi pane
+    if (    iSettingsFlags & EDefaultNaviPane )
+        {
+        if ( iNaviPane )
+            {                    
+            // if "EDefaultNaviPane" flag is set
+            // iNaviPane != 0
+            iNaviPane->Pop(NULL);
+            }
+        }
+
+    // For lint
+    iNaviPane = NULL;
+    iItems = NULL;
+    //iMmsClient = NULL;
+    iMmsSettings = NULL;
+    iTitlePane = NULL;
+    iListbox = NULL;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ProcessCommandL
+//
+// Processes menu item commands
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::ProcessCommandL( TInt aCommandId ) 
+    {
+    CAknDialog::ProcessCommandL( aCommandId );
+
+    switch ( aCommandId )
+        {
+        case EChangeItem:
+            HandleEditRequestL( iListbox->CurrentItemIndex(), EFalse );
+            break;
+
+        case EAknCmdHelp:
+            {
+            LaunchHelpL();                
+            }
+            break;
+
+        case EExitItem:            
+            ExitDialogL();
+            break;
+        default:
+            break;
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ExitDialogL()
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::ExitDialogL()
+    {
+    iExitCode = EMmsExit;
+    TryExitL( EAknSoftkeyCancel );
+    }
+        
+
+// ---------------------------------------------------------
+// DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane)
+//  Initializes items on the menu
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::DynInitMenuPaneL(
+    TInt aMenuId, 
+    CEikMenuPane* aMenuPane)
+    {
+    if (    aMenuPane
+        &&  aMenuId == R_SETTINGSDIALOG_MENUPANE )
+        {
+        // Set help menu-item visibility according featureManager
+        if ( ! ( iSettingsFlags & EHelpFeatureSupported ) )
+            {
+            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+            }
+        }
+    }
+
+    
+// ---------------------------------------------------------
+// CMmsSettingsDialog::OkToExitL
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::OkToExitL( TInt aKeyCode )
+    {
+    switch ( aKeyCode )
+        {
+        case EChangeItem:
+            HandleEditRequestL( iListbox->CurrentItemIndex(), ETrue );
+            return EFalse;
+           
+        case EAknSoftkeyCancel:
+            {
+            iSettingsFlags |= EExitSelected;
+            iSettingsFlags |= EGoingToExit;
+            if ( ClosingDialogL() )
+                {
+                iExitCode = EMmsExit;
+                }
+            else
+                {
+                iExitCode = EMmsExitWithSave;
+                }
+
+            return ETrue;
+            }
+        case EAknSoftkeyBack:
+            {
+            iSettingsFlags &= ~EExitSelected;
+            ClosingDialogL();
+
+            //if exit wanted during back operation
+            if( iSettingsFlags & ESwitchToExit )
+                {
+                iExitCode = EMmsExit;
+                }
+            else//normal back
+                {
+                iExitCode = EMmsBack;
+                }
+
+            // Replace title with old title text
+            if ( iPreviousTitleText  )
+                {
+                iTitlePane->SetTextL( *iPreviousTitleText );
+                }
+            return ETrue;
+            }
+        default :
+            return CAknDialog::OkToExitL( aKeyCode );
+        }
+   
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::CheckAndCorrectAccessPointL()
+//
+// Checks the access point as a part of closing dialog
+// (back / exit). AP must exist.
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::CheckAndCorrectAccessPointL()
+    {
+    TInt32 ap = iMmsSettings->AccessPoint( 0 );
+
+    CApUtils* apUtils = CApUtils::NewLC(*iCommsDb);
+    
+    // Access point is compulsory
+    TBool closingWithErrors = EFalse;   // ETrue if user wants to close down even with errors
+    while ( !ApExistsL( apUtils, ap ) )
+        {
+        // Do not save if exit with errors
+        if ( iSettingsFlags & EExitSelected )
+            {
+            closingWithErrors = ETrue;
+            }
+        else
+            {
+            closingWithErrors = ShowExitAnywayQueryL();
+            }
+
+        if ( closingWithErrors )
+            {
+            break;
+            }
+        //if user selects exit in ap dialog, we will exit.
+        if ( EditAccessPointL() )
+            {
+            //when we return, this tells that we are exiting.
+            iSettingsFlags |= ESwitchToExit;
+            break;
+            }
+        ap = iMmsSettings->AccessPoint( 0 );
+        }
+    CleanupStack::PopAndDestroy(); // apUtils
+    return closingWithErrors;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ShowExitAnywayQueryL() const
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::ShowExitAnywayQueryL() const
+    {
+    CAknQueryDialog* confirmQuery = CAknQueryDialog::NewL();
+    return ( confirmQuery->ExecuteLD( R_MMSUI_QUERY_EXIT_ANYWAY ) );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ApExistsL(CApUtils* aUtils, TUint32 aAP) const
+// Checks whether or not given AP exists
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::ApExistsL( CApUtils* aUtils, TInt32 aAP ) const
+    {
+    if ( aAP == KErrNotFound )
+        {
+        return EFalse;
+        }
+    TBool exists = EFalse;
+    TRAPD( error, ( exists = aUtils->WapApExistsL( aAP ) ) );
+    if ( exists )
+        {
+        return ETrue;
+        }
+    // we are only handling "not found" leave
+    if ( error != KErrNotFound )
+        {
+        User::LeaveIfError( error );
+        }
+    return EFalse;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::PreLayoutDynInitL()
+//
+// Creates a listbox for the settings.
+// Values are read from the resource file.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::PreLayoutDynInitL()
+    {
+
+    // Get supported features from feature manager.
+    FeatureManager::InitializeLibL();
+    if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        {
+        iSettingsFlags |= EHelpFeatureSupported;
+        }
+    FeatureManager::UnInitializeLib();
+
+    TInt featureBitmask = 0;
+    CRepository* repository = CRepository::NewL( KCRUidMmsui );
+    repository->Get( KMmsuiCsdEnabled, featureBitmask );
+    if ( featureBitmask )
+        {
+        iSettingsFlags |= ECSDEnabled;
+        }
+    delete repository;
+    repository = NULL;
+    featureBitmask = 0;
+
+    repository = CRepository::NewL( KCRUidMuiuVariation );
+    repository->Get( KMuiuMmsFeatures, featureBitmask );
+    delete repository;
+    repository = NULL;
+    if ( featureBitmask & KMmsFeatureIdUserCreationMode )
+        {
+        iSettingsFlags |= ECreationModeChangeEnabled;
+        }
+    if ( featureBitmask & KMmsFeatureIdHideReceivingOff )
+        {
+        iSettingsFlags |= EReceivingOffDisabled;
+        }
+    if ( featureBitmask & KMmsFeatureIdHideManualFetchMode )
+        {
+        iSettingsFlags |= EReceivingAlwaysManualDisabled;
+        }
+    if ( featureBitmask & KMmsFeatureIdHideAutomaticAtHome )
+        {
+        iSettingsFlags |= EReceivingAutomaticHomeDisabled;
+        }
+
+    SetTitleTextL();
+
+    iCommsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+
+    // Get listbox pointer
+    iListbox = static_cast<CEikTextListBox*>( Control( EDlgSettingListBox ) );
+    iListbox->SetListBoxObserver( this );
+    
+
+    // Sets correct size for the listbox    
+    iListbox->SetRect( iAvkonAppUi->ClientRect() );
+    
+    iItems = CMuiuSettingsArray::NewL( R_MMS_SERVICE_SETTINGS_LIST );
+    GetServiceSettingsValuesL();
+
+    // scroll bars
+    iListbox->CreateScrollBarFrameL( ETrue );
+    iListbox->ScrollBarFrame()->SetScrollBarVisibilityL( 
+        CEikScrollBarFrame::EOff, 
+        CEikScrollBarFrame::EAuto
+        );
+
+    // replace navi pane with empty one.
+    iNaviPane = static_cast<CAknNavigationControlContainer*>
+        ( iEikonEnv->AppUiFactory()->StatusPane()->ControlL(
+            TUid::Uid(EEikStatusPaneUidNavi) ) );
+    iNaviPane->PushDefaultL();
+    iSettingsFlags |= EDefaultNaviPane;
+
+    CTextListBoxModel* model = iListbox->Model();
+    model->SetItemTextArray( iItems );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ClosingDialogL
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::ClosingDialogL()
+    {
+    //if user selects exit or outside exit occurs, no ap checks are made.
+    return CheckAndCorrectAccessPointL();
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::GetServiceSettingsValuesL
+// Gets the values for the mms service settings and puts them in
+// to the listbox. Text strings are from loc files.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::GetServiceSettingsValuesL()
+    {
+    // Access point
+    TInt32 ap = iMmsSettings->AccessPoint( 0 );
+    TBuf<KCommsDbSvrMaxFieldLength> apName;
+
+    GetNameForApL( ap, apName );
+    SetArrayItem( EMmsSettingsAccessPoint, static_cast<TInt>( ap ), apName );
+
+    TInt fetchHome = iMmsSettings->ReceivingModeHome();
+    TInt fetchRoam = iMmsSettings->ReceivingModeForeign();
+
+    // if default value is not acceptable, choose next by keeping costs low
+    if ( fetchHome == EMmsReceivingAutomatic &&
+        fetchRoam == EMmsReceivingAutomatic )
+        {
+        SetArrayItem( EMmsSettingsReceivingMode,
+                      EMmsSettingsReceivingAutomaticAlways );
+        }
+    else if ( fetchHome == EMmsReceivingManual &&
+            fetchRoam == EMmsReceivingManual )
+        {
+        if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) )
+            {
+            SetArrayItem(   EMmsSettingsReceivingMode,
+                            EMmsSettingsReceivingManualAlways );
+            }
+        else
+            {
+            if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) )
+                {    
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingAutomaticHome );
+                }
+            else if ( ! ( iSettingsFlags & EReceivingOffDisabled ) )
+                {
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingDisabledAlways );
+                }
+            else
+                {
+                SetArrayItem( EMmsSettingsReceivingMode,
+                              EMmsSettingsReceivingAutomaticAlways );
+                }
+            }
+        }
+    else if ( fetchHome == EMmsReceivingReject &&
+        fetchRoam == EMmsReceivingReject )
+        {
+        if ( ! ( iSettingsFlags & EReceivingOffDisabled ) )
+            {
+            SetArrayItem( EMmsSettingsReceivingMode,
+              EMmsSettingsReceivingDisabledAlways );
+            }
+        else
+            {
+            if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) )
+                {
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingManualAlways );
+                }
+            else if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) )
+                {    
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingAutomaticHome );
+                }
+            else
+                {
+                SetArrayItem( EMmsSettingsReceivingMode,
+                              EMmsSettingsReceivingAutomaticAlways );
+                }
+            }
+        }
+    else
+        {
+        // Should always be automatic@home & manaul@roam
+        if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) )
+            {    
+            SetArrayItem(   EMmsSettingsReceivingMode,
+                            EMmsSettingsReceivingAutomaticHome );
+            }
+        else
+            {
+            if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) )
+                {
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingManualAlways );
+                }
+            else if ( ! ( iSettingsFlags & EReceivingOffDisabled ) )
+                {
+                SetArrayItem(   EMmsSettingsReceivingMode,
+                                EMmsSettingsReceivingDisabledAlways );
+                }
+            else
+                {
+                SetArrayItem( EMmsSettingsReceivingMode,
+                              EMmsSettingsReceivingAutomaticAlways );
+                }
+            }
+        }
+
+    // Receiving anonymous messages
+    if ( iMmsSettings->AcceptAnonymousMessages() )    
+        {
+        SetArrayItem( EMmsSettingsReceivingAnonymous, EMmsSettingsYes );
+        }
+    else
+        {
+        SetArrayItem( EMmsSettingsReceivingAnonymous, EMmsSettingsNo );
+        }
+
+    
+    // Receiving ads
+    if ( iMmsSettings->AcceptAdvertisementMessages() )
+        {
+        SetArrayItem( EMmsSettingsReceivingAds, EMmsSettingsYes );
+        }
+    else
+        {
+        SetArrayItem( EMmsSettingsReceivingAds, EMmsSettingsNo );
+        }
+
+    // Receive report
+    TBool deliveryReport = ( iMmsSettings->DeliveryReportWanted() == EMmsYes );
+    if ( deliveryReport && iMmsSettings->ReadReplyReportWanted() == EMmsYes  )
+        {
+        SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportBoth );
+        }
+    else if ( deliveryReport )
+        {
+        SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportDelivery );
+        }
+    else // read report only is not supported 
+        {
+        SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportNone );
+        }
+
+    // Delivery report sending allowed and read report sending has both their own
+    // attribute. Writing the value takes care that both have same value.
+    // Read here only delivery report sending allowed attribute.
+    if ( iMmsSettings->DeliveryReportSendingAllowed() == EMmsDeliveryReportAllowedYes )
+        {
+        SetArrayItem( EMmsSettingsDenyDeliveryReport, EMmsSettingsNo );
+        }
+    else
+        {
+        SetArrayItem( EMmsSettingsDenyDeliveryReport, EMmsSettingsYes );
+        }
+
+    // Validity period
+    switch ( iMmsSettings->ExpiryInterval() )
+        {
+        case KMmsValidityPeriod1h:
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod1h );
+            break;
+        case KMmsValidityPeriod6h:
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod6h );
+            break;
+        case KMmsValidityPeriod24h:
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod24h );
+            break;
+        case KMmsValidityPeriod3Days:
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod3d );
+            break;
+        case KMmsValidityPeriodWeek:
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriodWeek );
+            break;
+        case KMmsValidityPeriodMax:
+        default: // default to max
+            SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriodMaximum );
+            break;
+        }
+
+    // Image size
+    TInt32 imageWidth = iMmsSettings->ImageWidth();
+    TInt32 imageHeight = iMmsSettings->ImageHeight();
+
+    if ( imageWidth == KMmsUniImageLargeWidth && imageHeight == KMmsUniImageLargeHeight )
+        {
+        SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageLarge );
+        }
+    else
+        {
+        SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageSmall );
+        }
+
+    SetArrayItem( EMmsSettingsCreationMode, GetCreationMode() );
+
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber)
+// Updates indexed item of listbox
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::SetArrayItem( TInt aIndex, TInt aCurrentNumber )
+    {
+    iItems->At( aIndex ).iUserText.Copy(
+        ( *iItems->At( aIndex ).iMuiuSettingsItemArray )[aCurrentNumber]);
+    ( *iItems )[aIndex].iCurrentNumber = aCurrentNumber;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber, const TDesC& aUserText)
+// Updates indexed item of listbox - user text formatted by the caller
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber, const TDesC& aUserText)
+    {
+    iItems->At( aIndex ).iUserText.Copy( aUserText );
+    ( *iItems )[aIndex].iCurrentNumber = aCurrentNumber;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+// Handles listbox event
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::HandleListBoxEventL( CEikListBox* /* aListBox */, 
+                                             TListBoxEvent aEventType )
+    {
+    switch ( aEventType )
+        {
+        case EEventEnterKeyPressed:
+        case EEventItemSingleClicked:
+            HandleEditRequestL( iListbox->CurrentItemIndex(), ETrue );
+            break;
+        default:
+            break;
+        }
+
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+// Handles listbox event
+//
+// ---------------------------------------------------------
+//
+TKeyResponse CMmsSettingsDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TBool isDestructed( EFalse );
+    if (    aType ==EEventKey
+        &&  aKeyEvent.iCode == EKeyEscape )
+        {
+        isDestructed = ETrue;
+        }
+    
+    TKeyResponse ret = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+
+    if (    !isDestructed
+        &&  iSettingsFlags & EShouldExit ) 
+        {
+        iExitCode = EMmsExit;
+        TryExitL( EAknSoftkeyCancel );
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::HandleEditRequestL(TInt aIndex, TBool aEnterPressed)
+// Handles editing of a selected setting
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::HandleEditRequestL( TInt aIndex, TBool aEnterPressed )
+    {
+    switch ( aIndex )
+        {
+        case EMmsSettingsAccessPoint:
+            if ( EditAccessPointL() )
+                {
+                // Cannot exit directly here - we are in the middle of HandleListBoxEvent
+                // Real exit is activated in OfferKeyEventL()
+                iSettingsFlags |= EShouldExit;
+                iExitCode = EMmsExit;
+                }
+            break;
+        case EMmsSettingsReceivingMode:
+            EditReceivingModeL();
+            break;
+        case EMmsSettingsReceivingAnonymous:
+            EditReceivingAnonymousL( aEnterPressed );
+            break;
+        case EMmsSettingsReceivingAds:
+            EditReceivingAdsL( aEnterPressed );
+            break;
+        case EMmsSettingsReceiveReport:
+            EditReceiveReportsL( );
+            break;
+        case EMmsSettingsDenyDeliveryReport:
+            EditDenySendingDeliveryReportsL( aEnterPressed );
+            break;
+        case EMmsSettingsValidityPeriod:
+            EditValidityPeriodL();
+            break;
+        case EMmsSettingsImageSize:
+            EditImageSizeL( aEnterPressed );
+            break;
+        case EMmsSettingsCreationMode:     
+            EditCreationModeL( aEnterPressed );
+            break;
+        default:
+            __ASSERT_DEBUG( EFalse, Panic( EMmsSettingsWrongParameters ) );
+            break;
+        } // switch
+    iListbox->DrawItem( aIndex );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::SetAndGetSettingItemL(TInt& aCurrentItem, TUint aList, TInt aItem)
+// Sets the ui for the setting item and returns true if item selection
+// is accepted. Selected value is passed as a parameter.
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::SetAndGetSettingItemL( TInt& aCurrentItem, 
+                                                TInt aList, 
+                                                TInt aItem)
+    {
+    TBool isOk = EFalse;
+    TResourceReader reader;
+    iEikonEnv->CreateResourceReaderLC( reader, aList );
+    
+    CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( KSettingsGranularity );
+    CleanupStack::PushL( items );
+    
+    // Get the labels from resources
+    const TInt count = reader.ReadInt16();
+
+    for ( TInt loop = 0; loop < count; loop++ )
+        {
+        HBufC* label = reader.ReadHBufCL();
+        if ( ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingAlwaysManualDisabled ) && loop == EMmsSettingsReceivingManualAlways ) ||
+            ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingOffDisabled ) && loop == EMmsSettingsReceivingDisabledAlways ) ||
+            ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) && loop == EMmsSettingsReceivingAutomaticHome ) ||
+            ( aList == R_MMS_IMAGE_SIZE_LIST && iMmsSettings->CreationMode() == EMmsCreationModeRestricted && loop == EMmsSettingsImageLarge ) )
+            {
+            delete label;
+            }
+        else
+            {
+            CleanupStack::PushL( label );
+            TPtr pLabel = label->Des();
+            AknTextUtils::DisplayTextLanguageSpecificNumberConversion( pLabel );
+            items->AppendL( pLabel );
+            CleanupStack::PopAndDestroy( label );
+            }
+        label = NULL;
+        }
+    
+    if ( aList == R_RECEIVING_MMS_LIST )
+        {
+        // 3. removed, update 4
+        if (    ( iSettingsFlags & EReceivingAlwaysManualDisabled ) 
+            &&  aCurrentItem == EMmsSettingsReceivingDisabledAlways )
+            {
+            aCurrentItem--;
+            }
+        // 2. removed, update 3 & 4
+        if (    ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) 
+            &&  aCurrentItem >= EMmsSettingsReceivingAutomaticHome )
+            {
+            // Adjust the index for every setting that comes after AutomaticAtHome when it is hidden
+            aCurrentItem--;
+            }
+        }
+
+    CAknRadioButtonSettingPage* dlg = new ( ELeave ) CAknRadioButtonSettingPage(
+        R_MMS_SETTING_PAGE, 
+        aCurrentItem, 
+        items );
+
+    dlg->SetSettingTextL( iItems->At( aItem ).iLabelText );
+    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) 
+        {
+        // Adjust the index back after the user has made the selection
+        if ( aList == R_RECEIVING_MMS_LIST )
+            {
+            // 2. removed, update 3 & 4
+            if (    ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) 
+                &&  aCurrentItem >= EMmsSettingsReceivingAutomaticHome )
+                {
+                // Adjust the index for every setting that comes after AutomaticAtHome when it is hidden
+                aCurrentItem++;
+                }
+
+            // 3. removed, update 4
+            if (    ( iSettingsFlags & EReceivingAlwaysManualDisabled ) 
+                &&  aCurrentItem >= EMmsSettingsReceivingManualAlways )
+                {
+                
+                aCurrentItem++;
+                }
+            }
+
+        isOk = ETrue;
+        }
+    
+    CleanupStack::PopAndDestroy( 2 ); //items & reader 
+
+    return isOk;
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditReceivingModeL()
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditReceivingModeL()
+    {
+    TInt currentItem = iItems->At( EMmsSettingsReceivingMode ).iCurrentNumber;
+
+    if ( SetAndGetSettingItemL(
+            currentItem,
+            R_RECEIVING_MMS_LIST,
+            EMmsSettingsReceivingMode ) )
+        {
+        switch ( currentItem )
+            {
+            case EMmsSettingsReceivingAutomaticHome:
+                {
+                iMmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic );
+                iMmsSettings->SetReceivingModeForeign( EMmsReceivingManual );
+                break;
+                }
+            case EMmsSettingsReceivingAutomaticAlways:
+                iMmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic );
+                iMmsSettings->SetReceivingModeForeign( EMmsReceivingAutomatic );
+                break;
+            case EMmsSettingsReceivingManualAlways:
+                {
+                iMmsSettings->SetReceivingModeHome( EMmsReceivingManual );
+                iMmsSettings->SetReceivingModeForeign( EMmsReceivingManual );
+                break;
+                }
+            case EMmsSettingsReceivingDisabledAlways:
+                iMmsSettings->SetReceivingModeHome( EMmsReceivingReject );
+                iMmsSettings->SetReceivingModeForeign( EMmsReceivingReject );
+                break;
+            default:
+                break;
+            }
+        //to be sure that we have the selected item  
+        iItems->At( EMmsSettingsReceivingMode ).iCurrentNumber = currentItem; 
+        
+        SetArrayItem( EMmsSettingsReceivingMode, currentItem );
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditReceivingAnonymousL
+// Edits the value for receiving anonymous messages.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditReceivingAnonymousL( TBool aEnterPressed )
+    {
+    TBool isOk = EFalse;
+    TInt currentItem = iItems->At( EMmsSettingsReceivingAnonymous ).iCurrentNumber;
+    if ( aEnterPressed )
+        {
+        currentItem ^= 1;
+        }
+    else
+        {
+        isOk = SetAndGetSettingItemL( 
+            currentItem, 
+            R_MMS_YES_NO_LIST, 
+            EMmsSettingsReceivingAnonymous );
+        }
+        
+    if ( aEnterPressed || isOk )
+        {
+        switch ( currentItem )
+            {
+            case EMmsSettingsNo:
+                iMmsSettings->SetAcceptAnonymousMessages( EFalse );
+                break;
+            case EMmsSettingsYes: // flow through
+            default:
+                iMmsSettings->SetAcceptAnonymousMessages( ETrue );
+                break;
+            }
+        SetArrayItem( EMmsSettingsReceivingAnonymous, currentItem );
+        CEikFormattedCellListBox* settingListBox =
+            static_cast<CEikFormattedCellListBox*>( Control(EDlgSettingListBox ) );
+        settingListBox->DrawNow();
+        }                   
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditReceivingAdsL
+// Edits the value for receiving advertisements
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditReceivingAdsL( TBool aEnterPressed )
+    {
+    TBool isOk = EFalse;
+    TInt currentItem = iItems->At( EMmsSettingsReceivingAds ).iCurrentNumber;
+    if ( aEnterPressed )
+        {
+        currentItem ^= 1;
+        }
+    else
+        {
+        isOk = SetAndGetSettingItemL( 
+            currentItem, 
+            R_MMS_YES_NO_LIST, 
+            EMmsSettingsReceivingAds );
+        }
+        
+    if (aEnterPressed || isOk)
+        {
+        switch (currentItem)
+            {
+            case EMmsSettingsNo:
+                iMmsSettings->SetAcceptAdvertisementMessages( EFalse );
+                break;
+            case EMmsSettingsYes: // flow through
+            default:
+                iMmsSettings->SetAcceptAdvertisementMessages( ETrue );
+                break;
+            }
+        SetArrayItem(EMmsSettingsReceivingAds, currentItem);
+        CEikFormattedCellListBox* settingListBox =
+            static_cast<CEikFormattedCellListBox*>( Control( EDlgSettingListBox ) );
+        settingListBox->DrawNow();
+        }                   
+    }
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditReceiveReportsL
+// Edits the value for receiving reports.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditReceiveReportsL( )
+    {       
+    TInt currentItem = iItems->At( EMmsSettingsReceiveReport ).iCurrentNumber;
+
+    if ( SetAndGetSettingItemL(
+            currentItem, 
+            R_MCE_MMS_REPORTS, 
+            EMmsSettingsReceiveReport ) )
+        {
+        SetReceiveReportSetting( static_cast<TMmsSettingsReceiveReportValues>( currentItem ) );
+        }
+    SetArrayItem( EMmsSettingsReceiveReport, currentItem );
+    CEikFormattedCellListBox* settingListBox =
+        static_cast<CEikFormattedCellListBox*>( Control( EDlgSettingListBox ) );
+    settingListBox->DrawNow();
+    }
+
+// ---------------------------------------------------------
+// SetReceiveReportSetting( TMmsSettingsReceiveReportValues aReceiveReport )
+// Stores the value for receive report settings.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::SetReceiveReportSetting( TMmsSettingsReceiveReportValues aReceiveReport )
+    {
+    switch ( aReceiveReport )
+        {
+        case EMmsSettingsReceiveReportBoth:
+            iMmsSettings->SetDeliveryReportWanted( EMmsYes );
+            iMmsSettings->SetReadReplyReportWanted( EMmsYes );
+            break;
+        case EMmsSettingsReceiveReportDelivery:
+            iMmsSettings->SetDeliveryReportWanted( EMmsYes );
+            iMmsSettings->SetReadReplyReportWanted( EMmsNo );
+            break;
+        case EMmsSettingsReceiveReportNone:
+            iMmsSettings->SetDeliveryReportWanted( EMmsNo );
+            iMmsSettings->SetReadReplyReportWanted( EMmsNo );
+            break;
+        default:
+            __ASSERT_DEBUG_NO_LEAVE( Panic( EMmsSettingsWrongParameters ) );
+            iMmsSettings->SetDeliveryReportWanted( EMmsNo );
+            iMmsSettings->SetReadReplyReportWanted( EMmsNo );
+            break;
+        }
+    }
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditDenySendingDeliveryReportL
+// Edits the value for sending delivery reports.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditDenySendingDeliveryReportsL( TBool aEnterPressed )
+    {
+    TBool isOk = EFalse;
+    TInt currentItem = iItems->At( EMmsSettingsDenyDeliveryReport ).iCurrentNumber;
+    
+    if ( aEnterPressed )
+        {
+        currentItem ^= 1;
+        }
+    else
+        {
+        isOk = SetAndGetSettingItemL(
+            currentItem, 
+            R_MMS_YES_NO_LIST, 
+            EMmsSettingsDenyDeliveryReport );
+        }
+        
+    if ( aEnterPressed || isOk )
+        {
+        switch ( currentItem )
+            {
+            case EMmsSettingsNo:
+                iMmsSettings->SetDeliveryReportSendingAllowed( EMmsDeliveryReportAllowedYes );
+                iMmsSettings->SetReadReplyReportSendingAllowed( ETrue );
+                break;
+            case EMmsSettingsYes: // flow through
+            default:
+                iMmsSettings->SetDeliveryReportSendingAllowed( EMmsDeliveryReportAllowedNo );
+                iMmsSettings->SetReadReplyReportSendingAllowed( EFalse );
+                break;
+            }
+        SetArrayItem( EMmsSettingsDenyDeliveryReport, currentItem );
+        CEikFormattedCellListBox* settingListBox =
+            static_cast<CEikFormattedCellListBox*>( Control( EDlgSettingListBox ) );
+        settingListBox->DrawNow();
+        }                   
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditValidityPeriodL
+// Edits the value for validity period
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditValidityPeriodL()
+    {
+    TInt currentItem = iItems->At( EMmsSettingsValidityPeriod ).iCurrentNumber;
+    
+    if (SetAndGetSettingItemL( currentItem, R_MMS_VALIDITY_PERIOD_LIST, EMmsSettingsValidityPeriod ))
+        {
+        switch (currentItem)
+            {
+            case EMmsSettingsValidityPeriod1h:
+                SetValidityPeriodSetting( KMmsValidityPeriod1h );
+                break;
+            case EMmsSettingsValidityPeriod6h:
+                SetValidityPeriodSetting( KMmsValidityPeriod6h );
+                break;
+            case EMmsSettingsValidityPeriod24h:
+                SetValidityPeriodSetting( KMmsValidityPeriod24h );
+                break;
+            case EMmsSettingsValidityPeriod3d:
+                SetValidityPeriodSetting( KMmsValidityPeriod3Days );
+                break;
+            case EMmsSettingsValidityPeriodWeek:
+                SetValidityPeriodSetting( KMmsValidityPeriodWeek );
+                break;
+            case EMmsSettingsValidityPeriodMaximum:
+            default: // default to max
+                SetValidityPeriodSetting( KMmsValidityPeriodMax );
+                break;
+            }
+            SetArrayItem( EMmsSettingsValidityPeriod, currentItem );
+        }                   
+    }       
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::SetValidityPeriodSetting(TInt32 aValidityPeriod)
+// Stores the value for validity period settings.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::SetValidityPeriodSetting( TInt32 aValidityPeriod )
+    {
+    iMmsSettings->SetExpiryInterval( aValidityPeriod );
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditAccessPointL
+//
+// ---------------------------------------------------------
+//
+TBool CMmsSettingsDialog::EditAccessPointL()
+    {
+    TUint32 currentItem = iItems->At( EMmsSettingsAccessPoint ).iCurrentNumber;
+    
+
+    TInt bearers = EApBearerTypeGPRS; 
+    if ( iSettingsFlags & ECSDEnabled )
+        {
+        bearers |= ( EApBearerTypeCSD | EApBearerTypeHSCSD );
+        }
+
+    TUint32 selectedAp = KMaxTUint32;   // invalid value
+    TInt taskDone = MmsApSelect::SelectMmsAccessPointL(
+        *iCommsDb,
+        currentItem,
+        selectedAp,
+        bearers );
+
+    // Note: taskDone == KApUiEventDeleted is not handled here.
+    // Basically the user can delete the AP that was selected. This is noticed
+    // & complained when closing Settings dialog.
+    CApUtils* apUtils = CApUtils::NewLC( *iCommsDb );
+    TBuf<KCommsDbSvrMaxFieldLength> apName;
+
+    if( !ApExistsL( apUtils, currentItem ) && taskDone == 0 ) //if ap has been deleted, set "must be defined"
+        {
+        selectedAp = 0;
+        }//if
+    else if( selectedAp == KMaxTUint32 )
+        {
+        selectedAp = currentItem;
+        }
+    GetNameForApL( selectedAp, apName );
+    SetArrayItem( EMmsSettingsAccessPoint, selectedAp, apName );
+
+    // Use cases numbered:
+    if ( taskDone || selectedAp != 0 )
+        {  
+        // 1) sp selected 
+        // 2) previously ap selected but 'back' now
+        // 3) none selected 
+        while ( iMmsSettings->AccessPointCount() )
+            {
+            iMmsSettings->DeleteAccessPointL( 0 );
+            }
+            
+        if ( selectedAp != 0 )
+            {
+            // 1) sp selected, 2) previously ap selected but 'back' now
+            iMmsSettings->AddAccessPointL( selectedAp, 0 );
+            }
+        }
+    // else - 4) previously none selected and 'back' now    
+
+    CleanupStack::PopAndDestroy(); // apUtils
+
+    return ( taskDone & ( KApUiEventExitRequested | KApUiEventShutDownRequested ) );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::GetNameForApL
+// Get a name for the given access point id
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::GetNameForApL( TUint32 aId, TDes& aName )
+    {
+    aName.Zero();
+    CApUtils* apUtils = CApUtils::NewLC( *iCommsDb );
+    if ( !ApExistsL( apUtils, aId ) )
+        {
+        // No access point -> "Compulsory"
+        HBufC* text = iEikonEnv->AllocReadResourceLC( R_MMS_SETTINGS_COMPULSORY );
+        aName.Copy( *text );
+        CleanupStack::PopAndDestroy(); // text
+        }
+    else
+        {
+        apUtils->NameL( aId, aName );
+        }
+    CleanupStack::PopAndDestroy(); // apUtils
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditImageSizeL
+// Edits the value for image size setting.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditImageSizeL( TBool aEnterPressed )
+    {
+    TBool isOk = EFalse;
+    TInt currentItem = iItems->At( EMmsSettingsImageSize ).iCurrentNumber;
+
+    if ( aEnterPressed &&
+        iMmsSettings->CreationMode() != EMmsCreationModeRestricted )
+        {
+        currentItem ^= 1;
+        isOk = ETrue;
+        }
+    else
+        {
+        // We come here either from "Options -> Change" or with selection key
+        // in "restricted" mode (opens a list with a single item).
+        isOk = SetAndGetSettingItemL(
+            currentItem,
+            R_MMS_IMAGE_SIZE_LIST,
+            EMmsSettingsImageSize );
+        }
+
+    if ( isOk )
+        {
+        switch ( currentItem )
+            {
+            case EMmsSettingsImageLarge:
+                iMmsSettings->SetImageWidth( KMmsUniImageLargeWidth );
+                iMmsSettings->SetImageHeight( KMmsUniImageLargeHeight );
+                break;
+            case EMmsSettingsImageSmall: // flow through
+            default:
+                iMmsSettings->SetImageWidth( KMmsUniImageSmallWidth );
+                iMmsSettings->SetImageHeight( KMmsUniImageSmallHeight );
+                break;
+            }
+        SetArrayItem( EMmsSettingsImageSize, currentItem );
+        CEikFormattedCellListBox* settingListBox =
+            static_cast<CEikFormattedCellListBox*>( Control( EDlgSettingListBox ) );
+        settingListBox->DrawNow();
+        }                   
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::EditCreationModeL
+// Edits the value for creation mode setting.
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::EditCreationModeL( TBool /*aEnterPressed*/ )
+    {
+    if ( !( iSettingsFlags & ECreationModeChangeEnabled ) )
+        {
+        ShowInformationNoteL( R_MMSUI_INFO_CANNOT_CHANGE_CMODE );
+        return;
+        }
+
+    TInt enumMode = EMmsSettingsCreationMode;
+
+    TInt currentItem = iItems->At( enumMode ).iCurrentNumber;
+    
+    if ( SetAndGetSettingItemL( currentItem, R_MMS_CREATION_MODE_LIST, enumMode) )
+        {
+        TInt32 oldMode = GetCreationMode();
+        switch ( currentItem )
+            {
+            case EMmsSettingsCreationModeRestricted:
+                iMmsSettings->SetCreationMode( EMmsCreationModeRestricted );
+                if ( oldMode != currentItem &&
+                    ( iMmsSettings->ImageWidth() != KMmsUniImageSmallWidth ||
+                      iMmsSettings->ImageHeight() != KMmsUniImageSmallHeight ) )
+                    {
+                    iMmsSettings->SetImageWidth( KMmsUniImageSmallWidth );
+                    iMmsSettings->SetImageHeight( KMmsUniImageSmallHeight );
+                    SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageSmall );
+                    ShowInformationNoteL( R_MMSUI_INFO_IMAGE_SIZE_CHANGED );
+                    iListbox->DrawItem( EMmsSettingsImageSize );
+                    }
+                break;
+            case EMmsSettingsCreationModeFree:
+                {
+                if ( oldMode != currentItem )
+                    {
+                    CAknQueryDialog* confirmQuery = CAknQueryDialog::NewL();
+                    if ( confirmQuery->ExecuteLD( R_MMSUI_QUERY_CHANGE_TO_FREE ) )
+                        {
+                        iMmsSettings->SetCreationMode( EMmsCreationModeFree );
+                        }
+                    else
+                        {
+                        currentItem = oldMode;
+                        }
+                    }
+                }
+                break;
+            default:
+            case EMmsSettingsCreationModeGuided:
+                iMmsSettings->SetCreationMode( EMmsCreationModeWarning );
+                break;
+            }
+            SetArrayItem( enumMode, currentItem );
+        }                   
+
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::GetCreationMode
+// Maps creation mode value from engine to SettingsDialog values
+//
+// ---------------------------------------------------------
+//
+TInt32 CMmsSettingsDialog::GetCreationMode()
+    {
+    switch ( iMmsSettings->CreationMode() )
+        {
+        case EMmsCreationModeRestricted:
+            return EMmsSettingsCreationModeRestricted;
+        case EMmsCreationModeFree:
+            return EMmsSettingsCreationModeFree;
+        case EMmsCreationModeWarning:
+        default:
+            return EMmsSettingsCreationModeGuided;
+        }
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::SetTitleTextL()
+// Makes the status pane
+//
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::SetTitleTextL()
+    {   
+    CEikStatusPane *sp = ( static_cast<CAknAppUi*>
+        ( CEikonEnv::Static()->EikAppUi() ) )->StatusPane();
+    iTitlePane = static_cast<CAknTitlePane*>
+        ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+    
+    //save old title
+    iPreviousTitleText = ( *iTitlePane->Text() ).Alloc();
+        
+    // set new title
+    HBufC* text = text = StringLoader::LoadLC( R_MMS_SETTINGS_TITLE_TEXT );
+    iTitlePane->SetTextL( *text );
+    CleanupStack::PopAndDestroy(); // text
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::LaunchHelpL
+// launch help using context
+// 
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::LaunchHelpL()
+    {
+    if ( iSettingsFlags & EHelpFeatureSupported )
+        {
+        CCoeAppUi* editorAppUi = static_cast<CCoeAppUi*>( ControlEnv()->AppUi() );
+      
+        CArrayFix<TCoeHelpContext>* helpContext = editorAppUi->AppHelpContextL();   
+        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::GetHelpContext
+// returns helpcontext as aContext
+// 
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::GetHelpContext
+        ( TCoeHelpContext& aContext ) const
+    {
+    if ( iSettingsFlags & EHelpFeatureSupported )
+        {
+        aContext.iMajor = KUidMce;
+        aContext.iContext = KMCE_HLP_SETTINGS_MMS;
+        }
+    }
+
+// ---------------------------------------------------------
+// CMmsSettingsDialog::ShowInformationNoteL
+// ---------------------------------------------------------
+//
+void CMmsSettingsDialog::ShowInformationNoteL( TInt aResourceId )
+    {
+    CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
+    HBufC* string = StringLoader::LoadLC( aResourceId );
+    note->ExecuteLD( *string );
+    CleanupStack::PopAndDestroy(); //string
+    }
+
+//  End of File