commsconfig/cscengine/src/cscenguiextensionpluginhandler.cpp
changeset 0 a4daefaec16c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/cscengine/src/cscenguiextensionpluginhandler.cpp	Mon Jan 18 20:12:36 2010 +0200
@@ -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 <eikenv.h>
+#include <bautils.h>
+#include <pathinfo.h>
+#include <SWInstApi.h>
+#include <SWInstDefs.h>
+#include <AiwCommon.hrh>
+#include <cscengine.rsg>
+#include <AiwServiceHandler.h>
+#include <data_caging_path_literals.hrh>
+
+#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<KMaxFileName> 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" );
+    }