cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:51 +0100
branchRCL_3
changeset 58 83ca720e2b9a
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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:  Dialog for editing wlan settings for a wlan connection method
*
*/

#include <badesca.h>
#include <cmcommonui.h>
#include <WEPSecuritySettingsUI.h>
#include <WPASecuritySettingsUI.h>
#include <wapisecuritysettingsui.h>
#include <StringLoader.h>
#include <akntextsettingpage.h>
#include <cmwlanui.rsg>
#include <ConnectionUiUtilities.h>
#include <csxhelp/cp.hlp.hrh>
#include <featmgr.h>
#include "cmlogger.h"
#include "cmwlancommonconstants.h"
#include "cmpwlansettingsdlg.h"
#include "cmpwlansettingsdlgadv.h"
#include <cmpluginwlandef.h>
#include "cmpluginwlan.h"
#include "cmpluginmenucommands.hrh"
#include <cmcommonconstants.h>
#include <cmpsettingsconsts.h>
#include "cmmanagerimpl.h"

using namespace CMManager;

const TUint32 KScanSSIDSelectionItems[] = 
    {
    R_QTN_WLAN_SETT_HIDDEN_NETWORK_NO,
    R_QTN_WLAN_SETT_HIDDEN_NETWORK_YES,
    0
    };

const TUint32 KSecModeRBSelectionItems[] = 
    {
    R_QTN_WLAN_SETT_SECURITY_MODE_OPEN,
    R_QTN_WLAN_SETT_SECURITY_MODE_WEP,
    0
    };

const TUint32 KSecModeRBIRSelectionItems[] = 
    {
    R_QTN_WLAN_SETT_SECURITY_MODE_OPEN,
    R_QTN_WLAN_SETT_SECURITY_MODE_WEP,
    R_QTN_WLAN_SETT_SECURITY_MODE_802_1X,
    R_QTN_WLAN_SETT_SECURITY_MODE_WPA,
    0
    };

const TUint32 KSecModeRBIRSelectionItemsWAPI[] = 
    {
    R_QTN_WLAN_SETT_SECURITY_MODE_OPEN,
    R_QTN_WLAN_SETT_SECURITY_MODE_WEP,
    R_QTN_WLAN_SETT_SECURITY_MODE_802_1X,
    R_QTN_WLAN_SETT_SECURITY_MODE_WPA,
    R_QTN_WLAN_SETT_SECURITY_MODE_WAPI,
    0
    };

const TUint32 KNetworkRBSelectionItems[] = 
    {
    R_QTN_WLAN_SETT_NETWORK_MODE_INFRA,
    R_QTN_WLAN_SETT_NETWORK_MODE_ADHOC,
    0
    };

const TUint32 KNWNameSelectionItems[] = 
    {
    R_QTN_WLAN_SETT_NETWORK_NAME_USER_DEFINED,
    R_QTN_WLAN_SETT_NETWORK_NAME_SCAN,
    0
    };
    
// ================= MEMBER FUNCTIONS =======================================

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::NewL()
// --------------------------------------------------------------------------
//
CmPluginWlanSettingsDlg* CmPluginWlanSettingsDlg::NewL( 
                                            CCmPluginBaseEng& aCmPluginBase )
	{
	CmPluginWlanSettingsDlg* self = 
	                new (ELeave) CmPluginWlanSettingsDlg( aCmPluginBase );
	return self;
	}
	
// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::CmPluginWlanSettingsDlg()
// --------------------------------------------------------------------------
//
CmPluginWlanSettingsDlg::CmPluginWlanSettingsDlg(
                                            CCmPluginBaseEng& aCmPluginBase )
    : CmPluginBaseSettingsDlg( aCmPluginBase )
    , iNotifyFromAdv( KCmNotifiedNone )
    {
    
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ConstructAndRunLD
// --------------------------------------------------------------------------
//
TInt CmPluginWlanSettingsDlg::ConstructAndRunLD( )
    {
    // Set this flag to allow edit continue
    iCanEditingContinue = ETrue;
    
    CleanupStack::PushL( this );
    LoadResourceL( KPluginWlanResDirAndFileName );
    CleanupStack::Pop( this );
    
    CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
    cmMgr.WatcherRegisterL( this );
    
    return CmPluginBaseSettingsDlg::ConstructAndRunLD( );
    }

// ---------------------------------------------------------
// CmPluginWlanSettingsDlg::~CmPluginWlanSettingsDlg
// Destructor
// ---------------------------------------------------------
//
CmPluginWlanSettingsDlg::~CmPluginWlanSettingsDlg()
    {
    iResourceReader.Close();
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::RunAdvancedSettingsL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::RunAdvancedSettingsL()
    {
    CmPluginWlanSettingsDlgAdv* AdvDlg = 
                        CmPluginWlanSettingsDlgAdv::NewL( iCmPluginBaseEng );

    if (!iHasSettingChanged)
        {
        iHasSettingChanged = ETrue;
        }                      
    
    // This view may have to un-register as watcher here
    CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
    cmMgr.WatcherUnRegister();
    
    AdvDlg->RegisterParentView( this );
    TInt ret = AdvDlg->ConstructAndRunLD();

    if( iNotifyFromAdv == KCmNotifiedNone )
        {
        if( ret == KDialogUserExit )
            {
            iExitReason = KDialogUserExit;
            ExitSettingsL(EFalse);
            }
        else
            {
            // Re-register as watcher if advanced view comes back or exists normally
            cmMgr.WatcherRegisterL( this );
            }
        }
    else
        {
        HandleCommsDatChangeL();
        }
    }

// --------------------------------------------------------------------------
// CmPluginBaseSettingsDlg::UpdateListBoxContentBearerSpecificL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::UpdateListBoxContentBearerSpecificL( 
                                                    CDesCArray& aItemArray )
    {
    TBool boolSettingVal( EFalse ); // just for helping make code readable
    TInt valResId(0);
    
    // DATA BEARER - only for real bearer types
    AppendSettingTextsL( aItemArray, ECmBearerSettingName );
    // NETWORK NAME
    AppendSettingTextsL( aItemArray, EWlanSSID );
    // NETWORK STATUS
    boolSettingVal = iCmPluginBaseEng.GetBoolAttributeL( EWlanScanSSID );
    AppendSettingTextsL( aItemArray,
                         EWlanScanSSID,
                         boolSettingVal ? 
                            R_QTN_WLAN_SETT_HIDDEN_NETWORK_YES :
                            R_QTN_WLAN_SETT_HIDDEN_NETWORK_NO );
    // WLAN NETWORK MODE    
    switch( iCmPluginBaseEng.GetIntAttributeL( EWlanConnectionMode ) )
        {
        case EAdhoc:
            {
            valResId = R_QTN_WLAN_SETT_NETWORK_MODE_ADHOC;
            break;
            }
        case EInfra:
            // fall-through intended here
        default:
            {
            valResId = R_QTN_WLAN_SETT_NETWORK_MODE_INFRA;
            break;
            }
        }
    
    AppendSettingTextsL( aItemArray, EWlanConnectionMode, valResId );
    // WLAN SECURITY MODE
    switch( iCmPluginBaseEng.GetIntAttributeL( EWlanSecurityMode ) )
        {
        case EWlanSecModeWep :
            {
            valResId = R_QTN_WLAN_SETT_SECURITY_MODE_WEP;
            break;
            }
        case EWlanSecMode802_1x:
            {
            valResId = R_QTN_WLAN_SETT_SECURITY_MODE_802_1X;
            break;
            }
        case EWlanSecModeWpa:
        case EWlanSecModeWpa2:
            {
            valResId = R_QTN_WLAN_SETT_SECURITY_MODE_WPA;
            break;
            }
        case EWlanSecModeWAPI:
            {
            valResId = R_QTN_WLAN_SETT_SECURITY_MODE_WAPI;
            break;
            }
        case EWlanSecModeOpen:
            // fall-through intended here
        default:
            {
            valResId = R_QTN_WLAN_SETT_SECURITY_MODE_OPEN;
            break;
            }
        }
    AppendSettingTextsL( aItemArray, EWlanSecurityMode, valResId );
    // WLAN SECURITY SETTINGS
    AppendSettingTextsL( aItemArray,
                         EWlanSecuritySettings,
                         R_QTN_WLAN_SETT_SECURITY_SETTINGS,
                         0 );
    // HOMEPAGE
    AppendSettingTextsL( aItemArray, ECmStartPage );
    }

    
//---------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ChangeBoolSettingL
//---------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::ChangeBoolSettingL( TUint32 aAttribute, 
                                                  TInt aCommandId )
    {
    // Change was selected from menu
    if ( aCommandId == EPluginBaseCmdChange )
        {
        TInt selected = 
                    iCmPluginBaseEng.GetBoolAttributeL( aAttribute );
        TInt origVal = selected;
                    
        if ( ShowRadioButtonSettingPageL( KScanSSIDSelectionItems, 
                                          selected,
                                          R_QTN_WLAN_SETT_HIDDEN_NETWORK ) &&
             origVal != selected )
             {
             iCmPluginBaseEng.SetBoolAttributeL( aAttribute, 
                                                 selected );
             UpdateListBoxContentL();
             }
        }
    // Selection key was selected
    else        
        {
        switch ( aAttribute )
            {
            case EWlanScanSSID:
                {        
                TBool boolFromCM = EFalse;
                boolFromCM = iCmPluginBaseEng.GetBoolAttributeL( aAttribute );
                iCmPluginBaseEng.SetBoolAttributeL( aAttribute , !boolFromCM );
                UpdateListBoxContentL();              
                break;
                }
            case EWlanConnectionMode:
                {        
                TInt intFromCM = 0;
                intFromCM = iCmPluginBaseEng.GetIntAttributeL( aAttribute );
                iCmPluginBaseEng.SetIntAttributeL( aAttribute , !intFromCM );
                UpdateListBoxContentL();              
                break;
                }
            }
        }
    }

