--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppMngr2/GSSettingsPlugin/src/appmngr2gssettingsplugin.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,490 @@
+/*
+* 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 Settings plug-in for GS (General Settings)
+*
+*/
+
+
+#include "appmngr2gssettingsplugin.h" // CAppMngrGSSettingsPlugin
+#include "appmngr2gssettingscontainer.h" // CAppMngr2GSSettingsContainer
+#include "appmngr2.hrh" // KAppMngr2AppUidValue
+#include <gsprivatepluginproviderids.h> // KGSPluginProviderInternal
+#include <appmngr2debugutils.h> // FLOG macros
+#include <appmngr2driveutils.h> // TAppMngr2DriveUtils
+#include <aknradiobuttonsettingpage.h> // CAknRadioButtonSettingPage
+#include <akntextsettingpage.h> // CAknTextSettingPage
+#include <SWInstallerInternalCRKeys.h> // KCRUidSWInstallerSettings
+#include <centralrepository.h> // CRepository
+#include <StringLoader.h> // StringLoader
+#include <akntitle.h> // CAknTitlePane
+#include <aknnotewrappers.h> // CAknInformationNote
+#include <hlplch.h> // HlpLauncher
+#include <featmgr.h> // FeatureManager
+#include <csxhelp/am.hlp.hrh> // Help IDs
+#include <appmngr2gssettingspluginrsc.rsg> // Resource IDs
+#include <appmngr2.mbg> // Bitmap IDs
+
+_LIT( KAppMngr2GsSettingsPluginResourceFileName, "appmngr2gssettingspluginrsc.rsc" );
+_LIT( KAppMngr2IconFileNameMif, "appmngr2.mif" );
+_LIT( KDriveZ, "z:" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::NewL()
+// ---------------------------------------------------------------------------
+//
+CAppMngr2GSSettingsPlugin* CAppMngr2GSSettingsPlugin::NewL( TAny* /*aInitParams*/ )
+ {
+ CAppMngr2GSSettingsPlugin* self = new( ELeave ) CAppMngr2GSSettingsPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::~CAppMngr2GSSettingsPlugin()
+// ---------------------------------------------------------------------------
+//
+CAppMngr2GSSettingsPlugin::~CAppMngr2GSSettingsPlugin()
+ {
+ if( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ iResources.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::GetCaptionL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::GetCaptionL( TDes& aCaption ) const
+ {
+ // the resource file is already opened.
+ HBufC* result = StringLoader::LoadL( R_SET_FOLDER_APPLICATION_MANAGER );
+ aCaption.Copy( *result );
+ delete result;
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::CreateIconL()
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CAppMngr2GSSettingsPlugin::CreateIconL( const TUid aIconType )
+ {
+ HBufC* iconFilePath = HBufC::NewLC( KDriveZ().Length() +
+ KDC_APP_BITMAP_DIR().Length() + KAppMngr2IconFileNameMif().Length() );
+ TPtr ptr = iconFilePath->Des();
+ ptr.Append( KDriveZ );
+ ptr.Append( KDC_APP_BITMAP_DIR );
+ ptr.Append( KAppMngr2IconFileNameMif );
+
+ CGulIcon* icon;
+ TInt iconId = EMbmAppmngr2Qgn_prop_cp_inst_settings;
+ TInt maskId = EMbmAppmngr2Qgn_prop_cp_inst_settings_mask;
+ if( aIconType == KGSIconTypeLbxItem )
+ {
+ icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
+ KAknsIIDQgnPropCpInstSettings, *iconFilePath,
+ iconId, maskId );
+ }
+ else
+ {
+ icon = CGSPluginInterface::CreateIconL( aIconType );
+ }
+
+ CleanupStack::PopAndDestroy( iconFilePath );
+ return icon;
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::PluginProviderCategory()
+// ---------------------------------------------------------------------------
+//
+TInt CAppMngr2GSSettingsPlugin::PluginProviderCategory() const
+ {
+ return KGSPluginProviderInternal;
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::Id()
+// ---------------------------------------------------------------------------
+//
+TUid CAppMngr2GSSettingsPlugin::Id() const
+ {
+ return KAppMngr2GSSettingsUid;
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::HandleCommandL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+ case EAppMngr2CmdChange:
+ case EAknSoftkeyChange:
+ {
+ HandleListBoxSelectionL();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ AppUi()->ActivateLocalViewL( iPrevViewId.iViewUid );
+ break;
+ }
+ case EAknSoftkeyExit:
+ {
+ static_cast<MEikCommandObserver*>( AppUi() )->ProcessCommandL( EAknCmdExit );
+ break;
+ }
+ case EAknCmdHelp:
+ case EEikCmdHelpContents:
+ {
+ if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ CArrayFix<TCoeHelpContext>* contexts =
+ new( ELeave ) CArrayFixFlat<TCoeHelpContext>( 1 );
+ CleanupStack::PushL( contexts );
+ TCoeHelpContext context;
+ context.iMajor = KAppMngr2AppUid;
+ context.iContext = KAM_HLP_GENERAL_SETTINGS;
+ contexts->AppendL( context );
+ CleanupStack::Pop( contexts );
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), contexts );
+ }
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::HandleViewRectChange()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::HandleViewRectChange()
+ {
+ if( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::DynInitMenuPaneL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+ switch( aResourceId )
+ {
+ case R_APPMNGR2_SETTINGS_MENU:
+ if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::HandleListBoxEventL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ switch ( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ HandleListBoxSelectionL();
+ break;
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::DoActivateL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/ )
+ {
+ iPrevViewId = aPrevViewId;
+ if( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ HBufC* jamSetTitle = StringLoader::LoadLC( R_AM_INSTALLATION_SETTINGS_TITLE );
+ CEikStatusPane* statusPane = StatusPane();
+ CAknTitlePane* titlePane;
+ titlePane = ( CAknTitlePane* ) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
+ titlePane->SetTextL( jamSetTitle->Des() );
+ CleanupStack::PopAndDestroy( jamSetTitle );
+ jamSetTitle = NULL;
+
+ iContainer = CAppMngr2GSSettingsContainer::NewL( ClientRect() );
+ iContainer->SetMopParent( this );
+ iContainer->MakeVisible( ETrue );
+ iContainer->SetRect( ClientRect() );
+ iContainer->ActivateL();
+ AppUi()->AddToStackL( *this, iContainer );
+ iContainer->ListBox()->SetListBoxObserver( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::DoDeactivate()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::DoDeactivate()
+ {
+ if( iContainer )
+ {
+ iContainer->MakeVisible( EFalse );
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::HandleForegroundEventL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::HandleForegroundEventL( TBool aForeground )
+ {
+ if( aForeground )
+ {
+ iContainer->UpdateListBoxContentL();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::CAppMngr2GSSettingsPlugin()
+// ---------------------------------------------------------------------------
+//
+CAppMngr2GSSettingsPlugin::CAppMngr2GSSettingsPlugin() : iResources( *CCoeEnv::Static() )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::ConstructL()
+ {
+ TFileName* fileName = TAppMngr2DriveUtils::NearestResourceFileLC(
+ KAppMngr2GsSettingsPluginResourceFileName, iCoeEnv->FsSession() );
+
+ iResources.OpenL( *fileName );
+ BaseConstructL( R_APPMNGR2_SETTINGS_VIEW );
+
+ CleanupStack::PopAndDestroy( fileName );
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::HandleListBoxSelectionL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::HandleListBoxSelectionL()
+ {
+ TInt currentIndex = iContainer->ListBox()->CurrentItemIndex();
+ ShowSettingPageL( currentIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::ShowSettingPageL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::ShowSettingPageL( TInt aSettingIndex )
+ {
+ FLOG( "CAppMngr2GSSettingsPlugin: ShowSettingPageL( %d )", aSettingIndex );
+
+ // Variation flag may be used to hide "allow untrusted" option
+ TInt hideAllowUntrusted = 1;
+ CRepository* variationDB = CRepository::NewLC( KCRUidSWInstallerLV );
+ variationDB->Get( KSWInstallerHideUntrustedIns, hideAllowUntrusted );
+ CleanupStack::PopAndDestroy( variationDB );
+ if( hideAllowUntrusted )
+ {
+ // Increase the setting index so that allow untrusted is not taken into account
+ aSettingIndex++;
+ }
+
+ if( aSettingIndex == EAppMngr2SettingOcsp || aSettingIndex == EAppMngr2SettingOcspUrl )
+ {
+ if( !FeatureManager::FeatureSupported( KFeatureIdOCSP ) )
+ {
+ // If OCSP feature is not supported, it's not allowed to change values
+ HBufC* p = StringLoader::LoadLC( R_AM_NOTE_LOCKED_SETTIGS );
+ CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
+ note->ExecuteLD( p->Des() );
+ CleanupStack::PopAndDestroy( p );
+ return;
+ }
+ }
+
+ HBufC* urlTextStr = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength );
+ TPtr urlText( urlTextStr->Des() );
+ urlText.Zero();
+ TInt newIndex = 0;
+
+ if( aSettingIndex == EAppMngr2SettingSwInstall || aSettingIndex == EAppMngr2SettingOcsp )
+ {
+ CRepository* repDB = CRepository::NewLC( KCRUidSWInstallerSettings );
+ CAknSettingPage* dlg = NULL;
+ CDesCArrayFlat* itemArray = NULL;
+
+ if( aSettingIndex == EAppMngr2SettingSwInstall )
+ {
+ // Install software
+ itemArray = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_APPMNGR2_ALLOW_UNTRUSTED_VALUE_ARRAY );
+ repDB->Get( KSWInstallerAllowUntrusted, newIndex );
+ if( newIndex )
+ {
+ newIndex = 1;
+ }
+ dlg = new ( ELeave ) CAknRadioButtonSettingPage(
+ R_APPMNGR2_SET_PAGE_ALLOW_UNTRUSTED,
+ newIndex, itemArray );
+ }
+ else
+ {
+ // OCSP check
+ repDB->Get( KSWInstallerOcspProcedure, newIndex );
+ newIndex = MapOCSPIndex( newIndex );
+ itemArray = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_APPMNGR2_OCSP_CHECK_VALUE_ARRAY );
+ dlg = new ( ELeave ) CAknRadioButtonSettingPage(
+ R_APPMNGR2_OCSP_CHECK_PAGE, newIndex, itemArray );
+ }
+ CleanupStack::PopAndDestroy( repDB );
+ CleanupStack::PushL( itemArray );
+
+ if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ SetPermissionL( aSettingIndex, newIndex, urlText );
+ }
+ CleanupStack::PopAndDestroy( itemArray );
+ }
+ else if( aSettingIndex == EAppMngr2SettingOcspUrl )
+ {
+ CRepository* repDB = CRepository::NewLC( KCRUidSWInstallerSettings );
+ repDB->Get( KSWInstallerOcspDefaultURL, urlText );
+ CAknTextSettingPage* textDlg = new ( ELeave ) CAknTextSettingPage(
+ R_APPMNGR2_OCSP_URL_SETTING_PAGE, urlText,
+ CAknTextSettingPage::EZeroLengthAllowed );
+ CleanupStack::PushL( textDlg );
+ textDlg->ConstructL();
+ textDlg->TextControl()->SetTextLimit( KAppMngr2MaxOcspUrlLength );
+
+ CleanupStack::Pop( textDlg );
+ CleanupStack::PopAndDestroy( repDB );
+
+ if( textDlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ // Remove spaces from URL text
+ for( TInt pos = urlText.Length() - 1; pos >= 0; --pos ) {
+ if( TChar( urlText[pos] ).IsSpace() ) {
+ urlText.Delete( pos, 1 );
+ }
+ }
+ SetPermissionL( aSettingIndex, newIndex, urlText );
+ }
+ }
+ else
+ {
+ ASSERT( EFalse );
+ }
+
+ CleanupStack::PopAndDestroy( urlTextStr );
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::SetPermissionL()
+// ---------------------------------------------------------------------------
+//
+void CAppMngr2GSSettingsPlugin::SetPermissionL( TInt aSettingIndex,
+ TInt aNewValueIndex,
+ TPtrC16 aUrlText )
+ {
+ FLOG( "CAppMngr2GSSettingsPlugin::SetPermissionL( %d, %d, %S )",
+ aSettingIndex, aNewValueIndex, &aUrlText );
+
+ // Write the setting value to Central repository
+ CRepository* repDB = CRepository::NewLC( KCRUidSWInstallerSettings );
+ switch( aSettingIndex )
+ {
+ case EAppMngr2SettingSwInstall:
+ repDB->Set( KSWInstallerAllowUntrusted, aNewValueIndex );
+ break;
+ case EAppMngr2SettingOcsp:
+ aNewValueIndex = MapOCSPIndex( aNewValueIndex );
+ repDB->Set( KSWInstallerOcspProcedure, aNewValueIndex );
+ break;
+ case EAppMngr2SettingOcspUrl:
+ repDB->Set( KSWInstallerOcspDefaultURL, aUrlText );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ CleanupStack::PopAndDestroy( repDB );
+
+ iContainer->UpdateListBoxContentL();
+ }
+
+// ---------------------------------------------------------------------------
+// CAppMngr2GSSettingsPlugin::MapOCSPIndex()
+// ---------------------------------------------------------------------------
+//
+TInt CAppMngr2GSSettingsPlugin::MapOCSPIndex( TInt aValue )
+ {
+ TInt result = 0;
+
+ switch( aValue )
+ {
+ case ESWInstallerOcspProcedureOff:
+ result = EAppMngr2OcspCheckValueArrayOff;
+ break;
+ case ESWInstallerOcspProcedureOn:
+ result = EAppMngr2OcspCheckValueArrayOn;
+ break;
+ case ESWInstallerOcspProcedureMust:
+ result = EAppMngr2OcspCheckValueArrayMustPass;
+ break;
+ default:
+ break;
+ }
+
+ return result;
+ }
+