--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/CertmanUi/SRC/CertmanuicontainerTrust.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,879 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of class CCertManUIContainerTrust.
+* Maintains correct list of trusted clients depending
+* on the certificate that was in focus in Authority
+* certificates view when Trust Settings view was entered.
+* Shows and changes correct Yes/No text for the Trusted client.
+*
+*/
+
+
+// INCLUDE FILES
+#include <certificateapps.h>
+#include <mctcertapps.h>
+#include <mctcertstore.h>
+#include <csxhelp/cm.hlp.hrh> // for help context of CertManUI
+#include <certmanui.rsg>
+
+#include "CertmanuiKeeper.h"
+#include "CertmanuiviewTrust.h"
+#include "CertmanuicontainerTrust.h"
+#include "Certmanuitrustids.h"
+#include "CertmanuiSyncWrapper.h"
+#include "CertManUILogger.h"
+#include "CertmanuiCommon.h"
+#include "CertManUILogger.h"
+
+#include "Certmanuidll.h" // for applicationUID
+
+
+const TInt KMidpCertStoreUid = 0x101F5B71;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// void CloseAndDeleteRArray( TAny* aPointer )
+// Function frees resources of a RArray.
+// Returns: void
+// -----------------------------------------------------------------------------
+//
+void CloseAndDeleteRArray( TAny* aPointer )
+ {
+ ((RArray<TUid>*)aPointer)->Close();
+ delete ( (RArray<TUid>*)aPointer );
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::CCertManUIContainerTrust(
+// CCertManUIViewTrust& aParent,
+// CCertManUIKeeper& aKeeper)
+// Constructor with parent
+// ---------------------------------------------------------
+//
+CCertManUIContainerTrust::CCertManUIContainerTrust(
+ CCertManUIViewTrust& aParent,
+ CCertManUIKeeper& aKeeper )
+ : iParent ( aParent ), iKeeper ( aKeeper )
+ {
+ CERTMANUILOGGER_WRITE_TIMESTAMP(
+ "CCertManUIContainerTrust::CCertManUIContainerTrust" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::~CCertManUIContainerTrust()
+// Destructor
+// ---------------------------------------------------------
+//
+CCertManUIContainerTrust::~CCertManUIContainerTrust()
+ {
+ CERTMANUILOGGER_ENTERFN(
+ " CCertManUIContainerTrust::~CCertManUIContainerTrust" );
+
+ delete iListBox;
+ delete iTrustedClients;
+ delete iTrustValues;
+ delete iAppInfoManager;
+ iClientUids.Close();
+
+ CERTMANUILOGGER_LEAVEFN(
+ " CCertManUIContainerTrust::~CCertManUIContainerTrust" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::ConstructL(const TRect& aRect)
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::ConstructL(const TRect& aRect)
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::ConstructL" );
+
+ CreateWindowL();
+ CreateListBoxL();
+ SetRect(aRect);
+ iTrustedClients = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_CERTMANUI_VIEW_TRUST_SETTINGS_LISTBOX );
+ iTrustValues = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_CERTMANUI_TRUST_SETTINGS_VALUES );
+
+ TRAPD( error, iAppInfoManager =
+ CCertificateAppInfoManager::NewL( iKeeper.iRfs, EFalse ) );
+ if ( error != KErrNone )
+ {
+ if ( error == KErrNotSupported
+ || error == KErrCorrupt
+ || error == KErrNotReady
+ || error == KErrArgument
+ || error == KErrNotFound )
+ {
+ iKeeper.ShowErrorNoteL( error );
+ User::Exit( KErrNone );
+ }
+ else
+ {
+ User::Leave( error );
+ }
+ }
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::ConstructL" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::SizeChanged()
+// Called by framework when the view size is changed
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::SizeChanged()
+ {
+ iListBox->SetRect( Rect() );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::FocusChanged(TDrawNow aDrawNow)
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::FocusChanged( TDrawNow aDrawNow )
+ {
+ if ( iListBox )
+ {
+ iListBox->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::HandleListBoxEventL(
+// CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/)
+// Cannot be changed to non-leaving function.
+// L-function is required by the class definition, even if empty.
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+ {
+ CERTMANUILOGGER_ENTERFN(
+ " CCertManUIContainerTrust::HandleListBoxEventL" );
+
+ switch( aEventType )
+ {
+ case EEventItemSingleClicked:
+ if ( !iKeeper.iWrapper->IsActive() )
+ {
+ iParent.ChangeTrustL();
+ }
+ break;
+ default:
+ {
+ break;
+ }
+ }
+
+ CERTMANUILOGGER_LEAVEFN(
+ " CCertManUIContainerTrust::HandleListBoxEventL" );
+ }
+
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::CountComponentControls() const
+// ---------------------------------------------------------
+//
+TInt CCertManUIContainerTrust::CountComponentControls() const
+ {
+ // return number of controls inside this container
+ return 1;
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::ComponentControl(TInt /*aIndex*/) const
+// ---------------------------------------------------------
+//
+CCoeControl* CCertManUIContainerTrust::ComponentControl(
+ TInt /*aIndex*/ ) const
+ {
+ return iListBox;
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::Draw( const TRect& aRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.SetBrushColor( KRgbGray );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( aRect );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::HandleControlEventL(
+// CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+// Cannot be changed to non-leaving function.
+// L-function is required by the class definition, even if empty.
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::HandleControlEventL(
+ CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+// TEventCode aType)
+// Handles the key events OK button, arrow keys.
+// ---------------------------------------------------------
+//
+TKeyResponse CCertManUIContainerTrust::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::OfferKeyEventL" );
+
+ TBool doRet = EFalse;
+
+ switch ( aKeyEvent.iCode )
+ {
+ case EKeyOK:
+ {
+ if ( !iKeeper.iWrapper->IsActive() )
+ {
+ iParent.ChangeTrustL();
+ }
+ break;
+ }
+ case EKeyLeftArrow:
+ case EKeyRightArrow:
+ {
+ // Listbox takes all event even if it doesn't use them
+ doRet = ETrue;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::OfferKeyEventL" );
+
+ if ( doRet )
+ {
+ return EKeyWasConsumed;
+ }
+
+ return iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::CreateListBoxL()
+// Creates listbox
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::CreateListBoxL()
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::CreateListBoxL" );
+
+ iListBox = new ( ELeave ) CAknSettingStyleListBox;
+ iListBox->SetContainerWindowL( *this );
+ iListBox->ConstructL( this, EAknListBoxSelectionList );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto );
+ iListBox->SetListBoxObserver( this );
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::CreateListBoxL" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::DrawListBoxL(
+// TInt aCurrentPosition, TInt aTopItem, TInt aCertificateIndex)
+// Draws listbox
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::DrawListBoxL(
+ TInt aCurrentPosition, TInt aTopItem, TInt aCertificateIndex)
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::DrawListBoxL" );
+
+ iListBox->SetTopItemIndex( aTopItem );
+ iListBox->SetCurrentItemIndex( aCurrentPosition );
+ UpdateListBoxL( aCertificateIndex );
+ ActivateL();
+ DrawNow();
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::DrawListBoxL" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::UpdateListBoxL(TInt aCertificateIndex)
+// Puts correct Trust Settings text to listbox and correct value (yes/no)
+// to the setting, asks the value from CheckCertificateClientTrust
+// For X509 certificates, only one Application is currently supported
+// (Application controller), more applications maybe added later however,
+// so one additional application has been left in comments as an example.
+// WAP connection and Application installer have their names from resources
+// and thus localized, other additional application get their names from
+// TCertificateAppInfo's Name() function.
+// ---------------------------------------------------------------------------
+//
+void CCertManUIContainerTrust::UpdateListBoxL( TInt aCertificateIndex )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::UpdateListBoxL" );
+
+ SetEmptyListL( iListBox );
+
+ iApps.Reset();
+ iClientUids.Reset();
+
+ TInt clientCount = 0;
+
+ // Use certificate index from previous view
+ CCTCertInfo* entry = iKeeper.iCALabelEntries[ aCertificateIndex ]->iCAEntry;
+
+ // Here MCTCertApps should be used to get client options, but it is not properly
+ // supported in any cert store. It should be possible to get the MCTCertApps
+ // through token's GetInterface function.
+ if ( entry->Token().TokenType().Type() == TUid::Uid( KTokenTypeFileCertstore ) )
+ {
+ if ( !iAppInfoManager )
+ {
+ User::Leave( KErrArgument );
+ }
+ iApps = iAppInfoManager->Applications();
+ for ( TInt i = 0; i < iApps.Count(); i++ )
+ {
+ if ( iApps[i].Id() != KCertManUIViewTrustJavaInstallingId &&
+ iApps[i].Id() != KCertManUIViewTrustApplicationControllerId )
+ {
+ iClientUids.Append( iApps[i].Id() );
+ }
+ }
+ }
+ else
+ {
+ iKeeper.iWrapper->GetApplicationsL(
+ iKeeper.CertManager(), *entry, iClientUids );
+ }
+
+ // This is needed because MIDPCertStore does not support MCTCertApps
+ if ( iClientUids.Count() == 0 &&
+ entry->Token().TokenType().Type() == TUid::Uid( KMidpCertStoreUid ) )
+ {
+ iClientUids.Append( KCertManUIViewTrustJavaInstallingId );
+ }
+
+ clientCount = iClientUids.Count();
+
+
+ MDesCArray* itemList = iListBox->Model()->ItemTextArray();
+ CDesCArray* itemArray = STATIC_CAST( CDesCArray*, itemList );
+ if ( EX509Certificate == entry->CertificateFormat() )
+ {
+ TInt resIndex = KErrNotFound;
+ TInt position = 0;
+ if ( iClientUids.Count() > 0 )
+ {
+ for ( TInt k = 0; k < clientCount; k++ )
+ {
+ resIndex = GetTrusterResId( iClientUids[k] );
+ if ( resIndex != KErrNotFound )
+ {
+ InsertItemToTrustListL(
+ resIndex, iClientUids[k], *entry, itemArray, position );
+ position++;
+ }
+ }
+ }
+ }
+ else
+ {
+ return;
+ }
+
+ iListBox->HandleItemAdditionL();
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::UpdateListBoxL" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::GetTrusterResId( TUid aTrusterUid )
+// ---------------------------------------------------------------------------
+//
+TInt CCertManUIContainerTrust::GetTrusterResId( TUid aTrusterUid )
+ {
+ TInt resIndex = 0;
+ if ( aTrusterUid == KCertManUIViewTrustApplicationControllerId )
+ {
+ resIndex = KTrustSettingsResourceIndexAppCtrl;
+ }
+ else if ( aTrusterUid == KCertManUIViewTrustMailAndImageConnId )
+ {
+ resIndex = KTrustSettingsResourceIndexMailAndImageConn;
+ }
+ else if ( aTrusterUid == KCertManUIViewTrustJavaInstallingId )
+ {
+ resIndex = KTrustSettingsResourceIndexJavaInstall;
+ }
+ else if ( aTrusterUid == KCertManUIViewOCSPCheckInstallingId )
+ {
+ resIndex = KTrustSettingsResourceIndexOCSPCheck;
+ }
+ else if ( aTrusterUid == KCertManUIViewTrustVPNId )
+ {
+ resIndex = KTrustSettingsResourceIndexVPN;
+ }
+ else
+ {
+ resIndex = KErrNotFound;
+ }
+
+ return resIndex;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::InsertItemToTrustListL(const TInt aIndex,
+// const TUid aId,
+// CCTCertInfo& aEntry,
+// CDesCArray* aItemArray,
+// TInt aPosition)
+// This is helper function for UpdateListBoxL. Inserts trustsetting item to
+// listbox.
+// ---------------------------------------------------------------------------
+//
+void CCertManUIContainerTrust::InsertItemToTrustListL(
+ const TInt aIndex, const TUid aId,
+ CCTCertInfo& aEntry, CDesCArray* aItemArray,
+ TInt aPosition )
+ {
+ TBuf<KMaxLengthTextSettListOneTwo> item;
+ TBool trustState = EFalse;
+
+ item = (*iTrustedClients)[ aIndex ];
+ trustState = CheckCertificateClientTrustL( aId, aEntry );
+ if ( trustState )
+ {
+ // item gets its beginning and end
+ // from the resources using indexes
+ item += (*iTrustValues)
+ [ KTrustSettingsResourceIndexValueYes ];
+ }
+ else
+ {
+ item += (*iTrustValues)
+ [ KTrustSettingsResourceIndexValueNo ];
+ }
+ aItemArray->InsertL( aPosition, item );
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::CheckCertificateClientTrustL(const TUid aClientTUid,
+// CCTCertInfo& aEntry) const
+// Checks if a certificate trusts a client
+// * Certificate format == ECrX509Certificate ECrX968Certificate ECrCertificateURL
+// are not supported if certificate location == ECrCertLocationWIMCard
+// * Certificate format == ECrX968Certificate ECrCertificateURL are not supported
+// if certificate location == ECrCertLocationCertMan
+// * Certificate location == ECrCertLocationWIMURL ECrCertLocationPhoneMemory
+// ECrCertLocationPhoneMemoryURL are not supported
+// ---------------------------------------------------------------------------
+//
+TBool CCertManUIContainerTrust::CheckCertificateClientTrustL(
+ const TUid aClientTUid, CCTCertInfo& aEntry ) const
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::CheckCertificateClientTrust" );
+
+ TBool trustSettingTrusted = EFalse;
+ TCertificateFormat format = aEntry.CertificateFormat();
+
+ if ( format == EX509Certificate )
+ {
+
+ RArray<TUid> trusterUids;
+ CleanupClosePushL( trusterUids );
+
+ //Owned by iKeeper.
+ CUnifiedCertStore*& store = iKeeper.CertManager();
+ // Get trusting applications' Uids for the one selected
+ // certificate entry
+ iKeeper.iWrapper->GetApplicationsL( store, aEntry, trusterUids );
+
+
+ // get the number of trusting applications for one
+ // selected certificate entry
+ TInt trusterCount = trusterUids.Count();
+ // in this loop, for every trusting application in one
+ // selected certificate entry
+ for ( TInt i = 0; i < trusterCount && !trustSettingTrusted; i++ )
+ {
+ // put the trusting application's Uid to TUid truster
+ if ( aClientTUid == trusterUids[i] )
+ {
+ trustSettingTrusted = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // close trusterUids
+ }
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::CheckCertificateClientTrust" );
+
+ return trustSettingTrusted;
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::SetEmptyListL(CEikListBox* aListBox)
+// Sets empty list for listbox.
+// ---------------------------------------------------------------------------
+//
+void CCertManUIContainerTrust::SetEmptyListL( CEikListBox* aListBox )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::SetEmptyListL" );
+
+ // Sets empty list.
+ HBufC* emptyListText = iCoeEnv->AllocReadResourceLC(
+ R_TEXT_RESOURCE_VIEW_TRUST_SETTINGS_EMPTY_LIST );
+ aListBox->View()->SetListEmptyTextL( *emptyListText );
+ CleanupStack::PopAndDestroy(); // emptyListText
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::SetEmptyListL" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::UpdateTrustListboxItemL(CCrCertEntry& aEntry,
+// TInt aCurrentTruster)
+// Updates the Trust Settings Listbox item value
+// Can be called only for those certificates that are
+// located in ECrCertLocationCertMan !!!
+// Cannot be called for certificates located in ECrCertLocationWIMCard,
+// ECrCertLocationWIMURL,
+// ECrCertLocationPhoneMemory
+// ECrCertLocationPhoneMemoryURL
+// Certificate formats ECrX968Certificate ECrCertificateURL
+// are not visible in the Trust View
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::UpdateTrustListboxItemL(CCTCertInfo& aEntry,
+ TInt aCurrentTruster)
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::UpdateTrustListboxItemL" );
+
+ MDesCArray* itemList = iListBox->Model()->ItemTextArray();
+ CDesCArray* itemArray = STATIC_CAST( CDesCArray*, itemList );
+ TCertificateFormat format = aEntry.CertificateFormat();
+ TUid id = KCertManUINullId;
+
+ TInt poppableItems = 0;
+
+ TInt index = 0;
+
+ if ( format == EX509Certificate )
+ {
+ id = iClientUids[ aCurrentTruster ];
+ index = aCurrentTruster;
+ }
+
+ if ( id != KCertManUINullId )
+ {
+ TBuf<KMaxLengthTextSettListOneTwo> item;
+
+ if ( id == KCertManUIViewTrustApplicationControllerId )
+ {
+ item = (*iTrustedClients)[ KTrustSettingsResourceIndexAppCtrl ];
+ }
+ else if ( id == KCertManUIViewTrustMailAndImageConnId )
+ {
+ item =
+ (*iTrustedClients)[ KTrustSettingsResourceIndexMailAndImageConn ];
+ }
+ else if ( id == KCertManUIViewTrustJavaInstallingId )
+ {
+ item =
+ (*iTrustedClients)[ KTrustSettingsResourceIndexJavaInstall ];
+ }
+ else if ( id == KCertManUIViewOCSPCheckInstallingId )
+ {
+ item =
+ (*iTrustedClients)[ KTrustSettingsResourceIndexOCSPCheck ];
+ }
+ else if ( id == KCertManUIViewTrustVPNId )
+ {
+ item =
+ (*iTrustedClients)[ KTrustSettingsResourceIndexVPN ];
+ }
+ else
+ {
+ if ( iApps.Count() > 0 )
+ {
+ const TName& name = iApps[index].Name();
+ TInt fieldLength = name.Length();
+ TBuf<KMaxLengthTextSettListOneTwo> item2;
+ if ( fieldLength >= KMaxLengthTextSettListOne )
+ {
+ item2 = name.Mid( 0, KMaxLengthTextSettListOne );
+ }
+ else
+ {
+ item2 = name;
+ }
+ item.Format( KCertManUIFormatDescriptorTrustSettings, &item2 );
+ }
+ }
+
+ if ( item.Length() )
+ {
+ if ( CheckCertificateClientTrustL(id, aEntry) )
+ {
+ item += (*iTrustValues)[ KTrustSettingsResourceIndexValueYes ];
+ }
+ else
+ {
+ item += (*iTrustValues)[ KTrustSettingsResourceIndexValueNo ];
+ }
+ // need to Delete first the old Yes/No entry
+ itemArray->Delete( aCurrentTruster );
+ itemArray->InsertL( aCurrentTruster, item );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( poppableItems );
+
+ iListBox->HandleItemAdditionL();
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::UpdateTrustListboxItemL" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::ShowTrustChangeSettingPageL(const TUid aClientUid,
+// TDesC& aClientName,
+// CCTCertInfo& aEntry)
+// Puts correct client names and yes/no state to settings page
+// Sets title text to a setting page
+// ---------------------------------------------------------------------------
+//
+void CCertManUIContainerTrust::ShowTrustChangeSettingPageL(
+ const TUid aClientUid, TDesC& aClientName, CCTCertInfo& aEntry )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::ShowTrustChangeSettingPageL" );
+
+ TBool trustState = CheckCertificateClientTrustL( aClientUid, aEntry );
+ TInt oldTrustStatus = 1; // Trust set to No value
+ if ( trustState )
+ {
+ oldTrustStatus = 0; // Trust set to Yes value
+ }
+ TInt newTrustStatus = oldTrustStatus;
+ CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_CERTMANUI_VIEW_TRUST_YES_NO_SETTING_PAGE_LBX );
+ CleanupStack::PushL( items );
+
+ CAknRadioButtonSettingPage* dlg = new(ELeave) CAknRadioButtonSettingPage(
+ R_CERTMANUI_VIEW_TRUST_YES_NO_SETTING_PAGE, newTrustStatus, items );
+
+ dlg->SetSettingTextL( aClientName );
+ dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged );
+ CleanupStack::PopAndDestroy( items );
+
+ if ( newTrustStatus != oldTrustStatus )
+ {
+ TInt currentTruster = iListBox->CurrentItemIndex();
+ ChangeTrustValueL( aEntry, aClientUid );
+ UpdateTrustListboxItemL( aEntry, currentTruster );
+ }
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::ShowTrustChangeSettingPageL" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCertManUIContainerTrust::PopupTrustChangeSettingPageL(
+// TInt aCertificateIndex)
+// Finds out which client was focused in Trust Settings view and calls
+// ShowTrustChangeSettingPageL This is accessed only by X509S
+// certificates, located in CertMan and having one or more clients
+// Must be public so that viewTrust can access
+// ---------------------------------------------------------------------------
+//
+void CCertManUIContainerTrust::PopupTrustChangeSettingPageL(
+ TInt aCertificateIndex )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::PopupTrustChangeSettingPageL" );
+
+ // Use certificate index from previous view
+ CCTCertInfo* entry =
+ iKeeper.iCALabelEntries[ aCertificateIndex ]->iCAEntry;
+
+ // if the certificate is read-only, trust settings cannot be changed
+ if( !entry->IsDeletable() )
+ {
+ CERTMANUILOGGER_LEAVEFN( "- PopupTrustChangeSettingPageL - read-only" );
+ return;
+ }
+
+ TUid id = KCertManUINullId;
+ TInt poppableItems = 0;
+
+ TBuf<KMaxLengthTextSettListOne> clientName;
+
+ // get position of the focus in the Trust Settings view
+ TInt currentPosition = iListBox->CurrentItemIndex();
+ id = iClientUids[ currentPosition ];
+
+ if ( id != KCertManUINullId )
+ {
+ // Native installation
+ if ( id == KCertManUIViewTrustApplicationControllerId )
+ {
+ clientName =
+ (*iTrustedClients)[ KTrustSettingsResourceIndexAppCtrl ];
+ }
+ // TLS
+ else if ( id == KCertManUIViewTrustMailAndImageConnId )
+ {
+ clientName =
+ (*iTrustedClients)[
+ KTrustSettingsResourceIndexMailAndImageConn ];
+ }
+ // Midlet installation
+ else if ( id == KCertManUIViewTrustJavaInstallingId )
+ {
+ clientName =
+ (*iTrustedClients)[
+ KTrustSettingsResourceIndexJavaInstall ];
+ }
+ // OCSP
+ else if ( id == KCertManUIViewOCSPCheckInstallingId )
+ {
+ clientName =
+ (*iTrustedClients)[
+ KTrustSettingsResourceIndexOCSPCheck ];
+ }
+ // VPN
+ else if ( id == KCertManUIViewTrustVPNId )
+ {
+ clientName =
+ (*iTrustedClients)[
+ KTrustSettingsResourceIndexVPN ];
+ }
+ else
+ {
+ if ( iApps.Count() > 0 )
+ {
+ const TName& name = iApps[currentPosition].Name();
+ TInt fieldLength = name.Length();
+ if ( fieldLength >= KMaxLengthTextSettListOne )
+ {
+ clientName = name.Mid(0, KMaxLengthTextSettListOne);
+ }
+ else
+ {
+ clientName = name;
+ }
+ }
+ }
+ }
+
+ if ( id != KCertManUINullId )
+ {
+ clientName.TrimLeft();
+ clientName.TrimRight();
+ ShowTrustChangeSettingPageL( id, clientName, *entry );
+ }
+
+ CleanupStack::PopAndDestroy( poppableItems ); // clients
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::PopupTrustChangeSettingPageL" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::ChangeTrustValueL(CCTCertInfo& aEntry)
+// Changes the Trust state of client in the CertManAPI
+// ChangeTrustValueL is called only for certificates located
+// in certman.
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::ChangeTrustValueL(
+ CCTCertInfo& aEntry, const TUid aClientUid )
+ {
+ CERTMANUILOGGER_ENTERFN( " CCertManUIContainerTrust::ChangeTrustValueL" );
+
+ RArray<TUid> trusterUids;
+ CleanupClosePushL( trusterUids );
+
+ iKeeper.iWrapper->GetApplicationsL(
+ iKeeper.CertManager(), aEntry, trusterUids );
+
+ RArray<TUid> newUids;
+ CleanupClosePushL( newUids );
+
+ // Go through all applications and if aClientId does not exist, add it and
+ // update certificates data.
+ TBool add = ETrue;
+ for ( TInt i = 0; i < trusterUids.Count(); i++ )
+ {
+ if ( aClientUid == trusterUids[i] )
+ {
+ add = EFalse;
+ }
+ else
+ {
+ newUids.Append( trusterUids[i] );
+ }
+ }
+
+ if ( add )
+ {
+ newUids.Append( aClientUid );
+ }
+
+ iKeeper.iWrapper->SetApplicabilityL(
+ iKeeper.CertManager(), aEntry, newUids );
+
+ CleanupStack::PopAndDestroy(2); // trusterUids, newUids
+
+ CERTMANUILOGGER_LEAVEFN( " CCertManUIContainerTrust::ChangeTrustValueL" );
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::HandleResourceChange
+//
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange(aType);
+
+ if (aType == KEikDynamicLayoutVariantSwitch)
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+ SetRect(mainPaneRect);
+ DrawNow();
+ }
+ }
+
+// ---------------------------------------------------------
+// CCertManUIContainerTrust::GetHelpContext
+// This function is called when Help application is launched.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCertManUIContainerTrust::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KUidCM;
+ aContext.iContext = KCM_HLP_TRUST_SETTINGS;
+ }
+
+// End of File
+