--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlansecuritysettings/wlaneapsettingsui/EapTls/ConfigUi/src/EapTlsUiView.cpp Wed Sep 01 12:23:57 2010 +0100
@@ -0,0 +1,1267 @@
+/*
+* 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 EAP TLS UI settings dialog
+*
+*/
+
+/*
+* %version: 41 %
+*/
+
+// INCLUDE FILES
+#include <eikdialg.h>
+#include <AknDialog.h>
+#include <aknlists.h>
+#include "EapTlsUiView.h"
+#include "EapTlsUi.hrh"
+#include <eaptlsui.rsg>
+#include <akntextsettingpage.h>
+#include <aknsettingitemlist.h>
+#include "EapTlsUiSettingArray.h"
+#include <aknnavi.h>
+#include <akntabgrp.h>
+#include <aknnavide.h>
+#include <aknnotewrappers.h> // TEMPORARY, for info message...
+#include <aknradiobuttonsettingpage.h>
+#include <EapTlsPeapUiConnection.h>
+#include <EapTlsPeapUiDataConnection.h>
+#include <EapTlsPeapUiCipherSuites.h>
+#include <EapTlsPeapUiEapTypes.h>
+#include <EapTlsPeapUiCertificates.h>
+#include <AknIconArray.h>
+#include <AknsUtils.h>
+
+#include <featmgr.h>
+#include <hlplch.h>
+#include <csxhelp/cp.hlp.hrh>
+
+
+// CONSTANTS
+// UID of general settings app, in which help texts are included
+const TUid KHelpUidPlugin = { 0x100058EC };
+
+static const TInt KSuiteArrayGranularity = 4;
+static const TInt KCertificateArrayGranularity = 5;
+static const TInt KMaxLengthOfSuiteName = 255;
+
+_LIT( KNameSeparator, " " );
+_LIT( KEmptyString, "" );
+
+/* This is the maximum length of a certificate's full name, includes
+label, primary and secondary names */
+const TUint32 KMaxFullCertLabelLength = KMaxCertLabelLength + 2 *
+ KMaxNameLength + 1; // 1 is for separator.
+
+// MODULE DATA STRUCTURES
+enum TPageIds
+ {
+ ESettingsPage = 0,
+ ECipherSuitePage
+ };
+
+enum TSettingIds
+ {
+ EUserCertificateItem = 0,
+ ECaCertificateItem,
+ EUsernameInUseItem,
+ EUsernameItem,
+ ERealmInUseItem,
+ ERealmItem
+ };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CEapTlsUiDialog
+// -----------------------------------------------------------------------------
+//
+CEapTlsUiDialog::CEapTlsUiDialog( CEapTlsPeapUiConnection* aConnection,
+ TInt& aButtonId )
+: CAknDialog(),
+ iConnection( aConnection ),
+ iDataConnection( 0 ),
+ iCipherSuites( 0 ),
+ iCertificates( 0 ),
+ iUserCertificateListBox( 0 ),
+ iCaCertificateListBox( 0 ),
+ iCipherSuiteListBox( 0 ),
+ iSettingArray( 0 ),
+ iSettingListBox( 0 ),
+ iCipherSuitesViewArray( 0 ),
+ iPreviousText( 0 ),
+ iButtonId( &aButtonId ),
+ iIsUIConstructionCompleted( EFalse )
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CEapTlsUiDialog::ConstructAndRunLD
+// ---------------------------------------------------------
+//
+TInt CEapTlsUiDialog::ConstructAndRunLD( TInt aResourceId )
+ {
+ CleanupStack::PushL( this );
+
+ iSettingArray = CEapTlsSettingItemArray::NewL();
+
+ User::LeaveIfError( iConnection->Connect() );
+
+ // Basic data
+ iDataConnection = iConnection->GetDataConnection();
+ if ( iDataConnection == 0 )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ User::LeaveIfError( iDataConnection->Open() );
+ User::LeaveIfError( iDataConnection->GetData( &iUiData ) );
+
+ // Cipher suites
+ iCipherSuites = iConnection->GetCipherSuiteConnection();
+ if ( iCipherSuites == 0 )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ User::LeaveIfError( iCipherSuites->Open() );
+ User::LeaveIfError( iCipherSuites->GetCipherSuites( &iUiCipherSuites ) );
+
+ iCipherSuitesViewArray = new( ELeave ) CDesCArrayFlat(
+ KSuiteArrayGranularity );
+
+ FeatureManager::InitializeLibL();
+
+ ConstructL( R_TLS_MENUBAR );
+
+ // ExecuteLD will PushL( this ), so we have to Pop it...
+ CleanupStack::Pop( this ); // this
+
+ return CAknDialog::ExecuteLD( aResourceId );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CEapTlsUiDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ TKeyResponse result( EKeyWasNotConsumed );
+
+ TInt pageId = ActivePageId();
+ if ( aType == EEventKey && pageId == KEAPTLSCIPHERPAGE )
+ {
+ TInt indexBefore = iCipherSuiteListBox->CurrentItemIndex();
+
+ // Handle Enter key here, since it doesn't seem to convert into
+ // the proper command id via the normal route
+ // (maybe some Avkon support for Enter key is still missing in
+ // S60 3.2 2008_wk22)
+ if ( aKeyEvent.iCode == EKeyEnter )
+ {
+ if ( ( *iUiCipherSuites )[indexBefore].iIsEnabled )
+ {
+ OkToExitL( ETlsUiCmdDisable );
+ }
+ else
+ {
+ OkToExitL( ETlsUiCmdEnable );
+ }
+
+ result = EKeyWasConsumed;
+ }
+ else
+ {
+ result = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ TInt indexAfter = iCipherSuiteListBox->CurrentItemIndex();
+
+ if ( indexBefore != indexAfter )
+ {
+ CEikButtonGroupContainer& cba = ButtonGroupContainer();
+ if( ( *iUiCipherSuites )[ indexAfter ].iIsEnabled )
+ {
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_DISABLE );
+ }
+ else
+ {
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_ENABLE );
+ }
+
+ cba.DrawDeferred();
+ }
+ }
+ else
+ {
+ result = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ return result;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::~CEapTlsUiDialog
+// -----------------------------------------------------------------------------
+//
+CEapTlsUiDialog::~CEapTlsUiDialog()
+ {
+ if ( iSettingArray )
+ {
+ iSettingArray->Array()->ResetAndDestroy();
+ }
+
+ delete iSettingArray;
+ iSettingListBox = 0;
+
+ iDataConnection->Close();
+ delete iDataConnection;
+
+ iCipherSuites->Close();
+ delete iCipherSuites;
+
+ iCertificates->Close();
+ delete iCertificates;
+
+ iConnection->Close();
+
+ iCipherSuitesViewArray->Reset();
+ delete iCipherSuitesViewArray;
+
+ delete iPreviousText;
+
+ FeatureManager::UnInitializeLib();
+ }
+
+
+// ---------------------------------------------------------
+// CEapTlsUiDialog::HandleListBoxEventL
+// ---------------------------------------------------------
+//
+void CEapTlsUiDialog::HandleListBoxEventL( CEikListBox* aListBox,
+ TListBoxEvent aEventType )
+ {
+ switch ( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ {
+ if ( aListBox == iSettingListBox )
+ {
+ OkToExitL( ETlsUiCmdChange );
+ }
+
+ else if ( aListBox == iCipherSuiteListBox )
+ {
+ TInt index = iCipherSuiteListBox->CurrentItemIndex();
+ if( iUiCipherSuites->At( index ).iIsEnabled )
+ {
+ OkToExitL( ETlsUiCmdDisable );
+ }
+ else
+ {
+ OkToExitL( ETlsUiCmdEnable );
+ }
+ }
+
+ else
+ {
+ // Do nothing; we should never end up here
+ }
+
+ break;
+ }
+
+ case EEventItemActioned:
+ case EEventEditingStarted:
+ case EEventEditingStopped:
+ case EEventPenDownOnItem:
+ case EEventItemDraggingActioned:
+ {
+ break;
+ }
+
+ default:
+ {
+ break;
+ };
+ };
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::PreLayoutDynInitL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::PreLayoutDynInitL()
+ {
+ // Change title
+ ChangeTitleL( ETrue );
+
+ iSettingListBox = static_cast<CAknSettingStyleListBox*>(
+ ControlOrNull( ETlsSettingsListbox ) );
+ iSettingListBox->SetComponentsToInheritVisibility( ETrue );
+
+ iCipherSuiteListBox = static_cast<CAknSingleGraphicStyleListBox*>(
+ ControlOrNull( ETlsSettingsCipherSuiteListbox ) );
+ iCipherSuiteListBox->SetComponentsToInheritVisibility( ETrue );
+
+ // Certificates
+ iCertificates = iConnection->GetCertificateConnection( this );
+ User::LeaveIfError( iCertificates->Open() );
+ iCertificates->GetCertificates( &iUiUserCertificates, &iUiCACertificates );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CompleteReadCertificates
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::CompleteReadCertificates( const TInt aResult )
+ {
+ if ( aResult == KErrNone ) // Certifiocates are received from core
+ {
+ TRAPD( err, CompleteUiConstructionL() );
+ if ( err != KErrNone)
+ {
+ TRAP_IGNORE( TryExitL( KErrCancel ) );
+ }
+ }
+ else
+ {
+ TRAP_IGNORE( TryExitL( KErrCancel ) );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CompleteUiConstructionL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::CompleteUiConstructionL()
+ {
+ // Initialize setting page
+ iSettingListBox = static_cast<CAknSettingStyleListBox*>(
+ ControlOrNull( ETlsSettingsListbox ) );
+ iSettingListBox->SetMopParent( this );
+ iSettingListBox->CreateScrollBarFrameL( ETrue );
+ iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+ iSettingListBox->SetListBoxObserver( this );
+ DrawSettingsListL();
+
+ // Initialize cipher suites page
+ iCipherSuiteListBox = static_cast<CAknSingleGraphicStyleListBox*>(
+ ControlOrNull( ETlsSettingsCipherSuiteListbox ) );
+ iCipherSuiteListBox->CreateScrollBarFrameL( ETrue );
+ iCipherSuiteListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+ iCipherSuiteListBox->UpdateScrollBarsL();
+
+ iCipherSuiteListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iCipherSuiteListBox->SetListBoxObserver( this );
+
+ //Following deletes internal array created from resources.
+ // To prevent memory leak.
+ MDesCArray* internalArray = iCipherSuiteListBox->Model()->ItemTextArray();
+ delete internalArray;
+
+ SetIconsL();
+ DrawCipherSuitesL();
+
+ iIsUIConstructionCompleted = ETrue;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::PostLayoutDynInitL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::PostLayoutDynInitL()
+ {
+ TUid naviPaneUid;
+ naviPaneUid.iUid = EEikStatusPaneUidNavi;
+
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+ CEikStatusPaneBase::TPaneCapabilities subPane =
+ statusPane->PaneCapabilities( naviPaneUid );
+ if ( subPane.IsPresent() && subPane.IsAppOwned() )
+ {
+ CAknNavigationControlContainer* naviPane =
+ static_cast<CAknNavigationControlContainer*>(
+ statusPane->ControlL( naviPaneUid ) );
+ CAknNavigationDecorator* naviDecorator = naviPane->ResourceDecorator();
+ if ( naviDecorator )
+ {
+ CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>(
+ naviDecorator->DecoratedControl() );
+ tabGroup->SetActiveTabById( 0 );
+ tabGroup->SetTabFixedWidthL( KTabWidthWithOneTab );
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::ChangeTitleL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::ChangeTitleL( TBool aIsStarted )
+ {
+ TUid titlePaneUid;
+ titlePaneUid.iUid = EEikStatusPaneUidTitle;
+
+ CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+ CEikStatusPaneBase::TPaneCapabilities subPane =
+ statusPane->PaneCapabilities( titlePaneUid );
+
+ if ( subPane.IsPresent() && subPane.IsAppOwned() )
+ {
+ CAknTitlePane* titlePane = static_cast<CAknTitlePane*>(
+ statusPane->ControlL( titlePaneUid ) );
+ if ( aIsStarted )
+ {
+ // Store previous application title text
+ const TDesC* prevText = titlePane->Text();
+ iPreviousText = HBufC::NewL( prevText->Length() );
+ iPreviousText->Des().Append( *prevText );
+
+ TDesC* titleText = iEikonEnv->AllocReadResourceLC(
+ R_TLS_SETTINGS_TITLE );
+ titlePane->SetTextL( *titleText );
+ CleanupStack::PopAndDestroy( titleText );
+ }
+ else
+ {
+ // Set calling application title text back
+ titlePane->SetTextL( *iPreviousText );
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::OkToExitL
+// -----------------------------------------------------------------------------
+//
+TBool CEapTlsUiDialog::OkToExitL( TInt aButtonId )
+ {
+ TBool ret( EFalse );
+ switch ( aButtonId )
+ {
+ case EEikBidOk:
+ {
+ if( iIsUIConstructionCompleted )
+ {
+ TPageIds index = static_cast<TPageIds>( ActivePageIndex() );
+ if ( index == ESettingsPage )
+ {
+ ShowSettingPageL( EFalse );
+ }
+ }
+ else
+ {
+ #if defined(_DEBUG) || defined(DEBUG)
+ RDebug::Print(_L("CEapTlsUiDialog::OkToExitL - UI not ready - Ignoring key press.\n") );
+ #endif
+ }
+ break;
+ }
+
+ case EAknSoftkeyOptions:
+ {
+ DisplayMenuL();
+ break;
+ }
+
+ case EAknSoftkeyBack:
+ case EAknCmdExit:
+ {
+ if( iIsUIConstructionCompleted )
+ {
+ iDataConnection->Update();
+ ChangeTitleL( EFalse );
+ ret = ETrue;
+ }
+ break;
+ }
+
+ case ETlsUiCmdChange:
+ {
+ TPageIds index = static_cast<TPageIds>( ActivePageIndex() );
+ if ( index == ESettingsPage )
+ {
+ if( iIsUIConstructionCompleted )
+ {
+ ShowSettingPageL( EFalse );
+ }
+ else
+ {
+ #if defined(_DEBUG) || defined(DEBUG)
+ RDebug::Print(_L("CEapPeapUiDialog::ProcessCommandL - UI not ready - Ignoring key press.\n") );
+ #endif
+ }
+ }
+ break;
+ }
+ case ETlsUiCmdEnable:
+ case ETlsUiCmdDisable:
+ {
+ ProcessCommandL( aButtonId );
+ ret = EFalse;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( ret )
+ {
+ *iButtonId = aButtonId;
+ }
+
+ return ret;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::DrawSettingsListL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::DrawSettingsListL()
+ {
+ iSettingArray->Array()->ResetAndDestroy();
+ TInt ordinal = 0;
+
+ TInt activeUserCertificate = CheckActiveUserCertificate();
+ TBuf<KMaxFullCertLabelLength> aActiveuserCertificateName = KEmptyString();
+ if ( activeUserCertificate != KErrNotFound )
+ {
+ TBuf<KMaxFullCertLabelLength> text;
+ GetFullCertLabel(
+ iUiUserCertificates->At( activeUserCertificate ).iCertEntry,
+ text );
+ aActiveuserCertificateName.Copy( text );
+ }
+ else
+ {
+ TDesC* notDefinedText = iEikonEnv->AllocReadResourceLC(
+ R_TLS_NOT_DEFINED );
+ aActiveuserCertificateName.Copy( *notDefinedText );
+ CleanupStack::PopAndDestroy( notDefinedText );
+ }
+
+ iSettingArray->AddTextItemL( aActiveuserCertificateName,
+ ETlsSettingsUserCert,
+ R_TLS_USER_CERT_SETTING,
+ R_TLS_USERNAME_PAGE,
+ NULL,
+ ordinal++ );
+
+ TInt activeCaCertificate = CheckActiveCaCertificate();
+ TBuf<KMaxFullCertLabelLength> aActiveCaCertificateName = KEmptyString();
+ if ( activeCaCertificate != KErrNotFound )
+ {
+ TBuf<KMaxFullCertLabelLength> text;
+ GetFullCertLabel(
+ iUiCACertificates->At( activeCaCertificate ).iCertEntry,
+ text );
+ aActiveCaCertificateName.Copy( text );
+ }
+ else
+ {
+ TDesC* notDefinedText = iEikonEnv->AllocReadResourceLC(
+ R_TLS_NOT_DEFINED );
+ aActiveCaCertificateName.Copy( *notDefinedText );
+ CleanupStack::PopAndDestroy( notDefinedText );
+ }
+
+ iSettingArray->AddTextItemL( aActiveCaCertificateName,
+ ETlsSettingsCaCert,
+ R_TLS_CA_CERT_SETTING,
+ R_TLS_USERNAME_PAGE,
+ NULL,
+ ordinal++ );
+
+ iSettingArray->AddBinarySettingItemL( R_TLS_DISPLAY_AUTOUSECONF_PAGE,
+ R_TLS_USERNAME_INUSESTRING,
+ R_TLS_USERNAME_AUTOUSECONF_TEXTS,
+ ordinal++,
+ *iUiData->GetUseManualUsername() );
+
+ iSettingArray->AddTextItemL( iUiData->GetManualUsername(),
+ ETlsTabSheetSettingsUsername,
+ R_TLS_USERNAME_STRING,
+ R_TLS_USERNAME_PAGE,
+ NULL,
+ ordinal++ );
+
+ iSettingArray->AddBinarySettingItemL( R_TLS_DISPLAY_AUTOUSECONF_PAGE,
+ R_TLS_REALM_INUSESTRING,
+ R_TLS_REALM_AUTOUSECONF_TEXTS,
+ ordinal++,
+ *iUiData->GetUseManualRealm() );
+
+ iSettingArray->AddTextItemL( iUiData->GetManualRealm(),
+ ETlsTabSheetSettingsRealm,
+ R_TLS_REALM_STRING,
+ R_TLS_REALM_PAGE,
+ NULL,
+ ordinal++ );
+
+ iSettingArray->AddBinarySettingItemL( R_TLS_DISPLAY_AUTOUSECONF_PAGE,
+ R_TLS_TLS_PRIVACY_STRING,
+ R_TLS_TLS_PRIVACY_AUTOUSECONF_TEXTS,
+ ordinal++,
+ *iUiData->GetTlsPrivacy() );
+
+ iSettingListBox->Model()->SetItemTextArray( iSettingArray->Array() );
+ iSettingListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iSettingArray->Array()->RecalculateVisibleIndicesL();
+ iSettingListBox->HandleItemAdditionL();
+ iSettingListBox->UpdateScrollBarsL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::DynInitMenuPaneL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ CAknDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
+
+ if ( aMenuPane && aResourceId == R_TLS_MENU_PANE )
+ {
+ if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ aMenuPane->DeleteMenuItem( EAknCmdHelp );
+ }
+
+ TPageIds index = static_cast<TPageIds>( ActivePageIndex() );
+ if ( index == ESettingsPage )
+ {
+ aMenuPane->SetItemDimmed( ETlsUiCmdEnable, ETrue );
+ aMenuPane->SetItemDimmed( ETlsUiCmdDisable, ETrue );
+ }
+ else if ( index == ECipherSuitePage )
+ {
+ aMenuPane->SetItemDimmed( ETlsUiCmdChange, ETrue );
+
+ if ( iCipherSuitesViewArray->Count() > 0 )
+ {
+ TInt currIndex = iCipherSuiteListBox->CurrentItemIndex();
+ TBool enabled = iUiCipherSuites->At( currIndex ).iIsEnabled;
+
+ // Hide either "Enable" or "Disable", as appropriate.
+ aMenuPane->SetItemDimmed( ETlsUiCmdEnable, enabled );
+ aMenuPane->SetItemDimmed( ETlsUiCmdDisable, !enabled );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( ETlsUiCmdEnable, ETrue );
+ aMenuPane->SetItemDimmed( ETlsUiCmdDisable, ETrue );
+ }
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::ProcessCommandL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::ProcessCommandL( TInt aCommand )
+ {
+ if ( MenuShowing() )
+ {
+ HideMenu();
+ }
+
+ TPageIds pageIndex = static_cast<TPageIds>( ActivePageIndex() );
+ switch( aCommand )
+ {
+ case EAknCmdExit:
+ {
+ TryExitL( aCommand );
+ break;
+ }
+
+ case EAknCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+ iEikonEnv->EikAppUi()->AppHelpContextL() );
+ break;
+ }
+
+ case ETlsUiCmdChange:
+ {
+ if ( pageIndex == ESettingsPage )
+ {
+ if( iIsUIConstructionCompleted )
+ {
+ ShowSettingPageL( ETrue );
+ }
+ else
+ {
+ #if defined(_DEBUG) || defined(DEBUG)
+ RDebug::Print(_L("CEapTlsUiDialog::ProcessCommandL - UI not ready - Ignoring key press.\n") );
+ #endif
+ }
+ }
+ break;
+ }
+
+ case ETlsUiCmdEnable:
+ {
+ if ( pageIndex == ECipherSuitePage ) // Safety check in tls.
+ {
+ TInt index = iCipherSuiteListBox->CurrentItemIndex();
+ iUiCipherSuites->At( index ).iIsEnabled = ETrue;
+ iCipherSuites->Update();
+ DrawCipherSuitesL();
+ CEikButtonGroupContainer& cba = ButtonGroupContainer();
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_DISABLE );
+ cba.DrawDeferred();
+ }
+ break;
+ }
+
+ case ETlsUiCmdDisable:
+ {
+ if ( pageIndex == ECipherSuitePage ) // Safety check in tls.
+ {
+ TInt index = iCipherSuiteListBox->CurrentItemIndex();
+ iUiCipherSuites->At( index ).iIsEnabled = EFalse;
+ iCipherSuites->Update();
+ DrawCipherSuitesL();
+ CEikButtonGroupContainer& cba = ButtonGroupContainer();
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_ENABLE );
+ cba.DrawDeferred();
+ }
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::PageChangedL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::PageChangedL( TInt aPageId )
+ {
+ if ( !iIsUIConstructionCompleted )
+ {
+ return;
+ }
+
+ if ( aPageId == KEAPTLSSETTINGSPAGE )
+ {
+ if (iSettingListBox->ScrollBarFrame())
+ {
+ iSettingListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(ETrue);
+ }
+ if (iCipherSuiteListBox->ScrollBarFrame())
+ {
+ iCipherSuiteListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(EFalse);
+ }
+ }
+
+ else if ( aPageId == KEAPTLSCIPHERPAGE )
+ {
+ if (iSettingListBox->ScrollBarFrame())
+ {
+ iSettingListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(EFalse);
+ }
+ if (iCipherSuiteListBox->ScrollBarFrame())
+ {
+ iCipherSuiteListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(ETrue);
+ }
+ }
+
+ CEikButtonGroupContainer& cba = ButtonGroupContainer();
+ if( aPageId == KEAPTLSSETTINGSPAGE )
+ {
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_EDIT );
+ }
+ else if( aPageId == KEAPTLSCIPHERPAGE )
+ {
+ TInt index = iCipherSuiteListBox->CurrentItemIndex();
+ if( ( *iUiCipherSuites )[ index ].iIsEnabled )
+ {
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_DISABLE );
+ }
+ else
+ {
+ cba.SetCommandSetL( R_TLS_UI_SOFTKEYS_OPTIONS_BACK_ENABLE );
+ }
+ }
+ cba.DrawDeferred();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::ShowSettingPageL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::ShowSettingPageL( TInt aCalledFromMenu )
+ {
+ TInt index = iSettingListBox->CurrentItemIndex();
+ if ( index == EUserCertificateItem )
+ {
+ TInt activeUserCertificate = CheckActiveUserCertificate();
+ CDesCArrayFlat* tempArray = new( ELeave )CDesCArrayFlat(
+ KCertificateArrayGranularity );
+ CleanupStack::PushL( tempArray );
+
+ TDesC* noneText = iEikonEnv->AllocReadResourceLC(
+ R_TLS_NONE_SELECTION );
+ tempArray->InsertL( 0, *noneText );
+ CleanupStack::PopAndDestroy( noneText );
+
+ for ( TInt i = 0; i < iUiUserCertificates->Count() ; i++ )
+ {
+ TEapTlsPeapUiCertificate certificate =
+ iUiUserCertificates->At( i );
+ SCertEntry entry = certificate.iCertEntry;
+ TBuf<KMaxFullCertLabelLength> text;
+ GetFullCertLabel( entry, text);
+ tempArray->InsertL( i+1, text );
+ }
+
+ TInt selected( 0 );
+ if ( activeUserCertificate == KErrNotFound )
+ {
+ selected = ShowRadioButtonSettingPageL( R_TLS_USER_CERT_SETTING,
+ tempArray, 0 );
+ }
+ else
+ {
+ selected = ShowRadioButtonSettingPageL( R_TLS_USER_CERT_SETTING,
+ tempArray,
+ activeUserCertificate+1 );
+ //Plus 1 cause we added 'none' selection
+ }
+
+ CleanupStack::PopAndDestroy( tempArray );
+ UserCertificateHouseKeeping( selected );
+ iCertificates->Update();
+ DrawSettingsListL(); // List must be drawn again at this stage
+ }
+ else if ( index == ECaCertificateItem )
+ {
+ TInt activeCaCertificate = CheckActiveCaCertificate();
+
+ CDesCArrayFlat* tempArray = new( ELeave )CDesCArrayFlat(
+ KCertificateArrayGranularity );
+ CleanupStack::PushL( tempArray );
+
+ TDesC* noneText = iEikonEnv->AllocReadResourceLC(
+ R_TLS_NONE_SELECTION );
+ tempArray->InsertL( 0, *noneText );
+ CleanupStack::PopAndDestroy( noneText );
+
+ for ( TInt i = 0; i < iUiCACertificates->Count(); i++ )
+ {
+ TEapTlsPeapUiCertificate certificate = iUiCACertificates->At( i );
+ SCertEntry entry = certificate.iCertEntry;
+ TBuf<KMaxFullCertLabelLength> text;
+ GetFullCertLabel( entry, text );
+ tempArray->InsertL( i+1, text );
+ }
+
+ TInt selected( 0 );
+ if ( activeCaCertificate == KErrNotFound )
+ {
+ selected = ShowRadioButtonSettingPageL( R_TLS_CA_CERT_SETTING,
+ tempArray, 0 );
+ }
+ else
+ {
+ selected = ShowRadioButtonSettingPageL( R_TLS_CA_CERT_SETTING,
+ tempArray,
+ activeCaCertificate+1 );
+ //Plus 1 cause we added 'none' selection
+ }
+
+ CleanupStack::PopAndDestroy( tempArray );
+ CaCertificateHouseKeeping( selected );
+ iCertificates->Update();
+ DrawSettingsListL(); // List must be drawn again at this stage
+ }
+ else
+ {
+ CAknSettingItem* item = iSettingArray->Array()->At( index );
+ item->EditItemL( aCalledFromMenu );
+ item->StoreL();
+ }
+ DrawNow();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::ShowRadioButtonSettingPageL
+// -----------------------------------------------------------------------------
+//
+TInt CEapTlsUiDialog::ShowRadioButtonSettingPageL( TInt aTitle,
+ CDesCArrayFlat* aValues,
+ TInt aCurrentItem )
+ {
+ // title of the dialog
+ HBufC* title = iCoeEnv->AllocReadResourceLC( aTitle );
+
+ // We have everything to create dialog
+ CAknRadioButtonSettingPage* dlg = new( ELeave )CAknRadioButtonSettingPage(
+ R_RADIO_BUTTON_SETTING_PAGE,
+ aCurrentItem,
+ aValues );
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ CleanupStack::Pop( dlg );
+ dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+ CleanupStack::PopAndDestroy( title );
+ // index must be re-turned upside down, because options list is upside down
+ return aCurrentItem;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::DrawCipherSuitesL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::DrawCipherSuitesL()
+ {
+ iCipherSuitesViewArray->Reset();
+ TInt listCount( 0 );
+ TBuf<KMaxLengthOfSuiteName> temp;
+
+ for ( TInt i = 0; i < iUiCipherSuites->Count() ; i++ )
+ {
+ temp.Zero();
+ _LIT( KTab, "\t" );
+ temp.Append( KTab );
+ TEapTlsPeapUiCipherSuite suite = iUiCipherSuites->At( i );
+ TUint32 suiteId = suite.iCipherSuite;
+
+ switch ( suiteId )
+ {
+ case 0x0004:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_RSARC4MD5 );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x0005:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_RSARC4SHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x000a:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_RSA3DESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x0016:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_DHERSA3DESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x0013:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_DHEDSS3DESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x002F:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_RSAAESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x0032:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_DHERSAAESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ case 0x0033:
+ {
+ HBufC* suite = iCoeEnv->AllocReadResourceLC(
+ R_TLS_SUITE_DHEDSSAESSHA );
+ temp.Append( *suite );
+ CleanupStack::PopAndDestroy( suite );
+ break;
+ }
+
+ default:
+ {
+ temp.Append( KEmptyString );
+ break;
+ }
+
+ }
+
+ if (iUiCipherSuites->At( i ).iIsEnabled)
+ {
+ // Add mark icon to indicate that the suite is enabled
+ _LIT( KTab0, "\t0" );
+ temp.Append( KTab0 );
+ }
+
+ iCipherSuitesViewArray->InsertL( listCount, temp );
+ listCount++;
+ }
+
+ iCipherSuiteListBox->Model()->SetItemTextArray( iCipherSuitesViewArray );
+ iCipherSuiteListBox->HandleItemAdditionL();
+ iCipherSuiteListBox->DrawDeferred();
+ iCipherSuiteListBox->UpdateScrollBarsL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CheckActiveUserCertificate
+// -----------------------------------------------------------------------------
+//
+TInt CEapTlsUiDialog::CheckActiveUserCertificate()
+ {
+ for ( TInt i = 0; i < iUiUserCertificates->Count(); i++ )
+ {
+ if ( iUiUserCertificates->At( i ).iIsEnabled )
+ {
+ return i;
+ }
+ }
+
+ return KErrNotFound;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CheckActiveCaCertificate
+// -----------------------------------------------------------------------------
+//
+TInt CEapTlsUiDialog::CheckActiveCaCertificate()
+ {
+ for ( TInt i = 0; i < iUiCACertificates->Count(); i++ )
+ {
+ if ( iUiCACertificates->At( i ).iIsEnabled )
+ {
+ return i;
+ }
+ }
+
+ return KErrNotFound;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::UserCertificateHouseKeeping
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::UserCertificateHouseKeeping( TInt aSelected )
+ {
+ for ( TInt i = 0; i < iUiUserCertificates->Count(); i++ )
+ {
+ iUiUserCertificates->At( i ).iIsEnabled = EFalse;
+ }
+
+ if ( aSelected != 0 ) // Zero index is none
+ {
+ iUiUserCertificates->At( aSelected-1 ).iIsEnabled = ETrue;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::CaCertificateHouseKeeping
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::CaCertificateHouseKeeping( TInt aSelected )
+ {
+ for ( TInt i = 0; i < iUiCACertificates->Count(); i++ )
+ {
+ iUiCACertificates->At( i ).iIsEnabled = EFalse;
+ }
+
+ if ( aSelected != 0 ) // Zero index is none
+ {
+ iUiCACertificates->At( aSelected-1 ).iIsEnabled = ETrue;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::SetIconsL
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::SetIconsL()
+ {
+ CArrayPtr< CGulIcon >* icons = new( ELeave ) CAknIconArray( 1 );
+ CleanupStack::PushL( icons );
+
+ MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+
+/* icons->AppendL( AknsUtils::CreateGulIconL( skinInstance,
+ KAknsIIDQgnIndiMarkedAdd,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_indi_marked_add,
+ EMbmAvkonQgn_indi_marked_add_mask ) );
+*/
+
+ CGulIcon* icon = CGulIcon::NewLC();
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* mask = NULL;
+ AknsUtils::CreateColorIconL( skinInstance,
+ KAknsIIDQgnIndiMarkedAdd,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG13,
+ bitmap,
+ mask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_indi_marked_add,
+ EMbmAvkonQgn_indi_marked_add_mask,
+ KRgbBlack );
+ icon->SetBitmap( bitmap );
+ icon->SetMask( mask );
+ icons->AppendL( icon );
+
+ CleanupStack::Pop( icon );
+ CleanupStack::Pop( icons ); // icons
+
+ iCipherSuiteListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEapTlsUiDialog::GetHelpContext
+// -----------------------------------------------------------------------------
+//
+void CEapTlsUiDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KHelpUidPlugin;
+ TPageIds index = static_cast< TPageIds >( ActivePageIndex() );
+ switch ( index )
+ {
+ case ECipherSuitePage:
+ {
+ aContext.iContext = KSET_HLP_WLAN_EAP_TLS_SUITES;
+ break;
+ }
+
+ default:
+ {
+ aContext.iContext = KSET_HLP_WLAN_EAP_TLS_SETT;
+ break;
+ }
+ }
+ }
+
+
+
+void CEapTlsUiDialog::GetFullCertLabel( const SCertEntry& aCert,
+ TDes& aFullLabel )
+ {
+ TInt length = 0;
+
+ // For label.
+ length += aCert.iLabel.Length();
+
+ // For separator between label and primary name.
+ length += KNameSeparator.iTypeLength;
+
+ // For primary name.
+ length += aCert.iPrimaryName.Length();
+
+ if ( !( aCert.iLabel.Length() ) )
+ {
+ // For secondary name.
+ length += aCert.iSecondaryName.Length();
+ }
+
+ if( length > aFullLabel.MaxLength() )
+ {
+#if defined(_DEBUG) || defined(DEBUG)
+ RDebug::Print(_L("CEapTlsUiDialog::GetFullCertLabel - ERROR! Length Mismatch in Certificate's full name\n") );
+#endif
+ }
+
+ HBufC* label = NULL;
+ TRAPD(err, label = HBufC::NewL( length ));
+ if (err)
+ {
+#if defined(_DEBUG) || defined(DEBUG)
+ RDebug::Print(_L("CEapTlsUiDialog::GetFullCertLabel - ERROR! LEAVE: HBufC::NewL\n") );
+#endif
+ return;
+ }
+ label->Des().Append( aCert.iLabel );
+
+ label->Des().Append( KNameSeparator );
+ label->Des().Append( aCert.iPrimaryName );
+
+ if ( !( aCert.iLabel.Length() ) )
+ {
+ // Secondary name, only if no label. Certificate manager does the same way.
+ label->Des().Append( aCert.iSecondaryName );
+ }
+
+ aFullLabel.Copy( label->Des().Left( aFullLabel.MaxLength() ) );
+
+ delete label;
+ label = NULL;
+ }
+
+
+// End of File