commsconfig/cscsettingsui/src/cscsettingsuimaincontainer.cpp
changeset 0 a4daefaec16c
child 9 bddb6d4447db
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/cscsettingsui/src/cscsettingsuimaincontainer.cpp	Mon Jan 18 20:12:36 2010 +0200
@@ -0,0 +1,878 @@
+/*
+* Copyright (c) 2007-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:  Implements CSCSettingsUiMainContainer methods
+*
+*/
+
+
+#include <aknlists.h>
+#include <coecntrl.h>
+#include <cchclient.h>
+#include <csc.hlp.hrh>
+#include <cmmanagerext.h>
+#include <StringLoader.h>
+#include <spdefinitions.h>
+#include <cscsettingsui.rsg>
+#include <aknlistquerydialog.h>
+#include <cvimpstsettingsstore.h>
+
+#include "cscsettingsui.hrh"
+#include "cscsettingsuimodel.h"
+#include "cscsettingsuilogger.h"
+#include "cscengservicehandler.h"
+#include "cscsettingsuiconstants.h"
+#include "cscengdestinationshandler.h"
+#include "cipapputilsaddressresolver.h"
+#include "cscsettingsuimaincontainer.h"
+
+// Format of the setting item.
+_LIT( KCSCSettingsUiListItemTextFormat, "\t%S\t\t%S" );
+
+_LIT( KDoubleBackSlash, "\\" );
+_LIT( KEmptyPassword, "*****" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CCSCSettingsUiMainContainer::CCSCSettingsUiMainContainer(
+    CCSCSettingsUiModel& aModel )
+    : iModel( aModel )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::ConstructL(
+    const TRect& aRect )
+    {
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::ConstructL - begin" );
+        
+    CreateWindowL();
+    ConstructListBoxL();
+    SetRect( aRect );
+    ActivateL();
+    
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::ConstructL - end" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CCSCSettingsUiMainContainer::~CCSCSettingsUiMainContainer()
+    {
+    CSCSETUIDEBUG( 
+       "CCSCSettingsUiMainContainer::~CCSCSettingsUiMainContainer - begin" );
+    
+    iListBoxItemArray.Reset();
+    iListBoxItemArray.Close();
+    
+    if ( iCaption )
+        {
+        delete iCaption;
+        }
+    
+    delete iListBox;
+    
+    CSCSETUIDEBUG( 
+       "CCSCSettingsUiMainContainer::~CCSCSettingsUiMainContainer - end" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::UpdateContainerL
+// Updates container and redraws listbox items.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::UpdateContainerL()
+    {
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::UpdateContainerL - begin" );
+     
+    // Get listbox items from model.
+    CTextListBoxModel* model = iListBox->Model();
+    MDesCArray* textArray = model->ItemTextArray();
+    CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
+    listBoxItems->Reset();
+    iListBoxItemArray.Reset();
+       
+    // Initialize setting items.
+    InitializeSettingItemsL();
+   
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::UpdateContainerL - end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::HandoverNotificationToneQueryL
+// Shows a query which changes handover notification tone setting for service.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::HandoverNotificationToneQueryL()
+    {    
+    CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( 2 );   
+    CleanupStack::PushL( items );
+    
+    HBufC* onItem =  StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_ON );
+    items->AppendL( *onItem );
+    CleanupStack::PopAndDestroy( onItem );
+    
+    HBufC* offItem =  StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_OFF );
+    items->AppendL( *offItem );
+    CleanupStack::PopAndDestroy( offItem );
+    
+    TInt index( 0 );
+    CAknListQueryDialog* dialog = 
+        new ( ELeave ) CAknListQueryDialog( &index );
+    
+    dialog->PrepareLC( R_CSCSETTINGSUI_HANDOVER_NOTIFICATION_TONE_QUERY );
+    dialog->SetItemTextArray( items );
+    dialog->SetOwnershipType( ELbmDoesNotOwnItemArray );
+        
+    if ( dialog->RunLD() )
+        {
+        // Update setting according user selection
+        if ( 0 == index )
+            {   
+            // Set handover notification tone setting value on
+            iModel.SettingsHandler().SetHandoverNotifTonePrefL( 
+                iModel.CurrentSPEntryId(), EOn );
+            }
+        else if ( 1 == index )
+            {
+            // Set handover notification tone setting value off
+            iModel.SettingsHandler().SetHandoverNotifTonePrefL( 
+                iModel.CurrentSPEntryId(), EOff );
+            }
+        else
+            {
+            // invalid index
+            User::Leave( KErrGeneral );
+            }
+        }
+    else
+        {        
+        // cancelled
+        }
+        
+    CleanupStack::PopAndDestroy( items );
+    UpdateContainerL();
+    }
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::PresenceReqPrefQueryL
+// Shows a query which changes presence request preference for service.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::PresenceReqPrefQueryL()
+    {    
+    CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( 2 );   
+    CleanupStack::PushL( items );
+    
+    HBufC* alwaysAskItem =  StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_PRES_PREF_ALWAYS_ASK );
+    items->AppendL( *alwaysAskItem );
+    CleanupStack::PopAndDestroy( alwaysAskItem );
+    
+    HBufC* autoAcceptItem =  StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_PRES_PREF_ACCEPT_AUTOMATICALLY );
+    items->AppendL( *autoAcceptItem );
+    CleanupStack::PopAndDestroy( autoAcceptItem );
+    
+    TInt index( 0 );
+    CAknListQueryDialog* dialog = 
+        new ( ELeave ) CAknListQueryDialog( &index );
+    
+    dialog->PrepareLC( R_CSCSETTINGSUI_PRESENCE_REQUEST_PREF_QUERY );
+    dialog->SetItemTextArray( items );
+    dialog->SetOwnershipType( ELbmDoesNotOwnItemArray );
+        
+    if ( dialog->RunLD() )
+        {
+        // Update setting according user selection
+        if ( 0 == index )
+            {   
+            // Set presence request preference setting value
+            iModel.SettingsHandler().SetPresenceReqPrefL( 
+                iModel.CurrentSPEntryId(), EOff );
+            }
+        else if ( 1 == index )
+            {
+            // Set presence request preference setting value
+            iModel.SettingsHandler().SetPresenceReqPrefL( 
+                iModel.CurrentSPEntryId(), EOn );
+            }
+        else
+            {
+            // invalid index
+            User::Leave( KErrGeneral );
+            }
+        }
+    else
+        {        
+        // canceled
+        }
+        
+    CleanupStack::PopAndDestroy( items );
+    UpdateContainerL();
+    }
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::SaveImTonePathL
+// Saves Im tone path to permanent storage.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::SaveImTonePathL( const TDesC& aTonePath )
+    { 
+    MVIMPSTSettingsStore* settings = CVIMPSTSettingsStore::NewLC();
+    
+    User::LeaveIfError( settings->SetL( 
+        iModel.CurrentSPEntryId(), EServiceToneFileName, aTonePath ) );
+
+    CleanupStack::PopAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::ListBox
+// Returns handle to the listbox.
+// ---------------------------------------------------------------------------
+//    
+CAknSettingStyleListBox* CCSCSettingsUiMainContainer::ListBox()
+    {
+    return iListBox;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::CurrentItemIndex
+// Returns index of selected listbox item. 
+// ---------------------------------------------------------------------------
+//
+TMainListBoxItem CCSCSettingsUiMainContainer::CurrentItem() const
+    {
+    TInt currentItemIndex( iListBox->CurrentItemIndex() );
+    return iListBoxItemArray[ currentItemIndex ];
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::ComponentControl
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CCSCSettingsUiMainContainer::ComponentControl( 
+    TInt /*aIndex*/ ) const
+    {
+    return iListBox;
+    }
+
+
+// -----------------------------------------------------------------------------
+// From class CoeControl
+// For getting help context
+// -----------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetHelpContext( 
+    TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KUidCscSettingsUiHelp;
+    aContext.iContext = KSERVTAB_HLP_SETTINGS;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CCSCSettingsUiMainContainer::OfferKeyEventL( 
+    const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse response = EKeyWasNotConsumed;
+    response = iListBox->OfferKeyEventL( aKeyEvent, aType );
+    
+    if ( EKeyUpArrow == aKeyEvent.iCode ||  
+        EKeyDownArrow == aKeyEvent.iCode  )
+        {
+        iModel.UpdateSoftkeys();
+        }
+     
+    return response;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::HandleResourceChange
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::HandleResourceChange( TInt aType )
+    {
+    if( aType == KAknsMessageSkinChange ||
+        aType == KEikDynamicLayoutVariantSwitch )
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, 
+                                           mainPaneRect );
+        SetRect( mainPaneRect );
+        DrawNow();
+        }
+    
+    CCoeControl::HandleResourceChange( aType );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::ConstructListBoxL
+// Creates listbox item for setting items.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::ConstructListBoxL()
+    {
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::ConstructListBoxL - begin" );
+    
+    // Create listbox and array for listbox items.
+    iListBox = new( ELeave ) CAknSettingStyleListBox;
+    iListBox->ConstructL( this, EAknListBoxSelectionList );    
+    iListBox->CreateScrollBarFrameL( ETrue );
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, 
+        CEikScrollBarFrame::EAuto );
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+    CDesCArrayFlat* itemsArray = 
+        new ( ELeave ) CDesCArrayFlat( KCSCSettingsUiArrayGranularity );  
+    iListBox->Model()->SetItemTextArray( itemsArray );
+        
+    // Initialize setting items.
+    InitializeSettingItemsL();
+    
+    CSCSETUIDEBUG( "CCSCSettingsUiMainContainer::ConstructListBoxL - end" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::InitializeSettingItemsL
+// Draws setting items at the first time after the initialization is completed
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::InitializeSettingItemsL()
+    {
+    CSCSETUIDEBUG( 
+        "CCSCSettingsUiMainContainer::InitializeSettingItemsL - begin" );
+    
+    // Get supported subservices
+    TSupportedSubServices supSubServices;
+    iModel.CCHHandler().SupportedSubServicesL( 
+            iModel.CurrentSPEntryId(), supSubServices );
+
+    // Make username setting
+    MakeSettingItemL ( TMainListBoxItem::EUsername );
+    
+    // Make password setting
+    MakeSettingItemL ( TMainListBoxItem::EPassword );
+
+    // Make preferred service setting item if voip subservice is supported
+    if ( supSubServices.iVoIP )
+        {
+        TBool isSipVoip( EFalse );     
+        TRAPD( err, isSipVoip = iModel.SettingsHandler().IsSipVoIPL(
+            iModel.CurrentSPEntryId() ) );
+           
+        if ( !err )
+            {
+            if ( isSipVoip && iModel.SettingsHandler().IsVccSupportedL( 
+                iModel.CurrentSPEntryId() ) )
+                {
+                // If VCC is supported make vcc preferred setting item
+                // and handover notification tone setting item
+                MakeSettingItemL ( TMainListBoxItem::EVccPreferredService );
+                MakeSettingItemL ( TMainListBoxItem::EHandoverNotifTone );
+                }
+            else
+                {
+                // If VCC is not supported make just preferred service setting
+                MakeSettingItemL ( TMainListBoxItem::EPreferredService );
+                }
+            }
+        }
+            
+    // Make setting item if IM is supported by service
+    if ( supSubServices.iIm )
+        {
+        // IM tone setting.
+        MakeSettingItemL( TMainListBoxItem::EImTone );
+        }
+    
+    // Make setting item if presence is supported by service
+    if ( supSubServices.iPresence )
+        {
+        // Presence request preference
+        MakeSettingItemL( TMainListBoxItem::EAutoacceptInv );
+        }
+    
+    // Connectivity setting (cannot be changed)
+    MakeSettingItemL( TMainListBoxItem::EServiceConn );
+    
+    
+    CSCSETUIDEBUG( 
+        "CCSCSettingsUiMainContainer::InitializeSettingItemsL - end" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::MakeSettingItemL
+// Constructs setting list items.
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::MakeSettingItemL(
+    TMainListBoxItem::TSettingItems aItem )
+    {
+    CSCSETUIDEBUG( 
+        "CCSCSettingsUiMainContainer::MakeSettingItemL - begin" );
+    
+    // Get listbox items from model.
+    CTextListBoxModel* model = iListBox->Model();
+    MDesCArray* textArray = model->ItemTextArray();
+    CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
+    
+    TBuf<KCSCSettingsUiItemLength> listBoxItemText ( KNullDesC );
+    
+    TMainListBoxItem listBoxItem;
+    listBoxItem.iItem = aItem;
+    
+    RBuf value;
+    CleanupClosePushL( value );
+    
+    value.CreateL( 1 );
+    value.Copy( KNullDesC );
+       
+    switch ( aItem  )
+        {
+        case TMainListBoxItem::EUsername:
+            {
+            GetUsernameL( value );
+            break;
+            }
+        case TMainListBoxItem::EPassword:
+            {
+            value.ReAllocL( KEmptyPassword().Length() );
+            value.Copy( KEmptyPassword );
+            break;
+            }
+        case TMainListBoxItem::EPreferredService:
+            {
+            GetPreferredServiceSettingL( value );
+            break;
+            }
+        case TMainListBoxItem::EVccPreferredService:
+            {
+            GetVccPreferredServiceSettingL( value );
+            break;
+            }
+        case TMainListBoxItem::EHandoverNotifTone:
+            {
+            GetHandoverNotificationTonePrefL( value );
+            break;
+            }
+        case TMainListBoxItem::EImTone:
+            {
+            GetImToneSettingL( value );
+            break;
+            }
+        case TMainListBoxItem::EAutoacceptInv:
+            {
+            GetPresencePrefSettingL( value );
+            break;
+            }
+        case TMainListBoxItem::EServiceConn:
+            {
+            TRAP_IGNORE( GetSnapSettingL( value ) );
+            break;
+            }
+        default:
+            User::Leave( KErrArgument );
+            break;
+        }
+
+    listBoxItemText.Format(
+            KCSCSettingsUiListItemTextFormat,
+            GetCaptionL( aItem ),
+            &value );
+    
+    CleanupStack::PopAndDestroy( &value );
+    
+    // Add to listbox
+    iListBoxItemArray.Append( listBoxItem );
+    listBoxItems->AppendL( listBoxItemText );
+    iListBox->HandleItemAdditionL();
+    
+    CSCSETUIDEBUG( 
+        "CCSCSettingsUiMainContainer::MakeSettingItemL - end" );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetCaptionL
+// Constructs setting list items.
+// ---------------------------------------------------------------------------
+//
+HBufC* CCSCSettingsUiMainContainer::GetCaptionL( 
+    TMainListBoxItem::TSettingItems aItem )
+    {
+    if( iCaption != NULL )
+        {
+        delete iCaption;
+        iCaption = NULL;
+        }
+        
+    switch ( aItem  )
+        {
+        case TMainListBoxItem::EUsername:
+            {
+            iCaption = StringLoader::LoadL(
+                R_CSCSETTINGSUI_SETTING_USERNAME_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EPassword:
+            {
+            iCaption = StringLoader::LoadL(
+                R_CSCSETTINGSUI_SETTING_PASSWORD_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EPreferredService:
+            {
+            iCaption = StringLoader::LoadL(
+                R_CSCSETTINGSUI_SETTING_PREFERRED_SERVICE_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EVccPreferredService:
+            {
+            iCaption = StringLoader::LoadL(
+                R_CSCSETTINGSUI_SETTING_VCC_PREFERRED_SERVICE_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EHandoverNotifTone:
+            {
+            iCaption = StringLoader::LoadL(
+                R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EImTone:
+            {
+            iCaption = StringLoader::LoadL( 
+                R_CSCSETTINGSUI_SETTING_IM_TONE_TITLE );
+            break;
+            }
+        case TMainListBoxItem::EAutoacceptInv:
+            {
+            iCaption = StringLoader::LoadL( 
+                R_CSCSETTINGSUI_PRESENCE_REQUEST_PREF_TEXT );
+            break;
+            }
+        case TMainListBoxItem::EServiceConn:
+            {
+            iCaption = StringLoader::LoadL( 
+                R_CSCSETTINGSUI_SERVICE_CONNECTIVITY_TEXT );
+            break;
+            }
+        default:
+            User::Leave( KErrArgument );
+            break;
+        }
+    
+    return iCaption;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetUsername
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetUsernameL( RBuf& aUsername )
+    {
+    aUsername.ReAllocL( KCCHMaxUsernameLength );
+    User::LeaveIfError( iModel.CCHHandler().GetConnectionParameter( 
+             iModel.CurrentSPEntryId(), ECchUsername, aUsername ) );
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetPresencePrefSettingL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetPreferredServiceSettingL( RBuf& aValue )
+    {
+    // Select text resource for the current pref telephony value
+    TInt resource = ( iModel.SettingsHandler().IsPreferredTelephonyVoip() &&
+                     iModel.SettingsHandler().IsPreferredService(
+                             iModel.CurrentSPEntryId() ) ) ?
+                     R_CSCSETTINGSUI_SETTING_PREFERRED_SERVICE_ON :
+                     R_CSCSETTINGSUI_SETTING_PREFERRED_SERVICE_OFF;
+                           
+    HBufC* value = StringLoader::LoadLC( resource );
+    aValue.ReAllocL( value->Length() );
+    aValue.Copy( value->Des() );
+    CleanupStack::PopAndDestroy( value );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetVccPreferredServiceSettingL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetVccPreferredServiceSettingL( RBuf& aValue )
+    {
+    // Select text resource for the current pref telephony value
+    TInt resource = ( iModel.SettingsHandler().IsPreferredTelephonyVoip() &&
+                     iModel.SettingsHandler().IsPreferredService(
+                             iModel.CurrentSPEntryId() ) ) ?
+                     R_CSCSETTINGSUI_SETTING_VCC_PREFERRED_SERVICE_ON :
+                     R_CSCSETTINGSUI_SETTING_VCC_PREFERRED_SERVICE_OFF;
+                           
+    HBufC* value = StringLoader::LoadLC( resource );
+    aValue.ReAllocL( value->Length() );
+    aValue.Copy( value->Des() );
+    CleanupStack::PopAndDestroy( value );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetHandoverNotificationToneL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetHandoverNotificationTonePrefL( 
+    RBuf& aValue )
+    {
+    HBufC* value = NULL;
+    TOnOff onOff = EOff;
+    
+    TRAPD( err, onOff = iModel.SettingsHandler().HandoverNotifTonePrefL( 
+        iModel.CurrentSPEntryId() ) );
+    
+    if ( KErrNotFound == err )
+        {
+        iModel.SettingsHandler().SetHandoverNotifTonePrefL( 
+            iModel.CurrentSPEntryId(), EOff );
+        }
+    else if ( err )
+        {
+        User::Leave( err );    
+        }
+    else
+        {
+        // nothing to do
+        }
+                   
+    if ( EOff == onOff )
+        {
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_OFF );
+        }
+    else if ( EOn == onOff)
+        {            
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_ON );
+        }
+    else if ( EOONotSet == onOff )
+        {            
+        iModel.SettingsHandler().SetHandoverNotifTonePrefL( 
+            iModel.CurrentSPEntryId(), EOff );
+        
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_SETTING_HANDOVER_NOTIF_TONE_OFF );
+        }
+    else
+        {
+        User::Leave( KErrGeneral );     
+        }
+       
+    aValue.ReAllocL( value->Length() );
+    aValue.Copy( value->Des() );
+           
+    CleanupStack::PopAndDestroy( value );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetImToneSettingL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetImToneSettingL( RBuf& aValue )
+    {
+    aValue.ReAllocL( KCSCMaxImToneLength );
+    
+    MVIMPSTSettingsStore* settings = CVIMPSTSettingsStore::NewLC();
+    
+    TInt err = settings->GetL( 
+        iModel.CurrentSPEntryId(), EServiceToneFileName, aValue );
+    
+    // If tone path is not found from settings, set Off text
+    if ( KErrNotFound == err || aValue.Length() < 2 )
+        {
+        HBufC* noToneSelected = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_IM_TONE_OFF );
+        
+        User::LeaveIfError( settings->SetL( 
+            iModel.CurrentSPEntryId(), EServiceToneFileName, *noToneSelected ) );       
+
+        // Get tone.
+        User::LeaveIfError( settings->GetL( 
+            iModel.CurrentSPEntryId(), EServiceToneFileName, aValue ) );
+        
+        CleanupStack::PopAndDestroy( noToneSelected );
+        }
+    else if ( err )
+        {        
+        User::Leave( err );
+        }
+    else
+        {
+        // KErrNone -> do nothing
+        }
+    
+    TInt pos( 0 );    
+    while ( KErrNotFound != pos )
+        {
+        pos = aValue.Find( KDoubleBackSlash );
+        aValue.Delete( 0, pos+1 );
+        }
+    
+    CleanupStack::PopAndDestroy();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetPresencePrefSettingL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetPresencePrefSettingL( RBuf& aValue )
+    {
+    HBufC* value = NULL;
+    TOnOff onOff = EOff;
+            
+    TRAPD( err, onOff = iModel.SettingsHandler().PresenceReqPrefL( 
+            iModel.CurrentSPEntryId() ) );
+            
+    if ( KErrNotFound == err )
+        {
+        iModel.SettingsHandler().SetPresenceReqPrefL( 
+                iModel.CurrentSPEntryId(), EOff );
+        }
+    else if ( err )
+        {
+        User::Leave( err );    
+        }
+    else
+        {
+        // nothing to do
+        }
+                
+    if ( EOff == onOff )
+        {
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_PRES_PREF_ALWAYS_ASK );
+        }
+    else if ( EOn == onOff)
+        {            
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_PRES_PREF_ACCEPT_AUTOMATICALLY );
+        }
+    else if ( EOONotSet == onOff )
+        {            
+        // Set presence request preference setting default value "off"
+        iModel.SettingsHandler().SetPresenceReqPrefL( 
+            iModel.CurrentSPEntryId(), EOff );
+        
+        value = StringLoader::LoadLC( 
+            R_CSCSETTINGSUI_PRES_PREF_ALWAYS_ASK );
+        }
+    else
+        {
+        User::Leave( KErrGeneral );     
+        }
+    
+    aValue.ReAllocL( value->Length() );
+    aValue.Copy( value->Des() );
+        
+    CleanupStack::PopAndDestroy( value ); 
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainContainer::GetSnapSettingL
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::GetSnapSettingL( RBuf& aValue )
+    {
+    // Get Snap name
+    HBufC* snapName = NULL;
+    TInt snapId( 0 );
+    TInt err = iModel.CCHHandler().GetConnectionParameter( 
+       iModel.CurrentSPEntryId(), ECchSnapId, snapId );       
+               
+    // If no error, try to get snap name.
+    if ( KErrNone == err )
+        {
+        snapName = iModel.DestinationsHandler().SnapNameL( snapId );
+        
+        if ( snapName )
+           {
+           CleanupStack::PushL( snapName );
+           aValue.ReAllocL( snapName->Length() );
+           aValue.Copy( snapName->Des() );
+           CleanupStack::PopAndDestroy( snapName );
+           }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+TInt CCSCSettingsUiMainContainer::CountComponentControls() const
+    {
+    return 1;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::SizeChanged()
+    {
+    iListBox->SetRect( Rect() );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CoeControl
+// CCSCSettingsUiMainContainer::FocusChanged
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainContainer::FocusChanged( 
+    TDrawNow aDrawNow )
+    {
+    CCoeControl::FocusChanged( aDrawNow );
+    
+    if( iListBox )
+        {
+        iListBox->SetFocus( IsFocused() );
+        }
+    }