cmmanager/cmmgr/Framework/Src/cmconnsettingsuiimpl.cpp
branchRCL_3
changeset 57 05bc53fe583b
parent 55 fc7b30ed2058
child 58 83ca720e2b9a
--- a/cmmanager/cmmgr/Framework/Src/cmconnsettingsuiimpl.cpp	Thu Aug 19 10:18:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1163 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Implementation of application setting UI.
-*
-*/
-
-#include <coemain.h>
-#include <featmgr.h>
-#include <data_caging_path_literals.hrh>
-#include <StringLoader.h>
-#include <cmmanager.rsg>
-#include <AknsUtils.h>
-#include <ConnectionUiUtilities.h>
-
-
-#include <cmcommonconstants.h>
-#include "cmapplicationsettingsui.h"
-#include <cmmanager.h>
-#include "cmmanagerimpl.h"
-#include "cmdestinationimpl.h"
-#include "cmmanagerimpl.h"
-#include <cmpluginbaseeng.h>
-#include <cmpluginbase.h>
-#include "cmconnsettingsuiimpl.h"
-#include "cmconnselectrbpage.h"
-
-using namespace CMManager;
-
-typedef struct
-    {
-    TInt                iCmIapId;
-    TInt                iCmDefaultPriority;
-    }TCmListItem;
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::NewL
-//---------------------------------------------------------------------------
-//
-EXPORT_C CCmConnSettingsUiImpl* CCmConnSettingsUiImpl::NewL( CCmManagerImpl* aCCmManagerImpl )
-    {
-    CCmConnSettingsUiImpl* self = 
-                                new (ELeave) CCmConnSettingsUiImpl();
-    CleanupStack::PushL( self );
-    self->ConstructL( aCCmManagerImpl );
-    CleanupStack::Pop( self );   // self
-    return self;
-    }
-    
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::NewL
-//---------------------------------------------------------------------------
-//
-CCmConnSettingsUiImpl* CCmConnSettingsUiImpl::NewWithoutTablesL()
-    {
-    CCmConnSettingsUiImpl* self = 
-                                new (ELeave) CCmConnSettingsUiImpl();
-    CleanupStack::PushL( self );
-    self->iCreateTables = EFalse;
-    self->ConstructL( NULL );
-    CleanupStack::Pop( self );   // self
-    return self;
-    }    
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::TCmDCSettingSelection
-//---------------------------------------------------------------------------
-//
-CCmConnSettingsUiImpl::CCmConnSettingsUiImpl()
-    : iResourceReader( *CCoeEnv::Static() )
-    , iAreDestinations ( ETrue )
-    , iShowAlwaysAsk( EFalse )
-    , iShowEasyWlan( EFalse )
-    , iShowVirtualCMs( ETrue )
-    , iShowEmptyDestinations( EFalse )
-    , iShowAskOnce( EFalse )
-    , iShowUncat( EFalse )
-    , iShowDefConn( EFalse )
-    , iUsePassedDestinationArray( EFalse )
-    , iHelpContext ( KSET_HLP_APP_DEST_ASSOC_VIEW )
-    , iCreateTables( ETrue )
-    {
-    }
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::~TCmDCSettingSelection
-//---------------------------------------------------------------------------
-//
-CCmConnSettingsUiImpl::~CCmConnSettingsUiImpl()
-    {
-    if ( iOwnCmManager )
-        {
-        delete iCmManagerImpl;
-        }    
-    iResourceReader.Close();
-    iItems.Close();
-    iPassedDestinations.Close();
-    }
-
-//---------------------------------------------------------------------------
-// CCmConnSettingsUiImpl::LoadResourceL
-// Load the resource for the dll module
-//---------------------------------------------------------------------------
-//
-TInt CCmConnSettingsUiImpl::LoadResourceL ()
-    {    
-    // Add resource file.
-    TParse* fp = new(ELeave) TParse(); 
-    TInt err = fp->Set( KACMManagerResDirAndFileName, 
-                        &KDC_RESOURCE_FILES_DIR, 
-                        NULL ); 
-    if ( err != KErrNone)
-        {
-        User::Leave( err );
-        }   
-
-    TFileName resourceFileNameBuf = fp->FullName();
-    delete fp;
-
-    iResourceReader.OpenL( resourceFileNameBuf );
-    return err;
-    }
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::ConstructL()
-//---------------------------------------------------------------------------
-//
-void CCmConnSettingsUiImpl::ConstructL( CCmManagerImpl* aCCmManagerImpl )
-    {
-    iOwnCmManager = !(aCCmManagerImpl);
-    if ( iOwnCmManager )
-        {
-        if (iCreateTables)
-            {
-            iCmManagerImpl = CCmManagerImpl::NewL();            
-            }
-        else
-            {
-            iCmManagerImpl = CCmManagerImpl::NewL(EFalse);                            
-            }
-        }
-    else
-        {
-        iCmManagerImpl = aCCmManagerImpl;
-        }
-    LoadResourceL();
-    AknsUtils::SetAvkonSkinEnabledL( ETrue );
-    }
-
-//---------------------------------------------------------------------------
-// CCmConnSettingsUiImpl::ShowConnSelectRadioPageL
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::ShowConnSelectRadioPageL( 
-                                           TCmDCSettingSelection& aSelection, 
-                                           const TInt aTitleStringResource,
-                                           TBearerFilterArray& aFilterArray )
-    {
-    TBool retVal( EFalse );
-//    aSelection.iResult = EDCAlwaysAsk;
-
-    CDesCArrayFlat* items = 
-                    new ( ELeave ) CDesCArrayFlat( KCmArrayBigGranularity );
-    CleanupStack::PushL( items );
-    
-    if (iAreDestinations)
-        {
-        BuildDestinationArrayL( items, aFilterArray );        
-        }
-    else    
-        {
-        BuildCMArrayL( items, aFilterArray ); 
-               
-        }
-    // Uncategorized connection methods
-    RPointerArray<CCmPluginBase> uncatArray( KCmArraySmallGranularity );
-    CCmManagerImpl::CleanupResetAndDestroyPushL< RPointerArray<CCmPluginBase> >( uncatArray );
-    if ( iShowUncat )
-        {
-        BuildUncatArrayL( uncatArray, items,
-                    aFilterArray);
-        }
-    //appending items in reverse order of priority    
-    // Check if Ask Once should be shown 
-    if ( iShowAskOnce )
-        {
-        HBufC* buf = StringLoader::LoadLC( R_CMMANAGERUI_SETT_ASK_ONCE );
-        items->InsertL( 0, *buf );
-        iItems.InsertL( KDestItemAskOnce, 0 );
-        CleanupStack::PopAndDestroy( buf );    
-        }
-
-    // Check if Always Ask should be shown
-    if ( iShowAlwaysAsk )
-        {
-        HBufC* buf = StringLoader::LoadLC( R_CMMANAGERUI_SETT_ALWAYS_ASK );
-        items->InsertL( 0, *buf );
-        iItems.InsertL( KDestItemAlwaysAsk, 0 );
-        CleanupStack::PopAndDestroy( buf );    
-        }
-    // Check if Default Connection should be shown 
-    //feautre flag
-    if ( iCmManagerImpl->IsDefConnSupported() )
-        {
-        //client's selection
-        if ( iShowDefConn )
-            {
-            HBufC* buf = StringLoader::LoadLC( R_CMMANAGERUI_SETT_DEFAULT_CONNECTION );
-            items->InsertL( 0, *buf );
-            iItems.InsertL( KDestItemDefaultConnection, 0 );
-            CleanupStack::PopAndDestroy( buf );    
-            } 
-        }
-    if (!items->Count())
-        {
-        User::Leave(KErrConnectionNotFound);           
-        }
-    
-    TInt listIndex(0);
-    
-    if (iAreDestinations)
-        {
-        switch ( aSelection.iResult )
-                {
-                case EDCDestination:
-                    {
-                    TInt newIndex = iItems.Find(aSelection.iId);
-                    if (newIndex >=0)
-                        {
-                        listIndex = newIndex;
-                        }
-                    break;
-                    }
-                case EDCConnectionMethod:
-                    {
-                    TInt err(KErrNotFound);
-                    CCmPluginBase* cm = NULL;
-                    TRAP( err, cm = iCmManagerImpl->GetConnectionMethodL(aSelection.iId));
-                    if ( err == KErrNone )
-                        {
-                        // connection method is valid
-                        CleanupStack::PushL( cm );
-                        TUint32 parentId = 0;
-                        CCmDestinationImpl* parent = cm->ParentDestination();
-                        if (parent)
-                            {
-                            // it has a parent, get it's id
-                            parentId = parent->Id();
-                            delete parent;
-                            }
-                        else
-                            {
-                            // no parent means Uncategorised
-                            parentId = KDestItemUncategorized;
-                            }
-                        // get the index based on id    
-                        TInt tempIndex = iItems.Find( parentId );
-                        if ( tempIndex != KErrNotFound )
-                            {
-                            // found destination id in list
-                            listIndex = tempIndex;
-                            }                            
-                        CleanupStack::PopAndDestroy( cm );
-                        }
-                    break;
-                    }
-                case EDCDefaultConnection:
-                    {
-                    TInt newIndex = iItems.Find(KDestItemDefaultConnection);
-                    if (newIndex >=0)
-                        {
-                        listIndex = newIndex;
-                        }
-                    break;
-                    }
-                case EDCAlwaysAsk:
-                    {
-                    TInt newIndex = iItems.Find(KDestItemAlwaysAsk);
-                    if (newIndex >=0)
-                        {
-                        listIndex = newIndex;
-                        }
-                    break;
-                    }
-                case EDCAskOnce:
-                    {
-                    TInt newIndex = iItems.Find(KDestItemAskOnce);
-                    if (newIndex >=0)
-                        {
-                        listIndex = newIndex;
-                        }
-                    break;
-                    }                
-                default: // use default value (0)
-                    {
-                    break;
-                    }                            
-                }
-            }
-         else
-            {
-            if (aSelection.iResult == EDCConnectionMethod)
-                {
-                TInt newIndex = iItems.Find(aSelection.iId);
-                if (newIndex >=0)
-                    {
-                    listIndex = newIndex;
-                    }
-                }
-            }
-    
-    if ( aTitleStringResource == R_CMMANAGERUI_DEFAULT_CONNECTION_TITLE )
-        {
-        // It is not allowed to choose Connection Methods 
-        // in Default connection -dialog.
-        //
-        iOpenDestination = EFalse;
-        }
-    
-    if ( UserSelectionDlgL( listIndex, items, aSelection, 
-                            aTitleStringResource,
-                            iOpenDestination) )
-        {
-        // Handle selection
-        
-        switch ( aSelection.iResult )
-            {
-            case EDCConnectionMethod:
-                {
-                // from the first list?
-                if (!iAreDestinations)
-                    {
-                    aSelection.iId = iItems[listIndex];
-                    retVal = ETrue;                    
-                    }
-                else
-                    {
-                    // Uncategorised?
-                    TUint32 destId = iItems[ listIndex ];
-                    if ( destId == KDestItemUncategorized )
-                        {
-                        TBearerFilterArray emptyFilter;
-                        retVal = ShowConnectionMethodsL( uncatArray, 
-                                        aSelection, aTitleStringResource, emptyFilter );
-                        }
-                    else
-                        {
-                        RPointerArray<CCmPluginBase> cmArray ( KCmArrayMediumGranularity );
-                        if ( iShowVirtualCMs ) //create a flat list to show cms in embedded destinations
-                            {
-                            iCmManagerImpl->CreateFlatCMListLC( destId, cmArray);
-                            }
-                         else
-                            {
-                            //append only the cms in the destination
-                            iCmManagerImpl->AppendCmListLC( destId, cmArray ); 
-                            }
-                        retVal = ShowConnectionMethodsL( cmArray, 
-                                        aSelection, aTitleStringResource,
-                                        aFilterArray );
-                        CleanupStack::PopAndDestroy( &cmArray );
-                        }                    
-                    }
-                break;
-                }
-            case EDCDestination:
-                {
-                // Store the destination Id
-                aSelection.iId = iItems[listIndex];
-                retVal = ETrue;
-                break;
-                }
-            case EDCAlwaysAsk:
-                {
-                // nothing more to do
-                retVal = ETrue;
-                break;
-                }        
-            case EDCDefaultConnection:
-                {
-                // nothing more to do
-                retVal = ETrue;
-                break;
-                }            
-            case EDCAskOnce:
-                {
-                // nothing more to do
-                retVal = ETrue;
-                break;
-                }            
-            default:
-                {
-                break;
-                }
-            }
-        }
-
-    CleanupStack::PopAndDestroy( &uncatArray );
-    CleanupStack::PopAndDestroy( items );
-
-    return retVal;
-    }
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::RunSettingsL()
-//---------------------------------------------------------------------------
-//
-EXPORT_C TBool CCmConnSettingsUiImpl::RunApplicationSettingsL( 
-                                        TCmSettingSelection& aSelection, 
-                                        TUint aListItems,
-                                        TBearerFilterArray& aFilterArray)
-    {
-    iItems.Close();
-    iAreDestinations = ETrue;
-    if (!aListItems)
-        {
-        User::Leave(KErrArgument);        
-        }
-    if ( !iCmManagerImpl->IsDefConnSupported() &&
-         !(aListItems & EShowAlwaysAsk) &&  
-         !(aListItems & EShowConnectionMethods) &&  
-         !(aListItems & EShowDestinations) 
-         )
-        {
-        // default conn would be the only one but not supported
-        User::Leave(KErrNotSupported);   
-        }
-
-    if ( aListItems & EShowDefaultConnection )
-        {
-        EnableDefConn( ETrue );        
-        }
-    else
-        {
-        EnableDefConn( EFalse );                
-        }
-    if (aListItems & EShowAlwaysAsk)
-        {
-        EnableAlwaysAsk( ETrue );
-        }
-    else
-        {
-        EnableAlwaysAsk( EFalse );
-        }
-    if ( (aListItems & EShowConnectionMethods) && (aListItems & EShowDestinations) )
-        {
-        iOpenDestination = ETrue;
-        iShowUncat = ETrue;
-        }
-    else
-        {
-        iOpenDestination = EFalse;
-        }
-    if ( (aListItems & EShowConnectionMethods) && !(aListItems & EShowDestinations) )
-        {
-        iAreDestinations = EFalse;
-        GetCMArrayL( );            
-        }
-    else if ( aListItems & EShowDestinations )
-        {
-        if (iUsePassedDestinationArray)
-            {
-            // now fill up iItems
-            for( TInt i=0; i<iPassedDestinations.Count(); i++)
-                {
-                iItems.Append(iPassedDestinations[i]);
-                }
-            }
-        else
-            {
-            iCmManagerImpl->AllDestinationsL( iItems );
-            TInt i( 0 );
-            TInt count = iItems.Count();
-            for ( i=0; i < count; i++ )
-                {
-                if ( iItems[i] > 0 && iItems[i] < 255 )
-                    {
-                    CCmDestinationImpl* dest = 
-        	                            iCmManagerImpl->DestinationL( iItems[i] );
-                    CleanupStack::PushL( dest );
-        	        if ( dest->IsHidden() )
-                        {
-                        iItems.Remove(i);
-                        i--;
-                        count = count-1;
-                        }
-                    CleanupStack::PopAndDestroy();
-                    }
-                }
-            iItems.Compress();
-            }
-        }
-
-    TBool ret = EFalse;
-    TCmDCSettingSelection userDefSelection;
-
-    // convert selection
-    switch ( aSelection.iResult )
-        {
-        case EDestination: 
-            {
-            userDefSelection.iResult = EDCDestination; 
-            userDefSelection.iId = aSelection.iId;        
-            break;
-            }
-            
-        case EConnectionMethod: 
-            {
-            userDefSelection.iResult = EDCConnectionMethod; 
-            userDefSelection.iId = aSelection.iId;        
-            break;
-            }
-
-        case EDefaultConnection: 
-            {
-            userDefSelection.iResult = EDCDefaultConnection; 
-            userDefSelection.iId = 0;
-            break;
-            }
-
-        case EAlwaysAsk: 
-            {
-            userDefSelection.iResult = EDCAlwaysAsk; 
-            userDefSelection.iId = 0;
-            break;
-            }
-
-        default: 
-            {
-            // do not leave, perhaps there was no default selection
-            }                            
-        }
-    
-    
-    
-    if ( ShowConnSelectRadioPageL( userDefSelection, 
-            R_CMMANAGERUI_SETT_DESTINATION , aFilterArray))
-        {
-        switch ( userDefSelection.iResult )
-            {
-            case EDCDestination:
-                {
-                aSelection.iResult = EDestination;
-                aSelection.iId = userDefSelection.iId;
-                break;
-                }
-            case EDCConnectionMethod:
-                {
-                aSelection.iResult = EConnectionMethod;
-                aSelection.iId = userDefSelection.iId;
-                break;
-                }
-            case EDCDefaultConnection:
-                {
-                aSelection.iResult = EDefaultConnection;
-                aSelection.iId = 0;
-                break;
-                }
-            case EDCAlwaysAsk:
-                {
-                aSelection.iResult = EAlwaysAsk;
-                aSelection.iId = 0;
-                break;
-                }
-            default: //should not ever get here, unhandled branch
-                {
-                User::Leave( KErrGeneral );
-                break;
-                }                            
-            }
-        ret = ETrue;
-        }
-    else
-        {
-        ret = EFalse;
-        }
-    return ret;        
-    }    
-
-    
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::RunDefaultConnecitonRBPageL()
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::RunDefaultConnecitonRBPageL( 
-                                          TCmDCSettingSelection& aSelection )
-    {
-    iHelpContext = KSET_HLP_DEFAULT_CONN;
-    iItems.Close();
-    iOpenDestination = ETrue;
-    iCmManagerImpl->AllDestinationsL( iItems );
-    EnableAlwaysAsk( EFalse );
-    EnableAskOnce( EFalse );
-    EnableUncat( EFalse );
-    TBearerFilterArray aFilterArray;
-    iAreDestinations = ETrue;
-    iShowEmptyDestinations = ETrue;
-    return  ShowConnSelectRadioPageL( aSelection , 
-        R_CMMANAGERUI_DEFAULT_CONNECTION_TITLE, aFilterArray );
-    }
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::GetCMArrayL()
-//---------------------------------------------------------------------------
-//
-void CCmConnSettingsUiImpl::GetCMArrayL( )
-    {
-    iCmManagerImpl->ConnectionMethodL( iItems, ETrue, EFalse,EFalse, ETrue );
-    TInt count = iItems.Count();
-
-    if ( !iShowVirtualCMs )
-        {
-        // Don't show virtual CMs
-        for ( TInt i = 0; i < count; i++ )
-            {
-            if ( IsCmVirtualL( iItems[i] ) )
-                {
-                iItems.Remove( i );
-                count--;
-                i--;
-                }
-            }
-        }
-    }
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::BuildCMArrayL()
-//---------------------------------------------------------------------------
-//
-void CCmConnSettingsUiImpl::BuildCMArrayL( CDesCArrayFlat* aItems, 
-                                           TBearerFilterArray& aFilterArray )
-    {
-    // Add the New Connection Item        
-    for ( TInt i = 0; i < iItems.Count(); i++ )
-        {
-        CCmPluginBase* cm = NULL;
-        TInt err(KErrNone);
-        TRAP( err, cm = iCmManagerImpl->GetConnectionMethodL(iItems[i]));
-        if (err == KErrNoMemory)
-        {
-            User::Leave(KErrNoMemory);
-        }
-        else if (err != KErrNone)
-        {
-            continue;
-        }                            
-        CleanupStack::PushL( cm );
-        if (aFilterArray.Count())
-            {
-            TUint cmBearerType = cm->GetIntAttributeL( ECmBearerType );
-            if ( aFilterArray.Find( cmBearerType ) == KErrNotFound )
-                {
-                CleanupStack::PopAndDestroy( cm );            
-                iItems.Remove(i);
-                i--;
-                continue;    
-                }
-            }
-        // CM Iap Id
-        TUint32 cmId = cm->GetIntAttributeL( ECmId );
-                                
-        // Should virtual bearer types be shown?
-        if ( iShowVirtualCMs || !IsCmVirtualL( cmId ) )
-            {
-            // CM name
-            HBufC* cmName = cm->GetStringAttributeL( ECmName );
-            CleanupStack::PushL( cmName );
-            // embedded destination has a special text format
-            aItems->AppendL( *cmName );
-            CleanupStack::PopAndDestroy( cmName );
-            }
-        CleanupStack::PopAndDestroy( cm );            
-        }
-    }
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::BuildDestinationArray()
-//---------------------------------------------------------------------------
-//
-void CCmConnSettingsUiImpl::BuildDestinationArrayL( CDesCArrayFlat* aItems, 
-                                         TBearerFilterArray& aFilterArray )
-    {
-    /*
-     * The behavior of this function is as follow.
-     * 1. If aFilterArray.Count() == 0 (This just means no filter provided by user) then the function will
-     *    show all of available destinations (if iShowVirtualCMs == ETrue; Otherwise, destination with only
-     *    virtualCMs will be filted out) (default).
-     * 2. If aFilterArray.Count() != 0 then destination with only unavailable bearer-type IAPs will be 
-     *    filted out.
-     */
-    TInt count = iItems.Count();           
-    // Add the New Connection Item
-    for ( TInt i = 0; i < count; i++ )
-        {
-        // Get the destinations from their IDs
-        CCmDestinationImpl* dest = 
-                            iCmManagerImpl->DestinationL( iItems[i] );
-        CleanupStack::PushL( dest );
-
-        TInt cmCount = dest->ConnectionMethodCount();
-        TInt validCmCount = cmCount;
-        
-        if ( !iUsePassedDestinationArray )
-            {
-            // Check if empty destinations should be displayed
-            if ( !iShowVirtualCMs || aFilterArray.Count())
-                {            
-                for ( TInt j = 0; j < cmCount; j++ )
-                    {
-                    CCmPluginBase& cm = *dest->GetConnectionMethodL(j);
-                    // check if this destination only contains virtual CMs
-                    if (!iShowVirtualCMs)// See if the virtual CM (Default in case no filter provided by user)
-                        {
-                        // CM Iap Id
-                        TUint32 cmIapId = cm.GetIntAttributeL( ECmId );                
-                        // real CMs were found
-                        if ( IsCmVirtualL( cmIapId ) )
-                            {
-                            validCmCount--;
-                            continue;
-                            }
-                        // We can not break the loop with else case here
-                        // for cm might be filted out by aFilterArray
-                        }
-                    
-                    if (aFilterArray.Count()) // See if the CM is filtered out
-                        {                       
-                        TUint cmBearerType = cm.GetIntAttributeL( ECmBearerType );
-                        if ( aFilterArray.Find( cmBearerType ) == KErrNotFound )
-                            {
-                            validCmCount--;
-                            }
-                        else
-                            {
-                            break;//there is at least one CM in this dest    
-                            }                    
-                        }
-                    }
-                }
-            }
-        
-        // check if the destination should be omitted
-        // check if empty destinations should be displayed
-        
-        // We can use a destination to make a connection only
-        // if it contains something else than an empty embedded
-        // destination. Otherwise, consider it empty.
-        TBool canUseDestToConnect = dest->CanUseToConnectL();
-        
-        if ( iDestinationToOmit != iItems[i] && 
-                            ( ( validCmCount && canUseDestToConnect )
-                               || iShowEmptyDestinations ) )
-            {
-            // Check whether the MMS SNAP is in question. 
-            // It should not be shown on the UI in the destinations list
-            TInt snapMetadata = 0;
-            TRAPD( metaErr, snapMetadata = dest->MetadataL( CMManager::ESnapMetadataPurpose ));
-            if ( metaErr == KErrNone && snapMetadata == CMManager::ESnapPurposeMMS )
-                {
-                iItems.Remove(i);
-                count--;
-                i--;
-                }
-            else
-                {
-                HBufC* destName = dest->NameLC();
-
-                aItems->AppendL( *destName );
-                CleanupStack::PopAndDestroy( destName );
-                }
-            }
-        else
-            {
-            iItems.Remove(i);
-            count--;
-            i--;
-            }
-            
-        CleanupStack::PopAndDestroy( dest );
-        }
-    }
-    
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::BuildUncatArrayL()
-//---------------------------------------------------------------------------
-//
-void CCmConnSettingsUiImpl::BuildUncatArrayL( RPointerArray<CCmPluginBase>& aUncatArray,
-                                           CDesCArrayFlat* aItems, 
-                                           TBearerFilterArray& aFilterArray )
-    {
-    if ( iShowEasyWlan )
-        {
-        // Get the uncategorised CMs including EasyWLAN
-        iCmManagerImpl->AppendUncatCmListL( aUncatArray, ETrue, ETrue, ETrue );
-        }
-    else
-        {
-        iCmManagerImpl->AppendUncatCmListL( aUncatArray );
-        }
-    
-    // Remove hidden Connection Methods
-    for ( TInt i = 0; i < aUncatArray.Count(); i++ )
-        {
-        if ( aUncatArray[i]->GetBoolAttributeL( ECmHidden ) )
-            {
-            delete aUncatArray[i];
-            aUncatArray.Remove(i);
-            i--;
-            }
-        }
-        
-    if (aFilterArray.Count())
-        {
-        for ( TInt i = 0; i < aUncatArray.Count(); i++ )
-            {
-            CCmPluginBase* cm = aUncatArray[i];
-            TUint cmBearerType = cm->GetIntAttributeL( ECmBearerType );
-            if ( aFilterArray.Find( cmBearerType ) == KErrNotFound )
-                {
-                delete aUncatArray[i];
-                aUncatArray.Remove(i);
-                i--;
-                }
-            }
-        }
-    TInt count = aUncatArray.Count();
-
-    if ( !iShowVirtualCMs )
-        {
-        // Don't show virtual CMs
-        for ( TInt i = 0; i < count; i++ )
-            {
-            if ( IsCmVirtualL( aUncatArray[i]->GetIntAttributeL( ECmId ) ) )
-                {
-                delete aUncatArray[i];
-                aUncatArray.Remove( i );
-                count--;
-                i--;
-                }
-            }
-        }
-    // Show the 'Uncategorised' destination
-    if ( count )
-        {
-        HBufC* buf = StringLoader::LoadLC( R_CMMANAGERUI_DEST_UNCATEGORIZED );
-        aItems->AppendL( *buf );
-        CleanupStack::PopAndDestroy( buf );        
-        iItems.AppendL( KDestItemUncategorized );
-        }
-    }
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::UserSelectionDlgL()
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::UserSelectionDlgL( 
-                                        TInt& aDestSelected, 
-                                        CDesCArrayFlat* aItems, 
-                                        TCmDCSettingSelection& aSelection, 
-                                        const TInt aTitleStringResource, 
-                                        TBool aOpenDestination)
-    {
-    // Should an item be highlighted?
-    if ( aSelection.iResult == EDCDestination )
-        {
-        for ( TInt i = 0; i < iItems.Count(); i++ )
-            {
-            if ( iItems[i] == aSelection.iId )
-                {
-                aDestSelected = i;
-                }
-            }
-        }
-    
-    HBufC* buf = StringLoader::LoadLC( aTitleStringResource );
-    TInt dialogResourceId = R_RADIO_BUTTON_SETTING_PAGE_OK_CANCEL;
-    if ( aOpenDestination ) // OPTIONS/CANCEL is available only if we can open
-                            //destinations
-        {
-        dialogResourceId = R_RADIO_BUTTON_SETTING_PAGE;
-        }
-    CCMConnSelectRBPage* page = 
-                        new ( ELeave ) CCMConnSelectRBPage( dialogResourceId,
-                                                         aDestSelected, 
-                                                         aItems,
-                                                         *iCmManagerImpl,
-                                                         aSelection.iResult,
-                                                         iItems,
-                                                         iAreDestinations,
-                                                         aOpenDestination ,
-                                                         iHelpContext );
-    CleanupStack::PushL( page );
-    page->SetSettingTextL( *buf );
-    CleanupStack::Pop( page );
-    
-    CleanupStack::PopAndDestroy( buf );
-    buf = NULL;
-    
-    return page->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
-    }    
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::UserSelectedUncatItemL()
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::UserSelectedUncatItemL(
-                                           RPointerArray<CCmPluginBase>& aUncatArray,
-                                           TCmDCSettingSelection& aSelection, 
-                                        const TInt aTitleStringResource )
-    {
-    TBool retVal( EFalse );
-    CDesCArrayFlat* items = 
-                    new ( ELeave ) CDesCArrayFlat( KCmArrayBigGranularity );
-    CleanupStack::PushL( items );
-
-    TInt cmSelected( 0 );
-
-    TInt count = aUncatArray.Count();
-    for ( TInt i = 0; i < count; ++i )     
-        {
-        CCmPluginBase* cm = NULL;
-        TRAPD( err,
-               cm = iCmManagerImpl->GetConnectionMethodL( aUncatArray[i]->GetIntAttributeL( ECmId) ) 
-               );
-        
-        if ( !err )
-            {
-            CleanupStack::PushL( cm );
-            HBufC* cmName = cm->GetStringAttributeL( ECmName );
-            CleanupStack::PushL( cmName );
-            items->AppendL( *cmName );
-            
-            // Virtual CMs have underlying CMs, highlight
-            if ( cm->GetBoolAttributeL( ECmVirtual ) )
-                {
-                TUint32 iapId (0);
-                iapId = cm->GetIntAttributeL( ECmNextLayerIapId );
-                if ( iapId && iapId == aSelection.iId )
-                    {
-                    cmSelected = i;
-                    }
-                }            
-            CleanupStack::PopAndDestroy( 2, cm );
-            }
-        else
-            {
-            //not handled iap, remove from list
-            aUncatArray.Remove( i );
-            count--;
-            i--;
-            }
-        }
-    
-    
-    CAknRadioButtonSettingPage* rbPage = 
-                new ( ELeave ) CAknRadioButtonSettingPage(
-                                    R_RADIO_BUTTON_SETTING_PAGE_OK_CANCEL, 
-                                    cmSelected, 
-                                    items );
-    CleanupStack::PushL( rbPage );
-                        
-    HBufC* buf = StringLoader::LoadLC( aTitleStringResource );    
-    rbPage->SetSettingTextL( *buf );
-    CleanupStack::PopAndDestroy( buf );
-    
-    if ( rbPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
-        {
-        CCmPluginBase* cm = 
-                iCmManagerImpl->GetConnectionMethodL( aUncatArray[cmSelected]->GetIntAttributeL( ECmId) );
-
-        // ECmIapId can be surely queried here. It won't leave, but PushL to be
-        // on the safe side
-        CleanupStack::PushL( cm );
-        aSelection.iId = cm->GetIntAttributeL( ECmId );
-        CleanupStack::PopAndDestroy( cm );
-
-        aSelection.iResult = EDCConnectionMethod; 
-        
-        retVal = ETrue;
-        }
-    CleanupStack::Pop( rbPage );
-    CleanupStack::PopAndDestroy( items );
-    
-    return retVal;
-    }
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::ShowConnectionMethodsL()
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::ShowConnectionMethodsL( 
-                    RPointerArray<CCmPluginBase>& aCmArray, TCmDCSettingSelection& aSelection, 
-                    const TInt aTitleStringResource,
-                    TBearerFilterArray& aFilterArray  )
-    {
-    TInt retVal ( EFalse );
-    
-    // List texts
-    CDesCArrayFlat* items = 
-            new ( ELeave ) CDesCArrayFlat( KCmArrayMediumGranularity );
-    CleanupStack::PushL( items );
-    
-    // keeps track of the CMs in the list
-    
-    // idArray is used to put valid IAP ID.
-    // aFilterArray might filt some of IAPs (e.g., virtual IAPs) out. In this case,
-    // aCmArray can not be used to select IAP. So, idArray may be used for IAP selection
-    // for it only stores valid IAPs (i.e., not filted-out IAPs).
-    RArray<TUint32> idArray;
-    TInt cmSelected( 0 );
-    TInt j( 0 );
-    
-    // Collect item texts
-    TInt cmCount = aCmArray.Count();
-    for ( TInt i = 0; i < cmCount; i++ )
-        {
-        // CM info
-        if (aFilterArray.Count())
-            {
-            TUint cmBearerType = aCmArray[i]->GetIntAttributeL( ECmBearerType );
-            if ( aFilterArray.Find( cmBearerType ) == KErrNotFound )
-                {
-                continue;    
-                }
-            }
-        
-        // CM Iap Id
-        TUint32 cmIapId = aCmArray[i]->GetIntAttributeL( ECmId );
-        
-        // Should virtual bearer types be shown?
-        if ( iShowVirtualCMs || !IsCmVirtualL( cmIapId ) )
-            {
-            // CM name
-            HBufC* name = aCmArray[i]->GetStringAttributeL( ECmName );
-            CleanupStack::PushL( name );
-            
-            items->AppendL( *name );
-            idArray.Append( cmIapId );
-            
-             // Virtual CMs have underlying CMs, highlight
-            if ( cmIapId == aSelection.iId )
-                {
-                cmSelected = j;
-                j++;
-                }
-            
-            CleanupStack::PopAndDestroy( name );
-            }
-        }
-    
-    // create the dialog             
-    CAknRadioButtonSettingPage* dlg = 
-                            new ( ELeave ) CAknRadioButtonSettingPage(
-                                    R_RADIO_BUTTON_SETTING_PAGE_OK_CANCEL,
-                                    cmSelected, 
-                                    items );
-    CleanupStack::PushL( dlg );
-    
-    // Title
-    HBufC* title = StringLoader::LoadLC ( aTitleStringResource );
-    dlg->SetSettingTextL( *title );
-    
-    // Show the dialog
-    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
-        {
-        aSelection.iId = idArray[cmSelected];
-        aSelection.iResult = EDCConnectionMethod; 
-        retVal = ETrue;
-        }
-    idArray.Close();
-    
-    CleanupStack::PopAndDestroy( title );
-    CleanupStack::Pop( dlg );
-    CleanupStack::PopAndDestroy( items );
-    
-    return retVal;
-    }
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::IsCmVirtualL
-//---------------------------------------------------------------------------
-//
-TBool CCmConnSettingsUiImpl::IsCmVirtualL( TUint32 aIapId )
-    {
-    // check if bearer is virtual
-    TInt bearerType = iCmManagerImpl->GetConnectionMethodInfoIntL( 
-                                                aIapId, ECmBearerType );
-    return iCmManagerImpl->GetBearerInfoBoolL( bearerType, ECmVirtual );
-    }
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::CreateDefaultConnectionNameL
-//---------------------------------------------------------------------------
-//
-HBufC* CCmConnSettingsUiImpl::CreateDefaultConnectionNameL( 
-                                            TCmDefConnValue aSelection )
-    {
-    HBufC* ret = NULL;
-    switch ( aSelection.iType )
-        {
-        case ECmDefConnDestination:
-            {
-            CCmDestinationImpl* dest = 
-                        iCmManagerImpl->DestinationL( aSelection.iId );
-            CleanupStack::PushL( dest );
-            ret = dest->NameLC();
-            CleanupStack::Pop( ret );
-            CleanupStack::PopAndDestroy( dest );
-            break;
-            }
-        case ECmDefConnConnectionMethod:
-            {
-            ret = iCmManagerImpl->GetConnectionMethodInfoStringL( 
-                                                aSelection.iId, ECmName );
-            break;
-            }
-        }
-    return ret;
-    }
-   
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::SetDestinationArrayToUseL
-//---------------------------------------------------------------------------
-//
-EXPORT_C void CCmConnSettingsUiImpl::SetDestinationArrayToUseL(
-                                         RArray<TUint32> aDestinationArray )
-    {
-    iPassedDestinations.Close();
-    for (TInt i=0; i<aDestinationArray.Count(); i++)
-        {
-        iPassedDestinations.AppendL(aDestinationArray[i]);
-        }
-    
-    iUsePassedDestinationArray = ETrue;
-    }
-
-
-//---------------------------------------------------------------------------
-//  CCmConnSettingsUiImpl::ClearDestinationArrayToUse
-//---------------------------------------------------------------------------
-//
-EXPORT_C void CCmConnSettingsUiImpl::ClearDestinationArrayToUse()
-    {
-    iPassedDestinations.Close();
-    iUsePassedDestinationArray = EFalse;
-    }
-
-