diff -r 000000000000 -r ba25891c3a9e appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingscontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingscontainer.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,356 @@ +/* +* 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: AppMngr2 GS (General Settings) Settings plug-in Container +* +*/ + + +#include "appmngr2gssettingscontainer.h" // CAppMngr2GSSettingsContainer +#include // CAknSettingStyleListBox +#include // CRepository +#include // CAknIconArray +#include // FeatureManager +#include // KCRUidSWInstallerSettings +#include // KDC_RESOURCE_FILES_DIR +#include // Resource IDs +#include // Bitmap IDs +#include // Help IDs + +const TInt KNumStrSize = 1; // Buffer size for string which has one number +const TInt KGranularity = 1; +const TInt KMaxSettingsItemLength = 128 + NCentralRepositoryConstants::KMaxUnicodeStringLength; + +_LIT( KAppMngrTab, "\t"); +_LIT( KAppMngr2IconFileNameMif, "appmngr2.mif" ); +_LIT( KDriveZ, "z:" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::NewL() +// --------------------------------------------------------------------------- +// +CAppMngr2GSSettingsContainer* CAppMngr2GSSettingsContainer::NewL( const TRect& aRect ) + { + CAppMngr2GSSettingsContainer* self = new ( ELeave ) CAppMngr2GSSettingsContainer(); + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::~CAppMngr2GSSettingsContainer() +// --------------------------------------------------------------------------- +// +CAppMngr2GSSettingsContainer::~CAppMngr2GSSettingsContainer() + { + delete iListbox; + delete iItems; + delete iOcspCheckValueArray; + delete iAllowUntrustedValueArray; + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::ListBox() +// --------------------------------------------------------------------------- +// +CAknSettingStyleListBox* CAppMngr2GSSettingsContainer::ListBox() const + { + return iListbox; + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::UpdateListBoxContentL() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::UpdateListBoxContentL() + { + TInt ocsp_check_value = 0; + HBufC* ocsp_url = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength ); + TPtr ocsp_url_value( ocsp_url->Des() ); + ocsp_url_value.Zero(); + TInt allowUntrustedValue( 0 ); + + // Must save listbox indexes because content will be deleted + TInt lastListBoxPos = iListbox->CurrentItemIndex(); + TInt lastListBoxTopPos = iListbox->TopItemIndex(); + + MDesCArray* itemList = iListbox->Model()->ItemTextArray(); + CDesCArray* itemArray = static_cast( itemList ); + itemArray->Reset(); + + // Get data from Central repository + CRepository* repDB = CRepository::NewLC( KCRUidSWInstallerSettings ); + repDB->Get( KSWInstallerOcspProcedure, ocsp_check_value ); + repDB->Get( KSWInstallerOcspDefaultURL, ocsp_url_value ); + if( ocsp_url_value.Length() == 0 ) + { + // If OCSP URL is empty string add the default text "none" + iCoeEnv->ReadResourceAsDes16L( ocsp_url_value, R_AM_SET_OCSP_NONE ); + } + repDB->Get( KSWInstallerAllowUntrusted, allowUntrustedValue ); + if( allowUntrustedValue ) + { + allowUntrustedValue = 1; + } + CleanupStack::PopAndDestroy( repDB ); + + switch( ocsp_check_value ) + { + case ESWInstallerOcspProcedureOff: + ocsp_check_value = EAppMngr2OcspCheckValueArrayOff; + break; + case ESWInstallerOcspProcedureOn: + ocsp_check_value = EAppMngr2OcspCheckValueArrayOn; + break; + case ESWInstallerOcspProcedureMust: + ocsp_check_value = EAppMngr2OcspCheckValueArrayMustPass; + break; + default: + break; + } + + HBufC* itemValue = HBufC::NewLC( KMaxSettingsItemLength ); + TPtr itemPtr = itemValue->Des(); + itemPtr = ( *iItems )[ EAppMngr2SettingSwInstall ]; + + // Check variation + TInt hideAllowUntrusted( 1 ); + CRepository* variationDB = CRepository::NewLC( KCRUidSWInstallerLV ); + variationDB->Get( KSWInstallerHideUntrustedIns, hideAllowUntrusted ); + CleanupStack::PopAndDestroy( variationDB ); + + if( !hideAllowUntrusted ) + { + itemPtr.Zero(); + itemPtr = ( *iItems )[ EAppMngr2SettingSwInstall ]; + itemPtr += ( *iAllowUntrustedValueArray )[ allowUntrustedValue ]; + itemArray->AppendL( itemPtr ); + } + + if( !FeatureManager::FeatureSupported( KFeatureIdOCSP ) ) + { + // If OCSP feature is not supported, OCSP settings can not be changed + // --> lock icon is added + TBuf strNum; + strNum.Num( 0 ); + + // If lock icon is wanted to be shown, the string format must be: + // " \tSetting label\t\tSetting value\t\t\t0" + + itemPtr.Zero(); + itemPtr = ( *iItems )[ EAppMngr2SettingOcsp ]; + itemPtr += ( *iOcspCheckValueArray )[ ocsp_check_value ]; + itemPtr += KAppMngrTab; + itemPtr += KAppMngrTab; + itemPtr += KAppMngrTab; + itemPtr.Append( strNum ); + itemArray->AppendL( itemPtr ); + + itemPtr.Zero(); + itemPtr = ( *iItems )[ EAppMngr2SettingOcspUrl ]; + itemPtr += ocsp_url_value; + itemPtr += KAppMngrTab; + itemPtr += KAppMngrTab; + itemPtr += KAppMngrTab; + itemPtr.Append( strNum ); + itemArray->AppendL( itemPtr ); + } + else + { + itemPtr.Zero(); + itemPtr = ( *iItems )[ EAppMngr2SettingOcsp ]; + itemPtr += ( *iOcspCheckValueArray )[ ocsp_check_value ]; + itemArray->AppendL( itemPtr ); + + itemPtr.Zero(); + itemPtr = ( *iItems )[ EAppMngr2SettingOcspUrl ]; + itemPtr += ocsp_url_value; + itemArray->AppendL( itemPtr ); + } + + CleanupStack::PopAndDestroy( itemValue ); + // Handle content changes + iListbox->Reset(); + // Listbox might not have index + if( lastListBoxPos != -1 ) + { + iListbox->SetCurrentItemIndex( lastListBoxPos ); + iListbox->SetTopItemIndex( lastListBoxTopPos ); + } + + CleanupStack::PopAndDestroy( ocsp_url ); + + // Call after addition to ensure that the list dialog is updated correctly. + iListbox->HandleItemAdditionL(); + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CAppMngr2GSSettingsContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + return iListbox->OfferKeyEventL(aKeyEvent, aType); + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::CAppMngr2GSSettingsContainer() +// --------------------------------------------------------------------------- +// +CAppMngr2GSSettingsContainer::CAppMngr2GSSettingsContainer() + { + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::ConstructL() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::ConstructL( const TRect& aRect ) + { + CreateWindowL(); + + iListbox = new( ELeave ) CAknSettingStyleListBox; + + iListbox->SetContainerWindowL( *this ); + iListbox->ConstructL( this, EAknListBoxSelectionList ); + + // Read the setting items array (contains first lines of the setting items) + iItems = iCoeEnv->ReadDesC16ArrayResourceL( R_APPMNGR2_SETTING_ARRAY ); + iOcspCheckValueArray = iCoeEnv->ReadDesC16ArrayResourceL( + R_APPMNGR2_OCSP_CHECK_VALUE_ARRAY ); + iAllowUntrustedValueArray = iCoeEnv->ReadDesC16ArrayResourceL( + R_APPMNGR2_ALLOW_UNTRUSTED_VALUE_ARRAY ); + + iListbox->CreateScrollBarFrameL( ETrue ); + iListbox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOn, + CEikScrollBarFrame::EAuto ); + iListbox->SetRect( aRect.Size() ); + iListbox->ActivateL(); + SetRect( aRect ); + ActivateL(); + + iListbox->SetCurrentItemIndex( EAppMngr2SettingSwInstall ); + if( !FeatureManager::FeatureSupported( KFeatureIdOCSP ) ) + { + LoadIconsL(); + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::LoadIconsL() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::LoadIconsL() + { + HBufC* iconFilePath = HBufC::NewL( KDriveZ().Length() + + KDC_APP_BITMAP_DIR().Length() + KAppMngr2IconFileNameMif().Length() ); + CleanupStack::PushL( iconFilePath ); + + TPtr ptr = iconFilePath->Des(); + ptr.Append( KDriveZ ); + ptr.Append( KDC_APP_BITMAP_DIR ); + ptr.Append( KAppMngr2IconFileNameMif ); + + CArrayPtr* icons = new ( ELeave ) CAknIconArray( KGranularity ); + CleanupStack::PushL( icons ); + + MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); + CGulIcon* icon = AknsUtils::CreateGulIconL( skinInstance, + KAknsIIDQgnIndiSettProtectedAdd, *iconFilePath, + EMbmAppmngr2Qgn_indi_sett_protected_add, + EMbmAppmngr2Qgn_indi_sett_protected_add_mask ); + CleanupStack::PushL( icon ); + icons->AppendL( icon ); + + iListbox->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons ); + + CleanupStack::Pop( icon ); + CleanupStack::Pop( icons ); + CleanupStack::PopAndDestroy( iconFilePath ); + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::SizeChanged() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::SizeChanged() + { + iListbox->SetRect( Rect() ); + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::FocusChanged() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::FocusChanged( TDrawNow aDrawNow ) + { + if( iListbox ) + { + iListbox->SetFocus( IsFocused(), aDrawNow ); + } + } +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::CountComponentControls() +// --------------------------------------------------------------------------- +// +TInt CAppMngr2GSSettingsContainer::CountComponentControls() const + { + return iListbox ? 1 : 0; + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::ComponentControl() +// --------------------------------------------------------------------------- +// +CCoeControl* CAppMngr2GSSettingsContainer::ComponentControl( TInt aIndex ) const + { + switch ( aIndex ) + { + case 0: + return iListbox; + default: + return NULL; + } + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::GetHelpContext() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KAppMngr2AppUid; + aContext.iContext = KAM_HLP_GENERAL_SETTINGS; + } + +// --------------------------------------------------------------------------- +// CAppMngr2GSSettingsContainer::HandleResourceChange() +// --------------------------------------------------------------------------- +// +void CAppMngr2GSSettingsContainer::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + + if( aType == KEikDynamicLayoutVariantSwitch ) //Handle change in layout orientation + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + SetRect( mainPaneRect ); + DrawNow(); + } + } +