//---------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ShowSecurityModeRBPageL
//---------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::ShowSecurityModeRBPageL()
    {   
    TInt selected = 0;
    TInt secMode = iCmPluginBaseEng.GetIntAttributeL( EWlanSecurityMode );
    const TUint32* items = NULL;
    
    //converting secMode to idex
    switch ( secMode ) 
        {
        case EWlanSecModeOpen:
            {
            selected = 0;
            break;
            }
        case EWlanSecModeWep:
            {
            selected = 1;
            break;
            }
        case EWlanSecMode802_1x:
            {
            selected = 2;
            break;
            }
        case EWlanSecModeWpa:
            {
            selected = 3;
            break;
            }
        // is this a real case?
        case EWlanSecModeWpa2:
            {
            selected = 3;
            break;
            }
        case EWlanSecModeWAPI:
            {
            selected = 4;
            break;
            }
        default:
            {
            User::Leave( KErrNotSupported );
            break;
            }
        }
        
    if ( iCmPluginBaseEng.GetIntAttributeL( EWlanConnectionMode ) == EInfra )
        {
        if ( !FeatureManager::FeatureSupported( KFeatureIdFfWlanWapi ) )
            {
            items = KSecModeRBIRSelectionItems;
            }
        else
            {
            items = KSecModeRBIRSelectionItemsWAPI;
            }
        }
    else
        {
        items = KSecModeRBSelectionItems;
        }

    TInt origVal = selected;
    if ( ShowRadioButtonSettingPageL( items, 
                                      selected, 
                                      R_QTN_WLAN_SETT_SECURITY_MODE ) && 
                                      origVal != selected )
        {
        if ( !iHasSettingChanged )
            {
            iHasSettingChanged = ETrue;
            }
		
        switch ( selected )
            {
            case 0:
                {
                secMode = EWlanSecModeOpen;
                break;
                }
            case 1:
                {
                secMode = EWlanSecModeWep;
                break;
                }
            case 2:
                {
                secMode = EWlanSecMode802_1x;
                break;
                }
            case 3:
                {
                secMode = EWlanSecModeWpa;
                break;
                }
            case 4:
                {
                secMode = EWlanSecModeWAPI;
                break;
                }
            default:
                {
                User::Leave( KErrNotSupported );
                break;
                }
            }
        iCmPluginBaseEng.SetIntAttributeL( EWlanSecurityMode , secMode );
        UpdateListBoxContentL();
        }
    }

