diff -r f742655b05bf -r d38647835c2e commsconfig/cscengine/src/cscenguiextensionpluginhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsconfig/cscengine/src/cscenguiextensionpluginhandler.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,390 @@ +/* +* Copyright (c) 2007-2007 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: For CSC needed Aiw handling for ui extension plug-ins +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cscenglogger.h" +#include "cscengstartuphandler.h" +#include "mcscenguiextensionobserver.h" +#include "cscenguiextensionpluginhandler.h" + +// Resource file location. +_LIT( KCSCEngineResourceFile, "cscengine.rsc" ); // file + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngUiExtensionPluginHandler::CCSCEngUiExtensionPluginHandler( + CEikonEnv& aEikEnv, + MCSCEngUiExtensionObserver& aObserver, + CCSCEngStartupHandler& aStartupHandler ): + iEikEnv( aEikEnv ), + iObserver( aObserver ), + iStartupHandler( aStartupHandler ) + { + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CCSCEngUiExtensionPluginHandler::ConstructL() + { + CSCENGDEBUG( "CCSCEngUiExtensionPluginHandler::ConstructL - begin" ); + + // Attach to AIW Framework. + iServiceHandler = CAiwServiceHandler::NewL(); + + // Load resource file to the memory. + TFileName resourceFile = TParsePtrC( PathInfo::RomRootPath() ).Drive(); + resourceFile.Append( KDC_RESOURCE_FILES_DIR ); + resourceFile.Append( KCSCEngineResourceFile ); + BaflUtils::NearestLanguageFile( iEikEnv.FsSession(), resourceFile ); + iResourceOffset = iEikEnv.AddResourceFileL( resourceFile ); + + CSCENGDEBUG( "CCSCEngUiExtensionPluginHandler::ConstructL - end" ); + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CCSCEngUiExtensionPluginHandler* + CCSCEngUiExtensionPluginHandler::NewL( + CEikonEnv& aEikEnv, + MCSCEngUiExtensionObserver& aObserver, + CCSCEngStartupHandler& aStartupHandler ) + { + CCSCEngUiExtensionPluginHandler* self = + CCSCEngUiExtensionPluginHandler::NewLC( + aEikEnv, aObserver, aStartupHandler ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CCSCEngUiExtensionPluginHandler* + CCSCEngUiExtensionPluginHandler::NewLC( + CEikonEnv& aEikEnv, + MCSCEngUiExtensionObserver& aObserver, + CCSCEngStartupHandler& aStartupHandler ) + { + CCSCEngUiExtensionPluginHandler* self = + new ( ELeave ) CCSCEngUiExtensionPluginHandler( + aEikEnv, aObserver, aStartupHandler ); + + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCEngUiExtensionPluginHandler::~CCSCEngUiExtensionPluginHandler() + { + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::~CCSCEngUiExtensionPluginHandler - begin" ); + + iEikEnv.DeleteResourceFile( iResourceOffset ); + iUiExtensionPluginInfoArray.Reset(); + iUiExtensionPluginInfoArray.Close(); + delete iServiceHandler; + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::~CCSCEngUiExtensionPluginHandler - end" ); + } + + +// --------------------------------------------------------------------------- +// Initializes CSC supported ui extension plugins. +// --------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngUiExtensionPluginHandler::InitializePluginsL() + { + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::InitializePluginsL - begin" ); + + // Attach to CSC supported ui extension plugins and execute initalization. + iServiceHandler->AttachL( R_CSCENG_INTEREST_UI_EXT_PLUGIN ); + + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdCSCUiExtensionPlugins, + iServiceHandler->InParamListL(), + iServiceHandler->OutParamListL(), + EPluginInitialize, + this ); + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::InitializePluginsL - end" ); + } + + +// --------------------------------------------------------------------------- +// Launches plugin provided setting view. +// --------------------------------------------------------------------------- +// +EXPORT_C void CCSCEngUiExtensionPluginHandler::LaunchUiExtensionL( + const TUid& aPluginUid, const TUid& aViewUid, TBool aLaunchedFromAI ) + { + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::LaunchUiExtensionL - begin" ); + + // Set plugins Uid to generic param data. + CAiwGenericParamList& paramList = iServiceHandler->OutParamListL(); + TAiwVariant variant( aPluginUid ); + TAiwGenericParam genericParamUid( EGenericParamError, variant ); + paramList.AppendL( genericParamUid ); + + // Set view id to be returned to generic param data. + variant.Reset(); + variant.Set( aViewUid ); + TAiwGenericParam genericParamViewId( EGenericParamError, variant ); + paramList.AppendL( genericParamViewId ); + + // Set URL to generic param data if set in CSC startup. + TBuf url; + TInt err = iStartupHandler.GetParamUrl( url ); + + if ( !err ) + { + variant.Reset(); + variant.Set( url ); + TAiwGenericParam genericParamURL( EGenericParamError, variant ); + paramList.AppendL( genericParamURL ); + } + + // Execute service handler command. + if ( aLaunchedFromAI ) + { + iServiceHandler->ExecuteServiceCmdL( KAiwCmdCSCUiExtensionPlugins, + iServiceHandler->InParamListL(), + paramList, + EPluginOpenExtensionViewFromAI, + this ); + } + else + { + iServiceHandler->ExecuteServiceCmdL( KAiwCmdCSCUiExtensionPlugins, + iServiceHandler->InParamListL(), + paramList, + EPluginOpenExtensionView, + this ); + } + + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::LaunchUiExtensionL - end" ); + } + + +// --------------------------------------------------------------------------- +// Returns item from UI Extension plug-in array +// --------------------------------------------------------------------------- +// +EXPORT_C TUiExtensionPluginInfo + CCSCEngUiExtensionPluginHandler::ItemFromPluginInfoArray( TInt aIndex ) + { + CSCENGDEBUG( "CCSCEngUiExtensionPluginHandler::ItemFromPluginInfoArray" ); + + return iUiExtensionPluginInfoArray[ aIndex ]; + } + + +// --------------------------------------------------------------------------- +// Returns plugin counts from UiExtensionPluginsInfoArray. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCSCEngUiExtensionPluginHandler::PluginCount() const + { + CSCENGDEBUG2( + "CCSCEngUiExtensionPluginHandler::PluginCount: %d", + iUiExtensionPluginInfoArray.Count() ); + + return iUiExtensionPluginInfoArray.Count(); + } + + +// --------------------------------------------------------------------------- +// From class MAiwNotifyCallBack +// Handles received callbacks from AIW plugin. +// --------------------------------------------------------------------------- +// +TInt CCSCEngUiExtensionPluginHandler::HandleNotifyL( + TInt /*aCmdId*/, + TInt aEventId, + CAiwGenericParamList& /*aEventParamList*/, + const CAiwGenericParamList& aInParamList ) + { + CSCENGDEBUG( "CCSCEngUiExtensionPluginHandler::HandleNotifyL - begin"); + + TInt err( KErrNone ); + + switch ( aEventId ) + { + case KAiwEventStarted: + { + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::HandleNotifyL KAiwEventStarted" ); + + SetPluginInitInfo( aInParamList ); + + TInt index( 0 ); + TUid pluginUid( KNullUid ); + + GetPluginIndexAndUid( aInParamList, index, pluginUid ); + + iObserver.NotifyUiExtensionPluginResponse( + EPluginInitialized, index, pluginUid ); + break; + } + case KAiwEventStopped: + { + TInt index( 0 ); + TUid pluginUid( KNullUid ); + + GetPluginIndexAndUid( aInParamList, index, pluginUid ); + + iObserver.NotifyUiExtensionPluginResponse( + EPluginExited, index, pluginUid ); + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::HandleNotifyL KAiwEventStopped" ); + break; + } + case KAiwEventError: + { + TInt index( 0 ); + TUid pluginUid( KNullUid ); + + GetPluginIndexAndUid( aInParamList, index, pluginUid ); + + iObserver.NotifyUiExtensionPluginResponse( + EPluginError, index, pluginUid ); + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::HandleNotifyL KAiwEventError" ); + break; + } + default: + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::HandleNotifyL: !!DEFAULT!!" ); + break; + } + + CSCENGDEBUG( "CCSCEngUiExtensionPluginHandler::HandleNotifyL - end" ); + + return err; + } + + +// --------------------------------------------------------------------------- +// For getting plug-ins index in plug-in info array and plug-ins uid. +// --------------------------------------------------------------------------- +// +void CCSCEngUiExtensionPluginHandler::GetPluginIndexAndUid( + const CAiwGenericParamList& aInParamList, + TInt aIndex, + TUid aPluginUid ) + { + const TAiwGenericParam* genericParam = NULL; + + // First and only generic value is plugins uid value. + genericParam = aInParamList.FindFirst( aIndex, + EGenericParamError, + EVariantTypeTUid ); + + aPluginUid = genericParam->Value().AsTUid(); + + for ( TInt i = 0; i < iUiExtensionPluginInfoArray.Count(); i++ ) + { + if ( aPluginUid == iUiExtensionPluginInfoArray[ i ].iPluginsUid ) + { + aIndex = i; + break; + } + } + } + + +// --------------------------------------------------------------------------- +// For parsing and settings plug-in initialization info +// --------------------------------------------------------------------------- +// +void CCSCEngUiExtensionPluginHandler::SetPluginInitInfo( + const CAiwGenericParamList& aInParamList ) + { + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::SetPluginInitInfoL - begin" ); + + TUiExtensionPluginInfo pluginInfo; + + TInt index = 0; + + if ( aInParamList.Count() ) + { + const TAiwGenericParam* genericParam = NULL; + + // First generic value is plugin Uid. + genericParam = aInParamList.FindFirst( index, + EGenericParamError, + EVariantTypeTUid ); + + pluginInfo.iPluginsUid = genericParam->Value().AsTUid(); + + // Second generic value is UI extension´s name. + genericParam = aInParamList.FindNext( index, + EGenericParamError, + EVariantTypeDesC ); + + pluginInfo.iUiExtensionName.Copy( genericParam->Value().AsDes() ); + + // Third generic value is ui extension´s placing info + // 0 = listbox, 1 = options menu + genericParam = aInParamList.FindNext( index, + EGenericParamError, + EVariantTypeTInt32 ); + + TInt32 place = genericParam->Value().AsTInt32(); + pluginInfo.iPlace = place; + + CSCENGDEBUG2( + "CCSCEngUiExtensionPluginHandler::SetPluginInitInfoL Place: %d", + place ); + } + + iUiExtensionPluginInfoArray.Append( pluginInfo ); + + CSCENGDEBUG( + "CCSCEngUiExtensionPluginHandler::SetPluginInitInfoL - end" ); + }