wlansecuritysettings/wpasecuritysettingsui/src/WPASecuritySettingsDlg.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
child 55 9c2aa05919d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlansecuritysettings/wpasecuritysettingsui/src/WPASecuritySettingsDlg.cpp	Wed Sep 01 12:23:57 2010 +0100
@@ -0,0 +1,1128 @@
+/*
+* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 dialog.  
+*
+*/
+
+/*
+* %version: tr1cfwln#33 %
+*/
+
+// INCLUDE FILES
+#include "WPASecuritySettingsDlg.h"
+#include "WPASecuritySettingsUiPanic.h"
+
+#include "WPASecuritySettingsUI.hrh"
+
+#include "WPASecuritySettingsDefs.h"
+
+#include <csxhelp/cp.hlp.hrh>
+#include <hlplch.h>
+
+#include <featmgr.h>
+
+#include <akntitle.h>
+#include <aknradiobuttonsettingpage.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <akntextsettingpage.h>
+#include <EAPPluginConfigurationIf.h>
+
+#include <WPASecuritySettingsUI.rsg>
+
+
+// CONSTANT DECLARATIONS
+
+// Number of fields of main view
+LOCAL_D const TInt KNumOfFieldsMain = 3;     
+
+// Menu List item format
+_LIT( KTxtMenuListItemFormat, " \t%S\t\t" ); 
+
+// Number of spaces and tabs in KTxtMenuListItemFormat string
+LOCAL_D const TInt KSpaceAndTabsLength = 4;  
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::CWPASecuritySettingsDlg
+// ---------------------------------------------------------
+//
+CWPASecuritySettingsDlg::CWPASecuritySettingsDlg( TInt& aEventStore, 
+                                          const TUint32 aIapId,
+                                          CEAPPluginConfigurationIf* aPlugin )
+: iEventStore( &aEventStore ),
+  iIapId( aIapId ),
+  iPlugin( aPlugin )
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::~CWPASecuritySettingsDlg
+// ---------------------------------------------------------
+//
+CWPASecuritySettingsDlg::~CWPASecuritySettingsDlg()
+    {
+    if ( iTitlePane )
+        {
+        // set old text back, if we have it...
+        if ( iOldTitleText )
+            {
+            TRAP_IGNORE( iTitlePane->SetTextL( *iOldTitleText ) );
+            delete iOldTitleText;
+            }
+        }
+    
+    FeatureManager::UnInitializeLib();
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::NewL
+// ---------------------------------------------------------
+//
+CWPASecuritySettingsDlg* CWPASecuritySettingsDlg::NewL( TInt& aEventStore, 
+                                        const TUint32 aIapId,
+                                        CEAPPluginConfigurationIf* aPlugin )
+    {
+    CWPASecuritySettingsDlg* secSett = new ( ELeave )CWPASecuritySettingsDlg(
+                                                aEventStore, aIapId, aPlugin );
+    return secSett;
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::ConstructAndRunLD
+// ---------------------------------------------------------
+//
+TInt CWPASecuritySettingsDlg::ConstructAndRunLD( 
+                                CWPASecuritySettingsImpl* aSecuritySettings,
+                                const TDesC& aTitle )
+    {
+	CleanupStack::PushL( this );
+
+    const TInt Titles_Wpa_Main[KNumOfFieldsMain+2] =
+        {
+        R_WPA_MODE,
+        R_WPA_EAP_CONFIG,
+        R_WPA_MODE_PRESHARED_KEY,
+        R_WPA_TKIP_CIPHER,
+        R_WPA_UNENCRYPTED_CONN
+        };
+
+    const TInt Fields_Wpa_Main[KNumOfFieldsMain+2] =
+        {
+        EWpaMode,
+        EWpaEapConfig,
+        EWpaPreSharedKey,
+        EWpaWpa2Only,
+        EWpaUnencryptedConn
+        };
+
+    iSecuritySettings = aSecuritySettings;
+    iConnectionName = aTitle;
+
+    iFieldsMain = ( TWpaMember* ) Fields_Wpa_Main;
+    iTitlesMain = MUTABLE_CAST( TInt*, Titles_Wpa_Main );
+
+    if ( !iSecuritySettings->WPAMode() && !iPlugin )
+        {
+        iSecuritySettings->SetWPAMode( ETrue );
+        *iEventStore |= CWPASecuritySettings::EModified;
+        }
+
+    FeatureManager::InitializeLibL();
+
+    ConstructL( R_WPA_SECURITY_SETTINGS_MENUBAR );
+    
+    // ExecuteLD will PushL( this ), so we have to Pop it...
+    CleanupStack::Pop( this ); // this
+	
+    return ExecuteLD( R_WPASETTINGS_DIALOG );
+    }
+
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::OkToExitL
+// ---------------------------------------------------------
+//
+TBool CWPASecuritySettingsDlg::OkToExitL( TInt aButtonId )
+    {
+    // Translate the button presses into commands for the appui & current
+    // view to handle
+    TBool retval( EFalse );
+    if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        }
+    else if ( aButtonId == EEikCmdExit )        // ShutDown requested
+        {
+        *iEventStore |= CWPASecuritySettings::EShutDownReq;
+        retval = ETrue;
+        }
+    else if ( aButtonId == EAknSoftkeyBack || aButtonId == EAknCmdExit )
+        {
+        if ( iSecuritySettings->WPAMode() )
+            {
+            if ( iSecuritySettings->IsValid() ) 
+                {
+                *iEventStore |= CWPASecuritySettings::EValid;
+                retval = ETrue;
+                }
+            else if ( aButtonId == EAknSoftkeyBack )
+                {
+                HBufC* stringHolder = StringLoader::LoadL(
+                                R_WPA_PRESHARED_KEYDATA_MISSING, iEikonEnv );
+                CleanupStack::PushL( stringHolder );
+
+                CAknQueryDialog *queryDialog = new (ELeave) CAknQueryDialog();
+
+                queryDialog->PrepareLC( R_WPA_SEC_SETT_CONF_QUERY );
+                queryDialog->SetPromptL( stringHolder->Des() );
+                retval = queryDialog->RunLD();
+
+                CleanupStack::PopAndDestroy( stringHolder );   // stringHolder
+                }
+            else
+                {
+                retval = ETrue;
+                }
+            }
+        else 
+            {
+            *iEventStore |= CWPASecuritySettings::EValid;
+            retval = ETrue;
+            }
+
+        if ( aButtonId == EAknCmdExit )
+            {
+            *iEventStore |= CWPASecuritySettings::EExitReq;
+            }
+        }
+    
+    else if( aButtonId == EWpaSelCmdChange )
+        {
+        ChangeSettingsL( ETrue );
+        retval = EFalse; // don't exit the dialog
+        }
+
+    return retval;
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CWPASecuritySettingsDlg::OfferKeyEventL( 
+                                const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse retval( EKeyWasNotConsumed );
+
+    // Only interested in standard key events
+    if ( aType == EEventKey )
+        {
+        // If a menu is showing offer key events to it.
+        if ( CAknDialog::MenuShowing() )
+            {
+            retval = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+            }
+        else
+            {
+            if ( iList )
+                {
+                // as list IS consuming, must handle because it IS the SHUTDOWN...
+                // or, a view switch is shutting us down...
+                if ( aKeyEvent.iCode == EKeyEscape )
+                    {
+                    ProcessCommandL( EEikCmdExit );
+                    retval = EKeyWasConsumed;
+                    }
+                else
+                    {
+                    retval = iList->OfferKeyEventL( aKeyEvent, aType );
+                    if ( *iEventStore & CWPASecuritySettings::EShutDownReq )
+                        {
+                        ProcessCommandL( EEikCmdExit );
+                        }
+                    else if ( *iEventStore & CWPASecuritySettings::EExitReq )
+                        {
+                        ProcessCommandL( EAknCmdExit );
+                        }
+                    }
+                }
+            else
+                {
+                if ( aKeyEvent.iCode == EKeyOK )
+                    {
+                    ProcessCommandL( EWpaSelCmdChange );
+                    retval = EKeyWasConsumed;
+                    }
+                }
+            }
+        }
+
+    return retval;
+    }
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::HandleDialogPageEventL
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::HandleDialogPageEventL( TInt aEventID )
+    {
+     CAknDialog::HandleDialogPageEventL( aEventID );
+         if( *iEventStore & CWPASecuritySettings::EExitReq )
+             {        
+             // Exit requested, exit with EAknCmdExit. 
+             TryExitL( EAknCmdExit );
+             }   
+
+     }
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::HandleListboxDataChangeL
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::HandleListboxDataChangeL()
+    {
+    // fill up our new list with data
+    CDesCArrayFlat* itemArray = new ( ELeave ) CDesCArrayFlat( 4 );
+    CleanupStack::PushL( itemArray );
+
+    FillListWithDataL( *itemArray, *iFieldsMain, iTitlesMain );
+
+    iList->Model()->SetItemTextArray( itemArray );
+
+    CleanupStack::Pop( itemArray ); // now it is owned by the LB, so pop it
+    iItemArray = itemArray;
+
+    iList->HandleItemAdditionL();
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::ProcessCommandL
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::ProcessCommandL( TInt aCommandId )
+    {
+    if ( MenuShowing() )
+        {
+        HideMenu();
+        }
+
+    switch ( aCommandId )
+        {
+        case EWpaSelCmdChange:
+            {
+            ChangeSettingsL( EFalse );
+            break;
+            }
+
+        case EAknCmdHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                                    iEikonEnv->EikAppUi()->AppHelpContextL() );
+            break;
+            }
+
+        case EAknSoftkeyBack:
+        case EAknCmdExit:
+        case EEikCmdExit:
+            {
+            TryExitL( aCommandId );
+            break;
+            }
+
+        default:
+            {
+            // silently ignore it
+            break;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::HandleListBoxEventL
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+                                                   TListBoxEvent aEventType )
+    {
+    switch ( aEventType )
+        {
+        case EEventEnterKeyPressed:
+        case EEventItemSingleClicked:
+            {
+            ChangeSettingsL( ETrue );
+            break;
+            }
+
+        case EEventEditingStarted:
+        case EEventEditingStopped:
+        case EEventPenDownOnItem:
+        case EEventItemDraggingActioned:
+            {
+            break;
+            }
+
+        default:
+            {
+            // New events like
+            // EEventPanningStarted
+            // EEventPanningStopped
+            // EEventFlickStarted
+            // EEventFlickStopped
+            // EEventEmptyListClicked
+            // EEventEmptyAreaClicked
+            break;
+            };
+        };
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::PreLayoutDynInitL()
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::PreLayoutDynInitL()
+    {
+    // first get StatusPane
+    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+
+    // then get TitlePane
+    iTitlePane = ( CAknTitlePane* ) statusPane->ControlL( TUid::Uid( 
+                                                    EEikStatusPaneUidTitle ) );
+    // if not already stored, store it for restoring
+    if ( !iOldTitleText )
+        {
+        iOldTitleText = iTitlePane->Text()->AllocL();
+        }
+
+    // set new titlepane text
+    iTitlePane->SetTextL( iConnectionName );
+
+    iList = STATIC_CAST( CAknSettingStyleListBox*, 
+                                        Control( KWpaMainSettingsListboxId ) );
+
+    iList->CreateScrollBarFrameL( ETrue );
+    iList->ScrollBarFrame()->SetScrollBarVisibilityL
+        ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    HandleListboxDataChangeL();
+
+    iList->SetCurrentItemIndex( 0 );
+    iList->SetListBoxObserver( this );
+    }
+
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::DynInitMenuPaneL( TInt aResourceId, 
+                                                CEikMenuPane* aMenuPane )
+    {
+    CAknDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
+    if ( aResourceId == R_WPA_SECURITY_SETTINGS_MENU )
+        {
+        if ( aMenuPane && !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp );
+            }
+        }
+    }
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::FillListWithDataL
+//----------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::FillListWithDataL( CDesCArrayFlat& aItemArray,
+                                                 const TWpaMember& arr, 
+                                                 const TInt* aRes )
+    {
+    TWpaMember* wpaMember = MUTABLE_CAST( TWpaMember*, &arr );
+
+    TInt numOfFields = iSecuritySettings->SecurityMode() == ESecurityModeWpa ? 
+                                        KNumOfFieldsMain : KNumOfFieldsMain-1;
+
+    for( TInt i = 0; i < numOfFields; i++ )
+        {
+        // 802.1x has no WpaMode (PSK not supported) and no Wpa2Only selection
+        if ( iSecuritySettings->SecurityMode() == ESecurityMode8021x && 
+                    (*wpaMember == EWpaMode ||*wpaMember == EWpaWpa2Only ) )
+            {
+            wpaMember++;
+            aRes++;
+            }
+        // If PSK in use, EAP plug-in configuration is not shown
+        if ( *wpaMember == EWpaEapConfig && iSecuritySettings->WPAMode() )
+            {
+            wpaMember++;
+            aRes++;
+            }
+            
+        if ( *wpaMember == EWpaEapConfig )
+            {
+            // Define a heap descriptor to hold all the item text
+            // HBufC is non-modifiable
+            HBufC* title = iEikonEnv->AllocReadResourceLC( *aRes );
+
+            // Define a heap descriptor to hold all the item text
+            HBufC* itemText = HBufC::NewLC( title->Length() + 
+                                            KSpaceAndTabsLength );
+
+            // Define a modifiable pointer descriptor to be able to append
+            // text to the non-modifiable heap descriptor itemText
+            TPtr itemTextPtr = itemText->Des();
+            itemTextPtr.Format( KTxtMenuListItemFormat, title );
+
+            aItemArray.AppendL( *itemText );
+
+            CleanupStack::PopAndDestroy( 2, title );   // itemText, title
+            
+            // If Eap in use, PreSharedKey is not shown
+            wpaMember++;
+            aRes++;
+            }
+        else            // EWpaMode, EWpaPreSharedKey, EWpaWpa2Only, EWpaUnencryptedConn:
+            {
+            if (( *wpaMember != EWpaUnencryptedConn ) || 
+                (FeatureManager::FeatureSupported( KFeatureIdFfWlanAuthenticationOnlySupport ) ) )
+                {
+                HBufC* itemText = CreateTextualListBoxItemL( *wpaMember, *aRes );
+                CleanupStack::PushL( itemText );
+                aItemArray.AppendL( itemText->Des() );
+                CleanupStack::PopAndDestroy( itemText );
+                }
+            }
+
+        wpaMember++;
+        aRes++;
+        }
+    }
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::UpdateTextualListBoxItemL
+//----------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::UpdateTextualListBoxItemL( TWpaMember aMember,
+                                                         TInt aRes, TInt aPos )
+    {
+    HBufC* itemText;
+    HBufC* title;
+
+    if ( aMember == EWpaEapConfig )
+        {
+        title = iEikonEnv->AllocReadResourceLC( aRes );
+
+        // Define a heap descriptor to hold all the item text
+        itemText = HBufC::NewLC( title->Length() + KSpaceAndTabsLength );
+
+        // Define a modifiable pointer descriptor to be able to append
+        // text to the non-modifiable heap descriptor itemText
+        TPtr itemTextPtr = itemText->Des();
+        itemTextPtr.Format( KTxtMenuListItemFormat, title );
+        }
+    else
+        {
+        itemText = CreateTextualListBoxItemL( aMember, aRes );
+        CleanupStack::PushL( itemText );
+        }
+
+    // first try to add, if Leaves, list will be untouched
+    iItemArray->InsertL( aPos, itemText->Des() );
+    // if successful, previous item is scrolled up with one,
+    // so delete that one...
+    if ( ++aPos < iItemArray->MdcaCount() )
+        {
+        iItemArray->Delete( aPos );
+        }
+
+    CleanupStack::PopAndDestroy( itemText );
+
+    if ( aMember == EWpaEapConfig )
+        {
+        CleanupStack::PopAndDestroy( title );   // title
+        }
+    }
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::CreateTextualListBoxItemL
+//----------------------------------------------------------
+//
+HBufC* CWPASecuritySettingsDlg::CreateTextualListBoxItemL( TWpaMember aMember,
+                                                           TInt aRes )
+    {
+    // Define a heap descriptor to hold all the item text
+    // HBufC is non-modifiable
+    HBufC* title = iEikonEnv->AllocReadResourceLC( aRes );
+
+    // both variables needed independently of the following conditions so I
+    // must declare them here...
+    HBufC16* value;
+    TUint32 valueResourceID;
+
+    switch ( aMember )
+        {
+        case EWpaMode:
+            {
+            valueResourceID = iSecuritySettings->WPAMode() ?
+                              R_WPA_MODE_PRESHARED_KEY : R_WPA_MODE_EAP;
+            break;
+            }
+        
+        case EWpaWpa2Only:
+            {
+            valueResourceID = iSecuritySettings->Wpa2Only() ?
+                              R_WPA_CIPHER_NOT_ALLOWED : R_WPA_CIPHER_ALLOWED;
+            break;
+            }
+
+        case EWpaUnencryptedConn:
+            {
+            valueResourceID = iSecuritySettings->WPAUnencryptedConn() ?
+                              R_WPA_UNENCRYPTED_CONN_ALLOW : R_WPA_UNENCRYPTED_CONN_NOT_ALLOW;
+            break;
+            }
+            
+        case EWpaPreSharedKey:
+            {
+            valueResourceID = 
+                        iSecuritySettings->WPAPreSharedKey()->Length() == 0 ?
+                        R_WPA_PRESHARED_KEY_MUST_BE_DEFINED : 0;
+
+            break;
+            }
+
+        default:
+            {
+            valueResourceID = 0;
+            break;
+            }
+        }
+
+    _LIT( KStars, "****" );
+    _LIT( KTxtListItemFormat, " \t%S\t\t%S" );
+    _LIT( KTxtCompulsory, "\t*" );
+
+    if ( valueResourceID )
+        {
+        // Read up value text from resource
+        value = iEikonEnv->AllocReadResourceLC( valueResourceID );
+        }
+    else
+        {
+        value = HBufC::NewLC( KStars().Length() );
+        value->Des().Copy( KStars ); 
+        }
+
+    // Define a heap descriptor to hold all the item text
+    // +4 for space and tab characters
+    TInt length = title->Length() + value->Length() + KSpaceAndTabsLength;    
+    if ( aMember == EWpaPreSharedKey )  // Compulsory
+        {
+        length += KTxtCompulsory().Length();
+        }
+
+    HBufC* itemText = HBufC::NewLC( length );
+
+    // Define a modifiable pointer descriptor to be able to append text to the
+    // non-modifiable heap descriptor itemText
+    TPtr itemTextPtr = itemText->Des();
+    itemTextPtr.Format( KTxtListItemFormat, title, value );
+    if ( aMember == EWpaPreSharedKey )  // Compulsory
+        {
+        itemTextPtr.Append( KTxtCompulsory );
+        }
+    CleanupStack::Pop( itemText );    // itemtext,
+
+    CleanupStack::PopAndDestroy( 2 ); // title, value
+
+    return itemText;
+    }
+
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::ShowPopupSettingPageL
+//----------------------------------------------------------
+//
+TBool CWPASecuritySettingsDlg::ShowPopupSettingPageL( TWpaMember aData )
+    {
+    TInt currvalue( 0 );
+    TBool retval( EFalse );
+    TInt attr_resid( 0 );
+    
+    CDesCArrayFlat* items = FillPopupSettingPageLC( aData,  currvalue );
+
+    
+    if ( aData == EWpaUnencryptedConn)
+        {
+        attr_resid = R_WPA_UNENCRYPTED_CONN;
+        }
+    else
+        {
+        attr_resid = aData == EWpaMode ? R_WPA_MODE : R_WPA_TKIP_CIPHER;
+        }
+
+    HBufC* titlebuf = iEikonEnv->AllocReadResourceLC( attr_resid );
+    CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
+                            R_RADIO_BUTTON_SETTING_PAGE, currvalue, items );
+    CleanupStack::PushL( dlg ); 
+    TPtrC ptr( titlebuf->Des() );
+    dlg->SetSettingTextL( ptr );
+    CleanupStack::Pop( dlg ); // dlg
+        
+    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) )
+        {
+    	retval = UpdateFromPopupSettingPage( aData, ( TBool )currvalue );
+	    }
+
+    CleanupStack::PopAndDestroy( titlebuf );
+    CleanupStack::PopAndDestroy( items );   // items. It deletes also all 
+                                            // elements in the array.
+    return retval;
+    }
+
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::ShowPopupTextSettingPageL
+//----------------------------------------------------------
+//
+TBool CWPASecuritySettingsDlg::ShowPopupTextSettingPageL()
+    {
+    TBool retval( EFalse );
+
+    HBufC16* bufKeyData = HBufC16::NewLC( EMaxLengthOfPreSharedKey );
+    TPtr16 ptrKeyData( bufKeyData->Des() );
+
+    TBool showPage( ETrue );
+    while ( showPage )
+        {
+        CAknTextSettingPage* settingPage = 
+                new( ELeave )CAknTextSettingPage( R_TEXT_SETTING_PAGE_KEY_DATA,
+                ptrKeyData, EAknSettingPageNoOrdinalDisplayed );
+
+        if ( settingPage->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) )
+            {
+            HBufC8* buf8 = HBufC8::NewLC( bufKeyData->Des().Length() );
+            buf8->Des().Copy( bufKeyData->Des() ); 
+
+            if ( bufKeyData->Des().Length() < EMinLengthOfPreSharedKeyAscii )
+                {
+                HBufC* stringLabel;
+                
+                stringLabel = StringLoader::LoadL( 
+                                                R_INFO_PRESHARED_KEY_TOO_SHORT,
+                                                iEikonEnv );
+
+                CleanupStack::PushL( stringLabel );
+
+	            CAknInformationNote* dialog = new ( ELeave )
+                                                CAknInformationNote( ETrue );
+	            dialog->ExecuteLD( *stringLabel );
+
+                CleanupStack::PopAndDestroy( stringLabel );   // stringLabel
+
+                ptrKeyData.Zero();
+                }
+            else
+                {
+                if ( iSecuritySettings->SetWPAPreSharedKey( ptrKeyData ) != 
+                                                                     KErrNone )
+                    {
+                    HBufC* stringLabel;
+                    stringLabel = StringLoader::LoadL( 
+                                                R_INFO_PRESHARED_KEY_NOT_HEX );
+                    CleanupStack::PushL( stringLabel );
+
+    	            CAknInformationNote* dialog = new ( ELeave )
+                                                  CAknInformationNote( ETrue );
+                    CleanupStack::Pop( stringLabel );
+                    	
+      	            dialog->ExecuteLD( *stringLabel );
+      	            
+                    delete stringLabel;
+                    }
+                else
+                    {
+                    retval = ETrue;
+                    showPage = EFalse;
+                    }
+
+                }
+
+            CleanupStack::PopAndDestroy( buf8 ); // buf8
+            }
+        else
+            {
+            showPage = EFalse;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( bufKeyData ); // bufKeyData
+
+    return retval;
+    }
+
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::FillPopupSettingPageLC
+// ---------------------------------------------------------
+//
+CDesCArrayFlat* CWPASecuritySettingsDlg::FillPopupSettingPageLC( 
+                                                            TWpaMember aData,
+                                                            TInt& aCurrvalue )
+    {
+    CDesCArrayFlat* items = new( ELeave)CDesCArrayFlat( 1 );
+    CleanupStack::PushL( items );
+
+    if ( aData == EWpaMode )
+        {
+        if ( iPlugin )
+            {
+            aCurrvalue = iSecuritySettings->WPAMode();
+
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( R_WPA_MODE_EAP ) );
+            CleanupStack::PopAndDestroy();
+            }
+        else
+            {
+            aCurrvalue = 0;
+            }
+
+        items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                                R_WPA_MODE_PRESHARED_KEY ) );
+        CleanupStack::PopAndDestroy();
+        }
+    else if ( aData == EWpaWpa2Only )
+        {
+        items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                                R_WPA_CIPHER_ALLOWED ) );
+        CleanupStack::PopAndDestroy();
+        items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                                R_WPA_CIPHER_NOT_ALLOWED ) );
+        CleanupStack::PopAndDestroy();
+
+        aCurrvalue = iSecuritySettings->Wpa2Only();
+        }
+    else    // EWpaUnencryptedConn
+        {
+        items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WPA_UNENCRYPTED_CONN_NOT_ALLOW ) );
+        CleanupStack::PopAndDestroy();
+        items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WPA_UNENCRYPTED_CONN_ALLOW ) );
+        CleanupStack::PopAndDestroy();
+
+        aCurrvalue = iSecuritySettings->WPAUnencryptedConn();
+        }
+    
+    return items;
+    }
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::UpdateFromPopupSettingPage
+// ---------------------------------------------------------
+//
+TBool CWPASecuritySettingsDlg::UpdateFromPopupSettingPage( TWpaMember aData,
+                                                           TBool aCurrvalue )
+    {
+    TBool retVal( EFalse );
+
+    if ( aData == EWpaMode )
+        {
+        if ( !iPlugin )
+            {
+            aCurrvalue = ETrue;
+            }
+
+        if ( iSecuritySettings->WPAMode() != aCurrvalue )
+            {
+            iSecuritySettings->SetWPAMode( aCurrvalue );
+            retVal = ETrue;
+            }
+        }
+    else if ( aData == EWpaWpa2Only )
+        {
+        if ( iSecuritySettings->Wpa2Only() != aCurrvalue )
+            {   
+            iSecuritySettings->SetWpa2Only( aCurrvalue );
+            retVal = ETrue;
+            }
+        }
+    else  // EWpaUnencryptedConn
+        {
+        if ( iSecuritySettings->WPAUnencryptedConn() != aCurrvalue )
+            {   
+            iSecuritySettings->SetWPAUnencryptedConn( aCurrvalue );
+            retVal = ETrue;
+            }
+        }
+
+    return retVal;
+    }
+
+
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::ChangeSettingsL
+//----------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::ResetEapConfigFlag( TAny* aPtr )
+    {
+    CWPASecuritySettingsDlg* self = 
+                         static_cast<CWPASecuritySettingsDlg*>( aPtr );
+                         
+    self->iEapConfigActive = EFalse;
+    }
+
+
+//----------------------------------------------------------
+// CWPASecuritySettingsDlg::ChangeSettingsL
+//----------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::ChangeSettingsL( TBool aQuick )
+    {
+    TInt itemIndex;
+    TInt shift;
+
+    itemIndex = ( Max( iList->CurrentItemIndex(), 0 ) );
+
+    //In 802.1x the first item is EapConfig and second item is UncryptedConn
+    if (iSecuritySettings->SecurityMode() == ESecurityMode8021x)
+        {
+        shift = ( itemIndex == EWpaMode ) ? 1 : 3;
+        }
+    else
+        {
+        shift = ( itemIndex >= EWpaWpa2Only || 
+                ( itemIndex == EWpaEapConfig && 
+                        iSecuritySettings->WPAMode() ) ) ? 1 : 0;
+        }
+    
+    TWpaMember* ptr = iFieldsMain + itemIndex + shift;
+    TInt* titPtr = iTitlesMain + itemIndex + shift;
+
+    switch ( *ptr  )
+        {
+        case EWpaMode:
+            { // Pop-up setting item
+            TBool changed( ETrue );
+            if ( aQuick )
+                {
+                if ( iPlugin )
+                    {
+                    iSecuritySettings->SetWPAMode( 
+                                            !iSecuritySettings->WPAMode() );
+                    }
+                else
+                    {
+                    changed = EFalse;
+                    }
+                }
+            else
+                {
+                changed = ShowPopupSettingPageL( EWpaMode );
+                }
+
+            if ( changed )
+                {
+                UpdateTextualListBoxItemL( *ptr, *titPtr, itemIndex );
+                *iEventStore |= CWPASecuritySettings::EModified;
+
+                TInt shiftItem = iSecuritySettings->WPAMode() ? 2 : 1;
+
+                ptr += shiftItem;
+                titPtr += shiftItem;
+
+                UpdateTextualListBoxItemL( *ptr, *titPtr, itemIndex+1 );
+                iList->SetCurrentItemIndexAndDraw( itemIndex+1 );
+                }
+            break;
+            }
+
+        case EWpaWpa2Only:
+            { // Setting item with two available values
+            TBool changed( ETrue );
+            if ( aQuick )
+                {
+                iSecuritySettings->SetWpa2Only( 
+                                            !iSecuritySettings->Wpa2Only() );
+                }
+            else
+                {
+                changed = ShowPopupSettingPageL( EWpaWpa2Only );
+                }
+
+            if ( changed )
+                {
+                UpdateTextualListBoxItemL( *ptr, *titPtr, itemIndex );
+                *iEventStore |= CWPASecuritySettings::EModified;
+                }
+            break;
+            }
+
+        case EWpaUnencryptedConn:
+             { // Setting item with two available values
+             TBool changed( ETrue );
+             if ( aQuick )
+                 {
+                 iSecuritySettings->SetWPAUnencryptedConn( 
+                                             !iSecuritySettings->WPAUnencryptedConn() );
+                 }
+             else
+                 {
+                 changed = ShowPopupSettingPageL( EWpaUnencryptedConn );
+                 }
+
+             if ( changed )
+                 {
+                 UpdateTextualListBoxItemL( *ptr, *titPtr, itemIndex );
+                 *iEventStore |= CWPASecuritySettings::EModified;
+                 }
+             break;
+             }
+
+        case EWpaPreSharedKey:
+            { // Text setting item
+            if ( ShowPopupTextSettingPageL() )
+                {
+                UpdateTextualListBoxItemL( *ptr, *titPtr, itemIndex );
+                *iEventStore |= CWPASecuritySettings::EModified;
+                }
+            break;
+            }
+
+        case EWpaEapConfig:
+            {
+            if ( iPlugin && !iEapConfigActive )
+                {
+                iEapConfigActive = ETrue;
+                CleanupStack::PushL( TCleanupItem( ResetEapConfigFlag, this ) );
+                
+
+                // using expanded EAP types
+                iEnabledPluginList = (
+                               iSecuritySettings->WPAEnabledEAPPlugin()? 
+                                    (TDesC8&)*iSecuritySettings->WPAEnabledEAPPlugin(): 
+                                    KNullDesC8 );
+                                    
+                iDisabledPluginList = (
+                               iSecuritySettings->WPADisabledEAPPlugin()?
+                                    (TDesC8&)*iSecuritySettings->WPADisabledEAPPlugin():
+                                    KNullDesC8 );
+
+                TInt buttonId = iPlugin->EAPPluginConfigurationL( 
+                                                     iEnabledPluginList, 
+                                                     iDisabledPluginList, 
+                                                     iIapId,
+                                                     iConnectionName );
+
+                CleanupStack::PopAndDestroy( 1 ); // ResetEapConfigFlag
+                
+                if ( buttonId == EEikCmdExit )        // ShutDown requested
+                    {
+                    *iEventStore |= CWPASecuritySettings::EShutDownReq;
+                    }
+                else if ( buttonId == EAknCmdExit )
+                    {
+                    *iEventStore |= CWPASecuritySettings::EExitReq;
+                    }
+
+                if ( !iSecuritySettings->WPAEnabledEAPPlugin() || 
+                     iEnabledPluginList != 
+                                    *iSecuritySettings->WPAEnabledEAPPlugin() )
+                    {
+                    User::LeaveIfError( 
+                        iSecuritySettings->SetWPAEnabledEAPPlugin( 
+                                                        iEnabledPluginList ) );
+                    *iEventStore |= CWPASecuritySettings::EModified;
+                    }
+    
+                if ( !iSecuritySettings->WPADisabledEAPPlugin() ||
+                     iDisabledPluginList != 
+                                   *iSecuritySettings->WPADisabledEAPPlugin() )
+                    {
+                    User::LeaveIfError( 
+                        iSecuritySettings->SetWPADisabledEAPPlugin( 
+                                                        iDisabledPluginList ) );
+                    *iEventStore |= CWPASecuritySettings::EModified;
+                    }
+
+                // If exiting from the menu, pass it on 
+                if( buttonId == EAknCmdExit )
+                    {
+                    if (aQuick == EFalse)
+                        {
+                            TryExitL( buttonId );
+                        }
+                        // Don't exit here if aQuick==ETrue. 
+                        // Framework command chain will
+                        // cause a KERN-EXEC 3 panic. Handle the exit in 
+                        // HandleDialogPageEventL(). 
+                    }
+                }
+            
+            return;
+            }
+
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
+            break;
+            }
+        }
+
+    iList->ScrollToMakeItemVisible( itemIndex );
+    iList->SetCurrentItemIndexAndDraw( itemIndex );
+    }
+
+
+
+// ---------------------------------------------------------
+// CWPASecuritySettingsDlg::GetHelpContext
+// ---------------------------------------------------------
+//
+void CWPASecuritySettingsDlg::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KWPASecuritySettingsUiHelpMajor;
+    if ( iSecuritySettings->SecurityMode() == ESecurityModeWpa )
+        {
+        aContext.iContext = KSET_HLP_WLAN_WPA_MAIN;
+        }
+    else    // iSecuritySettings->SecurityMode() == ESecurityMode8021x
+        {
+        aContext.iContext = KSET_HLP_WLAN_8021X_MAIN;
+        }
+    }
+
+
+// End of File