//---------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ShowNetworkModeRBPageL
//---------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg:: ShowNetworkModeRBPageL()
    {   
    const TUint32* items = KNetworkRBSelectionItems;
    
    TInt selected;
    
    // convert values to indices for UI
    TInt netMode = iCmPluginBaseEng.GetIntAttributeL( EWlanConnectionMode );
    switch ( netMode )
        {
        case EAdhoc:
            {
            selected = 1;
            break;
            }
        case EInfra:
            {
            selected = 0;
            break;
            }
        }
    
    TInt origVal = selected;
    if ( ShowRadioButtonSettingPageL( items, 
                                      selected,
                                      R_QTN_WLAN_SETT_NETWORK_MODE ) && 
         origVal != selected )
        {
        // convert indices back to proper values
        switch ( selected )
            {
            case 0:
                {
                netMode = EInfra;
                break;
                }
            case 1:
                {
                netMode = EAdhoc;
                TInt secMode = iCmPluginBaseEng.GetIntAttributeL( 
                                                        EWlanSecurityMode );
                if( secMode != EWlanSecModeOpen &&
                    secMode != EWlanSecModeWep )
                    {
                    iCmPluginBaseEng.SetIntAttributeL( EWlanSecurityMode,
                                                       EWlanSecModeOpen );
                    }
                break;
                }
            default:
                {
                User::Leave( KErrNotSupported );
                break;
                }
            }
        iCmPluginBaseEng.SetIntAttributeL( EWlanConnectionMode , netMode );
        UpdateListBoxContentL();
        }    
    }  

//---------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ShowWlanNWNamePageL
//---------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::ShowWlanNWNamePageL()
    {
    const TCmAttribConvTable* convItem = 
                        iCmPluginBaseEng.ConvTableItem( EWlanSSID );
    
    const TUint32* items = KNWNameSelectionItems;
    TInt selected ( EWlanNwNameUserDefined );
    
    // Display a radio button page with options: User defined and Scan for Networks
    if ( ShowRadioButtonSettingPageL( items, 
                                      selected,
                                      R_QTN_WLAN_SETT_NETWORK_NAME ) )
        {
        if ( selected == EWlanNwNameUserDefined )
            {
            HBufC* oldssId = iCmPluginBaseEng.GetStringAttributeL( EWlanSSID );
            CleanupStack::PushL( oldssId );
            
            TBuf<KCmWlanNWNameMaxLength> buf;
            buf.Copy( *oldssId );

            if ( TCmCommonUi::ShowConfirmationQueryWithInputL(
                                           R_QTN_WLAN_PRMPT_NETWORK_NAME,
                                           buf ) )
                {
                if( buf.Compare( *oldssId ) )
                    // SSID is changed
                    {
                    iCmPluginBaseEng.SetStringAttributeL( EWlanSSID, buf );
                    UpdateListBoxContentL();
                    }
                }
            CleanupStack::PopAndDestroy( oldssId );
            }
        else
            {
            // Let's search for a WLAN network
            TWlanSsid ssid;
            TWlanConnectionMode connectionMode;
            TWlanConnectionSecurityMode securityMode;

            CConnectionUiUtilities* uiUtils = CConnectionUiUtilities::NewL();
            CleanupStack::PushL( uiUtils );

            if ( uiUtils->SearchWLANNetwork( ssid, connectionMode, securityMode ) )
                {
                HBufC* temp = HBufC::NewLC( convItem->iMaxLength );
                temp->Des().Copy( ssid );
                iCmPluginBaseEng.SetStringAttributeL( EWlanSSID, *temp );
                CleanupStack::PopAndDestroy( temp );
                
                UpdateListBoxContentL();
                }                
            CleanupStack::PopAndDestroy( uiUtils );
            }
        }
    }

//---------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ShowPopupSettingPageL
//---------------------------------------------------------------------------
//
TBool CmPluginWlanSettingsDlg::ShowPopupSettingPageL( TUint32 aAttribute, 
                                                      TInt aCommandId )
    {    
    TBool retval = EFalse;
    switch( aAttribute )
        {
        // Boolean settings
        case EWlanScanSSID:            
            {
            ChangeBoolSettingL( aAttribute, aCommandId );
            break;
            }
        // Textual Settings
        case ECmStartPage:                
            {
            ShowPopupTextSettingPageL( aAttribute );
            break;
            }
        case EWlanSecurityMode:            
            {
            ShowSecurityModeRBPageL();
            break;
            }
        case EWlanSecuritySettings:
            {
            TInt secmode = iCmPluginBaseEng.GetIntAttributeL( EWlanSecurityMode );
            if(  secmode == EWlanSecModeOpen )
                {
                TCmCommonUi::ShowNoteL( R_QTN_WLAN_INFO_NO_SECURITY_SETTINGS, 
                                        TCmCommonUi::ECmInfoNote);
                }
            else
                {
                TInt exitValue = 
                    STATIC_CAST( CCmPluginWlan*, &iCmPluginBaseEng )->
                           EditSecuritySettingsL( *( CEikonEnv::Static() ) );
                if ( secmode == EWlanSecModeWep )
                    { // WEP
                    if ( exitValue & CWEPSecuritySettings::EExitReq )
                        {
                        iSecDialExit = ETrue;
                        iExitReason = KDialogUserExit;
                        ExitSettingsL(EFalse);
                        }                    
                    }
                else if ( secmode == EWlanSecModeWAPI )
                    {
                    if ( exitValue & CWAPISecuritySettings::EExitReq )
                        {
                        iSecDialExit = ETrue;
                        iExitReason = KDialogUserExit;
                        ExitSettingsL(EFalse);
                        }
                    }
                else
                    {// 802.1x, WPA/WPA2
                    if ( exitValue & CWPASecuritySettings::EExitReq )
                        {
                        iSecDialExit = ETrue;
                        iExitReason = KDialogUserExit;
                        ExitSettingsL(EFalse);
                        }
                    }
                }
            break;
            }
        case EWlanConnectionMode:
            {
            if ( aCommandId == EPluginBaseCmdChange )
                {
                ShowNetworkModeRBPageL();
                }
            else
                {
                TInt netMode = 
                    iCmPluginBaseEng.GetIntAttributeL( EWlanConnectionMode );
                // OK has been used: switch the value without opening the setting page
                if ( netMode == EInfra )
                    {
                    netMode = EAdhoc;
                    TInt secMode = iCmPluginBaseEng.GetIntAttributeL( 
                                                            EWlanSecurityMode );
                    if( secMode != EWlanSecModeOpen &&
                        secMode != EWlanSecModeWep )
                        {
                        iCmPluginBaseEng.SetIntAttributeL( EWlanSecurityMode,
                                                           EWlanSecModeOpen );
                        }
                    }
                else
                    {
                    netMode = EInfra;
                    }
                iCmPluginBaseEng.SetIntAttributeL( EWlanConnectionMode, netMode );
                UpdateListBoxContentL();
                }
            break;
            }
        case EWlanSSID:
            {
            ShowWlanNWNamePageL();
            break;
            }
        default:
            {
            CmPluginBaseSettingsDlg::ShowPopupSettingPageL( aAttribute, 
                                                            aCommandId );
            break;            
            }
        }
    return retval;
    }
    
        
// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ExitSettingsL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::ExitSettingsL( TBool aConfirm )
    {
     if ( STATIC_CAST( CCmPluginWlan*, &iCmPluginBaseEng )->
                                            AreSecuritySettingsValidL()  )
        {
        if ( iIsPossibleToSaveSetting && iHasSettingChanged )
            {
            iCmPluginBaseEng.UpdateL();
            iHasSettingChanged = EFalse;
            }
        TryExitL( iExitReason );
        }
     else
        {
        HBufC* netwName = iCmPluginBaseEng.GetStringAttributeL( EWlanSSID );
        TBool noNetwName = ETrue;
        CleanupStack::PushL( netwName );
        if ( *netwName != KNullDesC )
            {
            noNetwName = EFalse;
            }
        CleanupStack::PopAndDestroy( netwName );
        
        if ( noNetwName )
            {
            if ( aConfirm )
                {                    
                if ( TCmCommonUi::ShowConfirmationQueryL( 
                                    R_QTN_WLAN_QUEST_NW_NAME_NOT_DEFINED ) )
                    {
                    iExitReason = KDialogUserDelete;
                    TryExitL( iExitReason );
                    }
                else
                    {
                    // Find the index of the EWlanSSID item
                    for ( TInt i = 0; i < iSettingIndex->Count(); i++ )
                        {
                        if ( iSettingIndex->At(i) == EWlanSSID )
                            {
                            SelectItem(i);
                            break;
                            }
                        }
                    }
                }
            else
                {
                TryExitL( iExitReason );
                }
            }
        else
            {
            if ( iCmPluginBaseEng.GetIntAttributeL( EWlanSecurityMode ) == 
                                                           EWlanSecModeOpen )
                {
                if ( iIsPossibleToSaveSetting && iHasSettingChanged)
                {
                    iCmPluginBaseEng.UpdateL();
                    iHasSettingChanged = EFalse;
                }
                TryExitL( iExitReason );
                }
            else
                {
                if ( aConfirm )
                    {                    
                    if ( TCmCommonUi::ShowConfirmationQueryL( 
                            R_QTN_WLAN_QUEST_SECURITY_SETTINGS_EMPTY ) )
                        {
                        iExitReason = KDialogUserDeleteConfirmed;
                        TryExitL( iExitReason );
                        }
                     else                    
                        {
                        // Show the securitysettings page for WEP, other security mode
                        // is not supported here(WPA has a default value)...
                        ShowPopupSettingPageL( EWlanSecuritySettings, EWlanSecModeWep );
                        }
                    }
                else
                    {
                    TryExitL( iExitReason );
                    }
                }
            }
        }
    }


// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::OkToExitL
// Good to know : EAknSoftkeyCancel is never called, because
// EEikDialogFlagNotifyEsc flag is not set in the resource.
// --------------------------------------------------------------------------
//
TBool CmPluginWlanSettingsDlg::OkToExitL( TInt aButtonId )
    {
    // Database has been changed by other application so exit from this view
    // without update editings to database
    if ( !iCanEditingContinue )
        {
        if ( iExitReason == KDialogUserExit )
            {
            iCmPluginBaseEng.CmMgr().WatcherUnRegister();
            
            // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call
            TInt exitValue = KDialogUserExit;
            iExitReason = KDialogUserBack;
            // If destination has been deleted by other application
            // then we may have to exit from Cmmgr
            TryExitL( exitValue );
            return EFalse;
            }
        else
            {
            // Exit from this view here to avoid possible update to databse
            return ETrue;
            }
        }
    
    // Translate the button presses into commands for the appui & current
    // view to handle
    TBool retval( EFalse );
    
    switch ( aButtonId )
        {
        case EAknSoftkeyOk:
        case EAknSoftkeyChange:
            {
            ProcessCommandL( aButtonId );
            break;
            }        
        case EAknSoftkeyBack:
            {
            ProcessCommandL( aButtonId );
            break;
            }
        case EAknSoftkeyOptions:
            {
            DisplayMenuL();
            break;
            }
        case KDialogUserExit:
            {
            if ( iSecDialExit )
                {
                iSecDialExit = EFalse;
                }
            retval=ETrue;
            break;
            }
        default:
            {
            retval = ETrue;
            break;
            }
        }

    return retval;
    }


// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::ProcessCommandL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::ProcessCommandL( TInt aCommandId )
    {
    if ( !iCanEditingContinue )
        {
        // We have to block all editing activity if database changed by
        // other application
        return;
        }

    if ( MenuShowing() )
        {
        HideMenu();
        }
    
    switch ( aCommandId )
        {
        case EPluginBaseCmdExit:
            {
            iExitReason = KDialogUserExit;
            }            
        case EAknSoftkeyBack:
            {
            CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
            cmMgr.WatcherUnRegister();
            
            ExitSettingsL(ETrue);
            break;
            }           
        case EPluginBaseCmdAdvanced:
            {
            RunAdvancedSettingsL();
            break;
            }
        case EPluginBaseCmdChange:
        case EAknSoftkeyOk:
            {
            TUint32 attrib = iSettingIndex->At( iListbox->CurrentItemIndex() );
            ShowPopupSettingPageL( attrib, aCommandId );
            break;
            }
        default:
            {
            CmPluginBaseSettingsDlg::ProcessCommandL( aCommandId );
            break;            
            }
        }
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::GetHelpContext
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::GetHelpContext( TCoeHelpContext& aContext ) const
    {
    LOGGER_ENTERFN( "CmPluginWlanSettingsDlg::GetHelpContext" );	
    aContext.iMajor = KHelpUidPlugin;
    aContext.iContext = KSET_HLP_AP_SETTING_WLAN;
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::CommsDatChangesL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::CommsDatChangesL()
    {
    if ( !iCanEditingContinue )
        {
        return;
        }
    
    CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
    CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();

    if ( parentDest )
        {
        if( !cmMgr.DestinationStillExistedL( parentDest ) )
            {
            // If parent destination is deleted by somebody then the dialog must exit back to main view
            iExitReason = KDialogUserExit;
            iCanEditingContinue = EFalse;

            cmMgr.RemoveDestFromPool( parentDest );
            delete parentDest;
            return;
            }
        
        // We may have to go back to parent view if database is changed by other application
        iCanEditingContinue = EFalse;

        cmMgr.RemoveDestFromPool( parentDest );
        delete parentDest;
        }
    else // Legacy
        {
        // We may have to go back to parent view if database is changed by other application
        iCanEditingContinue = EFalse;
        }
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::NotifyParentView
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::NotifyParentView( TInt aValue )
    {
    iNotifyFromAdv = aValue;
    }

// --------------------------------------------------------------------------
// CmPluginWlanSettingsDlg::HandleCommsDatChangeL
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlg::HandleCommsDatChangeL()
    {
    if ( iCanEditingContinue )
        {
        // Set iCanEditingContinue to False so that exit fromn this view without update editings
        iCanEditingContinue = EFalse;
        }
    
    if( iNotifyFromAdv == KCmNotifiedIapIsNotInThisDestination || 
            iNotifyFromAdv == KCmNotifiedIapDisappear )
        {
        TryExitL( iExitReason );
        }
    else if( iNotifyFromAdv == KCmNotifiedDestinationDisappear )
        {
        iExitReason = KDialogUserExit;
        TryExitL( iExitReason );
        }
    }