Merge bug fix RCL_3
authorjake
Wed, 12 May 2010 13:35:37 +0300
branchRCL_3
changeset 17 cb506ec2d869
parent 13 c2817bb2a55c (current diff)
parent 16 b276298d5729 (diff)
child 18 dbbebe55c824
Merge bug fix
contextutility/bwins/hgcontextutilityu.def
contextutility/eabi/hgcontextutilityu.def
contextutility/group/bld.inf
contextutility/group/hgcontextutility.mmp
contextutility/inc/hgcontexttypes.h
contextutility/inc/hgcontextutilityimpl.h
contextutility/inc/hgctxutilslogging.h
contextutility/inc/hglogging.h
contextutility/inc/hglogutils.h
contextutility/rom/hgcontextutility.iby
contextutility/src/hgcontextutility.cpp
contextutility/src/hgcontextutilitybase.cpp
contextutility/src/hgcontextutilityimpl.cpp
homescreensrv_plat/ai_content_model_api/inc/aieventhandlerextension.h
homescreensrv_plat/ai_content_model_api/inc/aipropertyextension.h
homescreensrv_plat/ai_content_model_api/inc/aipropertyextension.inl
homescreensrv_plat/ai_plugin_information_api/inc/activeidle2internalpskeys.h
homescreensrv_plat/ai_plugin_management_api/inc/aicontentpublisher.h
homescreensrv_plat/ai_plugin_management_api/inc/aicontentpublisheruid.hrh
homescreensrv_plat/ai_utilities_api/inc/aisecondarydisplayapi.h
homescreensrv_plat/context_utility_api/group/bld.inf
homescreensrv_plat/context_utility_api/inc/hgcontextdef.h
homescreensrv_plat/context_utility_api/inc/hgcontextutility.h
homescreensrv_plat/context_utility_api/inc/hgcontextutilitybase.h
homescreensrv_plat/context_utility_api/tsrc/bwins/t_ui_context_utility_apiu.def
homescreensrv_plat/context_utility_api/tsrc/eabi/t_ui_context_utility_apiu.def
homescreensrv_plat/context_utility_api/tsrc/group/bld.inf
homescreensrv_plat/context_utility_api/tsrc/group/context_utility_api.bat
homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.mmp
homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.pkg
homescreensrv_plat/context_utility_api/tsrc/inc/hgctxcontactmatcher.h
homescreensrv_plat/context_utility_api/tsrc/inc/t_ui_context_utility_api.h
homescreensrv_plat/context_utility_api/tsrc/src/hgctxcontactmatcher.cpp
homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api.cpp
homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api_cases.cpp
homescreensrv_plat/context_utility_api/tsrc/src/wait.cpp
homescreensrv_plat/context_utility_api/tsrc/src/wait.h
homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.cpp
homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.h
homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbasemacros.h
homescreensrv_plat/context_utility_api/tsrc/testbase/sitfunitutils.inl
homescreensrv_plat/context_utility_api/ui_context_utility_api.metaxml
idlefw/plugins/devicestatus/inc/aidevicestatuscontentmodel.h
package_definition.xml
--- a/contentcontrolsrv/ccsrv/inc/ccsrv.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/ccsrv/inc/ccsrv.h	Wed May 12 13:35:37 2010 +0300
@@ -156,6 +156,16 @@
         };
     RArray<TCcProvider> iProviders;
     
+    /**
+     * Observer list
+     */
+    struct TCcObserver
+        {
+        TUint32 iProviderId;
+        TUint32 iObserver;
+        };
+    RArray<TCcObserver> iObservers;
+    
     };
 
 
--- a/contentcontrolsrv/ccsrv/src/ccsrv.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/ccsrv/src/ccsrv.cpp	Wed May 12 13:35:37 2010 +0300
@@ -138,6 +138,7 @@
     {
     iSessions.Close();
     iProviders.Close();
+    iObservers.Close();
     }
 
 // -----------------------------------------------------------------------------
@@ -185,6 +186,37 @@
 //
 void CCcSrv::DropSession( CCcSrvSession* aSession )
     {
+    // Remove possible provider
+    for ( TUint32 i = 0; i < iProviders.Count(); i++ )
+        {
+        if ( iProviders[ i ].iSession->Id() == aSession->Id() )
+            {
+            iProviders.Remove( i );
+            break;
+            }
+        }
+    // Unregister possible observations and remove observer
+    for ( TUint32 i = 0; i < iObservers.Count(); )
+        {
+        if ( iObservers[ i ].iObserver == aSession->Id() )
+            {
+            for ( TUint32 j = 0; j < iProviders.Count(); j++ )
+                {
+                if ( iObservers[ i ].iProviderId == iProviders[ j ].iId )
+                    {
+                    TRAP_IGNORE( iProviders[ j ].iSession->
+                        UnregisterObserverSessionL( aSession->Id() ) );
+                    }
+                }
+            iObservers.Remove( i );
+            }
+        else
+            {
+            // Get next observer
+            i++;
+            }
+        }
+    // Remove session
     for ( TUint32 i = 0; i < iSessions.Count(); i++ )
         {
         if ( iSessions[ i ]->Id() == aSession->Id() )
@@ -193,22 +225,7 @@
             break;
             }
         }
-    // Unregister possible observations
-    for ( TUint32 i = 0; i < iProviders.Count(); i++ )
-        {
-        TRAP_IGNORE( iProviders[ i ].iSession->
-            UnregisterObserverSessionL( aSession->Id() ) );
-        }
     
-    // Remove possible provider
-    for ( TUint32 i = 0; i < iProviders.Count(); i++ )
-        {
-        if ( iProviders[ i ].iId == aSession->Id() )
-            {
-            iProviders.Remove( i );
-            break;
-            }
-        }
     if ( iSessions.Count() == 0 )
         {
         // Last session dropped -> stop server
@@ -236,6 +253,15 @@
     provider.iSession = aSession;
     iProviders.Append( provider );
     
+    // Register possible active observers
+    for ( TUint32 i = 0; i < iObservers.Count(); i++ )
+        {
+        if ( iObservers[ i ].iProviderId == aProvider )
+            {
+            provider.iSession->RegisterObserverSessionL( iObservers[ i ].iObserver );
+            }
+        }
+    
     }
 
 // -----------------------------------------------------------------------------
@@ -246,19 +272,18 @@
     TUint32 aProvider,
     CCcSrvSession* aSession )
     {
-    TBool found( EFalse );
-    for ( TUint32 i = 0; i < iProviders.Count() && !found; i++ )
+    for ( TUint32 i = 0; i < iProviders.Count(); i++ )
         {
         if ( iProviders[ i ].iId == aProvider )
             {
-            iProviders[ i ].iSession->RegisterObserverSessionL( aSession->Id() );   
-            found = ETrue;
+            iProviders[ i ].iSession->RegisterObserverSessionL( aSession->Id() );
+            break;
             }
         }
-    if ( !found )
-        {
-        User::Leave( KErrNotFound );
-        }
+    CCcSrv::TCcObserver observer;
+    observer.iProviderId = aProvider;
+    observer.iObserver = aSession->Id();
+    iObservers.Append( observer );
     }
 
 // -----------------------------------------------------------------------------
--- a/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h	Wed May 12 13:35:37 2010 +0300
@@ -93,7 +93,12 @@
      * See from API documentation
      */
     TInt ViewListL( CHsContentInfoArray& aArray );
-    
+
+    /**
+     * See from API documentation
+     */
+    TInt ViewListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray );
+
     /**
      * See from API documentation
      */
--- a/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp	Wed May 12 13:35:37 2010 +0300
@@ -329,6 +329,64 @@
     }
 
 // -----------------------------------------------------------------------------
+// CHsCcApiClient::ViewListL
+// -----------------------------------------------------------------------------
+//
+TInt CHsCcApiClient::ViewListL( 
+    CHsContentInfo& aInfo, CHsContentInfoArray& aArray )
+    {
+    TInt err( KErrNone );
+    
+    // Create ViewListReq API request
+    CCcSrvMsg* reqMsg = CCcSrvMsg::NewL();
+    CleanupStack::PushL( reqMsg );
+    reqMsg->SetMsgId( EHsCcViewListReq );
+    reqMsg->SetTrId( 0 );
+
+    // Marshal ViewListReq data to a descriptor
+    HBufC8* dataBuf = aInfo.MarshalL();
+    TPtr8 dataPtr( NULL, 0 );
+    dataPtr.Set( dataBuf->Des() );
+    reqMsg->SetData( dataPtr );
+    
+    delete dataBuf;
+    dataBuf = NULL;
+    
+    // Marshal API request
+    HBufC8* msgBuf = reqMsg->MarshalL();
+    CleanupStack::PushL( msgBuf );
+    TPtr8 msgPtr( NULL, 0 );
+    msgPtr.Set( msgBuf->Des() );
+ 
+    // Send API request
+    // Sender and receiver address not defined -> message is routed
+    // according to the provider id
+    TPckgBuf<TUint32> provider( ECcHomescreen );
+    TPckgBuf<TUint32> sender;
+    TPckgBuf<TUint32> receiver;
+    err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr );
+    
+    if ( !err )
+        {
+        // Internalize response message
+        TUint32 trId;
+        TUint32 dataSize;
+        err = InternalizeRespL( msgPtr, trId, dataSize );
+        if ( !err && dataSize )
+            {
+            // Internalize API response data
+            err = InternalizeContentInfoArrayL( aArray, trId, dataSize );
+            }
+        }
+
+    // Cleanup
+    CleanupStack::PopAndDestroy( msgBuf );
+    CleanupStack::PopAndDestroy( reqMsg );
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
 // CHsCcApiClient::AppListL
 // -----------------------------------------------------------------------------
 //
--- a/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp	Wed May 12 13:35:37 2010 +0300
@@ -275,12 +275,11 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleRegisterObserverNtfL(
-    TUint32 /* aSender */,
+    TUint32 aSender,
     TUint32 /* aReceiver */,
     CCcSrvMsg& /* aMessage */ )
     {
-    TUint32 observer = iPckgSender();
-    iObservers.AppendL( observer );
+    iObservers.AppendL( aSender );
     }
 
 // -----------------------------------------------------------------------------
@@ -288,14 +287,13 @@
 // -----------------------------------------------------------------------------
 //
 void CHsCcProviderClient::HandleUnregisterObserverNtfL(
-    TUint32 /* aSender */,
+    TUint32 aSender,
     TUint32 /* aReceiver */,
     CCcSrvMsg& /* aMessage */ )
     {
-    TUint32 observer = iPckgSender();
     for ( TInt i = 0; i < iObservers.Count(); i++ )
         {
-        if ( iObservers[ i ] == observer )
+        if ( iObservers[ i ] == aSender )
             {
             iObservers.Remove( i );
             break;
@@ -459,11 +457,33 @@
     TUint32 aReceiver,
     CCcSrvMsg& aMessage )
     {
+    TInt err( KErrNone );
     // Get view list
     CHsContentInfoArray* views = CHsContentInfoArray::NewL();
     CleanupStack::PushL( views );
-    TInt err = iController.ViewListL( *views );
+
+    if ( aMessage.DataSize() )
+        {
+        // Internalize message data
+        RDesReadStream dataStream( aMessage.Data() );
+        CleanupClosePushL( dataStream );
+        CHsContentInfo* info = CHsContentInfo::NewL( dataStream );
+        CleanupStack::PopAndDestroy( &dataStream );
+        CleanupStack::PushL( info );
 
+        // Get list of views included in the defined 
+        // application configuration
+        err = iController.ViewListL( *info, *views );
+        
+        CleanupStack::PopAndDestroy( info );        
+        }
+    else
+        {
+        // Get list of available views
+        err = iController.ViewListL( *views );
+        }
+
+    
     // Create and send ViewListResp
     CCcSrvMsg* message = CCcSrvMsg::NewL();
     CleanupStack::PushL( message );
--- a/contentcontrolsrv/hscontentinfo/bwins/hscontentinfo.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hscontentinfo/bwins/hscontentinfo.def	Wed May 12 13:35:37 2010 +0300
@@ -14,33 +14,35 @@
 	?SetNameL@CHsContentInfo@@QAEXABVTDesC16@@@Z @ 13 NONAME ; void CHsContentInfo::SetNameL(class TDesC16 const &)
 	?InternalizeL@CHsContentInfoArray@@QAEXAAVRReadStream@@@Z @ 14 NONAME ; void CHsContentInfoArray::InternalizeL(class RReadStream &)
 	?Size@CHsContentInfoArray@@QAEHXZ @ 15 NONAME ; int CHsContentInfoArray::Size(void)
-	?PublisherId@CHsContentInfo@@QBEABVTDesC16@@XZ @ 16 NONAME ; class TDesC16 const & CHsContentInfo::PublisherId(void) const
-	?SetInstallationTime@CHsContentInfo@@QAEXAAVTTime@@@Z @ 17 NONAME ; void CHsContentInfo::SetInstallationTime(class TTime &)
-	?SetIsWrt@CHsContentInfo@@QAEXH@Z @ 18 NONAME ; void CHsContentInfo::SetIsWrt(int)
-	?SetPublisherUidL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 19 NONAME ; void CHsContentInfo::SetPublisherUidL(class TDesC8 const &)
-	?NewL@CHsContentInfoArray@@SAPAV1@XZ @ 20 NONAME ; class CHsContentInfoArray * CHsContentInfoArray::NewL(void)
-	?SetNameL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 21 NONAME ; void CHsContentInfo::SetNameL(class TDesC8 const &)
-	?Name@CHsContentInfo@@QBEABVTDesC16@@XZ @ 22 NONAME ; class TDesC16 const & CHsContentInfo::Name(void) const
-	?Type@CHsContentInfo@@QBEABVTDesC8@@XZ @ 23 NONAME ; class TDesC8 const & CHsContentInfo::Type(void) const
-	?NewLC@CHsContentInfo@@SAPAV1@XZ @ 24 NONAME ; class CHsContentInfo * CHsContentInfo::NewLC(void)
-	?InstallationTime@CHsContentInfo@@QBE?AVTTime@@XZ @ 25 NONAME ; class TTime CHsContentInfo::InstallationTime(void) const
-	?NewL@CHsContentInfo@@SAPAV1@AAVRReadStream@@@Z @ 26 NONAME ; class CHsContentInfo * CHsContentInfo::NewL(class RReadStream &)
-	?CloneL@CHsContentInfo@@QAEPAV1@XZ @ 27 NONAME ; class CHsContentInfo * CHsContentInfo::CloneL(void)
-	?SetCanBeAdded@CHsContentInfo@@QAEXH@Z @ 28 NONAME ; void CHsContentInfo::SetCanBeAdded(int)
-	?ExternalizeL@CHsContentInfoArray@@QAEXAAVRWriteStream@@@Z @ 29 NONAME ; void CHsContentInfoArray::ExternalizeL(class RWriteStream &)
-	?SetUidL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 30 NONAME ; void CHsContentInfo::SetUidL(class TDesC8 const &)
-	?MaxWidgets@CHsContentInfo@@QBEHXZ @ 31 NONAME ; int CHsContentInfo::MaxWidgets(void) const
-	?Uid@CHsContentInfo@@QBEABVTDesC8@@XZ @ 32 NONAME ; class TDesC8 const & CHsContentInfo::Uid(void) const
-	?MarshalL@CHsContentInfoArray@@QAEPAVHBufC8@@XZ @ 33 NONAME ; class HBufC8 * CHsContentInfoArray::MarshalL(void)
-	?SetPublisherIdL@CHsContentInfo@@QAEXABVTDesC16@@@Z @ 34 NONAME ; void CHsContentInfo::SetPublisherIdL(class TDesC16 const &)
-	?InternalizeL@CHsContentInfo@@QAEXAAVRReadStream@@@Z @ 35 NONAME ; void CHsContentInfo::InternalizeL(class RReadStream &)
-	?CanBeRemoved@CHsContentInfo@@QBEHXZ @ 36 NONAME ; int CHsContentInfo::CanBeRemoved(void) const
-	?SetCanBeRemoved@CHsContentInfo@@QAEXH@Z @ 37 NONAME ; void CHsContentInfo::SetCanBeRemoved(int)
-	?SetIconPathL@CHsContentInfo@@QAEXABVTDesC16@@@Z @ 38 NONAME ; void CHsContentInfo::SetIconPathL(class TDesC16 const &)
-	?Description@CHsContentInfo@@QBEABVTDesC16@@XZ @ 39 NONAME ; class TDesC16 const & CHsContentInfo::Description(void) const
-	?NewL@CHsContentInfo@@SAPAV1@XZ @ 40 NONAME ; class CHsContentInfo * CHsContentInfo::NewL(void)
-	?PublisherUid@CHsContentInfo@@QBEABVTDesC8@@XZ @ 41 NONAME ; class TDesC8 const & CHsContentInfo::PublisherUid(void) const
-	?NameAs8BitLC@CHsContentInfo@@QBEPAVHBufC8@@XZ @ 42 NONAME ; class HBufC8 * CHsContentInfo::NameAs8BitLC(void) const
-	?PluginId@CHsContentInfo@@QBEABVTDesC8@@XZ @ 43 NONAME ; class TDesC8 const & CHsContentInfo::PluginId(void) const
-	?NewL@CHsContentInfoArray@@SAPAV1@AAVRReadStream@@@Z @ 44 NONAME ; class CHsContentInfoArray * CHsContentInfoArray::NewL(class RReadStream &)
+	?SetIsFull@CHsContentInfo@@QAEXH@Z @ 16 NONAME ; void CHsContentInfo::SetIsFull(int)
+	?PublisherId@CHsContentInfo@@QBEABVTDesC16@@XZ @ 17 NONAME ; class TDesC16 const & CHsContentInfo::PublisherId(void) const
+	?IsFull@CHsContentInfo@@QBEHXZ @ 18 NONAME ; int CHsContentInfo::IsFull(void) const
+	?SetInstallationTime@CHsContentInfo@@QAEXAAVTTime@@@Z @ 19 NONAME ; void CHsContentInfo::SetInstallationTime(class TTime &)
+	?SetIsWrt@CHsContentInfo@@QAEXH@Z @ 20 NONAME ; void CHsContentInfo::SetIsWrt(int)
+	?SetPublisherUidL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 21 NONAME ; void CHsContentInfo::SetPublisherUidL(class TDesC8 const &)
+	?NewL@CHsContentInfoArray@@SAPAV1@XZ @ 22 NONAME ; class CHsContentInfoArray * CHsContentInfoArray::NewL(void)
+	?SetNameL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 23 NONAME ; void CHsContentInfo::SetNameL(class TDesC8 const &)
+	?Name@CHsContentInfo@@QBEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & CHsContentInfo::Name(void) const
+	?Type@CHsContentInfo@@QBEABVTDesC8@@XZ @ 25 NONAME ; class TDesC8 const & CHsContentInfo::Type(void) const
+	?NewLC@CHsContentInfo@@SAPAV1@XZ @ 26 NONAME ; class CHsContentInfo * CHsContentInfo::NewLC(void)
+	?InstallationTime@CHsContentInfo@@QBE?AVTTime@@XZ @ 27 NONAME ; class TTime CHsContentInfo::InstallationTime(void) const
+	?NewL@CHsContentInfo@@SAPAV1@AAVRReadStream@@@Z @ 28 NONAME ; class CHsContentInfo * CHsContentInfo::NewL(class RReadStream &)
+	?CloneL@CHsContentInfo@@QAEPAV1@XZ @ 29 NONAME ; class CHsContentInfo * CHsContentInfo::CloneL(void)
+	?SetCanBeAdded@CHsContentInfo@@QAEXH@Z @ 30 NONAME ; void CHsContentInfo::SetCanBeAdded(int)
+	?ExternalizeL@CHsContentInfoArray@@QAEXAAVRWriteStream@@@Z @ 31 NONAME ; void CHsContentInfoArray::ExternalizeL(class RWriteStream &)
+	?SetUidL@CHsContentInfo@@QAEXABVTDesC8@@@Z @ 32 NONAME ; void CHsContentInfo::SetUidL(class TDesC8 const &)
+	?MaxWidgets@CHsContentInfo@@QBEHXZ @ 33 NONAME ; int CHsContentInfo::MaxWidgets(void) const
+	?Uid@CHsContentInfo@@QBEABVTDesC8@@XZ @ 34 NONAME ; class TDesC8 const & CHsContentInfo::Uid(void) const
+	?MarshalL@CHsContentInfoArray@@QAEPAVHBufC8@@XZ @ 35 NONAME ; class HBufC8 * CHsContentInfoArray::MarshalL(void)
+	?SetPublisherIdL@CHsContentInfo@@QAEXABVTDesC16@@@Z @ 36 NONAME ; void CHsContentInfo::SetPublisherIdL(class TDesC16 const &)
+	?InternalizeL@CHsContentInfo@@QAEXAAVRReadStream@@@Z @ 37 NONAME ; void CHsContentInfo::InternalizeL(class RReadStream &)
+	?CanBeRemoved@CHsContentInfo@@QBEHXZ @ 38 NONAME ; int CHsContentInfo::CanBeRemoved(void) const
+	?SetCanBeRemoved@CHsContentInfo@@QAEXH@Z @ 39 NONAME ; void CHsContentInfo::SetCanBeRemoved(int)
+	?SetIconPathL@CHsContentInfo@@QAEXABVTDesC16@@@Z @ 40 NONAME ; void CHsContentInfo::SetIconPathL(class TDesC16 const &)
+	?Description@CHsContentInfo@@QBEABVTDesC16@@XZ @ 41 NONAME ; class TDesC16 const & CHsContentInfo::Description(void) const
+	?NewL@CHsContentInfo@@SAPAV1@XZ @ 42 NONAME ; class CHsContentInfo * CHsContentInfo::NewL(void)
+	?PublisherUid@CHsContentInfo@@QBEABVTDesC8@@XZ @ 43 NONAME ; class TDesC8 const & CHsContentInfo::PublisherUid(void) const
+	?NameAs8BitLC@CHsContentInfo@@QBEPAVHBufC8@@XZ @ 44 NONAME ; class HBufC8 * CHsContentInfo::NameAs8BitLC(void) const
+	?PluginId@CHsContentInfo@@QBEABVTDesC8@@XZ @ 45 NONAME ; class TDesC8 const & CHsContentInfo::PluginId(void) const
+	?NewL@CHsContentInfoArray@@SAPAV1@AAVRReadStream@@@Z @ 46 NONAME ; class CHsContentInfoArray * CHsContentInfoArray::NewL(class RReadStream &)
 
--- a/contentcontrolsrv/hscontentinfo/eabi/hscontentinfo.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hscontentinfo/eabi/hscontentinfo.def	Wed May 12 13:35:37 2010 +0300
@@ -22,27 +22,29 @@
 	_ZN14CHsContentInfo8SetNameLERK6TDesC8 @ 21 NONAME
 	_ZN14CHsContentInfo8SetNameLERK7TDesC16 @ 22 NONAME
 	_ZN14CHsContentInfo8SetTypeLERK6TDesC8 @ 23 NONAME
-	_ZN19CHsContentInfoArray12ExternalizeLER12RWriteStream @ 24 NONAME
-	_ZN19CHsContentInfoArray12InternalizeLER11RReadStream @ 25 NONAME
-	_ZN19CHsContentInfoArray4NewLER11RReadStream @ 26 NONAME
-	_ZN19CHsContentInfoArray4NewLEv @ 27 NONAME
-	_ZN19CHsContentInfoArray4SizeEv @ 28 NONAME
-	_ZN19CHsContentInfoArray5ArrayEv @ 29 NONAME
-	_ZN19CHsContentInfoArray8MarshalLEv @ 30 NONAME
-	_ZNK14CHsContentInfo10CanBeAddedEv @ 31 NONAME
-	_ZNK14CHsContentInfo10MaxWidgetsEv @ 32 NONAME
-	_ZNK14CHsContentInfo11DescriptionEv @ 33 NONAME
-	_ZNK14CHsContentInfo11PublisherIdEv @ 34 NONAME
-	_ZNK14CHsContentInfo12CanBeRemovedEv @ 35 NONAME
-	_ZNK14CHsContentInfo12NameAs8BitLCEv @ 36 NONAME
-	_ZNK14CHsContentInfo12PublisherUidEv @ 37 NONAME
-	_ZNK14CHsContentInfo16InstallationTimeEv @ 38 NONAME
-	_ZNK14CHsContentInfo3UidEv @ 39 NONAME
-	_ZNK14CHsContentInfo4NameEv @ 40 NONAME
-	_ZNK14CHsContentInfo4TypeEv @ 41 NONAME
-	_ZNK14CHsContentInfo5IsWrtEv @ 42 NONAME
-	_ZNK14CHsContentInfo8IconPathEv @ 43 NONAME
-	_ZNK14CHsContentInfo8PluginIdEv @ 44 NONAME
-	_ZTI19CHsContentInfoArray @ 45 NONAME
-	_ZTV19CHsContentInfoArray @ 46 NONAME
+	_ZN14CHsContentInfo9SetIsFullEi @ 24 NONAME
+	_ZN19CHsContentInfoArray12ExternalizeLER12RWriteStream @ 25 NONAME
+	_ZN19CHsContentInfoArray12InternalizeLER11RReadStream @ 26 NONAME
+	_ZN19CHsContentInfoArray4NewLER11RReadStream @ 27 NONAME
+	_ZN19CHsContentInfoArray4NewLEv @ 28 NONAME
+	_ZN19CHsContentInfoArray4SizeEv @ 29 NONAME
+	_ZN19CHsContentInfoArray5ArrayEv @ 30 NONAME
+	_ZN19CHsContentInfoArray8MarshalLEv @ 31 NONAME
+	_ZNK14CHsContentInfo10CanBeAddedEv @ 32 NONAME
+	_ZNK14CHsContentInfo10MaxWidgetsEv @ 33 NONAME
+	_ZNK14CHsContentInfo11DescriptionEv @ 34 NONAME
+	_ZNK14CHsContentInfo11PublisherIdEv @ 35 NONAME
+	_ZNK14CHsContentInfo12CanBeRemovedEv @ 36 NONAME
+	_ZNK14CHsContentInfo12NameAs8BitLCEv @ 37 NONAME
+	_ZNK14CHsContentInfo12PublisherUidEv @ 38 NONAME
+	_ZNK14CHsContentInfo16InstallationTimeEv @ 39 NONAME
+	_ZNK14CHsContentInfo3UidEv @ 40 NONAME
+	_ZNK14CHsContentInfo4NameEv @ 41 NONAME
+	_ZNK14CHsContentInfo4TypeEv @ 42 NONAME
+	_ZNK14CHsContentInfo5IsWrtEv @ 43 NONAME
+	_ZNK14CHsContentInfo6IsFullEv @ 44 NONAME
+	_ZNK14CHsContentInfo8IconPathEv @ 45 NONAME
+	_ZNK14CHsContentInfo8PluginIdEv @ 46 NONAME
+	_ZTI19CHsContentInfoArray @ 47 NONAME
+	_ZTV19CHsContentInfoArray @ 48 NONAME
 
--- a/contentcontrolsrv/hscontentinfo/src/hscontentinfo.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentcontrolsrv/hscontentinfo/src/hscontentinfo.cpp	Wed May 12 13:35:37 2010 +0300
@@ -320,6 +320,9 @@
     
     // externalise iIsWrt
     aStream.WriteInt16L( iIsWrt );
+
+    // externalise iIsFull
+    aStream.WriteInt16L( iIsFull );
 	}
 
 // -----------------------------------------------------------------------
@@ -498,6 +501,9 @@
     
     // internalize iIsWrt
     iIsWrt = aStream.ReadInt16L();
+
+    // internalize iIsFull
+    iIsFull = aStream.ReadInt16L();
     }
 
 // -----------------------------------------------------------------------
@@ -521,6 +527,7 @@
     size = size + sizeof( TUint32 );    // installation time high
     size = size + PublisherUid().Size();// publisher uid
     size = size + sizeof( TInt16 );     // is wrt
+    size = size + sizeof( TInt16 );     // is full
     
     return size;
     }   
@@ -556,6 +563,24 @@
     }
 
 // -----------------------------------------------------------------------
+// CHsContentInfo::IsFull()
+// -----------------------------------------------------------------------
+// 
+EXPORT_C TBool CHsContentInfo::IsFull() const
+    {
+    return iIsFull;
+    }
+
+// -----------------------------------------------------------------------
+// CHsContentInfo::SetIsFull()
+// -----------------------------------------------------------------------
+//   
+EXPORT_C void CHsContentInfo::SetIsFull( TBool aIsFull )    
+    {
+    iIsFull = aIsFull;
+    }
+
+// -----------------------------------------------------------------------
 // CHsContentInfo::IsWrt()
 // -----------------------------------------------------------------------
 // 
--- a/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp	Wed May 12 13:35:37 2010 +0300
@@ -32,6 +32,7 @@
 SOURCE			cpnotificationhandler.cpp
 SOURCE			cpserverburlistener.cpp
 SOURCE          cpactionhandlerthread.cpp
+SOURCE          cpactiondatacache.cpp
 
 USERINCLUDE     ../inc
 USERINCLUDE     ../../cpsqlitestorage/inc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpactiondatacache.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2008 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:  Class used by session to handle asynchronous requests
+ *
+*/
+
+
+#ifndef C_CPACTIONDATACACHE_H
+#define C_CPACTIONDATACACHE_H
+
+#include <e32base.h>
+#include <e32hashtab.h> 
+
+class CLiwDefaultList;
+
+/**
+ *  Action Data Cache holds a list containing data needed to 
+ *  lauch an action fetched from SQL database
+ *  @since S60 v5.0
+ */
+class CCPActionDataCache:public CBase
+    {
+public:
+
+    /**
+     * Creates new instance of CCPActionDataCache.
+     * 
+     * @return new instance of CCPActionDataCache
+     */
+    static CCPActionDataCache* NewL( );
+
+    /**
+     * Creates new instance of CCPActionDataCache.
+     * 
+     * @return new instance of CCPActionDataCache
+     */
+    static CCPActionDataCache* NewLC( );
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CCPActionDataCache();
+    
+    /**
+     * Removes an item from the cache
+     * 
+     * @param aMap a map containing item identifiers 
+     */
+    void HandleCacheRemoveL( const CLiwMap* aMap );
+
+    /**
+     * Appends an item to the cache
+     * 
+     * @param aParamList a list to be added to the cache
+     */
+    void AppendL( const CLiwGenericParamList* aParamList); 
+    
+    /**
+     * Checks if it is possible to cache the item. 
+     * Only items that are specified, which means that id or 
+     * all parameters ( publisher, content_type, content_id ) are provided
+     * 
+     * @param aMap a map containing item identifiers 
+     * @return ETrue if it is possible to cache an item, EFalse if not
+     */
+    TBool IsCacheableL( const CLiwMap* aMap );
+    
+    /**
+     * Checks if it item exists in the cache.
+     * 
+     * @param aMap a map containing item identifiers 
+     * @return ETrue if the item exists in the cache, EFalse if not
+     */
+    TBool ExistL( const CLiwMap* aMap );
+    
+    /**
+     * Gets an item from the cache
+     * 
+     * @param aMap a map containing item identifiers 
+     * @return aParamList item returned from the cache
+     */
+    void GetL( const CLiwMap* aMap,
+            CLiwGenericParamList* aParamList );
+    
+private:
+    
+    /*
+     * Constructor
+     */
+    CCPActionDataCache();
+    
+    /**
+     * 2nd phase constructor.
+     */
+    void ConstructL( );
+    
+    /**
+     * Checks if two items match
+     * 
+     * @param aCachedMap a map from the cache containing item identifiers 
+     * @param aInputMap an input map containing item identifiers 
+     * @return ETrue if items match , EFalse if not
+     */
+    TBool MatchL(const CLiwMap* aCachedMap, const CLiwMap* aInputMap);
+    
+    /**
+     * Checks if two strings contained in both maps match
+     * 
+     * @param aLeft first map
+     * @param aRight second map 
+     * @param aKey key 
+     * @return ETrue if items match , EFalse if not
+     */
+    TBool MatchL(const CLiwMap* aLeft, 
+            const CLiwMap* aRight, const TDesC8& aKey );
+    
+    /**
+     * Checks if a string contained in map is specified
+     * (it has value different than "all")
+     * 
+     * @param aMap map
+     * @param aKey key 
+     * @return ETrue if item is specified , EFalse if not
+     */
+    TBool IsSpecifiedL(const CLiwMap* aMap, 
+            const TDesC8& aKey ); 
+
+    /**
+     * Finds the item in the cache
+     *  
+     * @param aKey map containing identifiers 
+     * @return id of the item in a cache, KErrNotFound if does not 
+     * exist in the cache
+     */
+    TInt FindL( const CLiwMap* aKey ); 
+    
+    /**
+     * Copies variant from one map to another
+     * 
+     * @param aKey key
+     * @param aInMap input map 
+     * @param aOutMap output map 
+     */
+    void CopyVariantL(const TDesC8& aKey,
+            const CLiwMap* aInMap, CLiwDefaultMap* aOutMap );
+    
+private:
+    
+    /*
+     * Internal list. Own
+     */
+    CLiwDefaultList* iInternalList;
+    };
+
+#endif // C_CPACTIONDATACACHE_H
--- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h	Wed May 12 13:35:37 2010 +0300
@@ -59,6 +59,8 @@
 _LIT8( KDelete, "Delete" );
 _LIT8( KRequestNotification, "RequestNotification" );
 _LIT8( KExecuteAction, "ExecuteAction" );
+_LIT8( KExecuteMultipleActions, "ExecuteMultipleActions" );
+
 _LIT8( KCmdCancel, "Cancel" );
 _LIT8( KActivate, "Activate" );
 _LIT8( KActivateTrigger, "activate" );
@@ -69,6 +71,7 @@
 _LIT8( KAction, "action" );
 _LIT8( KItem, "item" );
 _LIT8( KFilter, "filter" );
+_LIT8( KFilters, "filters" );
 _LIT8( KData, "data" );
 _LIT8( KSortOrder, "sort_order" );
 _LIT8( KItemId, "item_id" );
--- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserver.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserver.h	Wed May 12 13:35:37 2010 +0300
@@ -110,7 +110,7 @@
     /**
      * Returns notifications array
      */
-    RPointerArray<CLiwDefaultList>& CCPServer::GetNotifications( ); 
+    RPointerArray<CLiwDefaultList>& GetNotifications( ); 
 
 private:
     // From CActive
--- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h	Wed May 12 13:35:37 2010 +0300
@@ -21,6 +21,7 @@
 
 #include <e32base.h>
 #include "cpstorage.h"
+#include "cpactiondatacache.h"
 
 // FORWARD DECLARATIONS
 #ifdef CONTENT_PUBLISHER_DEBUG
@@ -84,12 +85,14 @@
     /**
      * Fetches action from database
      * @param aInParamList filter and sorting criteria
+     * @param aEnableCache flag indicating if action data should be cached
      * @param aOutParamList results
      * @param aNotificationList change info list (for notifications)
      * @return KErrNotFound if data was not found
      */
-    TInt GetActionL( const CCPLiwMap& aMa,
-        CLiwGenericParamList& aOutParamList, 
+    TInt GetActionsL( const CCPLiwMap& aMap,
+        TBool aEnableCache,
+        CLiwGenericParamList& aOutParamList,
         CLiwDefaultList* aNotificationList = NULL );
 
     /**
@@ -183,7 +186,7 @@
     void FillActionParamListL(
     		CLiwGenericParamList & aOutParamList, 
     		const TLiwGenericParam* aParam,
-			RBuf8 & aActionTrigger);
+    		const CLiwDefaultList* aActionTriggers);
 
      /**
      * Creates map for GetList request - publisher, content_type
@@ -211,6 +214,7 @@
     */
     void BuildChangeInfoL( 
     		const CCPLiwMap* aMap, 
+    		const CLiwDefaultList* aActionTriggers,
     		const TLiwGenericParam* aParam,	
     		CLiwDefaultList* aChangeInfoList );
     /**
@@ -221,6 +225,7 @@
     */
     void BuildDefaultChangeInfoL( 
     		const CCPLiwMap* aMap, 
+    		const CLiwDefaultList* aActionTriggers,
     		CLiwDefaultList* aChangeInfoList );
     /**
     * Builds change info list when query to database returned nothing
@@ -250,6 +255,13 @@
     void CopyActionTrigger16L( const CLiwMap* aInMap, 
     		CLiwDefaultMap* aOutMap );
 
+    /**
+    * Converts variant type from TDesC8 to TDesC
+    * @param aVariant variant to convert
+    */     
+    void CopyActionTrigger16L( const TLiwVariant& aVariant, 
+            CLiwDefaultMap* aOutMap );
+
 private:
     // data
 
@@ -265,6 +277,13 @@
      */
     RPointerArray<CCPNotificationHandler> iNotificationsArray;
 
+    /*
+     * Action data cache
+     * Own.
+     */
+    CCPActionDataCache* iActionDataCache;
+
+    
 #ifdef CONTENT_PUBLISHER_DEBUG
     CCPDebug* iDebug;
 #endif
--- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h	Wed May 12 13:35:37 2010 +0300
@@ -39,6 +39,7 @@
     ECpServerAddObserver = 23,
     ECpServerRemoveObserver = 24,
     ECpServerExecuteAction = 30,
+    ECpServerExecuteMultipleActions = 31,
     ECpServerInternal = 100
     };
 
--- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h	Wed May 12 13:35:37 2010 +0300
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008 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:  Server Session
+ * Copyright (c) 2008 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:  Server Session
+ *
+ */
 
 #ifndef C_CCPSERVERSESSION_H
 #define C_CCPSERVERSESSION_H
@@ -51,12 +50,12 @@
     /**
      * Two-phased constructor.
      */
-    static CCPServerSession* NewL( TPointersForSession& aPasser );
+    static CCPServerSession* NewL(TPointersForSession& aPasser);
 
     /**
      * Two-phased constructor.
      */
-    static CCPServerSession* NewLC( TPointersForSession& aPasser );
+    static CCPServerSession* NewLC(TPointersForSession& aPasser);
 
     /**
      * Destroy the object and release all memory objects
@@ -71,14 +70,14 @@
      * @param aMessage message from client (containing requested operation 
      * and any data)
      */
-    void ServiceL( const RMessage2& aMessage );
+    void ServiceL(const RMessage2& aMessage);
 
     /**
      * Selects correct function from message
      * @param aMessage message from client (containing requested operation 
      * and any data)
      */
-    void DispatchMessageL( const RMessage2& aMessage, TBool& aPanicedClient );
+    void DispatchMessageL(const RMessage2& aMessage, TBool& aPanicedClient);
 
 private:
     // New methods
@@ -91,69 +90,84 @@
     /**
      * Perform the second phase construction of a CCPServerSession object
      */
-    void ConstructL( TPointersForSession& aPasser );
+    void ConstructL(TPointersForSession& aPasser);
 
     /**
      * Add Data request
      * @param Message from client
      */
-    void AddDataL( const RMessage2& aMessage );
+    void AddDataL(const RMessage2& aMessage);
 
     /**
      * Specific add data request - data is not actually added to database
      * but notification is send.
      * @param Message from client
      */
-    void AddDataNonPersistentL( const RMessage2& aMessage );
+    void AddDataNonPersistentL(const RMessage2& aMessage);
 
     /**
      * Get data request - first phase
      * @param Message from client
      */
-    void GetListSizeL( const RMessage2& aMessage );
+    void GetListSizeL(const RMessage2& aMessage);
 
     /**
      * Get data request - second phase
      * @param Message from client
      */
-    void GetListDataL( const RMessage2& aMessage );
+    void GetListDataL(const RMessage2& aMessage);
 
     /**
      * Remove data request
      * @param Message from client
      */
-    void RemoveDataL( const RMessage2& aMessage );
+    void RemoveDataL(const RMessage2& aMessage);
 
     /**
      * Executes action request
      * @param Message from client
      */
-    void ExecuteActionL( const RMessage2& aMessage );
+    void ExecuteActionL(const RMessage2& aMessage);
+
+    /**
+     * Executes actions and sends notifications
+     * @param aMap input map from client
+     * @param aEnableCache indicates if action data should be cached
+     * @param aOptions command options
+     */
+    void ExecuteActionL(const CCPLiwMap* aMap,
+            TBool aEnableCache, TUint aOptions);
+    
+    /**
+     * Executes multiple actions request
+     * @param Message from client
+     */
+    void ExecuteMultipleActionsL(const RMessage2& aMessage);
 
     /**
      * Executes action request
      * @param aActionParams list with actions
      */
-    void ExecuteL( const CLiwGenericParamList& aActionParams );
+    void ExecuteL(const CLiwGenericParamList& aActionParams);
 
     /**
      * Register for notification request
      * @param Message from client
      */
-    void RegisterObserverL( const RMessage2& aMessage );
+    void RegisterObserverL(const RMessage2& aMessage);
 
     /**
      * Adds new observer
      * @param Message from client
      */
-    void AddObserverL( const RMessage2& aMessage );
+    void AddObserverL(const RMessage2& aMessage);
 
     /**
      * Removes observer
      * @param Message from client
      */
-    void RemoveObserverL( const RMessage2& aMessage );    
-    
+    void RemoveObserverL(const RMessage2& aMessage);
+
     /**
      * Unregister from notification request
      * @param Message from client
@@ -164,7 +178,7 @@
      * Send information about change in database to client
      * @param Message from client
      */
-    void GetChangeInfoDataL( const RMessage2& aMessage );
+    void GetChangeInfoDataL(const RMessage2& aMessage);
 
     /**
      * Converts CLiwGenericParamList to descriptor and
@@ -172,22 +186,22 @@
      * @param Message to complete 
      * @param Parameters for message
      */
-    void ExternalizeAndWriteToClientL( const RMessage2& aMessage,
-        const CLiwGenericParamList* outParamList );
-    
-     /**
-      * Unpacks message from client to map
-      * @param Message to complete 
-      * @return CCPLiwMap with data from client
-      */
-    CCPLiwMap* UnpackFromClientLC( const RMessage2& aMessage );
+    void ExternalizeAndWriteToClientL(const RMessage2& aMessage,
+            const CLiwGenericParamList* outParamList);
 
-     /**
-      * Send notification
-      * @param aNotificationList
-      */
-    void SendNotificationL( CCPLiwMap* aMap,
-    		CLiwDefaultList* aNotificationList ); 
+    /**
+     * Unpacks message from client to map
+     * @param Message to complete 
+     * @return CCPLiwMap with data from client
+     */
+    CCPLiwMap* UnpackFromClientLC(const RMessage2& aMessage);
+
+    /**
+     * Send notification
+     * @param aNotificationList
+     */
+    void SendNotificationL(CCPLiwMap* aMap,
+            CLiwDefaultList* aNotificationList);
 
     /**
      * Get and Execute Activate or Deactivate action from the DB 
@@ -195,14 +209,29 @@
      */
     void GetAndExecuteActionL( CCPLiwMap* aMap, CLiwDefaultList* aNotificationList,
     		TBool aInsertTrigger = EFalse );
-    
+
     /**
      * Get Server Lock
      * @return ETrue if aMessege cannot be processed
      * because Backup or Restore is running 
      **/
-    TBool GetServerLock( const RMessage2& aMessage );
-       
+    TBool GetServerLock(const RMessage2& aMessage);
+
+    /**
+     * Unpacks data for ExecuteMultipleActions from client
+     * @param Message from client
+     * @return list containing input data from the client
+     **/
+    CLiwGenericParamList* UnpackForMultiExecuteLC(const RMessage2& aMessage);
+
+    /**
+     * Checks map validity of input data and returns list 
+     * that can be used to call execute
+     * @param aMaps input data
+     * @return list containing input maps for Execute
+     **/
+    CLiwDefaultList* CheckValidityLC(const CLiwList* aMaps);
+    
 private:
 
     /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpactiondatacache.cpp	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2008 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:  ?Description
+
+ *
+*/
+
+
+#include <liwcommon.h>
+#include <liwvariant.h>
+#include <s32mem.h>
+
+#include "cpactiondatacache.h"
+#include "cpglobals.h"
+
+using namespace LIW;
+
+_LIT8(KCachedMap, "cached_map");
+
+static const int KMaxCacheItems = 6; 
+
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCPActionDataCache* CCPActionDataCache::NewL()
+    {
+    CCPActionDataCache* self = CCPActionDataCache::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCPActionDataCache* CCPActionDataCache::NewLC()
+    {
+    CCPActionDataCache* self = new (ELeave) CCPActionDataCache;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPActionDataCache::ConstructL( )
+    {
+    iInternalList = CLiwDefaultList::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCPActionDataCache::CCPActionDataCache()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CCPActionDataCache::~CCPActionDataCache()
+    {
+    if (iInternalList)
+        {
+        iInternalList->Close();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPActionDataCache::HandleCacheRemoveL(const CLiwMap* aMap)
+    {
+    TInt id = FindL(aMap);
+    if (id != KErrNotFound)
+        {
+        iInternalList->Remove(id);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPActionDataCache::AppendL( const CLiwGenericParamList* aParamList)
+    {
+    const TLiwGenericParam* param;
+    TInt pos( 0);
+    param = aParamList->FindFirst( pos, KListMap );
+
+    if (param && param->Value().TypeId() == EVariantTypeMap)
+        {
+        const CLiwMap* inputMap = param->Value().AsMap();
+        CLiwDefaultMap* map = CLiwDefaultMap::NewLC();
+        CopyVariantL(KId, inputMap, map);
+        CopyVariantL(KPublisherId, inputMap, map);
+        CopyVariantL(KContentType, inputMap, map);
+        CopyVariantL(KContentId, inputMap, map);
+        map->InsertL(KCachedMap, TLiwVariant(inputMap));
+        iInternalList->AppendL(TLiwVariant(map));
+        CleanupStack::PopAndDestroy(map);
+    
+        if (iInternalList->Count() > KMaxCacheItems)
+            {
+            iInternalList->Remove(0);
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CCPActionDataCache::IsCacheableL(const CLiwMap* aMap)
+    {
+    TBool result(EFalse);
+    TLiwVariant value;
+    value.PushL();
+
+    if (aMap->FindL(KId, value) && value.AsTInt32() > 0)
+        {
+        result = ETrue;
+        }
+    else if (IsSpecifiedL(aMap, KPublisherId) && IsSpecifiedL(aMap,
+            KContentType) && IsSpecifiedL(aMap, KContentId))
+        {
+        result = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy(&value);
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CCPActionDataCache::ExistL(const CLiwMap* aMap)
+    {
+    TBool result(EFalse);
+    if (FindL(aMap) != KErrNotFound)
+        {
+        result = ETrue;
+        }
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPActionDataCache::GetL(const CLiwMap* aMap,
+        CLiwGenericParamList* aParamList)
+    {
+    TInt id = FindL(aMap);
+    if (id != KErrNotFound)
+        {
+        TLiwVariant value;
+        value.PushL();
+        iInternalList->AtL(id, value);
+        const CLiwMap* map = value.AsMap();
+        if (map->FindL(KCachedMap, value))
+            {
+            CLiwDefaultMap* outMap = CLiwDefaultMap::NewLC();
+            value.Get(*outMap);
+            TLiwGenericParam genericParam(KListMap, TLiwVariant(outMap));
+            aParamList->AppendL(genericParam);
+            CleanupStack::PopAndDestroy(outMap);
+            }
+        CleanupStack::PopAndDestroy(&value);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CCPActionDataCache::MatchL(const CLiwMap* aCachedMap,
+        const CLiwMap* aInputMap)
+    {
+    TBool idMatch(EFalse);
+    TLiwVariant l, r;
+    l.PushL();
+    r.PushL();
+    if (aCachedMap->FindL(KId, l) && aInputMap->FindL(KId, r) && l.AsTInt32()
+            == r.AsTInt32())
+        {
+        idMatch = ETrue;
+        }
+    if (!idMatch)
+        {
+        if (MatchL(aCachedMap, aInputMap, KPublisherId) && MatchL(aCachedMap,
+                aInputMap, KContentType) && MatchL(aCachedMap, aInputMap,
+                KContentId))
+            {
+            idMatch = ETrue;
+            }
+        }
+
+    CleanupStack::PopAndDestroy(&r);
+    CleanupStack::PopAndDestroy(&l);
+    return idMatch;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CCPActionDataCache::MatchL(const CLiwMap* aLeft, const CLiwMap* aRight,
+        const TDesC8& aKey)
+    {
+    TBool match(EFalse);
+    TLiwVariant l, r;
+    l.PushL();
+    r.PushL();
+    if (aLeft->FindL(aKey, l) && aRight->FindL(aKey, r)
+            && !l.AsDes().Compare(r.AsDes()))
+        {
+        match = ETrue;
+        }
+    CleanupStack::PopAndDestroy(&r);
+    CleanupStack::PopAndDestroy(&l);
+    return match;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CCPActionDataCache::IsSpecifiedL(const CLiwMap* aMap,
+        const TDesC8& aKey)
+    {
+    TBool result(EFalse);
+    TLiwVariant value;
+    value.PushL();
+    if (aMap->FindL(aKey, value) && value.AsDes().Compare(KNullDesC) != 0
+            && value.AsDes().Compare(KAll) != 0)
+        {
+        result = ETrue;
+        }
+    CleanupStack::PopAndDestroy(&value);
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CCPActionDataCache::FindL(const CLiwMap* aKey)
+    {
+    TInt result(KErrNotFound);
+    TLiwVariant value;
+    value.PushL();
+    for (TInt i = 0; i < iInternalList->Count(); i++)
+        {
+        iInternalList->AtL(i, value);
+        if (MatchL(value.AsMap(), aKey))
+            {
+            result = i;
+            break;
+            }
+        }
+    CleanupStack::PopAndDestroy(&value);
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCPActionDataCache::CopyVariantL(const TDesC8& aKey,
+        const CLiwMap* aInMap, CLiwDefaultMap* aOutMap)
+    {
+    //TODO: method exist also in data manager - should be refactored
+    TLiwVariant variant;
+    variant.PushL();
+    if (aInMap->FindL(aKey, variant))
+        {
+        aOutMap->InsertL(aKey, variant);
+        }
+    CleanupStack::PopAndDestroy(&variant);
+    }
--- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpnotificationhandler.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpnotificationhandler.cpp	Wed May 12 13:35:37 2010 +0300
@@ -312,12 +312,8 @@
                     {
                     listOfMatchingMaps->AppendL( variant );
                     }
-                else 
-                    {
-                    variant.Reset();
-                    }
                 }
-			CleanupStack::Pop( &variant );
+            CleanupStack::PopAndDestroy( &variant );
 			}
 		if ( listOfMatchingMaps->Count( ) )
 			{
--- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserverdatamanager.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserverdatamanager.cpp	Wed May 12 13:35:37 2010 +0300
@@ -38,6 +38,7 @@
 //
 CCPDataManager::~CCPDataManager()
     {
+    delete iActionDataCache;
     iNotificationsArray.Close( );
     delete iStorage;
     }
@@ -85,6 +86,7 @@
         {
         iStorage = StorageFactory::NewDatabaseL( );
         }
+    iActionDataCache = CCPActionDataCache::NewL();
     }
 
 // ---------------------------------------------------------------------------
@@ -98,6 +100,8 @@
 
     CCPLiwMap* getlistmap = CreateMapForGetlistLC( aMap );
 
+    iActionDataCache->HandleCacheRemoveL( &aMap );
+    
     TBool activateMap = aMap.GetActivateInfo();
     TBool activateDB ( EFalse );
     TBool activateSupport =aMap.ActivateActionSupport( );
@@ -158,7 +162,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-TInt CCPDataManager::GetActionL( const CCPLiwMap& aMap,
+TInt CCPDataManager::GetActionsL( const CCPLiwMap& aMap, TBool aEnableCache,
     CLiwGenericParamList& aOutParamList, CLiwDefaultList* aNotificationList )
     {
     CP_DEBUG( _L8("CCPDataManager::GetActionL()") );
@@ -166,12 +170,25 @@
 
     CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC( );
     TInt result( KErrNone );
-    TRAP( result, iStorage->GetListL( &aMap, *paramList ) );
-    RBuf8 actionTrigger;
-    actionTrigger.CleanupClosePushL();
+    
+    CLiwDefaultList* actionTriggers = aMap.GetActionTriggersLC();
     
-    if ( aMap.GetPropertyL( KActionTrigger, actionTrigger ) )
+    if ( actionTriggers )
         {
+        TBool cacheable = iActionDataCache->IsCacheableL( &aMap );
+        if (aEnableCache && cacheable && iActionDataCache->ExistL( &aMap ))
+            {
+            iActionDataCache->GetL( &aMap, paramList );
+            }
+        else 
+            {
+            TRAP( result, iStorage->GetListL( &aMap, *paramList ) );
+            if ( aEnableCache && cacheable && result == KErrNone )
+                {
+                iActionDataCache->AppendL(paramList);
+                }
+            }
+        
         const TLiwGenericParam* param;
     	TInt pos( 0);
     	
@@ -179,14 +196,15 @@
         //at least one param should be valid to preceed
         if ( !param || pos == KErrNotFound )
         	{
-        	BuildDefaultChangeInfoL(&aMap, aNotificationList);
+        	BuildDefaultChangeInfoL(&aMap, actionTriggers, aNotificationList);
         	}
         
         //iteration through paramList items
     	while ( param && pos != KErrNotFound )
     		{
-    		BuildChangeInfoL( &aMap, param, aNotificationList );
-    		FillActionParamListL( aOutParamList, param, actionTrigger );
+    		BuildChangeInfoL( &aMap, actionTriggers, param, 
+    		        aNotificationList );
+    		FillActionParamListL( aOutParamList, param, actionTriggers );
     		param = paramList->FindNext( pos, KListMap );
     		}
         }
@@ -194,7 +212,8 @@
         {
         User::Leave( KErrNotFound );
         }
-    CleanupStack::PopAndDestroy( &actionTrigger );
+    
+    CleanupStack::PopAndDestroy( actionTriggers );
     CleanupStack::PopAndDestroy( paramList );
     return result;
     }
@@ -207,7 +226,7 @@
 void CCPDataManager::FillActionParamListL( 
 		CLiwGenericParamList& aOutParamList, 
 		const TLiwGenericParam* aParam,
-		RBuf8 & aActionTrigger)
+		const CLiwDefaultList* aActionTriggers)
 	{
     CP_DEBUG( _L8("CCPDataManager::FillActionParamListL()") );
     __ASSERT_DEBUG( iStorage , User::Panic( _L("cpserver"), 0 ) );
@@ -219,7 +238,17 @@
 	RDesReadStream str(actionBinaries);
 	CleanupClosePushL( str );
 	CLiwDefaultMap* actionMap = CLiwDefaultMap::NewLC( str );
-	ExtractTriggerL( aOutParamList, actionMap, aActionTrigger );
+
+    TLiwVariant trigger;
+    trigger.PushL();
+    TInt count = aActionTriggers->Count();
+	for ( TInt i = 0; i<count; i++ )
+	    {
+	    trigger.Reset();
+	    aActionTriggers->AtL( i,trigger );
+	    ExtractTriggerL( aOutParamList, actionMap, trigger.AsData());
+	    }
+    CleanupStack::PopAndDestroy(&trigger);
 
 	CleanupStack::PopAndDestroy( actionMap );
 	CleanupStack::PopAndDestroy( &str );
@@ -273,6 +302,7 @@
     {
     CP_DEBUG( _L8("CCPDataManager::RemoveData()") );
     __ASSERT_DEBUG( iStorage , User::Panic( _L("cpserver"), 0 ) );
+    iActionDataCache->HandleCacheRemoveL( &aMap );
     iStorage->RemoveL( &aMap );
     }
 
@@ -301,11 +331,13 @@
     {
     CP_DEBUG( _L8("CCPDataManager::RemoveObserver()") );
     TInt index = iNotificationsArray.Find( aNotificationHandler );
-    __ASSERT_DEBUG( index >= 0 , User::Panic( _L("cpserver"), 0 ) );
-    iNotificationsArray.Remove( index );
-    if ( iNotificationsArray.Count( ) == 0 )
+    if (index != KErrNotFound)
         {
-        iStorage->SetCallback( 0 );
+        iNotificationsArray.Remove( index );
+        if ( iNotificationsArray.Count( ) == 0 )
+            {
+            iStorage->SetCallback( 0 );
+            }
         }
     }
 
@@ -456,30 +488,39 @@
 // -----------------------------------------------------------------------------
 //    
 void CCPDataManager::BuildChangeInfoL( const CCPLiwMap* aMap, 
+        const CLiwDefaultList* aActionTriggers,
 		const TLiwGenericParam* aParam,	
 		CLiwDefaultList* aChangeInfoList )
 	{
 	TLiwVariant resultVar = aParam->Value();
+    resultVar.PushL();
 	if ( resultVar.TypeId() == EVariantTypeMap )
         {
-        resultVar.PushL();
-        CLiwDefaultMap* changeInfoMap = CLiwDefaultMap::NewLC(); 
-	
-        CopyVariantL(KId, resultVar.AsMap(), changeInfoMap );
-        CopyVariantL(KPublisherId, resultVar.AsMap(), changeInfoMap );
-        CopyVariantL(KContentType, resultVar.AsMap(), changeInfoMap );
-        CopyVariantL(KContentId, resultVar.AsMap(), changeInfoMap );
-        CopyVariantL(KFlag, resultVar.AsMap(), changeInfoMap );
-        CopyVariantL(KType, aMap, changeInfoMap );
-        CopyVariantL(KActionTrigger, aMap, changeInfoMap );
-        CopyActionTrigger16L( aMap, changeInfoMap );
-	
-        changeInfoMap->InsertL( KOperation, TLiwVariant( KOperationExecute ) );
-	
-        aChangeInfoList->AppendL( TLiwVariant( changeInfoMap ) );
-        CleanupStack::PopAndDestroy( changeInfoMap );
-        CleanupStack::PopAndDestroy( &resultVar );
+        for ( TInt i = 0; i<aActionTriggers->Count(); i++ )
+            {
+            CLiwDefaultMap* changeInfoMap = CLiwDefaultMap::NewLC(); 
+        
+            CopyVariantL(KId, resultVar.AsMap(), changeInfoMap );
+            CopyVariantL(KPublisherId, resultVar.AsMap(), changeInfoMap );
+            CopyVariantL(KContentType, resultVar.AsMap(), changeInfoMap );
+            CopyVariantL(KContentId, resultVar.AsMap(), changeInfoMap );
+            CopyVariantL(KFlag, resultVar.AsMap(), changeInfoMap );
+            CopyVariantL(KType, aMap, changeInfoMap );
+    
+            TLiwVariant trigger;
+            trigger.PushL();
+            aActionTriggers->AtL(i,trigger);
+            changeInfoMap->InsertL(KActionTrigger, trigger);
+            CopyActionTrigger16L(trigger,changeInfoMap);
+            CleanupStack::PopAndDestroy(&trigger);
+            
+            changeInfoMap->InsertL( KOperation, TLiwVariant( KOperationExecute ) );
+        
+            aChangeInfoList->AppendL( TLiwVariant( changeInfoMap ) );
+            CleanupStack::PopAndDestroy( changeInfoMap );
+            }
         }
+    CleanupStack::PopAndDestroy( &resultVar );
 	}
 
 
@@ -488,23 +529,32 @@
 // -----------------------------------------------------------------------------
 //    
 void CCPDataManager::BuildDefaultChangeInfoL( const CCPLiwMap* aMap, 
+        const CLiwDefaultList* aActionTriggers,
 		CLiwDefaultList* aChangeInfoList )
 	{
-	CLiwDefaultMap* changeInfoMap = CLiwDefaultMap::NewLC(); 
+	for ( TInt i = 0; i<aActionTriggers->Count(); i++ )
+	    {
+	    CLiwDefaultMap* changeInfoMap = CLiwDefaultMap::NewLC(); 
 	
-	CopyVariantL(KId, aMap, changeInfoMap );
-	CopyVariantL(KPublisherId, aMap, changeInfoMap );
-	CopyVariantL(KContentType, aMap, changeInfoMap );
-	CopyVariantL(KContentId, aMap, changeInfoMap );
-	CopyVariantL(KFlag, aMap, changeInfoMap );
-	CopyVariantL(KType, aMap, changeInfoMap );
-	CopyVariantL(KActionTrigger, aMap, changeInfoMap );
-	CopyActionTrigger16L( aMap, changeInfoMap );
-	
-	changeInfoMap->InsertL( KOperation, TLiwVariant( KOperationExecute ) );
-	
-	aChangeInfoList->AppendL( TLiwVariant( changeInfoMap ) );
-	CleanupStack::PopAndDestroy( changeInfoMap );
+	    CopyVariantL(KId, aMap, changeInfoMap );
+        CopyVariantL(KPublisherId, aMap, changeInfoMap );
+        CopyVariantL(KContentType, aMap, changeInfoMap );
+        CopyVariantL(KContentId, aMap, changeInfoMap );
+        CopyVariantL(KFlag, aMap, changeInfoMap );
+        CopyVariantL(KType, aMap, changeInfoMap );
+        
+        TLiwVariant trigger;
+        trigger.PushL();
+        aActionTriggers->AtL(i,trigger);
+        changeInfoMap->InsertL(KActionTrigger, trigger);
+        CopyActionTrigger16L(trigger,changeInfoMap);
+        CleanupStack::PopAndDestroy(&trigger);
+        
+        changeInfoMap->InsertL( KOperation, TLiwVariant( KOperationExecute ) );
+        
+        aChangeInfoList->AppendL( TLiwVariant( changeInfoMap ) );
+        CleanupStack::PopAndDestroy( changeInfoMap );
+	    }
 	}
 
 // -----------------------------------------------------------------------------
@@ -559,22 +609,30 @@
 	variant.PushL();
 	if ( aInMap->FindL( KActionTrigger(), variant ) )
 		{
-
-		TPtrC8 result8( KNullDesC8 );
-		if( variant.Get( result8 ) )
-			{
-			RBuf actionTrigger;
-			actionTrigger.CleanupClosePushL();
-			actionTrigger.Assign( 
-					EscapeUtils::ConvertToUnicodeFromUtf8L( result8 ) );
-
-			variant.Reset();
-			variant.Set( actionTrigger );
-			CleanupStack::PopAndDestroy( &actionTrigger );
-			}
-		
-		aOutMap->InsertL( KActionTrigger16(), variant );
+		CopyActionTrigger16L(variant,aOutMap);
 		}
 	CleanupStack::PopAndDestroy( &variant );
 	}
 
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//   
+void CCPDataManager::CopyActionTrigger16L( const TLiwVariant& aVariant, 
+        CLiwDefaultMap* aOutMap )
+    {
+    if( aVariant.TypeId() == EVariantTypeDesC8 )
+        {
+        TLiwVariant variant;
+        variant.PushL();
+        RBuf desc16;
+        desc16.CleanupClosePushL();
+        desc16.Assign( 
+                EscapeUtils::ConvertToUnicodeFromUtf8L( aVariant.AsData()) );
+        variant.Set( desc16 );
+        aOutMap->InsertL(KActionTrigger16(),variant);
+        CleanupStack::PopAndDestroy( &desc16 );
+        CleanupStack::PopAndDestroy( &variant );
+        }
+    }
+
--- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp	Wed May 12 13:35:37 2010 +0300
@@ -33,7 +33,6 @@
 #include "cpactionhandlerthread.h"
 #include "cpnotificationhandler.h"
 
-
 using namespace LIW;
 
 // ================= MEMBER FUNCTIONS =======================
@@ -183,6 +182,9 @@
         case ECpServerExecuteAction:
             ExecuteActionL( aMessage );
             break;
+        case ECpServerExecuteMultipleActions:
+            ExecuteMultipleActionsL( aMessage );
+            break;
         default:
             iServer->PanicClient( aMessage, ECPServerBadRequest );
             aPanicedClient = ETrue;
@@ -282,26 +284,68 @@
 //
 void CCPServerSession::ExecuteActionL( const RMessage2& aMessage )
     {
-    TInt error(KErrNone);
     CP_DEBUG( _L8("CCPServerSession::ExecuteActionSizeL()" ) );
-
     TUint options = static_cast<TUint>( aMessage.Int2() ); // 2 == KOptionsPosition
+    CCPLiwMap* map = UnpackFromClientLC( aMessage );
+    ExecuteActionL( map, EFalse, options );
+    CleanupStack::PopAndDestroy( map );
+    }
 
-    CCPLiwMap* map = UnpackFromClientLC( aMessage );
-    CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC( );
+// -----------------------------------------------------------------------------
+//
+// --------------- --------------------------------------------------------------
+//
+void CCPServerSession::ExecuteActionL(const CCPLiwMap* aMap,
+        TBool aEnableCache, TUint aOptions)
+    {
+    CP_DEBUG( _L8("CCPServerSession::ExecuteActionSizeL()" ) );
+    TInt error(KErrNone);
+    CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC();
     CLiwDefaultList* list = CLiwDefaultList::NewLC();
-    error = iDataManager->GetActionL( *map, *paramList, list );
+    error = iDataManager->GetActionsL(*aMap, aEnableCache, *paramList, list );
     //we notify apart from action execution result. So in fact
     //notification means there was an attempt to execute action
-    if ( !( options & KDisableNotification ) )
+    if (!(aOptions & KDisableNotification))
         {
-        iDataManager->HandleChangeL( list );
+        iDataManager->HandleChangeL(list);
         }
-    User::LeaveIfError( error );
-    ExecuteL( *paramList );    
-    CleanupStack::PopAndDestroy( list );
-    CleanupStack::PopAndDestroy( paramList );
-    CleanupStack::PopAndDestroy( map );
+    User::LeaveIfError(error);
+    ExecuteL(*paramList);
+    CleanupStack::PopAndDestroy(list);
+    CleanupStack::PopAndDestroy(paramList);
+    }
+
+// -----------------------------------------------------------------------------
+// CCPServerSession::ExecuteMultipleActionsL
+// --------------- --------------------------------------------------------------
+//
+void CCPServerSession::ExecuteMultipleActionsL(const RMessage2& aMessage)
+    {
+    CP_DEBUG( _L8("CCPServerSession::ExecuteMultipleActionsL()" ) );
+    
+    CLiwGenericParamList* genericList = UnpackForMultiExecuteLC(aMessage);
+    TUint options = static_cast<TUint> (aMessage.Int2()); // 2 == KOptionsPosition
+
+    const TLiwGenericParam* param = NULL;
+    TInt pos(0);
+    param = genericList->FindFirst(pos, KFilters);
+    const CLiwList* maps = param->Value().AsList();
+    CLiwDefaultList* cpMaps = CheckValidityLC(maps);
+    
+    //execute actions
+    for (TInt i = 0; i < cpMaps->Count(); i++)
+        {
+        TLiwVariant mapVariant;
+        mapVariant.PushL();
+        cpMaps->AtL(i, mapVariant);
+        const CCPLiwMap* map =
+                static_cast<const CCPLiwMap*> (mapVariant.AsMap());
+        TRAP_IGNORE(ExecuteActionL(map, ETrue, options));
+        CleanupStack::PopAndDestroy(&mapVariant);
+        }
+
+    CleanupStack::PopAndDestroy(cpMaps);
+    CleanupStack::PopAndDestroy(genericList);
     }
 
 // -----------------------------------------------------------------------------
@@ -339,6 +383,7 @@
             iServer->PanicClient( aMessage, ECPServerBadRequest );
             User::Leave( KErrGeneral );
             }
+        isRegister = ETrue;
         if ( !iNotificationHandler )
             {
             iNotificationHandler = CCPNotificationHandler::NewL(
@@ -346,7 +391,6 @@
             iDataManager->AddObserverL( iNotificationHandler );
             }
         iNotificationHandler->SaveMessageL( aMessage );
-        isRegister = ETrue;
         }
     else
         {
@@ -388,7 +432,7 @@
 void CCPServerSession::UnregisterObserverL()
     {
     CP_DEBUG( _L8("CCPServerSession::UnregisterObserverL()" ) );
-    if ( isRegister )
+    if ( isRegister && iNotificationHandler )
         {
         //remove notification handler from an array of sessions in data manager
         iDataManager->RemoveObserver( iNotificationHandler );
@@ -413,10 +457,10 @@
     CP_DEBUG( _L8("CCPServerSession::GetChangeInfoData()" ) );
     if( iNotificationHandler )
         {
-        isRegister = EFalse;
         ExternalizeAndWriteToClientL( aMessage,
             iNotificationHandler->GetPointerToChangeInfoList( ) );
         iNotificationHandler->Reset( );
+        isRegister = EFalse;
         }
     }
 
@@ -488,7 +532,7 @@
         aMap->InsertL( KActionTrigger, TLiwVariant( KActivateTrigger ) ); 
         }
     CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC();
-    iDataManager->GetActionL( *aMap, *paramList, aNotificationList );
+    iDataManager->GetActionsL( *aMap, EFalse, *paramList, aNotificationList );
     iActionHandlerThread->ExecuteL( *paramList );    
     CleanupStack::PopAndDestroy( paramList );
     }
@@ -504,4 +548,51 @@
 			&& iServer->GetLock() ); 
 			
 	}
+
+// -----------------------------------------------------------------------------
+//
+// --------------- --------------------------------------------------------------
+//
+CLiwGenericParamList* CCPServerSession::UnpackForMultiExecuteLC(
+        const RMessage2& aMessage)
+    {
+    TInt deslen = aMessage.GetDesLengthL(KDescriptorPosition);
+    HBufC8* buffer = HBufC8::NewLC(deslen);
+    TPtr8 tempDes = buffer->Des();
+    aMessage.Read(KDescriptorPosition, tempDes);
+    RDesReadStream datastrm(*buffer);
+    CleanupClosePushL(datastrm);
+    CLiwGenericParamList* genericList = CLiwGenericParamList::NewL(datastrm);
+    CleanupStack::PopAndDestroy(&datastrm);
+    CleanupStack::PopAndDestroy(buffer);
+    CleanupStack::PushL(genericList);
+    return genericList;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// --------------- --------------------------------------------------------------
+//
+CLiwDefaultList* CCPServerSession::CheckValidityLC(const CLiwList* aMaps)
+    {
+    CLiwDefaultList* cpMaps = CLiwDefaultList::NewLC();
+    for (TInt i = 0; i < aMaps->Count(); i++)
+        {
+        TLiwVariant mapVariant;
+        mapVariant.PushL();
+        aMaps->AtL(i, mapVariant);
+        if (mapVariant.TypeId() != LIW::EVariantTypeMap)
+            {
+            User::Leave(KErrBadName);
+            }
+        CCPLiwMap* map = CCPLiwMap::NewL(*mapVariant.AsMap());
+        map->PushL();
+        map->IsValidForActionL();
+        cpMaps->AppendL(TLiwVariant(map));
+        CleanupStack::PopAndDestroy(map);
+        CleanupStack::PopAndDestroy(&mapVariant);
+        }
+    return cpMaps;
+    }
+
 // End of File
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/bwins/cpdebugu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/bwins/cpdebugu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,8 +1,9 @@
 EXPORTS
-	?Data@CCPDebug@@CAPAUDebugData@@XZ @ 1 NONAME ; struct DebugData * CCPDebug::Data(void)
-	?Enable@CCPDebug@@SAHXZ @ 2 NONAME ; int CCPDebug::Enable(void)
-	?EnableLogging@CCPDebug@@SAXH@Z @ 3 NONAME ; void CCPDebug::EnableLogging(int)
-	?NewL@CCPDebug@@SAPAV1@ABVTDesC16@@@Z @ 4 NONAME ; class CCPDebug * CCPDebug::NewL(class TDesC16 const &)
+	?EnableLogging@CCPDebug@@SAXH@Z @ 1 NONAME ; void CCPDebug::EnableLogging(int)
+	?Printf@CCPDebug@@SAXV?$TRefByValue@$$CBVTDesC8@@@@ZZ @ 2 NONAME ; void CCPDebug::Printf(class TRefByValue<class TDesC8 const >, ...)
+	?NewL@CCPDebug@@SAPAV1@ABVTDesC16@@@Z @ 3 NONAME ; class CCPDebug * CCPDebug::NewL(class TDesC16 const &)
+	?Data@CCPDebug@@CAPAUDebugData@@XZ @ 4 NONAME ; struct DebugData * CCPDebug::Data(void)
 	?NewLC@CCPDebug@@SAPAV1@ABVTDesC16@@@Z @ 5 NONAME ; class CCPDebug * CCPDebug::NewLC(class TDesC16 const &)
-	?Printf@CCPDebug@@SAXV?$TRefByValue@$$CBVTDesC8@@@@ZZ @ 6 NONAME ; void CCPDebug::Printf(class TRefByValue<class TDesC8 const >, ...)
+	?ExtendedPrint@CCPDebug@@SAXPBDABVCLiwGenericParamList@@@Z @ 6 NONAME ; void CCPDebug::ExtendedPrint(char const *, class CLiwGenericParamList const &)
+	?Enable@CCPDebug@@SAHXZ @ 7 NONAME ; int CCPDebug::Enable(void)
 
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/eabi/cpdebugu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/eabi/cpdebugu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,8 +1,9 @@
 EXPORTS
 	_ZN8CCPDebug13EnableLoggingEi @ 1 NONAME
-	_ZN8CCPDebug4DataEv @ 2 NONAME
-	_ZN8CCPDebug4NewLERK7TDesC16 @ 3 NONAME
-	_ZN8CCPDebug5NewLCERK7TDesC16 @ 4 NONAME
-	_ZN8CCPDebug6EnableEv @ 5 NONAME
-	_ZN8CCPDebug6PrintfE11TRefByValueIK6TDesC8Ez @ 6 NONAME
+	_ZN8CCPDebug13ExtendedPrintEPKcRK20CLiwGenericParamList @ 2 NONAME
+	_ZN8CCPDebug4DataEv @ 3 NONAME
+	_ZN8CCPDebug4NewLERK7TDesC16 @ 4 NONAME
+	_ZN8CCPDebug5NewLCERK7TDesC16 @ 5 NONAME
+	_ZN8CCPDebug6EnableEv @ 6 NONAME
+	_ZN8CCPDebug6PrintfE11TRefByValueIK6TDesC8Ez @ 7 NONAME
 
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group/cpdebug.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group/cpdebug.mmp	Wed May 12 13:35:37 2010 +0300
@@ -39,5 +39,7 @@
 LIBRARY         euser.lib
 LIBRARY	        estor.lib
 LIBRARY         efsrv.lib
+LIBRARY         liwservicehandler.lib
+
 
 //end of file
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/inc/cpdebug.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/inc/cpdebug.h	Wed May 12 13:35:37 2010 +0300
@@ -23,6 +23,7 @@
 #include <e32base.h>
 #ifdef CONTENT_PUBLISHER_DEBUG
 #include <f32file.h>
+#include <liwgenericparam.h>
 
 _LIT(KCPDebugDirName, "contentpublisher" );
 _LIT(KCPDebugFileName, "c:\\contentpublisher.txt" );
@@ -62,6 +63,14 @@
      */
     IMPORT_C static void Printf(TRefByValue<const TDesC8> aFormat, ...);
 
+    /**
+     * Print debug text to RDebug
+     *
+     */
+    IMPORT_C static void ExtendedPrint( const char* aStringParam,
+                                        const CLiwGenericParamList& aInParamList );
+
+
 private:
 
     CCPDebug();
@@ -84,7 +93,7 @@
     };
 
 #define CP_DEBUG(s)    CCPDebug::Printf(s)
-
+#define CP_EXTENDED_DEBUG(s,p) CCPDebug::ExtendedPrint(s,p)
 /**
  * Thread local storage space. Writable static data is not supported in
  * Symbian, so static data is stored in this struct.
@@ -100,7 +109,8 @@
 
 #else
 
-#define CP_DEBUG(s) 
+#define CP_DEBUG(s)
+#define CP_EXTENDED_DEBUG(s,p)
 
 #endif
 
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/src/cpdebug.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/src/cpdebug.cpp	Wed May 12 13:35:37 2010 +0300
@@ -37,7 +37,7 @@
     iData->iFileName = aFile;
     Dll::SetTls( iData );
     User::LeaveIfError( iData->iFs.Connect( ) );
-    EnableLogging( ETrue );
+    EnableLogging( EFalse );
     }
 
 // ---------------------------------------------------------------------------
@@ -161,6 +161,25 @@
 // 
 // ---------------------------------------------------------------------------
 //
+EXPORT_C void CCPDebug::ExtendedPrint( const char* aStringParam,
+                                       const CLiwGenericParamList& aInParamList )
+    {
+    RDebug::Printf( "CPS Client::Request %s Parameters: \n", aStringParam );
+    for ( TInt i = 0; i < aInParamList.Count( ); i++ )
+        {
+        TLiwGenericParam tempParam;
+        tempParam.PushL();
+        TRAP_IGNORE( aInParamList.AtL(i ,tempParam) );
+        Dump( tempParam.Value() );
+        CleanupStack::Pop(&tempParam);
+        tempParam.Reset();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
 EXPORT_C DebugData* CCPDebug::Data()
     {
     return static_cast<DebugData*>(Dll::Tls());
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/bwins/cputilsu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/bwins/cputilsu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,16 +1,18 @@
 EXPORTS
-	?GetProperty@CCPLiwMap@@QBEHABVTDesC8@@AAJ@Z @ 1 NONAME ; int CCPLiwMap::GetProperty(class TDesC8 const &, long &) const
-	?GetPropertyL@CCPLiwMap@@QBEHABVTDesC8@@AAVRBuf16@@@Z @ 2 NONAME ; int CCPLiwMap::GetPropertyL(class TDesC8 const &, class RBuf16 &) const
-	?GetPropertyL@CCPLiwMap@@QBEHABVTDesC8@@AAVRBuf8@@@Z @ 3 NONAME ; int CCPLiwMap::GetPropertyL(class TDesC8 const &, class RBuf8 &) const
-	?IsValidForActionL@CCPLiwMap@@QBEXXZ @ 4 NONAME ; void CCPLiwMap::IsValidForActionL(void) const
-	?IsValidForNotificationL@CCPLiwMap@@QBEXXZ @ 5 NONAME ; void CCPLiwMap::IsValidForNotificationL(void) const
-	?NewL@CCPLiwMap@@SAPAV1@AAVRDesReadStream@@@Z @ 6 NONAME ; class CCPLiwMap * CCPLiwMap::NewL(class RDesReadStream &)
+	?PackForServerLC@CCPLiwMap@@QBEPAVHBufC8@@XZ @ 1 NONAME ; class HBufC8 * CCPLiwMap::PackForServerLC(void) const
+	?NewL@CCPLiwMap@@SAPAV1@ABVCLiwMap@@@Z @ 2 NONAME ; class CCPLiwMap * CCPLiwMap::NewL(class CLiwMap const &)
+	?IsValidForActionL@CCPLiwMap@@QBEXXZ @ 3 NONAME ; void CCPLiwMap::IsValidForActionL(void) const
+	?NewL@CCPLiwMap@@SAPAV1@AAVRDesReadStream@@@Z @ 4 NONAME ; class CCPLiwMap * CCPLiwMap::NewL(class RDesReadStream &)
+	?GetPropertyL@CCPLiwMap@@QBEHABVTDesC8@@AAVRBuf8@@@Z @ 5 NONAME ; int CCPLiwMap::GetPropertyL(class TDesC8 const &, class RBuf8 &) const
+	?GetProperty@CCPLiwMap@@QBEHABVTDesC8@@AAJ@Z @ 6 NONAME ; int CCPLiwMap::GetProperty(class TDesC8 const &, long &) const
 	?NewL@CCPLiwMap@@SAPAV1@ABVCLiwGenericParamList@@@Z @ 7 NONAME ; class CCPLiwMap * CCPLiwMap::NewL(class CLiwGenericParamList const &)
-	?NewL@CContentMap@@SAPAV1@XZ @ 8 NONAME ; class CContentMap * CContentMap::NewL(void)
-	?NewL@CPublisherRegistryMap@@SAPAV1@XZ @ 9 NONAME ; class CPublisherRegistryMap * CPublisherRegistryMap::NewL(void)
-	?NewLC@CContentMap@@SAPAV1@XZ @ 10 NONAME ; class CContentMap * CContentMap::NewLC(void)
-	?NewLC@CPublisherRegistryMap@@SAPAV1@XZ @ 11 NONAME ; class CPublisherRegistryMap * CPublisherRegistryMap::NewLC(void)
-	?PackForServerLC@CCPLiwMap@@QBEPAVHBufC8@@XZ @ 12 NONAME ; class HBufC8 * CCPLiwMap::PackForServerLC(void) const
-	?Reset@CCPLiwMap@@QBEXXZ @ 13 NONAME ; void CCPLiwMap::Reset(void) const
-	?SetSecurityL@CCPLiwMap@@QAEXABVRMessage2@@@Z @ 14 NONAME ; void CCPLiwMap::SetSecurityL(class RMessage2 const &)
+	?GetPropertyL@CCPLiwMap@@QBEHABVTDesC8@@AAVRBuf16@@@Z @ 8 NONAME ; int CCPLiwMap::GetPropertyL(class TDesC8 const &, class RBuf16 &) const
+	?Reset@CCPLiwMap@@QBEXXZ @ 9 NONAME ; void CCPLiwMap::Reset(void) const
+	?IsValidForNotificationL@CCPLiwMap@@QBEXXZ @ 10 NONAME ; void CCPLiwMap::IsValidForNotificationL(void) const
+	?SetSecurityL@CCPLiwMap@@QAEXABVRMessage2@@@Z @ 11 NONAME ; void CCPLiwMap::SetSecurityL(class RMessage2 const &)
+	?NewLC@CPublisherRegistryMap@@SAPAV1@XZ @ 12 NONAME ; class CPublisherRegistryMap * CPublisherRegistryMap::NewLC(void)
+	?NewL@CPublisherRegistryMap@@SAPAV1@XZ @ 13 NONAME ; class CPublisherRegistryMap * CPublisherRegistryMap::NewL(void)
+	?GetActionTriggersLC@CCPLiwMap@@QBEPAVCLiwDefaultList@@XZ @ 14 NONAME ; class CLiwDefaultList * CCPLiwMap::GetActionTriggersLC(void) const
+	?NewLC@CContentMap@@SAPAV1@XZ @ 15 NONAME ; class CContentMap * CContentMap::NewLC(void)
+	?NewL@CContentMap@@SAPAV1@XZ @ 16 NONAME ; class CContentMap * CContentMap::NewL(void)
 
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/eabi/cputilsu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/eabi/cputilsu.def	Wed May 12 13:35:37 2010 +0300
@@ -6,13 +6,15 @@
 	_ZN9CCPLiwMap12SetSecurityLERK9RMessage2 @ 5 NONAME
 	_ZN9CCPLiwMap4NewLER14RDesReadStream @ 6 NONAME
 	_ZN9CCPLiwMap4NewLERK20CLiwGenericParamList @ 7 NONAME
-	_ZNK9CCPLiwMap11GetPropertyERK6TDesC8Rl @ 8 NONAME
-	_ZNK9CCPLiwMap12GetPropertyLERK6TDesC8R5RBuf8 @ 9 NONAME
-	_ZNK9CCPLiwMap12GetPropertyLERK6TDesC8R6RBuf16 @ 10 NONAME
-	_ZNK9CCPLiwMap15PackForServerLCEv @ 11 NONAME
-	_ZNK9CCPLiwMap17IsValidForActionLEv @ 12 NONAME
-	_ZNK9CCPLiwMap23IsValidForNotificationLEv @ 13 NONAME
-	_ZNK9CCPLiwMap5ResetEv @ 14 NONAME
-	_ZTI9CCPLiwMap @ 15 NONAME ; #<TI>#
-	_ZTV9CCPLiwMap @ 16 NONAME ; #<VT>#
+	_ZN9CCPLiwMap4NewLERK7CLiwMap @ 8 NONAME
+	_ZNK9CCPLiwMap11GetPropertyERK6TDesC8Rl @ 9 NONAME
+	_ZNK9CCPLiwMap12GetPropertyLERK6TDesC8R5RBuf8 @ 10 NONAME
+	_ZNK9CCPLiwMap12GetPropertyLERK6TDesC8R6RBuf16 @ 11 NONAME
+	_ZNK9CCPLiwMap15PackForServerLCEv @ 12 NONAME
+	_ZNK9CCPLiwMap17IsValidForActionLEv @ 13 NONAME
+	_ZNK9CCPLiwMap19GetActionTriggersLCEv @ 14 NONAME
+	_ZNK9CCPLiwMap23IsValidForNotificationLEv @ 15 NONAME
+	_ZNK9CCPLiwMap5ResetEv @ 16 NONAME
+	_ZTI9CCPLiwMap @ 17 NONAME
+	_ZTV9CCPLiwMap @ 18 NONAME
 
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h	Wed May 12 13:35:37 2010 +0300
@@ -24,6 +24,7 @@
 
 class RDesReadStream;
 class CCPSecurityPolicy;
+class TLiwGenericParam;
 
 // CLASS DECLARATION
 /**
@@ -74,6 +75,11 @@
     IMPORT_C static CCPLiwMap* NewL( const CLiwGenericParamList& aList );
 
     /**
+     * Two-phased constructor.
+     */    
+    IMPORT_C static CCPLiwMap* NewL( const CLiwMap& aMap );
+    
+    /**
      * Used by client to serialize this object 
      *
      * @return object serialized to binary
@@ -133,7 +139,16 @@
     IMPORT_C TBool GetProperty( const TDesC8& aProperty,
     		TInt32& aResult ) const;
 
-    
+
+    /**
+     * Return list of action triggers from main map
+     * Note that these are not triggers from action map
+     *
+     * @return list of action triggers, NULL if main map 
+     * doesn't have action trigger
+     */
+    IMPORT_C CLiwDefaultList* GetActionTriggersLC( ) const;
+
     /**
      * Setter for security policy 
      *
@@ -379,6 +394,18 @@
     void SetL( const CLiwGenericParamList& aInParamList );
 
     /**
+     * Sets all parameters according to provided list
+     * @param aMap map with parameters
+     */
+    void SetL( const CLiwMap& aMap );
+
+    /**
+     * Extracts a param and appends it to the internal list
+     * @param aParam a param to extract
+     */
+    void ExtractParamL(const TLiwGenericParam& aParam);
+    
+    /**
      * Check Get properties
      *
      * @return logical sum of TCPProperties of the object
@@ -438,7 +465,6 @@
      *
      */
     TBool PropertyExists( const TDesC8& aProperty ) const;
-
     
     /**
      * Fetches entries from database
@@ -607,6 +633,14 @@
      * Perform the second phase construction of a CCPLiwMap object.
      */       
     void ConstructL();
+    
+    /**
+     * Checks a type a map 
+     * @param aVariant variant containing a map type
+     * @return ETrue if a type is Publisher and EFalse if Content
+     * in other cases method leaves
+     */  
+    static TBool IsTypePublisherL(const TLiwVariant& aVariant);
 
 protected:
     // data
--- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/src/cpliwmap.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/src/cpliwmap.cpp	Wed May 12 13:35:37 2010 +0300
@@ -20,7 +20,6 @@
 #include <liwgenericparam.h>
 #include <escapeutils.h>
 #include <badesca.h>
-#include <aiwvarianttype.hrh>
 
 #include "cpliwmap.h"
 #include "cpdebug.h"
@@ -29,6 +28,8 @@
 #include "cpublisherregistrymap.h"
 #include "cpsecuritypolicy.h"
 
+using namespace LIW;
+
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -56,34 +57,16 @@
     CCPLiwMap* map( NULL );
     if( param && pos !=KErrNotFound )
         {
-        RBuf typeBuf;
-        typeBuf.CleanupClosePushL();
-        TPtrC type( KNullDesC );
-        if( !param->Value().Get( type ) )
+        if( IsTypePublisherL(param->Value()) )
             {
-            TPtrC8 type8( KNullDesC8 );
-            if( !param->Value().Get( type8 ) )
-                {
-                User::Leave( KErrBadName );
-                }
-            typeBuf.Assign( EscapeUtils::ConvertToUnicodeFromUtf8L( type8 ) );
+            map = CPublisherRegistryMap::NewLC();
             }
-        else
-            {
-            typeBuf.CreateL( type );
-            }
-        if( typeBuf.Find( KCpData () ) != KErrNotFound )
+        else 
             {
             map = CContentMap::NewLC();
             }
-        else if ( typeBuf.Find( KPublisher () ) != KErrNotFound )
-            {
-            map = CPublisherRegistryMap::NewLC();
-            }
-        else User::Leave( KErrArgument );
-        map->SetL( aList );
-        CleanupStack::Pop( map );
-        CleanupStack::PopAndDestroy( &typeBuf );
+        map->SetL(aList);
+        CleanupStack::Pop(map);
         }
     else
         {
@@ -95,6 +78,38 @@
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
+//
+EXPORT_C CCPLiwMap* CCPLiwMap::NewL( const CLiwMap& aMap )
+    {
+    CP_DEBUG( _L8("CCPLiwMap::NewL") );
+    TLiwVariant typeVariant;
+    typeVariant.PushL();
+    CCPLiwMap* map( NULL );
+
+    if (aMap.FindL(KType, typeVariant))
+        {
+        if( IsTypePublisherL(typeVariant) )
+            {
+            map = CPublisherRegistryMap::NewLC();
+            }
+        else 
+            {
+            map = CContentMap::NewLC();
+            }
+        map->SetL(aMap);
+        CleanupStack::Pop(map);
+        }
+    else
+        {
+        User::Leave( KErrPathNotFound );
+        }
+    CleanupStack::PopAndDestroy(&typeVariant);
+    return map;
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
 //		
 EXPORT_C HBufC8* CCPLiwMap::PackForServerLC() const
     {
@@ -282,6 +297,63 @@
     return result;
     }
 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CLiwDefaultList* CCPLiwMap::GetActionTriggersLC( ) const
+    {
+    CP_DEBUG( _L8("CCPLiwMap::GetActionTriggers") );
+    TInt pos( 0 );
+    CLiwDefaultList* list(NULL); 
+    const TLiwGenericParam* paramForValue = iMap->FindFirst( pos, 
+            KActionTrigger );
+    if ( paramForValue )
+        {
+        if ( paramForValue->Value().TypeId() == EVariantTypeDesC8  )
+            {
+            list = CLiwDefaultList::NewLC();
+            list->AppendL(paramForValue->Value());
+            }
+        if ( paramForValue->Value().TypeId() == EVariantTypeDesC  )
+            {
+            list = CLiwDefaultList::NewLC();
+            RBuf8 desc8;
+            desc8.CleanupClosePushL();
+            desc8.Assign( EscapeUtils::ConvertFromUnicodeToUtf8L( 
+                    paramForValue->Value().AsDes() ) );
+            list->AppendL(TLiwVariant(desc8));
+            CleanupStack::PopAndDestroy( &desc8 );
+            }
+        else if ( paramForValue->Value().TypeId() == EVariantTypeList )
+            {
+            list = CLiwDefaultList::NewLC();
+            const CLiwList* sourceList = paramForValue->Value().AsList(); 
+            TInt count = sourceList->Count();
+            for (TInt i = 0; i < count; i++)
+                {
+                TLiwVariant trigger;
+                trigger.PushL();
+                sourceList->AtL(i,trigger);
+                if (trigger.TypeId() == EVariantTypeDesC8)
+                    {
+                    list->AppendL(trigger);
+                    }
+                else if (trigger.TypeId() == EVariantTypeDesC)
+                    {
+                    RBuf8 desc8;
+                    desc8.CleanupClosePushL();
+                    desc8.Assign( EscapeUtils::ConvertFromUnicodeToUtf8L( 
+                            trigger.AsDes() ) );
+                    list->AppendL(TLiwVariant(desc8));
+                    CleanupStack::PopAndDestroy( &desc8 );
+                    }
+                CleanupStack::PopAndDestroy(&trigger);
+                }
+            }
+        }
+    return list;
+    }
 
 // ---------------------------------------------------------------------------
 // 
@@ -445,49 +517,78 @@
 //
 void CCPLiwMap::SetL( const CLiwGenericParamList& aInParamList )
     {
-    
     CP_DEBUG( _L8("CCPLiwMap::SetL") );
     for ( TInt i = 0; i < aInParamList.Count( ); i++ )
         {
         const TLiwGenericParam& param = aInParamList[i];
-        if ( param.Value().TypeId( ) == LIW::EVariantTypeMap )
+        ExtractParamL(param);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPLiwMap::SetL( const CLiwMap& aMap )
+    {
+    CP_DEBUG( _L8("CCPLiwMap::SetL") );
+    for ( TInt i = 0; i < aMap.Count( ); i++ )
+        {
+        TBuf8<128> key;
+        aMap.AtL(i, key);
+        TLiwVariant value;
+        value.PushL();
+        aMap.FindL(key, value);
+        TLiwGenericParam param(key,value);
+        ExtractParamL(param);
+        CleanupStack::PopAndDestroy(&value);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CCPLiwMap::ExtractParamL(const TLiwGenericParam& aParam)
+    {
+    CP_DEBUG( _L8("CCPLiwMap::ExtractVariantL") );
+    if (aParam.Value().TypeId() == LIW::EVariantTypeMap)
+        {
+        const CLiwMap* map = aParam.Value().AsMap();
+        for (TInt i = 0; i < map->Count(); i++)
             {
-            const CLiwMap* map = param.Value().AsMap( );
-            for ( TInt i = 0; i <map->Count( ); i++ )
+            TBuf8<128> key;
+            map->AtL(i, key);
+            TLiwVariant value;
+            value.PushL();
+            map->FindL(key, value);
+            if (key == KOperation)
                 {
-                TBuf8<128> key;
-                map->AtL( i, key );
-                TLiwVariant value;
-                value.PushL( );
-                map->FindL( key, value );
-                if ( key == KOperation )
-                	{
-                	IsProperOperationL( value );
-                	}
-                RBuf8 datadesc;
-                datadesc.CleanupClosePushL();
-                if ( value.TypeId( ) == LIW::EVariantTypeMap )
-                    {
-                    const CLiwMap* internalMap = value.AsMap( );
-                    datadesc.CreateL( internalMap->Size( ) );
-                    RDesWriteStream datastrm(datadesc);
-                    CleanupClosePushL( datastrm );
-                    internalMap->ExternalizeL( datastrm );
-                    datastrm.CommitL( );
-                    CleanupStack::PopAndDestroy( &datastrm );
-                    value.Reset( );
-                    value.Set( datadesc );
-                    }
-                TLiwGenericParam data( key, value);
-                iMap->AppendL( data );
-                CleanupStack::PopAndDestroy( &datadesc );
-                CleanupStack::PopAndDestroy( &value );
+                IsProperOperationL(value);
                 }
+            RBuf8 datadesc;
+            datadesc.CleanupClosePushL();
+            if (value.TypeId() == LIW::EVariantTypeMap)
+                {
+                const CLiwMap* internalMap = value.AsMap();
+                datadesc.CreateL(internalMap->Size());
+                RDesWriteStream datastrm(datadesc);
+                CleanupClosePushL(datastrm);
+                internalMap->ExternalizeL(datastrm);
+                datastrm.CommitL();
+                CleanupStack::PopAndDestroy(&datastrm);
+                value.Reset();
+                value.Set(datadesc);
+                }
+            TLiwGenericParam data(key, value);
+            iMap->AppendL(data);
+            CleanupStack::PopAndDestroy(&datadesc);
+            CleanupStack::PopAndDestroy(&value);
             }
-        else
-            {
-            iMap->AppendL( param );
-            }
+        }
+    else
+        {
+        iMap->AppendL(aParam);
         }
     }
 
@@ -765,11 +866,21 @@
 //
 TBool CCPLiwMap::IsTriggerL( ) const
     {
-    TBool result( EFalse );
-    RBuf8 buffer;
-    buffer.CleanupClosePushL();
-    result = GetPropertyL( KActionTrigger, buffer );
-    CleanupStack::PopAndDestroy( &buffer );
+    TBool result(EFalse);
+    TInt pos( 0 );
+    const TLiwGenericParam* paramForValue = iMap->FindFirst( pos, 
+            KActionTrigger );
+    if ( pos != KErrNotFound )
+        {
+        result = ETrue;
+        LIW::TVariantTypeId variantType = paramForValue->Value().TypeId();
+        if ( variantType != EVariantTypeDesC &&
+                variantType != EVariantTypeDesC8 &&
+                variantType != EVariantTypeList ) 
+            {
+            User::Leave( KErrBadName );
+            }
+        }
     return result;
     }
 
@@ -1177,6 +1288,46 @@
 // 
 // ---------------------------------------------------------------------------
 //
+TBool CCPLiwMap::IsTypePublisherL( const TLiwVariant& aVariant )
+    {
+    TBool result (EFalse);
+    RBuf typeBuf;
+    typeBuf.CleanupClosePushL();
+    TPtrC type( KNullDesC );
+    if( !aVariant.Get( type ) )
+        {
+        TPtrC8 type8( KNullDesC8 );
+        if( !aVariant.Get( type8 ) )
+            {
+            User::Leave( KErrBadName );
+            }
+        typeBuf.Assign( EscapeUtils::ConvertToUnicodeFromUtf8L( type8 ) );
+        }
+    else
+        {
+        typeBuf.CreateL( type );
+        }
+    if( typeBuf.Find( KCpData () ) != KErrNotFound )
+        {
+        result = EFalse;
+        }
+    else if ( typeBuf.Find( KPublisher () ) != KErrNotFound )
+        {
+        result = ETrue;
+        }
+    else
+        {
+        User::Leave( KErrArgument );
+        }
+    CleanupStack::PopAndDestroy( &typeBuf );
+    return result;
+    }
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
 void CCPLiwMap::CheckIdentifiersL() const
     {
     IsPublisherNameL();
@@ -1253,7 +1404,7 @@
     if ( pos != KErrNotFound )
         {
         found = ETrue;
-        TInt length;
+        TInt length(0);
         if( paramForValue->Value().TypeId() == EVariantTypeDesC )
             {
             length = paramForValue->Value().AsDes().Length(); 
--- a/contentpublishingsrv/contentpublishingutils/pluginvalidator/inc/charvesterpluginvalidator.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/pluginvalidator/inc/charvesterpluginvalidator.h	Wed May 12 13:35:37 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  
+* Description:
  *
 */
 
@@ -22,7 +22,7 @@
 // INCLUDES
 #include <e32base.h>
 #include <e32hashtab.h>
-#include "cpluginvalidator.h" 
+#include "cpluginvalidator.h"
 
 // FORWARD DECLARATIONS
 class CBlacklistHandler;
@@ -41,7 +41,7 @@
 /**
  *  Class used to maintain required ECOM plugins implementations
  *
- * 
+ *
  *  @lib cpclient.dll
  *  @since S60 v 5.0
  */
@@ -51,21 +51,21 @@
 
     /**
      * Two-phased constructor.
-     * 
-     */     
-    IMPORT_C static CHarvesterPluginValidator* NewL( TUid aUid, 
+     *
+     */
+    IMPORT_C static CHarvesterPluginValidator* NewL( TUid aUid,
                                             TAny *aParameter = NULL );
 
     /**
      * Two-phased constructor.
-     * 
-     */     
+     *
+     */
     IMPORT_C static CHarvesterPluginValidator* NewLC( TUid aUid,
                                              TAny *aParameter = NULL );
-    
+
     /**
      * Desctructor.
-     */     
+     */
     ~CHarvesterPluginValidator();
 
 
@@ -73,39 +73,33 @@
 
     /**
      * C++ default constructor.
-     */    
-	CHarvesterPluginValidator( TUid aUid, TAny *aParameter );
+     */
+  CHarvesterPluginValidator( TUid aUid, TAny *aParameter );
 
     /**
      * Perform the second phase construction of a CPluginValidator object.
-     */    
+     */
     void ConstructL();
 
     /**
      * Loads or destroys plugins
-     */    
+     */
     void ManagePluginsL();
-    
+
     /**
      * Loads ECOM plugins
-     */    
+     */
     void LoadPluginL( TPluginInfo& aPluginInfo );
 
 
 private:
-     
+
     /**
      * Blacklist Handler
      * Own
      */
     CBlacklistHandler* iBlacklist;
-    
-    /*
-     * Startup flag
-     * 
-     */
-    TBool iStartup;
-    
+
     /*
      * Property indicating the status of load operation
      * Own
--- a/contentpublishingsrv/contentpublishingutils/pluginvalidator/src/charvesterpluginvalidator.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/contentpublishingsrv/contentpublishingutils/pluginvalidator/src/charvesterpluginvalidator.cpp	Wed May 12 13:35:37 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  
+* Description:
  *
 */
 
@@ -32,11 +32,11 @@
 //
 // ----------------------------------------------------------------------------
 //
-EXPORT_C CHarvesterPluginValidator* CHarvesterPluginValidator::NewL( TUid aUid, 
+EXPORT_C CHarvesterPluginValidator* CHarvesterPluginValidator::NewL( TUid aUid,
                                                    TAny *aParameter )
     {
-    CHarvesterPluginValidator* self = 
-					CHarvesterPluginValidator::NewLC( aUid , aParameter );
+    CHarvesterPluginValidator* self =
+          CHarvesterPluginValidator::NewLC( aUid , aParameter );
     CleanupStack::Pop( self );
     return self;
     }
@@ -48,8 +48,8 @@
 EXPORT_C CHarvesterPluginValidator* CHarvesterPluginValidator::NewLC( TUid aUid,
                                                     TAny *aParameter )
     {
-    CHarvesterPluginValidator* self = new( ELeave ) 
-				CHarvesterPluginValidator( aUid, aParameter );
+    CHarvesterPluginValidator* self = new( ELeave )
+        CHarvesterPluginValidator( aUid, aParameter );
     CleanupStack::PushL( self );
     self->ConstructL();
     return self;
@@ -70,12 +70,12 @@
 //
 // ----------------------------------------------------------------------------
 //
-CHarvesterPluginValidator::CHarvesterPluginValidator( TUid aUid, TAny* aParameter ): 
-											CPluginValidator(aUid, aParameter),
-                                            iStartup( ETrue )
-    {
-    
-    }
+CHarvesterPluginValidator::CHarvesterPluginValidator(TUid aUid,
+    TAny* aParameter) :
+    CPluginValidator(aUid, aParameter)
+{
+
+}
 
 // ----------------------------------------------------------------------------
 //
@@ -83,7 +83,7 @@
 //
 void CHarvesterPluginValidator::ConstructL()
     {
-    iBlacklist = CBlacklistHandler::NewL( );    
+    iBlacklist = CBlacklistHandler::NewL();
     CPluginValidator::ConstructL();
     }
 
@@ -92,76 +92,70 @@
 //
 // ----------------------------------------------------------------------------
 //
-void CHarvesterPluginValidator::ManagePluginsL()    
+void CHarvesterPluginValidator::ManagePluginsL()
     {
-    TInt errorCode = iInProgressProperty.Define( TUid::Uid( KHarvesterUid ), 
-        		KInProgressPropertyKey, RProperty::EInt );
-    
+    TInt errorCode = iInProgressProperty.Define( TUid::Uid( KHarvesterUid ),
+            KInProgressPropertyKey, RProperty::EInt );
+
     if ( KErrAlreadyExists == errorCode )
-    	{
-    	TInt value(-1);
-    	iInProgressProperty.Get( TUid::Uid( KHarvesterUid ), 
-        		KInProgressPropertyKey, value);
-    	if ( value == 1 )
-    		{
-    		// property value == inprogress
-    		// there was a panic in the previous startup
-    		// so we make unofficial blacklist official
-    		iBlacklist->CopyBlacklistL( EFalse );
-    		}
-    	}
+      {
+      TInt value(-1);
+      iInProgressProperty.Get( TUid::Uid( KHarvesterUid ),
+            KInProgressPropertyKey, value);
+      if ( value == 1 )
+        {
+        // property value == inprogress
+        // there was a panic in the previous startup
+        // so we make unofficial blacklist official
+        iBlacklist->CopyBlacklistL( EFalse );
+        }
+      }
     else
-    	{
-    	User::LeaveIfError( errorCode );
-    	}
+      {
+      User::LeaveIfError( errorCode );
+      }
     // copy blacklisted plugins to unoffical blacklist at startup
     iBlacklist->CopyBlacklistL( ETrue );
-    
+
     // set property value to 1 (which means "in progress")
-	iInProgressProperty.Set( TUid::Uid( KHarvesterUid ), 
-    		KInProgressPropertyKey, 1 );
-    
+    iInProgressProperty.Set( TUid::Uid( KHarvesterUid ),
+        KInProgressPropertyKey, 1 );
+
     CPluginValidator::ManagePluginsL();
-    
-    if ( iStartup )
-    	{
-    	RProperty::Set( KPSUidActiveIdle2, 
-    		KActiveIdleCpsPluginsUpdated , EPSAiPluginsUpdated );
-    	iStartup = EFalse;
-    	}
+
     // set property value to 0 (which means "finished")
-	iInProgressProperty.Set( TUid::Uid( KHarvesterUid ), 
-    		KInProgressPropertyKey, 0 );
+    iInProgressProperty.Set( TUid::Uid( KHarvesterUid ),
+        KInProgressPropertyKey, 0 );
     }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CHarvesterPluginValidator::LoadPluginL( TPluginInfo& aPluginInfo )    
+void CHarvesterPluginValidator::LoadPluginL( TPluginInfo& aPluginInfo )
     {
     if ( !iBlacklist->IsPresentL( aPluginInfo.iImplementationUid ) )
-    	{
-    	//first we append UID to the blacklist
-    	iBlacklist->AppendL( aPluginInfo.iImplementationUid );
-    	TAny* plug ( NULL );
-    	TInt err( KErrNone );
-    	TRAP( err, plug = REComSession::CreateImplementationL( 
-										aPluginInfo.iImplementationUid, 
-										aPluginInfo.iDtor_ID_Key, iParameter ) );
-    	if( err==KErrNone && plug ) 
-    		{
-			TRAP_IGNORE( 
-				CleanupStack::PushL( plug );
-				aPluginInfo.iPlugin = plug;
-				iPluginArray.AppendL( aPluginInfo );
-				CleanupStack::Pop( plug );
-   				static_cast<CContentHarvesterPlugin*>( plug )->UpdateL()
-						);
-    		}
-    	//no panic during load so we can remove UID from blacklist
-    	iBlacklist->RemoveL( aPluginInfo.iImplementationUid );
-    	}
+      {
+      //first we append UID to the blacklist
+      iBlacklist->AppendL( aPluginInfo.iImplementationUid );
+      TAny* plug ( NULL );
+      TInt err( KErrNone );
+      TRAP( err, plug = REComSession::CreateImplementationL(
+                    aPluginInfo.iImplementationUid,
+                    aPluginInfo.iDtor_ID_Key, iParameter ) );
+      if( err==KErrNone && plug )
+        {
+      TRAP_IGNORE(
+        CleanupStack::PushL( plug );
+        aPluginInfo.iPlugin = plug;
+        iPluginArray.AppendL( aPluginInfo );
+        CleanupStack::Pop( plug );
+           static_cast<CContentHarvesterPlugin*>( plug )->UpdateL()
+            );
+        }
+      //no panic during load so we can remove UID from blacklist
+      iBlacklist->RemoveL( aPluginInfo.iImplementationUid );
+      }
     }
 
 
--- a/contextutility/bwins/hgcontextutilityu.def	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-EXPORTS
-	?PublishServiceIdL@CHgContextUtility@@QAEXABVTDesC16@@0ABVTTimeIntervalMicroSeconds32@@@Z @ 1 NONAME ; void CHgContextUtility::PublishServiceIdL(class TDesC16 const &, class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishMusicContextL@CHgContextUtility@@QAEXABVTTimeIntervalMicroSeconds32@@@Z @ 2 NONAME ; void CHgContextUtility::PublishMusicContextL(class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABV?$RPointerArray@VMVPbkStoreContact@@@@ABVTTimeIntervalMicroSeconds32@@@Z @ 3 NONAME ; void CHgContextUtility::PublishContactContextL(class RPointerArray<class MVPbkStoreContact> const &, class TTimeIntervalMicroSeconds32 const &)
-	?SplitCombinedStringL@CHgContextUtility@@SAXABVTDesC16@@AAVCDesC16Array@@@Z @ 4 NONAME ; void CHgContextUtility::SplitCombinedStringL(class TDesC16 const &, class CDesC16Array &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 5 NONAME ; void CHgContextUtility::PublishContactContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	??1CHgContextUtility@@UAE@XZ @ 6 NONAME ; CHgContextUtility::~CHgContextUtility(void)
-	?NewLC@CHgContextUtility@@SAPAV1@XZ @ 7 NONAME ; class CHgContextUtility * CHgContextUtility::NewLC(void)
-	?RePublishWhenFgL@CHgContextUtility@@QAEXH@Z @ 8 NONAME ; void CHgContextUtility::RePublishWhenFgL(int)
-	?PublishPhotoContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 9 NONAME ; void CHgContextUtility::PublishPhotoContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?BuildCombinedStringL@CHgContextUtility@@SAPAVHBufC16@@ABVMDesC16Array@@@Z @ 10 NONAME ; class HBufC16 * CHgContextUtility::BuildCombinedStringL(class MDesC16Array const &)
-	?PublishContextDelayedL@CHgContextUtilityBase@@QAEXABVTDesC16@@ABVMDesC16Array@@ABVTTimeIntervalMicroSeconds32@@@Z @ 11 NONAME ; void CHgContextUtilityBase::PublishContextDelayedL(class TDesC16 const &, class MDesC16Array const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMVPbkContactLink@@ABVTTimeIntervalMicroSeconds32@@@Z @ 12 NONAME ; void CHgContextUtility::PublishContactContextL(class MVPbkContactLink const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishUrlContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 13 NONAME ; void CHgContextUtility::PublishUrlContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishTvContextL@CHgContextUtility@@QAEXABVTDesC16@@000@Z @ 14 NONAME ; void CHgContextUtility::PublishTvContextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-	?PublishContextL@CHgContextUtilityBase@@QAEXABVTDesC16@@ABVMDesC16Array@@@Z @ 15 NONAME ; void CHgContextUtilityBase::PublishContextL(class TDesC16 const &, class MDesC16Array const &)
-	?AllowPublishFromBackground@CHgContextUtility@@QAEXH@Z @ 16 NONAME ; void CHgContextUtility::AllowPublishFromBackground(int)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMVPbkStoreContact@@ABVTTimeIntervalMicroSeconds32@@@Z @ 17 NONAME ; void CHgContextUtility::PublishContactContextL(class MVPbkStoreContact const &, class TTimeIntervalMicroSeconds32 const &)
-	?AddMusicContextInfoL@CHgContextUtility@@QAEXABVTDesC16@@0@Z @ 18 NONAME ; void CHgContextUtility::AddMusicContextInfoL(class TDesC16 const &, class TDesC16 const &)
-	?GetContextL@CHgContextUtilityBase@@QAEPAVHBufC16@@ABVTDesC16@@@Z @ 19 NONAME ; class HBufC16 * CHgContextUtilityBase::GetContextL(class TDesC16 const &)
-	?NewL@CHgContextUtility@@SAPAV1@XZ @ 20 NONAME ; class CHgContextUtility * CHgContextUtility::NewL(void)
-	?PublishContextDelayedL@CHgContextUtilityBase@@QAEXABVTDesC16@@0ABVTTimeIntervalMicroSeconds32@@@Z @ 21 NONAME ; void CHgContextUtilityBase::PublishContextDelayedL(class TDesC16 const &, class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishTextContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 22 NONAME ; void CHgContextUtility::PublishTextContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContextL@CHgContextUtilityBase@@QAEXABVTDesC16@@0@Z @ 23 NONAME ; void CHgContextUtilityBase::PublishContextL(class TDesC16 const &, class TDesC16 const &)
-	?GetContextL@CHgContextUtilityBase@@QAEPAVHBufC16@@ABVTDesC16@@0@Z @ 24 NONAME ; class HBufC16 * CHgContextUtilityBase::GetContextL(class TDesC16 const &, class TDesC16 const &)
-	?PublishRadioContextL@CHgContextUtility@@QAEXABVTDesC16@@000@Z @ 25 NONAME ; void CHgContextUtility::PublishRadioContextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-	?PublishPhotoContextL@CHgContextUtility@@QAEXKAAVCMdESession@@ABVTTimeIntervalMicroSeconds32@@@Z @ 26 NONAME ; void CHgContextUtility::PublishPhotoContextL(unsigned long, class CMdESession &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVCVPbkContactLinkArray@@ABVTTimeIntervalMicroSeconds32@@@Z @ 27 NONAME ; void CHgContextUtility::PublishContactContextL(class CVPbkContactLinkArray const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishTimeContextL@CHgContextUtility@@QAEXABVTTime@@ABVTTimeIntervalMicroSeconds32@@@Z @ 28 NONAME ; void CHgContextUtility::PublishTimeContextL(class TTime const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMDesC16Array@@ABVTTimeIntervalMicroSeconds32@@@Z @ 29 NONAME ; void CHgContextUtility::PublishContactContextL(class MDesC16Array const &, class TTimeIntervalMicroSeconds32 const &)
-
--- a/contextutility/eabi/hgcontextutilityu.def	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-EXPORTS
-	_ZN17CHgContextUtility16RePublishWhenFgLEi @ 1 NONAME
-	_ZN17CHgContextUtility17PublishServiceIdLERK7TDesC16S2_RK27TTimeIntervalMicroSeconds32 @ 2 NONAME
-	_ZN17CHgContextUtility17PublishTvContextLERK7TDesC16S2_S2_S2_ @ 3 NONAME
-	_ZN17CHgContextUtility18PublishUrlContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 4 NONAME
-	_ZN17CHgContextUtility19PublishTextContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 5 NONAME
-	_ZN17CHgContextUtility19PublishTimeContextLERK5TTimeRK27TTimeIntervalMicroSeconds32 @ 6 NONAME
-	_ZN17CHgContextUtility20AddMusicContextInfoLERK7TDesC16S2_ @ 7 NONAME
-	_ZN17CHgContextUtility20BuildCombinedStringLERK12MDesC16Array @ 8 NONAME
-	_ZN17CHgContextUtility20PublishMusicContextLERK27TTimeIntervalMicroSeconds32 @ 9 NONAME
-	_ZN17CHgContextUtility20PublishPhotoContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 10 NONAME
-	_ZN17CHgContextUtility20PublishPhotoContextLEmR11CMdESessionRK27TTimeIntervalMicroSeconds32 @ 11 NONAME
-	_ZN17CHgContextUtility20PublishRadioContextLERK7TDesC16S2_S2_S2_ @ 12 NONAME
-	_ZN17CHgContextUtility20SplitCombinedStringLERK7TDesC16R12CDesC16Array @ 13 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK12MDesC16ArrayRK27TTimeIntervalMicroSeconds32 @ 14 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK13RPointerArrayI17MVPbkStoreContactERK27TTimeIntervalMicroSeconds32 @ 15 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK16MVPbkContactLinkRK27TTimeIntervalMicroSeconds32 @ 16 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK17MVPbkStoreContactRK27TTimeIntervalMicroSeconds32 @ 17 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK21CVPbkContactLinkArrayRK27TTimeIntervalMicroSeconds32 @ 18 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 19 NONAME
-	_ZN17CHgContextUtility26AllowPublishFromBackgroundEi @ 20 NONAME
-	_ZN17CHgContextUtility4NewLEv @ 21 NONAME
-	_ZN17CHgContextUtility5NewLCEv @ 22 NONAME
-	_ZN17CHgContextUtilityD0Ev @ 23 NONAME
-	_ZN17CHgContextUtilityD1Ev @ 24 NONAME
-	_ZN17CHgContextUtilityD2Ev @ 25 NONAME
-	_ZN21CHgContextUtilityBase11GetContextLERK7TDesC16 @ 26 NONAME
-	_ZN21CHgContextUtilityBase11GetContextLERK7TDesC16S2_ @ 27 NONAME
-	_ZN21CHgContextUtilityBase15PublishContextLERK7TDesC16RK12MDesC16Array @ 28 NONAME
-	_ZN21CHgContextUtilityBase15PublishContextLERK7TDesC16S2_ @ 29 NONAME
-	_ZN21CHgContextUtilityBase22PublishContextDelayedLERK7TDesC16RK12MDesC16ArrayRK27TTimeIntervalMicroSeconds32 @ 30 NONAME
-	_ZN21CHgContextUtilityBase22PublishContextDelayedLERK7TDesC16S2_RK27TTimeIntervalMicroSeconds32 @ 31 NONAME
-	_ZTI21CHgContextUtilityBase @ 32 NONAME
-	_ZTV21CHgContextUtilityBase @ 33 NONAME
-
--- a/contextutility/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Build info file for Context publishing helper DLL.
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_EXPORTS
-../rom/hgcontextutility.iby    CORE_MW_LAYER_IBY_EXPORT_PATH(hgcontextutility.iby)
-
-
-PRJ_MMPFILES
-hgcontextutility.mmp
-
-PRJ_TESTMMPFILES
-
-
--- a/contextutility/group/hgcontextutility.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
-*
-*/
-
-
-#include <platform_paths.hrh>
-#include <defaultcaps.hrh>
-
-TARGETTYPE DLL
-TARGET hgcontextutility.dll
-UID 0x1000008d
-CAPABILITY CAP_GENERAL_DLL
-
-SOURCEPATH      ../src
-SOURCE          hgcontextutilitybase.cpp
-SOURCE          hgcontextutility.cpp
-SOURCE          hgcontextutilityimpl.cpp
-
-USERINCLUDE     ../inc
-USERINCLUDE     ../../inc
-
-APP_LAYER_SYSTEMINCLUDE
-
-LIBRARY         euser.lib
-LIBRARY         estor.lib
-LIBRARY         bafl.lib
-LIBRARY         cfclient.lib
-LIBRARY         cfservices.lib
-LIBRARY         cone.lib
-LIBRARY         ws32.lib
-LIBRARY         mdeclient.lib
-LIBRARY         vpbkeng.lib
-
--- a/contextutility/inc/hgcontexttypes.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
-* Copyright (c) 2008 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:  CFW source and type names
-*
-*/
-
-#ifndef HGCONTEXTTYPES_H
-#define HGCONTEXTTYPES_H
-
-#include <e32base.h>
-#include <hg/hgcontextdef.h> // pull in the public part
-
-_LIT( KHgCFTypeFgApp, "FgApp" ); // published by fswserver
-
-_LIT( KHgCFTypeUpdateAvail, "UpdateAvail" ); // for iad source plug-in
-
-_LIT( KHgCFTypeMdsObjChanged, "MdsObjChanged" );
-_LIT( KHgCFTypeMdsRelChanged, "MdsRelChanged" );
-
-_LIT( KHgCFValueDuplicateMarker, "<dupl>" ); // may be used in PbkContactMulti
-
-const TInt KHgCFValueLinkMarker = 2; // prefix when Contact holds a vpbk contact link
-
-_LIT( KHgCFTypeCallState, "CallState" );
-_LIT( KHgCFTypeCallSusp, "CallSusp" ); // see hgcfcallsourceplugin
-_LIT( KHgCFTypeContactFromCall, "ContactFromCall" ); // contains "1" if contact is coming from a voice/video call
-
-#endif // HGCONTEXTTYPES_H
--- a/contextutility/inc/hgcontextutilityimpl.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,434 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
-*
-*/
-
-
-#ifndef HGCONTEXTUTILITYIMPL_H
-#define HGCONTEXTUTILITYIMPL_H
-
-#include <e32base.h>
-#include <cflistener.h>
-#include <bamdesca.h>
-#include <badesca.h>
-#include <mdccommon.h>
-#include <coemain.h>
-#include <e32hashtab.h>
-
-class CCFClient;
-class MVPbkContactLink;
-class MVPbkStoreContact;
-class CVPbkContactLinkArray;
-class CMdESession;
-
-/**
- *  Utility class offering static and non-static functions for
- *  publishing and accessing context through the Context Framework.
- */
-NONSHARABLE_CLASS( CHgContextUtilityImpl ) :
-        public CTimer,
-        public MCFListener,
-        public MCoeForegroundObserver
-    {
-public:
-    static CHgContextUtilityImpl* NewL();
-    static CHgContextUtilityImpl* NewLC();
-    virtual ~CHgContextUtilityImpl();
-    
-    /**
-     * Publishes context.
-     * Also defines the context if it has not been defined.
-     * Publishing empty value is not allowed, however such errors are ignored
-     * here so the function will not leave when CFW responds with KErrArgument.
-     * The security policy for the context will be set to require
-     * LocalServices capability.
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context
-     */
-    void PublishContextL( const TDesC& aContextType,
-        const TDesC& aContextData );
-
-    /**
-     * Publishes context, the value will contain all the strings
-     * from the given array, typically by using some separator character.
-     * @see PublishContextL
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context will be a combined
-     * version of all the strings from this array
-     */
-    void PublishContextL( const TDesC& aContextType,
-        const MDesCArray& aContextData );
-    
-    /**
-     * Static version that uses the given CCFClient instance.
-     * @param   aCFClient       a CCFClient instance
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context
-     */
-    static void PublishContextL( CCFClient& aCFClient,
-        const TDesC& aContextType, const TDesC& aContextData );
-
-    /**
-     * Publishes context but only after a short interval, using a timer.
-     * If it is called again before the timer expires then the timer
-     * is restarted (and so the previous pending value is never published).
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context
-     * @param   aDelay          delay for the timer
-     */
-    void PublishContextDelayedL( const TDesC& aContextType,
-        const TDesC& aContextData, TTimeIntervalMicroSeconds32 aDelay );
-
-    /**
-     * Overload for delayed publishing of a value combined from multiple strings.
-     * @param   aContextType    context type
-     * @param   aContextData    string array
-     * @param   aDelay          delay for the timer, in microseconds
-     */
-    void PublishContextDelayedL( const TDesC& aContextType,
-        const MDesCArray& aContextData, TTimeIntervalMicroSeconds32 aDelay );
-
-    /**
-     * Requests the given context and returns the value for the
-     * first result. Returns NULL if not found.
-     * @param   aContextType    context type, the source is always KHgCFSource
-     */        
-    HBufC* GetContextL( const TDesC& aContextType );
-    
-    /**
-     * Requests the given context and returns the value for the
-     * first result. Returns NULL if not found.
-     * @param   aContextSource  context source
-     * @param   aContextType    context type
-     */
-    HBufC* GetContextL( const TDesC& aContextSource,
-        const TDesC& aContextType );
-
-    /**
-     * Creates a combined string from the elements of the given array.
-     * Returns NULL if the array has less than 2 elements.
-     * @param   aArray      string array
-     * @return  combined string or NULL, ownership transferred to caller
-     */
-    static HBufC* BuildCombinedStringL( const MDesCArray& aArray );
-
-    /**
-     * Splits the given combined string and appends the components to
-     * the given array. The initial content of the array is not modified.
-     * If aString does not seem to be a string combined from multiple entries
-     * then aString is appended to aArray without any changes.
-     * @param   aString     combined string, input
-     * @param   aArray      array, output
-     */
-    static void SplitCombinedStringL( const TDesC& aString,
-        CDesCArray& aArray );
-
-    /**
-     * Gets a string that can be published straight via PublishContextL.
-     * The pointer is left on the cleanup stack.
-     * Returned & pushed pointer may also be NULL is something goes wrong.
-     */
-    HBufC* MakeLinkPublishableLC( const MVPbkContactLink& aLink );
-
-    /**
-     * Publishes contact context.
-     * @param   aContact            contact
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL( const MVPbkStoreContact& aContact,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes contact context.
-     * This may include async operations and therefore the actual publishing may happen
-     * only after this function returns.
-     * @param   aContactLink        contact link
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL( const MVPbkContactLink& aContactLink,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes contact context.
-     * Attempts to publish an empty value will be ignored.
-     *
-     * Prefer using the overloads taking vpbk contact or link, whenever possible.
-     * Use this in case of unknown contacts only, that is, a name, phone number,
-     * or email address that does not belong to a phonebook contact.
-     *
-     * @param   aContactName    formatted name, phone number, or email address,
-     * or a combination of them, e.g. "firstname lastname", "+12345678",
-     * "lastname firstname <abcd@efg.com>", "firstname, lastname <0501234567>".
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL( const TDesC& aContactName,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * @param   aContacts           contact array
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL(
-        const RPointerArray<MVPbkStoreContact>& aContacts,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * This may include async operations and therefore the actual publishing may happen
-     * only after this function returns.
-     * @param   aContactLinks       contact link array
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL(
-        const CVPbkContactLinkArray& aContactLinks,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * @param   aContactNames   string array, for element format
-     * see PublishContactContextL(const TDesC&)
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishContactContextL( const MDesCArray& aContactNames,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes freetext context.
-     * Not to be used for bulk text (e.g. full content of some text viewer component).
-     * @param   aText   some text, typically the highlighted substring
-     * from a viewer or editor control
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishTextContextL( const TDesC& aText,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes URL context.
-     * @param   aUrl    URL
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishUrlContextL( const TDesC& aUrl,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes date/time context.
-     * @param   aTime   time
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishTimeContextL( const TTime& aTime,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes photo context.
-     * @param   aFilename   name of image file, with full path
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishPhotoContextL( const TDesC& aFilename,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes photo context.
-     * @param   aMdeItemId  item id for the Image object in MDS
-     * @param   aMdeSession opened metadata engine session
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishPhotoContextL( TItemId aMdeItemId,
-        CMdESession& aMdeSession,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Publishes TV context.
-     * Pass KNullDesC if some of the needed data is not available.
-     * @param   aChannelName        channel name
-     * @param   aProgramName        program name
-     * @param   aProgramDescription program description
-     * @param   aGenre              genre
-     */
-    void PublishTvContextL( const TDesC& aChannelName,
-        const TDesC& aProgramName, const TDesC& aProgramDescription,
-        const TDesC& aGenre );
-
-    /**
-     * Publishes an account id as contact context.
-     *
-     * @param   aServiceId  the service prefix, e.g. "Ovi"
-     * @param   aAccountId  the account id
-     * @param   aDelay   if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    void PublishServiceIdL( const TDesC& aServiceId,
-        const TDesC& aAccountId,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Enables or disables automatic re-publishing of the latest
-     * context (published via this context utility instance) whenever
-     * the application comes to foreground.
-     *
-     * It is DISABLED by default.
-     *
-     * By enabling this the applications do not have to care about
-     * context publishing in HandleForegroundEventL etc.
-     *
-     * The feature needs CCoeEnv and calls will be ignored if the
-     * environment is not available.
-     *
-     * @param   aEnable     flag to turn the feature on/off
-     */
-    void RePublishWhenFgL( TBool aEnable );
-
-    /**
-     * Enables or disables context publishing when being in background.
-     * Applies to all PublishContextL variants.
-     * If disabled then no context will be published if it seems that the
-     * caller application is not in foreground.
-     * Has no effect if there is no CCoeEnv available, publishing is always
-     * allowed in that case.
-     *
-     * It is DISABLED by default, that is, publishing is not allowed
-     * from applications that are not in foreground.
-     *
-     * @param   aAllow  flag to turn the feature on/off
-     */
-    void AllowPublishFromBackground( TBool aAllow );
-    
-    /**
-     * @see CHgContextUtility::AddMusicContextInfo
-     */
-    void AddMusicContextInfoL( const TDesC& aKey, const TDesC& aData );
-    
-    /**
-     * @see CHgContextUtility::AddMusicContextInfo
-     */
-    void PublishMusicContextL( 
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-    
-    /**
-     * @see CHgContextUtility::PublishRadioContextL
-     */
-    void PublishRadioContextL( 
-            const TDesC& aRadioName,
-            const TDesC& aRadioUrl,
-            const TDesC& aRadioFrequency,
-            const TDesC& aRadioRDSPI );
-
-private: // from MCFListener
-    void ContextIndicationL( const CCFContextIndication& aChangedContext );
-    void ActionIndicationL( const CCFActionIndication& aActionToExecute );
-    void HandleContextFrameworkError( TCFError aError,
-        const TDesC& aSource, const TDesC& aType );
-    TAny* Extension( const TUid& aExtensionUid ) const;
-
-private: // from MCoeForegroundObserver
-    void HandleGainingForeground();
-    void HandleLosingForeground();
-
-private: // from CTimer
-    void RunL();
-    TInt RunError( TInt aError );
-
-private:
-    /**
-     * Constructor.
-     */
-    CHgContextUtilityImpl();
-    
-    /**
-     * 2nd phase constructor.
-     */
-    void ConstructL();
-
-    /**
-     * Creates CCFClient instance if not yet done.
-     * Does not leave if creation fails.
-     * Returns ETrue if iCFClient is usable.
-     */    
-    TBool CFReady();
-    
-    /**
-     * Returns ETrue if the root window's wgid is same as
-     * the focused window group's wgid.
-     * Always returns ETrue if CCoeEnv is not available.
-     */
-    TBool IsForeground();
-    
-    /**
-     * Returns ETrue if publishing context is allowed at the moment.
-     * Uses IsForeground and the allow-publish-from-background setting.
-     */
-    TBool AllowedToPublish();
-    
-    /**
-     * Makes sure the specific key contains valid data and publishes it.
-     * 
-     * @param aKey Key to be checked and published.
-     * @param aDelay Delay for publishing the context data. 
-     */
-    void VerifyAndPublishMusicContextL( 
-        const TDesC& aKey,
-        const TTimeIntervalMicroSeconds32& aDelay );
-    
-    /**
-     * Simple wrapper to handle between delayed and instant publish.
-     * @see PublishContextL
-     * @see PublishContextDelayedL
-     */
-    void PublishContextL( 
-        const TDesC& aContextType,
-        const TDesC& aContextData,
-        const TTimeIntervalMicroSeconds32& aDelay );
-
-    CCFClient* iCFClient;
-    HBufC* iPendingContextType;
-    HBufC* iPendingContextData;
-    CDesCArray* iPendingContextDataArray;
-
-    HBufC* iLastContextType;
-    HBufC* iLastContextData;
-    TBool iFgWatchEnabled;
-    CCoeEnv* iEnv; // not own
-    TBool iAllowPublishFromBackground;
-    
-    /**
-     * List of parameters to be published. Owns pointers.
-     */
-    RPtrHashMap<TDesC, TDesC> iMusicContextInfo;
-    };
-    
-#endif /* HGCONTEXTUTILITYIMPL_H */
--- a/contextutility/inc/hgctxutilslogging.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Logging utils
-*
-*/
-
-
-#ifdef _DEBUG
-_LIT( KHgLogFile, "hgctxutils.txt" );
-_LIT( KHgLogPath, "teleport" );
-#define _HGLOG_LOG_COMPONENT_ID 0x1000008d
-
-#endif
-#include "hglogging.h"
--- a/contextutility/inc/hglogging.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Logging utils
-*
-*/
-
-
-#ifndef HGLOGLOGUTILS_H
-#define HGLOGLOGUTILS_H
-
-/**
- * @file
- * 
- * TAKING LOGGING INTO USE:
- * 
- * This step is needed to do once per component.
- * 
- * For each component that uses these common logging macros should specify
- * their own logging configuration file, which includes this file. In that
- * configuration file, following constants and macros must be defined.
- *  For example:
- * @code
- * 
- * _LIT( KHgLogFile, "text_file_for_logging.txt" );
- * _LIT( KHgLogPath, "folder_for_text_file" );
- * #define _HGLOG_LOG_COMPONENT_ID <some unique number here>
- * 
- * #include "hglogging.h"
- * 
- * @/code
- * 
- * KHgLogFile   : This is the name of the file, where all the logs for
- *                this components are being written.
- * 
- * KHgLogPath   : This is the folder name under c:\logs, where the file
- *                is to be stored. For example, if KHgLogPath is "test",
- *                log file is created into folder c:\logs\test.
- * 
- * _HGLOG_LOG_COMPONENT_ID  : Unique number id of the component. This is 
- *                            for filtering purposes.
- * 
- * _HGLOG_RDEBUG    : When defined tracing instead of file logging. 
- *                    Default is for file logging.
- * 
- * --------------------------------------------------------------------------
- * 
- * USING LOGGING:
- * 
- * Basically the use is simple, register function use with HGLOG_CONTEXT, 
- * then log function enter by any HGLOG_IN -macro, then possibly use HGLOG
- * -macros for function logging and finally HGLOG_OUT -macros for returning
- * from the function.
- * 
- * @code
- * TInt CGood::Example( TInt aSomething )
- *     {
- *     // Create log context class, which is maintained for lifetime of the 
- *     // method. 
- *     HGLOG_CONTEXT( Example, HGLOG_LOCAL );
- * 
- *     // Indicate we are entering the function. 
- *     HGLOG_IN1( "aSomething contains value %d", aSomething );
- * 
- *     // Your buggy code...
- * 
- *     // Before leaving, indicate function execution has ended.
- *     HGLOG_OUT();
- * 
- *     return 0;
- *     }
- * @/code
- */
-
-#include <e32def.h>
-#include <e32std.h>
-
-#include "hglogutils.h"
-
-#define HGLOG_API 0
-#define HGLOG_LOCAL 1
-
-#define HGLOG_INFO 0
-#define HGLOG_WARNING 1
-#define HGLOG_ERROR 2
-
-#define HGLOG_ASSERT(_assertion)  __HGLOG_ASSERT_DBG(_assertion) 
-#define HGLOG_TRACE_ASSERT(_assertion) __ASSERT_DEBUG((_assertion), User::Invariant() )
-
-#ifdef _DEBUG
-            
-/*****************************************************************************
- LOGGING MACROS - LOGGING ON
-*****************************************************************************/             
-
-    /** 
-     * Context initialization 
-     * NOTE: HGLOG_STATIC_CONTEXT is meant for static methods.
-     * 
-     * @param _fn   Name of the function.
-     * @param _vis  Visibility for the client, use values HGLOG_API or HGLOG_LOCAL
-     * @param _thdId For static functions, thread id can be given here.
-     */
-    #define HGLOG_CONTEXT(_fn, _vis ) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, (TUint)this, RProcess().SecureId().iId )
-    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, _thdId, RProcess().SecureId().iId )
-
-    /** 
-     * Entering function 
-     * 
-     * @param string    Custom text. Example: HGLOG_IN0( "Yeah!!!" );
-     * @param p1 - p5   For multiple variables in same string.
-     */
-    #define HGLOG_IN() do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
-    #define HGLOG0_IN(string) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
-    #define HGLOG1_IN(string, p1) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_ENTRY(); } while(0)
-    #define HGLOG2_IN(string, p1, p2) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_ENTRY(); } while(0)
-    #define HGLOG3_IN(string, p1, p2, p3) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_ENTRY(); } while(0)
-    #define HGLOG4_IN(string, p1, p2, p3, p4) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_ENTRY(); } while(0)
-    #define HGLOG5_IN(string, p1, p2, p3, p4, p5) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_ENTRY(); } while(0)
-
-    /** Leaving function */
-    #define HGLOG_OUT() do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
-    #define HGLOG0_OUT(string) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
-    #define HGLOG1_OUT(string, p1) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_EXIT(); } while(0)
-    #define HGLOG2_OUT(string, p1, p2) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_EXIT(); } while(0)
-    #define HGLOG3_OUT(string, p1, p2, p3) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_EXIT(); } while(0)
-    #define HGLOG4_OUT(string, p1, p2, p3, p4) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_EXIT(); } while(0)
-    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0)
-
-    /** Leaving function with return value */
-    #define HGLOG0_RET(val, fmtstr) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val); _MARK_EXIT(); } while(0); return val;} while(0)
-    #define HGLOG1_RET(val, fmtstr, p1) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1); _MARK_EXIT(); } while(0); return val;} while(0)
-    #define HGLOG2_RET(val, fmtstr, p1, p2) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2); _MARK_EXIT(); } while(0); return val;} while(0)
-    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3); _MARK_EXIT(); } while(0); return val;} while(0)
-    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4); _MARK_EXIT(); } while(0); return val;} while(0)
-    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0); return val;} while(0)
-
-    /** 
-     * General log lines 
-     * 
-     * @param level     This can be used as internal information 
-     *                  field, such as info, error, warning etc.
-     * @param string    Custom string
-     * @param p1 - p5   For multiple variables in same string.
-     */
-    #define HGLOG0(level, string) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); } while(0)
-    #define HGLOG1(level, string, p1) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); } while(0)
-    #define HGLOG2(level, string, p1, p2) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); } while(0)
-    #define HGLOG3(level, string, p1, p2, p3) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); } while(0)
-    #define HGLOG4(level, string, p1, p2, p3, p4) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); } while(0)
-    #define HGLOG5(level, string, p1, p2, p3, p4, p5) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); } while(0)
-
-    /** Error logging */
-    #define __HGLOG_ASSERT_DBG( _assertion ) do { if( _assertion ) { break; } TFileName file; file.Copy( _L8( __FILE__ ) );   _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s Assert:%S:%d:" L ## #_assertion) , _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, &file, __LINE__ ); User::Invariant(); } while( 0 )
-    #define __HGLOG_TRACE_ASSERT_DBG(_assertion, _textToPrint, _panicCode)  do { if (_assertion) { break; } _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s ASSERTION FAILED!!! %s file: %s, line: %s"), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, _textToPrint, __FILE__, __LINE__); User::Panic(_L("AssertionFailed"), _panicCode} while(0)
-    #define HGLOG_TRAPHANDLER() _THgLogTrapHandler _traceTrapHandler; _traceTrapHandler.oldHandler = User::SetTrapHandler(&_traceTrapHandler)
-
-/*****************************************************************************
- LOGGING MACROS - NO LOGGING
-*****************************************************************************/ 
-#else // _DEBUG
-
-    #define HGLOG_CONTEXT(_fn, _vis )
-    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId)
-
-    #define HGLOG_IN()
-    #define HGLOG0_IN(string)
-    #define HGLOG1_IN(string, p1)
-    #define HGLOG2_IN(string, p1, p2)
-    #define HGLOG3_IN(string, p1, p2, p3)
-    #define HGLOG4_IN(string, p1, p2, p3, p4)
-    #define HGLOG5_IN(string, p1, p2, p3, p4, p5)
-
-    #define HGLOG_OUT()
-    #define HGLOG0_OUT(string)
-    #define HGLOG1_OUT(string, p1)
-    #define HGLOG2_OUT(string, p1, p2)
-    #define HGLOG3_OUT(string, p1, p2, p3)
-    #define HGLOG4_OUT(string, p1, p2, p3, p4)
-    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5)
-
-    #define HGLOG0_RET(val, fmtstr) return val
-    #define HGLOG1_RET(val, fmtstr, p1) return val
-    #define HGLOG2_RET(val, fmtstr, p1, p2) return val
-    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) return val
-    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) return val
-    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) return val
-
-    #define HGLOG0(level, string)
-    #define HGLOG1(level, string, p1)
-    #define HGLOG2(level, string, p1, p2)
-    #define HGLOG3(level, string, p1, p2, p3)
-    #define HGLOG4(level, string, p1, p2, p3, p4)
-    #define HGLOG5(level, string, p1, p2, p3, p4, p5)
-    
-    #define BIND_TRACE_TRAPHANDLER()
-    #define TRACE_DECL() TInt _iTraceThreadId
-    #define TRACE_FAST_CREATE(_thdId) _thdId++;
-    #define TRACE_CREATE()
-
-    #define __HGLOG_ASSERT_DBG(_assertion)
-    #define __TRACE_ASSERT_DBG(_assertion, _message, _panicCode )
-
-#endif // _DEBUG
-
-#endif      // HGLOGLOGUTILS_H
-            
-// End of File
--- a/contextutility/inc/hglogutils.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Logging utils
-*
-*/
-
-
-#ifndef HGLOGUTILS_H
-#define HGLOGUTILS_H
-
-/**
- * NOTE: This file contains the logic related to logging. Change only if you
- * know what you're doing.
- */
-
-
-
-
-
-
-
-
-
-
-#ifdef _DEBUG
-
-#include <e32debug.h>
-#include <e32std.h>
-
-static const TUint HGLOGERR   = 2;  /**< Used to create an error message */
-
-// These macros are real macros, that should be used. For temporary purposes, these
-// are left out and the logging is done by simple entry logging
-#define _HGLOG_UNCONTROLLED_INPUT_MSG  L"%s%d[%x:%x:%x]>%s UNCONTROLLED ENTRY!"
-#define _HGLOG_MULTIPLE_ENTRY_MSG      L"%s%d[%x:%x:%x]%s  ADDITIONAL ENTRY!"
-#define _HGLOG_UNCONTROLLER_EXIT_MSG   L"%s%d[%x:%x:%x]<%s UNCONTROLLED EXIT!"
-#define _HGLOG_MULTIPLE_EXIT_MSG       L"%s%d[%x:%x:%x]%s  ADDITIONAL EXIT!"
-#define _HGLOG_TRAP_HARNESS_ENTRY      L"_D%d[%x:%x:%x]TraceFramework: Entering trap harness"
-#define _HGLOG_TRAP_HARNESS_EXIT       L"_D%d[%x:%x:%x]TraceFramework: Exiting trap harness"
-#define _HGLOG_TRAP_HARNESS_LEAVE      L"_D%d[%x:%x:%x]TraceFramework: ---------- LEAVE OCCURRED !!! ---------- "
-#define _HGLOG_API_PREFIX              L"_A"
-#define _HGLOG_LOCAL_PREFIX            L"_L"
-
-/**
-* @file 
-* trace_utils.h contains definitions needed for advanced tracing features.
-* Tracing can be customized using the following compile time flags:
-* - <b>_DEBUG</b>
-*   - With this flag undefined, all traces are disabled
-* - <b>__KERNEL_MODE__</b>
-*   - if kernel mode flag is defined, kernel macro variants are used (no unicode or shared heap related stuff, faster)
-* - <b>DISABLE_SYNTAX_CHECK</b>
-*   - If this flag is defined, runtime syntax checking features are disabled from traces
-*/
-#ifndef DISABLE_SYNTAX_CHECK
-    #define _MARK_ENTRY() _dc.inOk=ETrue
-    #define _DOINCHK() _dc.DoInChk()
-    #define _CHK_MULTIIN() _dc.ChkMultiIn()
-    #define _CHK_MULTIOUT() _dc.ChkMultiOut()
-    #define _MARK_EXIT() _dc.outOk=ETrue
-#else
-    #define _MARK_ENTRY()
-    #define _DOINCHK()
-    #define _CHK_MULTIIN()
-    #define _CHK_MULTIOUT()
-    #define _MARK_EXIT()
-#endif // DISABLE_SYNTAX_CHECK
-    
-/** For tracing */
-#ifdef _HGLOG_RDEBUG
-    #define _IT(a) (TPtrC((const TText *)(a)))
-    #define _HGLOGPRINTER RDebug::Print        
-        
-/** For filedebug */
-#else   // _HGLOG_RDEBUG
-
-    /** Includes */
-    #include <e32base.h>
-    #include <e32std.h>
-    #include <e32def.h>
-    #include <e32svr.h>
-
-// both of headers defines KLogBufferSize
-#ifndef __COMMSDEBUGUTILITY_H__
-    #include <flogger.h>
-#endif
-
-    #define _IT(a) KHgLogPath, KHgLogFile, EFileLoggingModeAppend, (TPtrC((const TText *)(a)))    
-    #define _HGLOGPRINTER RFileLogger::WriteFormat    
-#endif // _HGLOG_RDEBUG    
-
-class _THgLogContext
-    {
-    public:
-        _THgLogContext(
-            const TText* _fn, 
-            const TUint _id, 
-            const TUint _vis, 
-            const TUint _addr, 
-            const TUint _thdId, 
-            const TUint _category=0 )
-            : 
-            iFn(_fn), 
-            iId(_id), 
-            iApi((TBool)_vis), 
-            iAddr(_addr), 
-            iThdId(_thdId), 
-            iVis((_vis == 0 ? (TText*)_HGLOG_API_PREFIX : (TText*)_HGLOG_LOCAL_PREFIX)),
-            iCategory(_category)            
-        #ifndef DISABLE_SYNTAX_CHECK
-            ,outOk(EFalse), inOk(EFalse)
-        #endif
-            {
-            }
-        ~_THgLogContext() 
-            {
-            #ifndef DISABLE_SYNTAX_CHECK
-                do
-                    {                   
-                    DoInChk();
-                    if (!outOk)
-                        {
-                        _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLER_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
-                        }
-                    } while (0);
-            #endif // DISABLE_SYNTAX_CHECK
-            }
-
-        const TText* iFn;
-        const TUint iId;
-        const TText* iVis;
-        const TUint iAddr;
-        const TInt iThdId;
-        const TBool iApi;
-        const TUint iCategory;
-        
-        #ifndef DISABLE_SYNTAX_CHECK
-            inline void DoInChk()
-                {
-                if (!inOk)
-                    {
-                    _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLED_INPUT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
-                    inOk = ETrue;
-                    }
-                }
-                        
-            inline void ChkMultiIn()
-                {
-                if (inOk)
-                    {
-                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_ENTRY_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                
-                    }
-                }
-    
-            inline void ChkMultiOut()
-                {
-                if (outOk)
-                    {           
-                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                                        
-                    }
-                }
-
-            TBool inOk;
-            TBool outOk;
-        #endif // DISABLE_SYNTAX_CHECK
-    };
-    
-class _THgLogTrapHandler: public TTrapHandler
-    {
-    public:
-
-        _THgLogTrapHandler(_THgLogContext& _context) : _dc( _context ) 
-            {
-            RThread me;
-            iThdId = (TInt)me.Id();
-            }
-    	void Trap() 
-    	    {
-    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_ENTRY), 0, HGLOGERR, iThdId, this);
-    	    oldHandler->Trap();
-    	    } 
-    	void UnTrap()
-    	    {
-    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_EXIT), 0, HGLOGERR, iThdId, this);
-    	    oldHandler->UnTrap();
-    	    }	
-    	void Leave(TInt aValue)
-    	    {
-    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_LEAVE), 0, HGLOGERR, iThdId, this);
-    	    oldHandler->Leave(aValue);
-    	    }	
-    	TTrapHandler* oldHandler;
-    private:
-        _THgLogContext& _dc;
-        TInt iThdId;
-    };
-    
-#endif // _DEBUG    
-
-#endif // HGLOGUTILS_H
\ No newline at end of file
--- a/contextutility/rom/hgcontextutility.iby	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Iby file
-*
-*/
-
-
-#ifndef HGCONTEXTUTILITY_IBY
-#define HGCONTEXTUTILITY_IBY
-
-#include <data_caging_paths_for_iby.hrh>
-
-file=ABI_DIR\BUILD_DIR\hgcontextutility.dll    SHARED_LIB_DIR\hgcontextutility.dll
-
-#endif // HGCONTEXTUTILITY_IBY
--- a/contextutility/src/hgcontextutility.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
-*
-*/
-
-
-#include <hg/hgcontextutility.h>
-#include "hgcontextutilityimpl.h"
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::NewL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgContextUtility* CHgContextUtility::NewL()
-    {
-    CHgContextUtility* self = NewLC();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::NewLC
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgContextUtility* CHgContextUtility::NewLC()
-    {
-    CHgContextUtility* self = new ( ELeave ) CHgContextUtility;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::CHgContextUtility
-// -----------------------------------------------------------------------------
-//
-CHgContextUtility::CHgContextUtility()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtility::ConstructL()
-    {
-    BaseConstructL();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::~CHgContextUtility
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgContextUtility::~CHgContextUtility()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const MVPbkStoreContact& aContact,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContact, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const MVPbkContactLink& aContactLink,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContactLink, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const TDesC& aContactName,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContactName, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const RPointerArray<MVPbkStoreContact>& aContacts,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContacts, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const CVPbkContactLinkArray& aContactLinks,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContactLinks, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishContactContextL(
-        const MDesCArray& aContactNames,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContactContextL( aContactNames, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishTextContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishTextContextL( const TDesC& aText,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishTextContextL( aText, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishUrlContextL
-// -----------------------------------------------------------------------------
-//   
-EXPORT_C void CHgContextUtility::PublishUrlContextL( const TDesC& aUrl,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishUrlContextL( aUrl, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishTimeContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishTimeContextL( const TTime& aTime,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishTimeContextL( aTime, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishPhotoContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishPhotoContextL(
-        const TDesC& aFilename,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishPhotoContextL( aFilename, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishPhotoContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishPhotoContextL(
-        TItemId aMdeItemId,
-        CMdESession& aMdeSession,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishPhotoContextL( aMdeItemId, aMdeSession, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishTvContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishTvContextL( const TDesC& aChannelName,
-        const TDesC& aProgramName, const TDesC& aProgramDescription,
-        const TDesC& aGenre )
-    {
-    iImpl->PublishTvContextL( aChannelName, aProgramName,
-        aProgramDescription, aGenre );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishServiceIdL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishServiceIdL( const TDesC& aServiceId,
-        const TDesC& aAccountId,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishServiceIdL( aServiceId, aAccountId, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::RePublishWhenFgL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::RePublishWhenFgL( TBool aEnable )
-    {
-    iImpl->RePublishWhenFgL( aEnable );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::AllowPublishFromBackground
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::AllowPublishFromBackground( TBool aAllow )
-    {
-    iImpl->AllowPublishFromBackground( aAllow );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::AddMusicContextInfoL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::AddMusicContextInfoL( 
-    const TDesC& aKey, const TDesC& aData )
-    {
-    iImpl->AddMusicContextInfoL( aKey, aData );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishMusicContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishMusicContextL( 
-    const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishMusicContextL( aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::PublishRadioContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtility::PublishRadioContextL( 
-        const TDesC& aRadioName,
-        const TDesC& aRadioUrl,
-        const TDesC& aRadioFrequency,
-        const TDesC& aRadioRDSPI )
-    {
-    iImpl->PublishRadioContextL( aRadioName, aRadioUrl,
-            aRadioFrequency, aRadioRDSPI );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::BuildCombinedStringL
-// -----------------------------------------------------------------------------
-EXPORT_C HBufC* CHgContextUtility::BuildCombinedStringL( const MDesCArray& aArray )
-{
-    return CHgContextUtilityImpl::BuildCombinedStringL(aArray);
-}
-
-// -----------------------------------------------------------------------------
-// CHgContextUtility::SplitCombinedStringL
-// -----------------------------------------------------------------------------
-EXPORT_C void CHgContextUtility::SplitCombinedStringL( const TDesC& aString,
-        CDesCArray& aArray )
-{
-    CHgContextUtilityImpl::SplitCombinedStringL(aString, aArray);
-}
-//
-// end of file
--- a/contextutility/src/hgcontextutilitybase.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
-*
-*/
-
-
-#include <hg/hgcontextutilitybase.h>
-#include "hgcontextutilityimpl.h"
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::CHgContextUtilityBase
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityBase::CHgContextUtilityBase()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::BaseConstructL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityBase::BaseConstructL()
-    {
-    iImpl = CHgContextUtilityImpl::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::~CHgContextUtilityBase
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityBase::~CHgContextUtilityBase()
-    {
-    delete iImpl;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::PublishContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtilityBase::PublishContextL( const TDesC& aContextType,
-        const TDesC& aContextData )
-    {
-    iImpl->PublishContextL( aContextType, aContextData );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::PublishContextL
-// Array version
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtilityBase::PublishContextL( const TDesC& aContextType,
-        const MDesCArray& aContextData )
-    {
-    iImpl->PublishContextL( aContextType, aContextData );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::GetContextL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CHgContextUtilityBase::GetContextL( const TDesC& aContextSource,
-        const TDesC& aContextType )
-    {
-    return iImpl->GetContextL( aContextSource, aContextType );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::GetContextL
-// Version using a fixed context source
-// -----------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CHgContextUtilityBase::GetContextL( const TDesC& aContextType )
-    {
-    return iImpl->GetContextL( aContextType );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::PublishContextDelayedL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtilityBase::PublishContextDelayedL(
-        const TDesC& aContextType,
-        const TDesC& aContextData,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContextDelayedL( aContextType, aContextData, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityBase::PublishContextDelayedL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgContextUtilityBase::PublishContextDelayedL(
-        const TDesC& aContextType,
-        const MDesCArray& aContextData,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    iImpl->PublishContextDelayedL( aContextType, aContextData, aDelay );
-    }
-
-
-// end of file
--- a/contextutility/src/hgcontextutilityimpl.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,972 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
-*
-*/
-
-
-#include <cfcontextobject.h>
-#include <cfclient.h>
-#include <mdesession.h>
-#include <mdeobject.h>
-#include <s32mem.h>
-#include <MVPbkContactLink.h>
-#include <MVPbkStoreContact.h>
-#include <MVPbkStreamable.h>
-#include <CVPbkContactLinkArray.h>
-#include <e32debug.h>
-#include <w32std.h>
-#include "hgcontextutilityimpl.h"
-#include "hgcontexttypes.h"
-
-// max number of entries processed when aContextData is an array in PublishContextL
-const TInt KMaxEntriesInMulti = 20;
-
-// separator character in combined string for multiple entries
-const TInt KMultiSepChar = 0x0001;
-
-// granularity for string array
-const TInt KArrayGranularity = 4;
-
-// argument for CBufFlat ctor when serializing contact links
-const TInt KBufGranularity = 64;
-
-// default security policy (use LocalServices cap) for contexts
-_LIT_SECURITY_POLICY_C1( KContextSecurity, ECapabilityLocalServices );
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::NewL
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityImpl* CHgContextUtilityImpl::NewL()
-    {
-    CHgContextUtilityImpl* self = NewLC();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::NewLC
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityImpl* CHgContextUtilityImpl::NewLC()
-    {
-    CHgContextUtilityImpl* self = new ( ELeave ) CHgContextUtilityImpl;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::CHgContextUtilityImpl
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityImpl::CHgContextUtilityImpl()
-        : CTimer( CActive::EPriorityStandard )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::ConstructL()
-    {
-    CTimer::ConstructL();
-
-    iEnv = CCoeEnv::Static(); // may be NULL
-
-    // Do not create iCFClient here as cf server may not be available yet
-    // if we are early in the boot phase.
-    
-    // set defaults
-    RePublishWhenFgL( EFalse );
-    AllowPublishFromBackground( EFalse );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::~CHgContextUtilityImpl
-// -----------------------------------------------------------------------------
-//
-CHgContextUtilityImpl::~CHgContextUtilityImpl()
-    {
-    Cancel();
-    delete iPendingContextType;
-    delete iPendingContextData;
-    delete iPendingContextDataArray;
-    delete iCFClient;
-    delete iLastContextType;
-    delete iLastContextData;
-    if ( iFgWatchEnabled && iEnv )
-        {
-        iEnv->RemoveForegroundObserver( *this );
-        }
-    
-    iMusicContextInfo.ResetAndDestroy();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::CFReady
-// -----------------------------------------------------------------------------
-//
-TBool CHgContextUtilityImpl::CFReady()
-    {
-    if ( !iCFClient )
-        {
-        TRAPD( err, iCFClient = CCFClient::NewL( *this ) );
-        if ( err != KErrNone )
-            {
-            RDebug::Printf( "[hgctxutil] cfw not ready" );
-            return EFalse;
-            }
-        }
-    return ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextL
-// All other non-static versions of this function will fall back to this one.
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextL( const TDesC& aContextType,
-        const TDesC& aContextData )
-    {
-    RDebug::Print( _L("[hgctxutil] PublishContextL [%S] [%S]"),
-        &aContextType, &aContextData );
-    // create cf client instance if not yet done
-    // and check foreground status if needed
-    if ( CFReady() && AllowedToPublish() )
-        {
-        // call static version with our cf client instance
-        PublishContextL( *iCFClient, aContextType, aContextData );
-        }
-    // store type and value for later use
-    // (even when cfserver is not available yet, the data may still be
-    //  used later when the app comes to foreground, for example)
-    if ( iLastContextType != &aContextType )
-        {
-        delete iLastContextType; iLastContextType = 0;
-        iLastContextType = aContextType.AllocL();
-        }
-    if ( iLastContextData != &aContextData )
-        {
-        delete iLastContextData; iLastContextData = 0;
-        iLastContextData = aContextData.AllocL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// AppendCharL
-// Appends a char to aDst, calls ReAllocL when needed, assumes that aDst
-// is also on cleanupstack (at top position) so it updates that pointer too.
-// -----------------------------------------------------------------------------
-//
-LOCAL_C void AppendCharL( HBufC*& aDst, TChar aChar )
-    {
-    TPtr des( aDst->Des() );
-    if ( des.Length() == des.MaxLength() )
-        {
-        HBufC* oldDst = aDst;
-        aDst = aDst->ReAllocL( des.MaxLength() * 2 );
-        CleanupStack::Pop( oldDst ); // pop the old pointer
-        CleanupStack::PushL( aDst ); // and push the new (possibly different) one
-        des.Set( aDst->Des() );
-        }
-    des.Append( aChar );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::BuildCombinedStringL
-// -----------------------------------------------------------------------------
-//
-HBufC* CHgContextUtilityImpl::BuildCombinedStringL(
-        const MDesCArray& aArray )
-    {
-    TInt arrayCount = aArray.MdcaCount();
-    if ( arrayCount >= 2 )
-        {
-        // Rules:
-        // 1. escape all separator chars in the input with a preceeding \
-        // 2. escape all \ chars in the input with \\
-        // 3. take only the first KMaxEntriesInMulti elements from the array
-        // 4. append a separator also after last entry
-        // 5. prepend two separators to the combined string
-        TInt processedEntryCount = Min( arrayCount, KMaxEntriesInMulti );
-        // calculate a big enough size so we can avoid ReAllocL calls later
-        TInt sz = 0;
-        for ( TInt i = 0; i < processedEntryCount; ++i )
-            {
-            sz += aArray.MdcaPoint( i ).Length() + 1;
-            }
-        sz += 2; // for the magic prefix
-        HBufC* value = HBufC::NewLC( sz );
-        AppendCharL( value, KMultiSepChar );
-        AppendCharL( value, KMultiSepChar );
-        for ( TInt i = 0; i < processedEntryCount; ++i )
-            {
-            TPtrC entry( aArray.MdcaPoint( i ) );
-            // append, also do the escaping
-            for ( TInt j = 0, je = entry.Length(); j != je; ++j )
-                {
-                TChar c = entry[j];
-                if ( c == KMultiSepChar || c == '\\' )
-                    {
-                    AppendCharL( value, '\\' );
-                    }
-                AppendCharL( value, c );
-                }
-            AppendCharL( value, KMultiSepChar );
-            }
-        CleanupStack::Pop( value );
-        return value;
-        }
-    return 0;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::SplitCombinedStringL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::SplitCombinedStringL(
-        const TDesC& aString, CDesCArray& aArray )
-    {
-    TInt inputLength = aString.Length();
-    TBool isMulti = inputLength > 2
-        && aString[0] == KMultiSepChar && aString[1] == KMultiSepChar;
-    if ( isMulti )
-        {
-        // allocate a work buffer that is big enough for sure
-        HBufC* buf = HBufC::NewLC( inputLength );
-        TPtr des( buf->Des() );
-        TBool esc = EFalse;
-        // go through the string, find entries, and add them to output array
-        for ( TInt i = 2; i < inputLength; ++i ) // start from 2 because of the magic prefix
-            {
-            TChar c = aString[i];
-            if ( c == '\\' && !esc )
-                {
-                esc = ETrue;
-                }
-            else if ( c == KMultiSepChar && !esc )
-                {
-                // found separator: append to output array, clear buffer, and continue
-                aArray.AppendL( des );
-                des.Zero();
-                }
-            else
-                {
-                esc = EFalse;
-                des.Append( c );
-                }
-            }
-        CleanupStack::PopAndDestroy( buf );
-        }
-    else
-        {
-        // not a combined string: append to array as it is
-        aArray.AppendL( aString );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextL( const TDesC& aContextType,
-        const MDesCArray& aContextData )
-    {
-    TInt entryCount = aContextData.MdcaCount();
-    // do nothing if array is empty
-    if ( !entryCount )
-        {
-        return;
-        }
-    // nothing special when having only 1 item
-    if ( entryCount == 1 )
-        {
-        PublishContextL( aContextType, aContextData.MdcaPoint( 0 ) );
-        return;
-        }
-    // at least two items: create the special combined string
-    HBufC* value = BuildCombinedStringL( aContextData );
-    CleanupStack::PushL( value );
-    // publish the combined string
-    PublishContextL( aContextType, *value );
-    CleanupStack::PopAndDestroy( value );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextL
-// This is the version of the function where the real work is performed.
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextL( CCFClient& aCFClient,
-        const TDesC& aContextType, const TDesC& aContextData )
-    {
-    CCFContextObject* context = CCFContextObject::NewLC();
-    context->SetSourceL( KHgCFSource );
-    context->SetTypeL( aContextType );
-    context->SetValueL( aContextData );
-    TInt err = aCFClient.PublishContext( *context );
-    if ( err == KErrNotFound )
-        {
-        User::LeaveIfError( aCFClient.DefineContext( KHgCFSource,
-            aContextType, KContextSecurity ) );
-        err = aCFClient.PublishContext( *context );
-        if ( err != KErrArgument ) // ignore -6 which comes e.g. when trying to publish an empty value
-            {
-            User::LeaveIfError( err );
-            }
-        }
-    else if ( err != KErrArgument )
-        {
-        User::LeaveIfError( err );
-        }
-    CleanupStack::PopAndDestroy( context );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::GetContextL
-// -----------------------------------------------------------------------------
-//
-HBufC* CHgContextUtilityImpl::GetContextL( const TDesC& aContextSource,
-        const TDesC& aContextType )
-    {
-    HBufC* ret = 0;
-    if ( CFReady() )
-        {
-        CCFContextQuery* query = CCFContextQuery::NewLC();
-        query->SetSourceL( aContextSource );
-        query->SetTypeL( aContextType );
-        RContextObjectArray result;
-        TInt err = iCFClient->RequestContext( *query, result );
-        if ( err == KErrNone && result.Count() )
-            {
-            ret = result[0]->Value().Alloc();
-            }
-        result.ResetAndDestroy();
-        CleanupStack::PopAndDestroy( query );
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::GetContextL
-// -----------------------------------------------------------------------------
-//
-HBufC* CHgContextUtilityImpl::GetContextL( const TDesC& aContextType )
-    {
-    return GetContextL( KHgCFSource, aContextType );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextDelayedL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextDelayedL( const TDesC& aContextType,
-        const TDesC& aContextData, TTimeIntervalMicroSeconds32 aDelay )
-    {
-    Cancel();
-    delete iPendingContextType; iPendingContextType = 0;
-    iPendingContextType = aContextType.AllocL();
-    delete iPendingContextData; iPendingContextData = 0;
-    iPendingContextData = aContextData.AllocL();
-    delete iPendingContextDataArray; iPendingContextDataArray = 0;
-    After( aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextDelayedL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextDelayedL( const TDesC& aContextType,
-        const MDesCArray& aContextData, TTimeIntervalMicroSeconds32 aDelay )
-    {
-    Cancel();
-    delete iPendingContextType; iPendingContextType = 0;
-    iPendingContextType = aContextType.AllocL();
-    delete iPendingContextData; iPendingContextData = 0;
-    if ( iPendingContextDataArray )
-        {
-        iPendingContextDataArray->Reset();
-        }
-    else
-        {
-        iPendingContextDataArray = new ( ELeave ) CDesC16ArrayFlat( KArrayGranularity );
-        }
-    for ( TInt i = 0, ie = aContextData.MdcaCount(); i != ie; ++i )
-        {
-        iPendingContextDataArray->AppendL( aContextData.MdcaPoint( i ) );
-        }
-    After( aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::RunL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::RunL()
-    {
-    if ( iPendingContextType )
-        {
-        if ( iPendingContextData )
-            {
-            PublishContextL( *iPendingContextType, *iPendingContextData );
-            }
-        else if ( iPendingContextDataArray )
-            {
-            PublishContextL( *iPendingContextType, *iPendingContextDataArray );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::RunError
-// -----------------------------------------------------------------------------
-//
-TInt CHgContextUtilityImpl::RunError( TInt /*aError*/ )
-    {
-    return KErrNone;
-    }
-
-// empty implementations for cfw
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::ContextIndicationL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::ContextIndicationL(
-		const CCFContextIndication& /*aChangedContext*/ )
-	{
-	// empty
-	}
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::ActionIndicationL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::ActionIndicationL(
-		const CCFActionIndication& /*aActionToExecute*/ )
-	{
-	// empty
-	}
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::HandleContextFrameworkError
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::HandleContextFrameworkError( TCFError /*aError*/,
-	    const TDesC& /*aSource*/,
-	    const TDesC& /*aType*/ )
-	{
-	// empty
-	}
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::Extension
-// -----------------------------------------------------------------------------
-//
-TAny* CHgContextUtilityImpl::Extension( const TUid& /*aExtensionUid*/ ) const
-	{
-	return 0;
-	}
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::MakeLinkPublishableLC
-// -----------------------------------------------------------------------------
-//
-HBufC* CHgContextUtilityImpl::MakeLinkPublishableLC(
-        const MVPbkContactLink& aLink )
-    {
-    HBufC* ret = 0;
-    // serialize the link and place it into a 16-bit descriptor
-    // prefixed with one special mark character
-    const MVPbkStreamable* strm = aLink.Streamable();
-    User::LeaveIfNull(strm);
-    CBufFlat* buf = CBufFlat::NewL( KBufGranularity );
-    CleanupStack::PushL( buf );
-    RBufWriteStream ws;
-    CleanupClosePushL( ws );
-    ws.Open( *buf );
-    strm->ExternalizeL( ws );
-    CleanupStack::PopAndDestroy( &ws );
-    TPtr8 p( buf->Ptr( 0 ) );
-    ret = HBufC::NewLC( p.Length() + 1 );
-    TPtr des( ret->Des() );
-    des.Copy( p );
-    _LIT( KTemp, " " );
-    des.Insert( 0, KTemp );
-    des[0] = KHgCFValueLinkMarker; // codescanner::accessArrayElementWithoutCheck2
-    CleanupStack::Pop( ret );
-    CleanupStack::PopAndDestroy( buf );
-    CleanupStack::PushL( ret );
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const MVPbkStoreContact& aContact,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    MVPbkContactLink* link = aContact.CreateLinkLC();
-    if ( link )
-        {
-        HBufC* pubstr = MakeLinkPublishableLC( *link );
-        PublishContactContextL( *pubstr, aDelay );
-        CleanupStack::PopAndDestroy( pubstr );
-        }
-    CleanupStack::PopAndDestroy( );//link
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const MVPbkContactLink& aContactLink,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    HBufC* pubstr = MakeLinkPublishableLC( aContactLink );
-    PublishContactContextL( *pubstr, aDelay );
-    CleanupStack::PopAndDestroy( pubstr );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const TDesC& aContactName,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypeContact, aContactName );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypeContact, aContactName, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const RPointerArray<MVPbkStoreContact>& aContacts,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    CDesCArray* arr = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
-    CleanupStack::PushL( arr );
-    for ( TInt i = 0, ie = aContacts.Count(); i != ie; ++i )
-        {
-        MVPbkContactLink* link = aContacts[i]->CreateLinkLC();
-        if ( link )
-            {
-            HBufC* pubstr = MakeLinkPublishableLC( *link );
-            arr->AppendL( *pubstr );
-            CleanupStack::PopAndDestroy( pubstr );
-            }
-        CleanupStack::PopAndDestroy( );//link
-        }
-    PublishContactContextL( *arr, aDelay );
-    CleanupStack::PopAndDestroy( arr );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const CVPbkContactLinkArray& aContactLinks,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    CDesCArray* arr = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
-    CleanupStack::PushL( arr );
-    for ( TInt i = 0, ie = aContactLinks.Count(); i != ie; ++i )
-        {
-        HBufC* pubstr = MakeLinkPublishableLC( aContactLinks.At( i ) );
-        arr->AppendL( *pubstr );
-        CleanupStack::PopAndDestroy( pubstr );
-        }
-    PublishContactContextL( *arr, aDelay );
-    CleanupStack::PopAndDestroy( arr );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContactContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContactContextL(
-        const MDesCArray& aContactNames,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypeContact, aContactNames );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypeContact, aContactNames, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishTextContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishTextContextL( const TDesC& aText,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypeText, aText );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypeText, aText, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishUrlContextL
-// -----------------------------------------------------------------------------
-//   
-void CHgContextUtilityImpl::PublishUrlContextL( const TDesC& aUrl,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypeUrl, aUrl );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypeUrl, aUrl, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishTimeContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishTimeContextL( const TTime& aTime,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    // YYYYMMDD:HHMMSS.MMMMMM
-    const TInt KDateTimeLength = 22;
-    const TInt KYearLength = 4;
-    const TInt KMonthLength = 2;
-    const TInt KDayLength = 2;
-    _LIT( KTimeZero, ":010101.000000");
-
-    TDateTime dt = aTime.DateTime();
-    TBuf<KDateTimeLength> buf;
-    buf.AppendNumFixedWidth( dt.Year(), EDecimal, KYearLength );
-    buf.AppendNumFixedWidth( dt.Month(), EDecimal, KMonthLength );
-    buf.AppendNumFixedWidth( dt.Day(), EDecimal, KDayLength );
-    buf.Append( KTimeZero );
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypeActiveDate, buf );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypeActiveDate, buf, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishPhotoContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishPhotoContextL(
-        const TDesC& aFilename,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( KHgCFTypePhoto, aFilename );
-        }
-    else
-        {
-        PublishContextDelayedL( KHgCFTypePhoto, aFilename, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishPhotoContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishPhotoContextL(
-        TItemId aMdeItemId,
-        CMdESession& aMdeSession,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    CMdEObject* obj = aMdeSession.GetObjectL( aMdeItemId );
-    if ( obj )
-        {
-        CleanupStack::PushL( obj );
-        PublishPhotoContextL( obj->Uri(), aDelay );
-        CleanupStack::PopAndDestroy( obj );
-        }
-    else
-        {
-        User::Leave( KErrNotFound );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishTvContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishTvContextL( const TDesC& aChannelName,
-        const TDesC& aProgramName, const TDesC& aProgramDescription,
-        const TDesC& aGenre )
-    {
-    TPtrC channelName( aChannelName.Length() ? aChannelName
-        : KHgCFValueUnknownInfo );
-    TPtrC programName( aProgramName.Length() ? aProgramName
-        : KHgCFValueUnknownInfo );
-    TPtrC programDesc( aProgramDescription.Length() ? aProgramDescription
-        : KHgCFValueUnknownInfo );
-    TPtrC programGenre( aGenre.Length() ? aGenre : KHgCFValueUnknownInfo );
-
-    // Publish description/genre first because it is unlikely to have those
-    // in rules so their content will be available for sure when an action
-    // is triggered.
-    PublishContextL( KHgCFTypeTvProgramDesc, programDesc );
-    PublishContextL( KHgCFTypeTvProgramGenre, programGenre );
-    PublishContextL( KHgCFTypeTvChannelName, channelName );
-    PublishContextL( KHgCFTypeTvProgramName, programName );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishServiceIdL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishServiceIdL( const TDesC& aServiceId,
-        const TDesC& aAccountId,
-        const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    HBufC* combinedIdBuf = HBufC::NewLC( aServiceId.Length()
-        + aAccountId.Length() + 1 );
-    TPtr combinedId( combinedIdBuf->Des() );
-    _LIT( KCombinedFormat, "%S:%S" );
-    combinedId.Format( KCombinedFormat, &aServiceId, &aAccountId );
-    PublishContactContextL( combinedId, aDelay );
-    CleanupStack::PopAndDestroy( combinedIdBuf );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::RePublishWhenFgL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::RePublishWhenFgL( TBool aEnable )
-    {
-    if ( iEnv )
-        {
-        if ( iFgWatchEnabled )
-            {
-            iEnv->RemoveForegroundObserver( *this );
-            }
-        iFgWatchEnabled = aEnable;
-        if ( iFgWatchEnabled )
-            {
-            iEnv->AddForegroundObserverL( *this );
-            }
-        }
-    }
-
-// callbacks from CCoeEnv
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::HandleGainingForeground
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::HandleGainingForeground()
-    {
-    if ( iLastContextType && iLastContextData )
-        {
-        TRAP_IGNORE( PublishContextL( *iLastContextType, *iLastContextData ) );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::HandleLosingForeground
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::HandleLosingForeground()
-    {
-    // nothing to do here
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::IsForeground
-// -----------------------------------------------------------------------------
-//
-TBool CHgContextUtilityImpl::IsForeground()
-    {
-    if ( iEnv )
-        {
-        TInt rootWgId = iEnv->RootWin().WindowGroupId();
-        TInt focusWgId = iEnv->WsSession().GetFocusWindowGroup();
-        return rootWgId == focusWgId;
-        }
-    else
-        {
-        return ETrue;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::AllowedToPublish
-// -----------------------------------------------------------------------------
-//
-TBool CHgContextUtilityImpl::AllowedToPublish()
-    {
-    TBool result = !iEnv || iAllowPublishFromBackground || IsForeground();
-    RDebug::Printf( "[hgctxutil] AllowedToPublish = %d", result );
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::AllowPublishFromBackground
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::AllowPublishFromBackground( TBool aAllow )
-    {
-    iAllowPublishFromBackground = aAllow;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::AddMusicContextInfoL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::AddMusicContextInfoL( 
-    const TDesC& aKey, const TDesC& aData )
-    {   
-    // Key needs to be provided and also it shouldn't exist in the table.
-    // Latter case is simple safe measure, as RPtrHasMap won't delete existing
-    // objects in InsertL, so adding same key twice would cause memory leak.
-    // The use case of adding same key twice is not 'real world' case, so 
-    // this method can simply leave, when same key is offered again.
-    __ASSERT_ALWAYS( aKey.Length(), User::Leave( KErrNotFound ) );
-    __ASSERT_ALWAYS( 
-        !iMusicContextInfo.Find( aKey ), User::Leave( KErrAlreadyExists ) );
-    
-    // Hash table needs pointers and it should own the pointers, so allocate
-    // key and data, and add them to table. In case the data is empty, add
-    // unknown information, since some data needs to be in the action field.
-    HBufC* key = aKey.AllocLC();
-    HBufC* data = aData.Length() ? 
-        aData.AllocLC() : KHgCFValueUnknownInfo().AllocLC();
-    iMusicContextInfo.InsertL( key, data );
-    CleanupStack::Pop( 2, key );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishMusicContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishMusicContextL( 
-    const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    // If nothing has been done, just leave. No point of publishing entirely
-    // empty music context.
-    __ASSERT_ALWAYS( iMusicContextInfo.Count(), User::Leave( KErrNotReady ) );    
-    
-    // Before publishing anything, make sure all keys contain at least some
-    // data.
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicState, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicArtist, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicTitle, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicAlbum, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicAlbumArt, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicUri, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicGenre, aDelay );
-    VerifyAndPublishMusicContextL( KHgCFTypeMusicType, aDelay );
-    
-    // Clear all data from hash table, so new music context can be published.
-    iMusicContextInfo.ResetAndDestroy();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::VerifyAndPublishMusicContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::VerifyAndPublishMusicContextL( 
-    const TDesC& aKey,
-    const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    TDesC* data = iMusicContextInfo.Find( aKey );
-    if ( !data )
-        {
-        // Key didn't contain any data, just create the key with empty info.
-        AddMusicContextInfoL( aKey, KNullDesC );
-        data = iMusicContextInfo.Find( aKey );
-        }
-    
-    PublishContextL( aKey, *data, aDelay );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishContextL(
-    const TDesC & aContextType, 
-    const TDesC & aContextData, 
-    const TTimeIntervalMicroSeconds32& aDelay )
-    {
-    if ( !aDelay.Int() )
-        {
-        PublishContextL( aContextType, aContextData );
-        }
-    else
-        {
-        PublishContextDelayedL( aContextType, aContextData, aDelay );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgContextUtilityImpl::PublishRadioContextL
-// -----------------------------------------------------------------------------
-//
-void CHgContextUtilityImpl::PublishRadioContextL( 
-        const TDesC& aRadioName,
-        const TDesC& aRadioUrl,
-        const TDesC& aRadioFrequency,
-        const TDesC& aRadioRDSPI )
-    {
-    TPtrC radioName( aRadioName.Length() ? aRadioName
-        : KHgCFValueUnknownInfo );
-    TPtrC radioUrl( aRadioUrl.Length() ? aRadioUrl
-        : KHgCFValueUnknownInfo );
-    TPtrC radioFrequency( aRadioFrequency.Length() ? aRadioFrequency
-        : KHgCFValueUnknownInfo );
-    TPtrC radioRDSPI( aRadioRDSPI.Length() ? aRadioRDSPI
-        : KHgCFValueUnknownInfo );
-
-    PublishContextL( KHgCFTypeMusicRadioRDSPI, radioRDSPI );
-    PublishContextL( KHgCFTypeMusicRadioFrequency, radioFrequency );
-    PublishContextL( KHgCFTypeMusicRadioUrl, radioUrl );
-    PublishContextL( KHgCFTypeMusicRadioName, radioName );
-    }
-
-// end of file
Binary file homescreenpluginsrv/conf/hsps.confml has changed
Binary file homescreenpluginsrv/conf/hsps_200159c9.crml has changed
--- a/homescreenpluginsrv/hspsmanager/bwins/hspsclientsessionu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/bwins/hspsclientsessionu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,28 +1,28 @@
 EXPORTS
-	?GetListHeaders@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@0@Z @ 1 NONAME ; int RhspsClientSession::GetListHeaders(class TDes8 &, class TDesC8 const &, class TDes8 &)
-	?CancelRequest@RhspsClientSession@@IAEXHAAVTDes8@@H@Z @ 2 NONAME ; void RhspsClientSession::CancelRequest(int, class TDes8 &, int)
-	?SetConfState@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamSetConfState@@@Z @ 3 NONAME ; int RhspsClientSession::SetConfState(class TDes8 &, struct ThspsParamSetConfState const &)
-	?CopyResourceFiles@RhspsClientSession@@IAEHAAVTDes8@@AAVTDesC16@@1@Z @ 4 NONAME ; int RhspsClientSession::CopyResourceFiles(class TDes8 &, class TDesC16 &, class TDesC16 &)
-	?Connect@RhspsClientSession@@IAEHXZ @ 5 NONAME ; int RhspsClientSession::Connect(void)
-	?GetODT@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsConfiguration@@ABVTDesC8@@AAVTDes16@@@Z @ 6 NONAME ; int RhspsClientSession::GetODT(class TDes8 &, struct ThspsConfiguration const &, class TDesC8 const &, class TDes16 &)
+	?CancelRequest@RhspsClientSession@@IAEXHAAVTDes8@@H@Z @ 1 NONAME ; void RhspsClientSession::CancelRequest(int, class TDes8 &, int)
+	?SetConfState@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamSetConfState@@@Z @ 2 NONAME ; int RhspsClientSession::SetConfState(class TDes8 &, struct ThspsParamSetConfState const &)
+	?CopyResourceFiles@RhspsClientSession@@IAEHAAVTDes8@@AAVTDesC16@@1@Z @ 3 NONAME ; int RhspsClientSession::CopyResourceFiles(class TDes8 &, class TDesC16 &, class TDesC16 &)
+	?Connect@RhspsClientSession@@IAEHXZ @ 4 NONAME ; int RhspsClientSession::Connect(void)
+	?GetODT@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsConfiguration@@ABVTDesC8@@AAVTDes16@@@Z @ 5 NONAME ; int RhspsClientSession::GetODT(class TDes8 &, struct ThspsConfiguration const &, class TDesC8 const &, class TDes16 &)
+	?GetListHeaders@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@H0@Z @ 6 NONAME ; int RhspsClientSession::GetListHeaders(class TDes8 &, class TDesC8 const &, int, class TDes8 &)
 	?MovePlugins@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamMovePlugins@@@Z @ 7 NONAME ; int RhspsClientSession::MovePlugins(class TDes8 &, struct ThpsParamMovePlugins const &)
 	?SetActiveTheme@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@0@Z @ 8 NONAME ; int RhspsClientSession::SetActiveTheme(class TDes8 &, class TDesC8 const &, class TDes8 &)
 	?SetActivePlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamSetActivePlugin@@@Z @ 9 NONAME ; int RhspsClientSession::SetActivePlugin(class TDes8 &, struct ThpsParamSetActivePlugin const &)
-	?ReplacePlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamReplacePlugin@@@Z @ 10 NONAME ; int RhspsClientSession::ReplacePlugin(class TDes8 &, struct ThspsParamReplacePlugin const &)
-	?InstallNextPhase@RhspsClientSession@@IAEXAAVTDes8@@0AAVTRequestStatus@@@Z @ 11 NONAME ; void RhspsClientSession::InstallNextPhase(class TDes8 &, class TDes8 &, class TRequestStatus &)
-	?SetPluginSettings@RhspsClientSession@@IAEHAAVTDes8@@0UThspsParamSetPluginSettings@@0@Z @ 12 NONAME ; int RhspsClientSession::SetPluginSettings(class TDes8 &, class TDes8 &, struct ThspsParamSetPluginSettings, class TDes8 &)
-	?RemovePlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamRemovePlugin@@@Z @ 13 NONAME ; int RhspsClientSession::RemovePlugin(class TDes8 &, struct ThpsParamRemovePlugin const &)
-	?GetNextHeader@RhspsClientSession@@IAEXAAVTDes8@@0AAVTRequestStatus@@@Z @ 14 NONAME ; void RhspsClientSession::GetNextHeader(class TDes8 &, class TDes8 &, class TRequestStatus &)
-	?RemoveTheme@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@@Z @ 15 NONAME ; int RhspsClientSession::RemoveTheme(class TDes8 &, class TDesC8 const &)
-	?AddPlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamAddPlugin@@AAH@Z @ 16 NONAME ; int RhspsClientSession::AddPlugin(class TDes8 &, struct ThpsParamAddPlugin const &, int &)
-	?Close@RhspsClientSession@@IAEXXZ @ 17 NONAME ; void RhspsClientSession::Close(void)
-	?GetPluginOdt@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamGetPluginOdt@@AAVTDes16@@@Z @ 18 NONAME ; int RhspsClientSession::GetPluginOdt(class TDes8 &, struct ThspsParamGetPluginOdt const &, class TDes16 &)
-	?RestoreDefault@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@0@Z @ 19 NONAME ; int RhspsClientSession::RestoreDefault(class TDes8 &, class TDesC8 const &, class TDes8 &)
-	?GetNextHeader@RhspsClientSession@@IAEHAAVTDes8@@0@Z @ 20 NONAME ; int RhspsClientSession::GetNextHeader(class TDes8 &, class TDes8 &)
-	?RestoreActiveAppConf@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamRestoreActiveAppConf@@@Z @ 21 NONAME ; int RhspsClientSession::RestoreActiveAppConf(class TDes8 &, struct ThspsParamRestoreActiveAppConf const &)
-	?InstallTheme@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC16@@0@Z @ 22 NONAME ; int RhspsClientSession::InstallTheme(class TDes8 &, class TDesC16 const &, class TDes8 &)
-	?AccessResourceFile@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsConfiguration@@ABVTDesC16@@AAH@Z @ 23 NONAME ; int RhspsClientSession::AccessResourceFile(class TDes8 &, struct ThspsConfiguration const &, class TDesC16 const &, int &)
-	?GetODTUpdate@RhspsClientSession@@IAEXAAVTDes8@@00AAVTRequestStatus@@@Z @ 24 NONAME ; void RhspsClientSession::GetODTUpdate(class TDes8 &, class TDes8 &, class TDes8 &, class TRequestStatus &)
-	?ReinstallConf@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamReinstallConf@@@Z @ 25 NONAME ; int RhspsClientSession::ReinstallConf(class TDes8 &, struct ThspsParamReinstallConf const &)
-	?RestoreConfigurations@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamRestoreConfigurations@@@Z @ 26 NONAME ; int RhspsClientSession::RestoreConfigurations(class TDes8 &, struct ThspsParamRestoreConfigurations const &)
+	?RestoreConfigurations@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamRestoreConfigurations@@@Z @ 10 NONAME ; int RhspsClientSession::RestoreConfigurations(class TDes8 &, struct ThspsParamRestoreConfigurations const &)
+	?ReplacePlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamReplacePlugin@@@Z @ 11 NONAME ; int RhspsClientSession::ReplacePlugin(class TDes8 &, struct ThspsParamReplacePlugin const &)
+	?InstallNextPhase@RhspsClientSession@@IAEXAAVTDes8@@0AAVTRequestStatus@@@Z @ 12 NONAME ; void RhspsClientSession::InstallNextPhase(class TDes8 &, class TDes8 &, class TRequestStatus &)
+	?SetPluginSettings@RhspsClientSession@@IAEHAAVTDes8@@0UThspsParamSetPluginSettings@@0@Z @ 13 NONAME ; int RhspsClientSession::SetPluginSettings(class TDes8 &, class TDes8 &, struct ThspsParamSetPluginSettings, class TDes8 &)
+	?RemovePlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamRemovePlugin@@@Z @ 14 NONAME ; int RhspsClientSession::RemovePlugin(class TDes8 &, struct ThpsParamRemovePlugin const &)
+	?GetNextHeader@RhspsClientSession@@IAEXAAVTDes8@@0AAVTRequestStatus@@@Z @ 15 NONAME ; void RhspsClientSession::GetNextHeader(class TDes8 &, class TDes8 &, class TRequestStatus &)
+	?RemoveTheme@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@@Z @ 16 NONAME ; int RhspsClientSession::RemoveTheme(class TDes8 &, class TDesC8 const &)
+	?AddPlugin@RhspsClientSession@@IAEHAAVTDes8@@ABUThpsParamAddPlugin@@AAH@Z @ 17 NONAME ; int RhspsClientSession::AddPlugin(class TDes8 &, struct ThpsParamAddPlugin const &, int &)
+	?Close@RhspsClientSession@@IAEXXZ @ 18 NONAME ; void RhspsClientSession::Close(void)
+	?GetPluginOdt@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamGetPluginOdt@@AAVTDes16@@@Z @ 19 NONAME ; int RhspsClientSession::GetPluginOdt(class TDes8 &, struct ThspsParamGetPluginOdt const &, class TDes16 &)
+	?RestoreDefault@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC8@@0@Z @ 20 NONAME ; int RhspsClientSession::RestoreDefault(class TDes8 &, class TDesC8 const &, class TDes8 &)
+	?GetNextHeader@RhspsClientSession@@IAEHAAVTDes8@@0@Z @ 21 NONAME ; int RhspsClientSession::GetNextHeader(class TDes8 &, class TDes8 &)
+	?RestoreActiveAppConf@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamRestoreActiveAppConf@@@Z @ 22 NONAME ; int RhspsClientSession::RestoreActiveAppConf(class TDes8 &, struct ThspsParamRestoreActiveAppConf const &)
+	?InstallTheme@RhspsClientSession@@IAEHAAVTDes8@@ABVTDesC16@@0@Z @ 23 NONAME ; int RhspsClientSession::InstallTheme(class TDes8 &, class TDesC16 const &, class TDes8 &)
+	?AccessResourceFile@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsConfiguration@@ABVTDesC16@@AAH@Z @ 24 NONAME ; int RhspsClientSession::AccessResourceFile(class TDes8 &, struct ThspsConfiguration const &, class TDesC16 const &, int &)
+	?GetODTUpdate@RhspsClientSession@@IAEXAAVTDes8@@00AAVTRequestStatus@@@Z @ 25 NONAME ; void RhspsClientSession::GetODTUpdate(class TDes8 &, class TDes8 &, class TDes8 &, class TRequestStatus &)
+	?ReinstallConf@RhspsClientSession@@IAEHAAVTDes8@@ABUThspsParamReinstallConf@@@Z @ 26 NONAME ; int RhspsClientSession::ReinstallConf(class TDes8 &, struct ThspsParamReinstallConf const &)
 
--- a/homescreenpluginsrv/hspsmanager/bwins/hspsclientu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/bwins/hspsclientu.def	Wed May 12 13:35:37 2010 +0300
@@ -8,9 +8,9 @@
 	?GethspsResult@ChspsClient@@QAEXAAVChspsResult@@@Z @ 7 NONAME ; void ChspsClient::GethspsResult(class ChspsResult &)
 	?NewLC@ChspsClient@@SAPAV1@AAVMhspsThemeManagementServiceObserver@@@Z @ 8 NONAME ; class ChspsClient * ChspsClient::NewLC(class MhspsThemeManagementServiceObserver &)
 	?hspsInstallTheme@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVTDesC16@@AAVChspsODT@@@Z @ 9 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsInstallTheme(class TDesC16 const &, class ChspsODT &)
-	?hspsGetHeaders@ChspsClient@@QAEHABVChspsODT@@AAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 10 NONAME ; int ChspsClient::hspsGetHeaders(class ChspsODT const &, class CArrayPtrFlat<class ChspsODT> &)
-	?hspsReinstallConf@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 11 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsReinstallConf(int, int)
-	?hspsRestoreDefault@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@AAV3@@Z @ 12 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreDefault(class ChspsODT const &, class ChspsODT &)
+	?hspsReinstallConf@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 10 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsReinstallConf(int, int)
+	?hspsRestoreDefault@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@AAV3@@Z @ 11 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreDefault(class ChspsODT const &, class ChspsODT &)
+	?hspsRestoreConfigurations@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 12 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreConfigurations(int, int)
 	?hspsReplacePlugin@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HHH@Z @ 13 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsReplacePlugin(int, int, int)
 	?hspsSetActiveTheme@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@AAV3@@Z @ 14 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsSetActiveTheme(class ChspsODT const &, class ChspsODT &)
 	?hspsPluginUpdateL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@@Z @ 15 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsPluginUpdateL(class ChspsODT const &)
@@ -22,11 +22,11 @@
 	?hspsSetActivePlugin@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 21 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsSetActivePlugin(int, int)
 	?hspsCancelInstallTheme@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@XZ @ 22 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsCancelInstallTheme(void)
 	?hspsGetNextHeader@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@XZ @ 23 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetNextHeader(void)
-	?hspsSetActiveTheme@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVTDesC8@@AAVTDes8@@@Z @ 24 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsSetActiveTheme(class TDesC8 const &, class TDes8 &)
-	?hspsGetPluginOdtL@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HHPAVChspsODT@@@Z @ 25 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetPluginOdtL(int, int, class ChspsODT *)
-	?hspsRestoreActiveAppConf@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 26 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreActiveAppConf(int, int)
-	?hspsMovePluginsL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HHABV?$CArrayFixFlat@H@@@Z @ 27 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsMovePluginsL(int, int, class CArrayFixFlat<int> const &)
-	?hspsGetListHeaders@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@AAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 28 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders(class ChspsODT const &, class CArrayPtrFlat<class ChspsODT> &)
-	?hspsRemoveThemeL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@@Z @ 29 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRemoveThemeL(class ChspsODT const &)
-	?hspsRestoreConfigurations@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 30 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreConfigurations(int, int)
+	?hspsGetListHeaders@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@HAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 24 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders(class ChspsODT const &, int, class CArrayPtrFlat<class ChspsODT> &)
+	?hspsSetActiveTheme@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVTDesC8@@AAVTDes8@@@Z @ 25 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsSetActiveTheme(class TDesC8 const &, class TDes8 &)
+	?hspsGetPluginOdtL@ChspsClient@@QAE?AW4ThspsServiceCompletedMessage@@HHPAVChspsODT@@@Z @ 26 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetPluginOdtL(int, int, class ChspsODT *)
+	?hspsRestoreActiveAppConf@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HH@Z @ 27 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRestoreActiveAppConf(int, int)
+	?hspsMovePluginsL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@HHABV?$CArrayFixFlat@H@@@Z @ 28 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsMovePluginsL(int, int, class CArrayFixFlat<int> const &)
+	?hspsGetHeaders@ChspsClient@@QAEHABVChspsODT@@HAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 29 NONAME ; int ChspsClient::hspsGetHeaders(class ChspsODT const &, int, class CArrayPtrFlat<class ChspsODT> &)
+	?hspsRemoveThemeL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@@Z @ 30 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRemoveThemeL(class ChspsODT const &)
 
--- a/homescreenpluginsrv/hspsmanager/client/hspsclient.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/client/hspsclient.cpp	Wed May 12 13:35:37 2010 +0300
@@ -236,8 +236,10 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-EXPORT_C ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders( const ChspsODT& aSearchMask, 
-                                CArrayPtrFlat<ChspsODT>& aHeaderList )
+EXPORT_C ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders( 
+        const ChspsODT& aSearchMask,
+        const TBool aCopyLogos,
+        CArrayPtrFlat<ChspsODT>& aHeaderList )
     {
     ThspsServiceCompletedMessage ret = EhspsServiceRequestError; 
     TBuf8<KMaxHeaderDataLength8> headerData;
@@ -263,8 +265,11 @@
             // cancel previous subscription first
             hspsCancelGetListHeaders();
             }        
-        ret = (ThspsServiceCompletedMessage)iSession.GetListHeaders(iResultData, 
-                                                             iSearchMaskData->Des(),headerData );
+        ret = (ThspsServiceCompletedMessage)iSession.GetListHeaders(
+                iResultData, 
+                iSearchMaskData->Des(),
+                aCopyLogos,
+                headerData );
 
 #ifdef HSPS_LOG_ACTIVE
         if( iLogBus )
@@ -534,8 +539,10 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-EXPORT_C TInt ChspsClient::hspsGetHeaders( const ChspsODT& aSearchMask, 
-                                CArrayPtrFlat<ChspsODT>& aHeaderList )
+EXPORT_C TInt ChspsClient::hspsGetHeaders( 
+        const ChspsODT& aSearchMask,
+        const TBool aCopyLogos,
+        CArrayPtrFlat<ChspsODT>& aHeaderList )
     {
     iHeaderList = &aHeaderList;
     // Convert search mask ODT to binary stream
@@ -553,6 +560,7 @@
             ( ThspsServiceCompletedMessage )iSession.GetListHeaders(
                 iResultData, 
                 iSearchMaskData->Des(),
+                aCopyLogos,
                 iHeaderData );
                 
         if ( ret == EhspsGetListHeadersSuccess )
--- a/homescreenpluginsrv/hspsmanager/client/hspsclientsession.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/client/hspsclientsession.cpp	Wed May 12 13:35:37 2010 +0300
@@ -153,11 +153,13 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C TInt RhspsClientSession::GetListHeaders(TDes8& aResultData, const TDesC8& aSearchMaskData,
-                         TDes8& aHeaderData)
+                         const TBool aCopyLogos, TDes8& aHeaderData)
     {
     aHeaderData.Zero();
     aResultData.Zero();
-    return SendReceive(EhspsGetListHeaders, TIpcArgs(&aResultData, &aSearchMaskData, &aHeaderData));  
+    TPckg<TInt> intPkg( aCopyLogos );
+    return SendReceive( EhspsGetListHeaders, 
+            TIpcArgs(&aResultData, &aSearchMaskData, &aHeaderData, &intPkg) );  
     } 
   
 // -----------------------------------------------------------------------------
--- a/homescreenpluginsrv/hspsmanager/eabi/hspsclientsessionu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/eabi/hspsclientsessionu.def	Wed May 12 13:35:37 2010 +0300
@@ -11,7 +11,7 @@
 	_ZN18RhspsClientSession13GetNextHeaderER5TDes8S1_R14TRequestStatus @ 10 NONAME
 	_ZN18RhspsClientSession13ReinstallConfER5TDes8RK23ThspsParamReinstallConf @ 11 NONAME
 	_ZN18RhspsClientSession13ReplacePluginER5TDes8RK23ThspsParamReplacePlugin @ 12 NONAME
-	_ZN18RhspsClientSession14GetListHeadersER5TDes8RK6TDesC8S1_ @ 13 NONAME
+	_ZN18RhspsClientSession14GetListHeadersER5TDes8RK6TDesC8iS1_ @ 13 NONAME
 	_ZN18RhspsClientSession14RestoreDefaultER5TDes8RK6TDesC8S1_ @ 14 NONAME
 	_ZN18RhspsClientSession14SetActiveThemeER5TDes8RK6TDesC8S1_ @ 15 NONAME
 	_ZN18RhspsClientSession15SetActivePluginER5TDes8RK24ThpsParamSetActivePlugin @ 16 NONAME
@@ -20,9 +20,9 @@
 	_ZN18RhspsClientSession17SetPluginSettingsER5TDes8S1_27ThspsParamSetPluginSettingsS1_ @ 19 NONAME
 	_ZN18RhspsClientSession18AccessResourceFileER5TDes8RK18ThspsConfigurationRK7TDesC16Ri @ 20 NONAME
 	_ZN18RhspsClientSession20RestoreActiveAppConfER5TDes8RK30ThspsParamRestoreActiveAppConf @ 21 NONAME
-	_ZN18RhspsClientSession5CloseEv @ 22 NONAME
-	_ZN18RhspsClientSession6GetODTER5TDes8RK18ThspsConfigurationRK6TDesC8R6TDes16 @ 23 NONAME
-	_ZN18RhspsClientSession7ConnectEv @ 24 NONAME
-	_ZN18RhspsClientSession9AddPluginER5TDes8RK18ThpsParamAddPluginRi @ 25 NONAME
-	_ZN18RhspsClientSession21RestoreConfigurationsER5TDes8RK31ThspsParamRestoreConfigurations @ 26 NONAME
+	_ZN18RhspsClientSession21RestoreConfigurationsER5TDes8RK31ThspsParamRestoreConfigurations @ 22 NONAME
+	_ZN18RhspsClientSession5CloseEv @ 23 NONAME
+	_ZN18RhspsClientSession6GetODTER5TDes8RK18ThspsConfigurationRK6TDesC8R6TDes16 @ 24 NONAME
+	_ZN18RhspsClientSession7ConnectEv @ 25 NONAME
+	_ZN18RhspsClientSession9AddPluginER5TDes8RK18ThpsParamAddPluginRi @ 26 NONAME
 
--- a/homescreenpluginsrv/hspsmanager/eabi/hspsclientu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/eabi/hspsclientu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,7 +1,7 @@
 EXPORTS
 	_ZN11ChspsClient13GethspsResultER11ChspsResult @ 1 NONAME
 	_ZN11ChspsClient13hspsAddPluginEiiiiRi @ 2 NONAME
-	_ZN11ChspsClient14hspsGetHeadersERK8ChspsODTR13CArrayPtrFlatIS0_E @ 3 NONAME
+	_ZN11ChspsClient14hspsGetHeadersERK8ChspsODTiR13CArrayPtrFlatIS0_E @ 3 NONAME
 	_ZN11ChspsClient16hspsInstallThemeERK7TDesC16R5TDes8 @ 4 NONAME
 	_ZN11ChspsClient16hspsInstallThemeERK7TDesC16R8ChspsODT @ 5 NONAME
 	_ZN11ChspsClient16hspsMovePluginsLEiiRK13CArrayFixFlatIiE @ 6 NONAME
@@ -14,7 +14,7 @@
 	_ZN11ChspsClient17hspsReinstallConfEii @ 13 NONAME
 	_ZN11ChspsClient17hspsReplacePluginEiii @ 14 NONAME
 	_ZN11ChspsClient18hspsGetListHeadersERK6TDesC8R12CArrayPtrSegI6HBufC8E @ 15 NONAME
-	_ZN11ChspsClient18hspsGetListHeadersERK8ChspsODTR13CArrayPtrFlatIS0_E @ 16 NONAME
+	_ZN11ChspsClient18hspsGetListHeadersERK8ChspsODTiR13CArrayPtrFlatIS0_E @ 16 NONAME
 	_ZN11ChspsClient18hspsRestoreDefaultERK8ChspsODTRS0_ @ 17 NONAME
 	_ZN11ChspsClient18hspsSetActiveThemeERK6TDesC8R5TDes8 @ 18 NONAME
 	_ZN11ChspsClient18hspsSetActiveThemeERK8ChspsODTRS0_ @ 19 NONAME
@@ -25,32 +25,32 @@
 	_ZN11ChspsClient22hspsCancelInstallThemeEv @ 24 NONAME
 	_ZN11ChspsClient24hspsCancelGetListHeadersEv @ 25 NONAME
 	_ZN11ChspsClient24hspsRestoreActiveAppConfEii @ 26 NONAME
-	_ZN11ChspsClient4NewLER35MhspsThemeManagementServiceObserver @ 27 NONAME
-	_ZN11ChspsClient5NewLCER35MhspsThemeManagementServiceObserver @ 28 NONAME
-	_ZN11ChspsClient9SetLogBusEPv @ 29 NONAME
-	_ZTI11ChspsClient @ 30 NONAME
-	_ZTV11ChspsClient @ 31 NONAME
-	_ZThn28_N11ChspsClient16hspsInstallThemeERK7TDesC16R5TDes8 @ 32 NONAME
-	_ZThn28_N11ChspsClient16hspsInstallThemeERK7TDesC16R8ChspsODT @ 33 NONAME
-	_ZThn28_N11ChspsClient21hspsInstallNextPhaseLER5TDes8 @ 34 NONAME
-	_ZThn28_N11ChspsClient21hspsInstallNextPhaseLER8ChspsODT @ 35 NONAME
-	_ZThn28_N11ChspsClient22hspsCancelInstallThemeEv @ 36 NONAME
-	_ZThn32_N11ChspsClient13hspsAddPluginEiiiiRi @ 37 NONAME
-	_ZThn32_N11ChspsClient16hspsMovePluginsLEiiRK13CArrayFixFlatIiE @ 38 NONAME
-	_ZThn32_N11ChspsClient16hspsRemovePluginEii @ 39 NONAME
-	_ZThn32_N11ChspsClient16hspsRemoveThemeLERK8ChspsODT @ 40 NONAME
-	_ZThn32_N11ChspsClient16hspsSetConfStateEii23ThspsConfigurationState26ThspsConfStateChangeFilter @ 41 NONAME
-	_ZThn32_N11ChspsClient17hspsGetNextHeaderEv @ 42 NONAME
-	_ZThn32_N11ChspsClient17hspsPluginUpdateLERK8ChspsODT @ 43 NONAME
-	_ZThn32_N11ChspsClient17hspsReplacePluginEiii @ 44 NONAME
-	_ZThn32_N11ChspsClient18hspsGetListHeadersERK6TDesC8R12CArrayPtrSegI6HBufC8E @ 45 NONAME
-	_ZThn32_N11ChspsClient18hspsGetListHeadersERK8ChspsODTR13CArrayPtrFlatIS0_E @ 46 NONAME
-	_ZThn32_N11ChspsClient18hspsRestoreDefaultERK8ChspsODTRS0_ @ 47 NONAME
-	_ZThn32_N11ChspsClient18hspsSetActiveThemeERK6TDesC8R5TDes8 @ 48 NONAME
-	_ZThn32_N11ChspsClient18hspsSetActiveThemeERK8ChspsODTRS0_ @ 49 NONAME
-	_ZThn32_N11ChspsClient19hspsSetActivePluginEii @ 50 NONAME
-	_ZThn32_N11ChspsClient21hspsSetPluginSettingsERK8ChspsODTiR16ChspsDomDocumenti @ 51 NONAME
-	_ZThn32_N11ChspsClient24hspsCancelGetListHeadersEv @ 52 NONAME
-	_ZThn32_N11ChspsClient24hspsRestoreActiveAppConfEii @ 53 NONAME
-	_ZN11ChspsClient25hspsRestoreConfigurationsEii @ 54 NONAME
+	_ZN11ChspsClient25hspsRestoreConfigurationsEii @ 27 NONAME
+	_ZN11ChspsClient4NewLER35MhspsThemeManagementServiceObserver @ 28 NONAME
+	_ZN11ChspsClient5NewLCER35MhspsThemeManagementServiceObserver @ 29 NONAME
+	_ZN11ChspsClient9SetLogBusEPv @ 30 NONAME
+	_ZTI11ChspsClient @ 31 NONAME
+	_ZTV11ChspsClient @ 32 NONAME
+	_ZThn28_N11ChspsClient16hspsInstallThemeERK7TDesC16R5TDes8 @ 33 NONAME
+	_ZThn28_N11ChspsClient16hspsInstallThemeERK7TDesC16R8ChspsODT @ 34 NONAME
+	_ZThn28_N11ChspsClient21hspsInstallNextPhaseLER5TDes8 @ 35 NONAME
+	_ZThn28_N11ChspsClient21hspsInstallNextPhaseLER8ChspsODT @ 36 NONAME
+	_ZThn28_N11ChspsClient22hspsCancelInstallThemeEv @ 37 NONAME
+	_ZThn32_N11ChspsClient13hspsAddPluginEiiiiRi @ 38 NONAME
+	_ZThn32_N11ChspsClient16hspsMovePluginsLEiiRK13CArrayFixFlatIiE @ 39 NONAME
+	_ZThn32_N11ChspsClient16hspsRemovePluginEii @ 40 NONAME
+	_ZThn32_N11ChspsClient16hspsRemoveThemeLERK8ChspsODT @ 41 NONAME
+	_ZThn32_N11ChspsClient16hspsSetConfStateEii23ThspsConfigurationState26ThspsConfStateChangeFilter @ 42 NONAME
+	_ZThn32_N11ChspsClient17hspsGetNextHeaderEv @ 43 NONAME
+	_ZThn32_N11ChspsClient17hspsPluginUpdateLERK8ChspsODT @ 44 NONAME
+	_ZThn32_N11ChspsClient17hspsReplacePluginEiii @ 45 NONAME
+	_ZThn32_N11ChspsClient18hspsGetListHeadersERK6TDesC8R12CArrayPtrSegI6HBufC8E @ 46 NONAME
+	_ZThn32_N11ChspsClient18hspsGetListHeadersERK8ChspsODTiR13CArrayPtrFlatIS0_E @ 47 NONAME
+	_ZThn32_N11ChspsClient18hspsRestoreDefaultERK8ChspsODTRS0_ @ 48 NONAME
+	_ZThn32_N11ChspsClient18hspsSetActiveThemeERK6TDesC8R5TDes8 @ 49 NONAME
+	_ZThn32_N11ChspsClient18hspsSetActiveThemeERK8ChspsODTRS0_ @ 50 NONAME
+	_ZThn32_N11ChspsClient19hspsSetActivePluginEii @ 51 NONAME
+	_ZThn32_N11ChspsClient21hspsSetPluginSettingsERK8ChspsODTiR16ChspsDomDocumenti @ 52 NONAME
+	_ZThn32_N11ChspsClient24hspsCancelGetListHeadersEv @ 53 NONAME
+	_ZThn32_N11ChspsClient24hspsRestoreActiveAppConfEii @ 54 NONAME
 
--- a/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp	Wed May 12 13:35:37 2010 +0300
@@ -52,6 +52,7 @@
 SOURCE          hspsbrobserver.cpp
 SOURCE          hspsbrhandler.cpp
 SOURCE          hspsinstaller.cpp
+SOURCE          hspsfamily.cpp
 #if defined(WINSCW) || defined(__WINS__) 
 SOURCE          hspsfamilylistener.cpp
 #endif
@@ -82,16 +83,13 @@
 LIBRARY     hspsdefinitionengineinterface.lib
 LIBRARY     ecom.lib // definition engine
 LIBRARY     MemMan.lib
+LIBRARY     ws32.lib    // RWsSession
 
 #ifdef _hsps_DEBUG_
 LIBRARY     flogger.lib
 #endif // _hsps_DEBUG_
 LIBRARY     sysversioninfo.lib
 LIBRARY     abclient.lib
-#if defined(WINSCW) || defined(__WINS__)
-LIBRARY     ws32.lib	// RWsSession
-LIBRARY     featmgr.lib // FeatureManager
-#endif // defined(WINSCW)
 
 LANG      SC
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsfamily.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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:
+*
+*
+*/
+
+#ifndef HSPSFAMILY_H_
+#define HSPSFAMILY_H_
+
+#include <e32base.h>
+#include <w32std.h>
+
+#include "hspsthememanagement.h"
+
+
+
+/**
+*  @ingroup group_hspsserver
+*  ChspsFamily is used to get UI's resolution and orientation.
+*
+*  @lib hspsThemeServer.exe 
+*  @since S60 9.2
+*/
+class ChspsFamily
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * NewL
+        * Two-phased constructor.
+        */
+        static ChspsFamily* NewL();
+        
+        /**
+        * ~ChspsFamilyListener
+        * Destructor.
+        */
+        virtual ~ChspsFamily();
+        
+        /**
+         * Retrieves family type from a string
+         * @since S60 9.2 
+         */
+        static ThspsFamily GetFamilyType( 
+                const TDesC8& aFamilyString );
+        
+        /**
+         * Retrieves family type from the current resolution.
+         * @since S60 5.0
+         * @return Family id
+         */
+        ThspsFamily GetFamilyType();
+
+        /**
+         * Retrieves window server session
+         * @since S60 9.2
+         * @return Window server session
+         */
+        inline RWsSession& WsSession();
+        
+    protected:
+
+        /**
+        * ConstructL
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+    protected:
+        /**
+        * C++ default constructor.
+        */
+        ChspsFamily();
+        
+        
+        /**
+         * Retrieves used display code.
+         */
+        void GetFamilyString(        
+                TDes8& aFamily );                
+        
+    private:    // Data
+        
+        // Window server session.
+        RWsSession iWsSession;   
+        
+        // Client-side handle to a server-side window group.
+        RWindowGroup iWindowGroup;
+        
+        // Screen device, own.
+        CWsScreenDevice* iScreenDevice;
+        
+    };
+
+
+// Inline methods
+
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::WsSession
+// -----------------------------------------------------------------------------
+//
+RWsSession& ChspsFamily::WsSession()
+	{
+	return iWsSession;
+	}
+
+
+
+#endif /* HSPSFAMILY_H_ */
+
+// End of File
--- a/homescreenpluginsrv/hspsmanager/inc/hspsfamilylistener.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsfamilylistener.h	Wed May 12 13:35:37 2010 +0300
@@ -24,12 +24,9 @@
 #ifndef HSPSFAMILYLISTENER_H_
 #define HSPSFAMILYLISTENER_H_
 
-#include <e32base.h>
-#include <w32std.h>
+#include "hspsfamily.h"
 
-#include "hspsthememanagement.h"
-
-
+class ChspsFamilyListener;
 /**
  * @ingroup group_hspsserver  
  * HandleFamilyChangeL.
@@ -47,45 +44,44 @@
         virtual TBool HandleFamilyChangeL( const ThspsFamily aNewFamily ) = 0;
     };
 
-/**
-*  @ingroup group_hspsserver
-*  ChspsFamilyListener is used to listen to the changes in UI's resolution and orientation.
-*  Used on emulator environment only. 
-*
-*  @lib hspsThemeServer.exe 
-*  @since S60 5.0
-*/
-class ChspsFamilyListener : public CActive
-    {
+
+class ChspsFamilyListenerActive : public CActive
+	{
     public:  // Constructors and destructor
 
         /**
         * NewL
         * Two-phased constructor.
         */
-        static ChspsFamilyListener* NewL(
+        static ChspsFamilyListenerActive* NewL(
+                ChspsFamilyListener& aListener,
                 MhspsFamilyObserver& aObserver );
         
         /**
         * ~ChspsFamilyListener
         * Destructor.
         */
-        virtual ~ChspsFamilyListener();
+        virtual ~ChspsFamilyListenerActive();
         
+
+    private:
+
         /**
-         * Retrieves family type from a string
-         * @since S60 5.0 
+        * ConstructL
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        ChspsFamilyListenerActive(
+                        ChspsFamilyListener& aListener,
+                        MhspsFamilyObserver& iObserver);
+
+    public:
+         /**
+         * Start listener.
          */
-        static ThspsFamily GetFamilyType( 
-                const TDesC8& aFamilyString );
-        
-        /**
-         * Retrieves family type from the current resolution.
-         * @since S60 5.0
-         * @return Family id
-         */
-        ThspsFamily GetFamilyType();
-                
+        void Queue();
+
     protected:  // Functions from base classes
 
         /**
@@ -108,6 +104,42 @@
          * @since S60 5.0 
          */
         TInt RunError(TInt aError);
+        
+    private: // data
+    
+        // Listener reference, not owned
+        ChspsFamilyListener& iListener;
+
+        // Observer which is called when RunL occurs
+        MhspsFamilyObserver& iObserver;
+
+	};
+
+/**
+*  @ingroup group_hspsserver
+*  ChspsFamilyListener is used to listen to the changes in UI's resolution and orientation.
+*  Used on emulator environment only. 
+*
+*  @lib hspsThemeServer.exe 
+*  @since S60 5.0
+*/
+class ChspsFamilyListener : public ChspsFamily
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * NewL
+        * Two-phased constructor.
+        */
+        static ChspsFamilyListener* NewL(
+                MhspsFamilyObserver& aObserver );
+        
+        /**
+        * ~ChspsFamilyListener
+        * Destructor.
+        */
+        virtual ~ChspsFamilyListener();
+        
 
     private:
 
@@ -115,19 +147,14 @@
         * ConstructL
         * By default Symbian 2nd phase constructor is private.
         */
-        void ConstructL();
+        void ConstructL( MhspsFamilyObserver& aObserver );
 
         /**
         * ChspsCenRepListener
         * C++ default constructor.
         */
-        ChspsFamilyListener( 
-                MhspsFamilyObserver& aObserver );
+        ChspsFamilyListener();
         
-        /**
-         * Start listener.
-         */
-        void Queue();
         
         /**
          * Retrieves used display code.
@@ -137,20 +164,10 @@
 
     private:    // Data
 
-        // Observer which is called when RunL occurs
-        MhspsFamilyObserver& iObserver;
-        
-        // Window server session.
-        RWsSession iWsSession;   
-        
         // Client-side handle to a server-side window group.
         RWindowGroup iWindowGroup;
         
-        CWsScreenDevice* iScreenDevice;
-        
-        TUint32 iActiveFamily;
-        
-        TBool iFeatureManagerLoaded;
+        ChspsFamilyListenerActive* iFamilyListenerActive;
         
     };
 
--- a/homescreenpluginsrv/hspsmanager/inc/hspsinstallationhandler.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsinstallationhandler.h	Wed May 12 13:35:37 2010 +0300
@@ -604,18 +604,20 @@
                 const TDesC& aPath,
                 const TLanguage aLanguage );
         
+        /**
+         * Finds all language specific folders and resources  
+         * under the interface path in ROM or UDA drive.
+         * @since S60 5.0
+         * @path aPath Xuikon path
+         */
         void AddInterfaceResourcesV2L(
                 const TDesC& aPath );
-
-        void AddLocalizedResourcesV2L(
-                const TDesC& aPath,
-                const TLanguage aLanguage );
         
         /**
          * Validates manifest contents and installs files into the Plug-in Repository.
          * @since S60 5.0
          */
-        void ValidateL();
+        void FinalizeParsingL();
         
         /**
          * Validates provided UID value.
--- a/homescreenpluginsrv/hspsmanager/inc/hspsmaintenancehandler.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsmaintenancehandler.h	Wed May 12 13:35:37 2010 +0300
@@ -343,6 +343,7 @@
         * @return ThspsServiceCompletedMessage expressing the result of the call.
         */
         ThspsServiceCompletedMessage hspsGetListHeaders(const ChspsODT& /*aSearchMask*/
+                                                         , const TBool /*aCopyLogos*/ 
                                                          , CArrayPtrFlat<ChspsODT>& /*aHeaderList*/);
         
         /**
@@ -806,14 +807,6 @@
                 ChspsDomNode& aPluginNode );
         
         /**
-         * Copies logo icons to Homescreen's private folder
-         * @since S60 5.1
-         * @param aAppUid Identifies the client process         
-         */
-        void CopyIconsToHomescreenL(
-                const TUint aAppUid );
-
-        /**
          * Appends missing plugin with a dummy configuration where status="Error"
          * @since S60 5.0
          * @param aAppDom is a DOM of an application configuration 
@@ -884,8 +877,7 @@
         TBool iSubscription;
         TInt iDeliveryCount;
         ChspsODT* iSearchMask;
-        ChspsODT* iSetMask;
-        TLanguage iLanguage;
+        ChspsODT* iSetMask;        
         
         ChspsThemeServer& iThemeServer;
         // Identifies the client application
@@ -899,6 +891,7 @@
         CArrayPtrSeg<ChspsODT>& iHeaderListCache;        
         ChspsThemeServerSession* iServerSession;	// Not owned.
         CFileMan* iFileMan;
+        TBool iMaintainLogoResources;
 #ifdef HSPS_LOG_ACTIVE
         /**
          * Log bus.
--- a/homescreenpluginsrv/hspsmanager/inc/hspsrominstaller.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsrominstaller.h	Wed May 12 13:35:37 2010 +0300
@@ -78,9 +78,15 @@
       
     public: // New functions
         
+        
         /**
-         * InstallTheme
-         * Synchronous service for installing configurations from provided manifest files.         
+         * Installs all plugin configurations which can be found from ROM and C drives (UDA).         
+         * @since S60 5.2         
+         */
+        void InstallL();
+        
+        /**
+         * Installs a plugin configuration from the provided manifest file (synchronous).         
          * @since S60 5.0
          * @param aFileName is name of the manifest file to be installed.
          * @return ThspsServiceCompletedMessage error code 
@@ -89,26 +95,16 @@
                 const TDesC& aFileName ); 
         
         /**
-         * ReinstallThemeL.
-         * Synchronous service for re-installing corrupted application configurations  
-         * from an import (imports\app_*.dat file).
+         * Re-installs an application plugin configuration (synchronous).         
          * @since S60 5.0
          * @param aAppUid is UID of an application 
-         * @param aConfigurationUid is UID of a HSPS configuration
+         * @param aConfigurationUid is UID of an application plugin configuration
          * @return ThspsServiceCompletedMessage error code 
          */
         ThspsServiceCompletedMessage ReinstallThemeL(
                 const TInt aAppUid,
                 const TInt aConfigurationUid );
-        
-        /**         
-         * Retrieves manifest files from both Z and C drives located in
-         * \\private\200159C0\install\ paths.
-         * @since S60 5.0
-         */
-        void FindInstallationFilesL(  
-                RPointerArray<HBufC>& aFolders );
-        
+                        
 #ifdef HSPS_LOG_ACTIVE        
         /** 
         * Set log bus.
@@ -161,6 +157,14 @@
         */
         void ConstructL();           
                         
+        /**         
+         * Retrieves manifest files from both Z and C drives located in
+         * \\private\200159C0\install\ paths.
+         * @since S60 5.0
+         */
+        void FindInstallationFilesL(  
+                RPointerArray<HBufC>& aFolders );
+        
         void DoFindInstallationFilesL(  
                 RPointerArray<HBufC>& aFolders,
                 const TDesC& aPath );
--- a/homescreenpluginsrv/hspsmanager/inc/hspsserverutil.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsserverutil.h	Wed May 12 13:35:37 2010 +0300
@@ -462,13 +462,13 @@
             const TDesC8& aAttrValue );        
         
         /**
-         * Retrieves a filename from a file declaration.
-         * @since S60 5.1
+         * Retrieves filename from a logo declaration.
+         * @since S60 5.2
          * @param aFileDeclaration "SKIN():MIF()", "MIF()", "UID()" or "file.ext" string
          * @param aFilename Referred file name or NULL
  		 * @return True if a file was referred from the declaration
          */
-        static TBool hspsServerUtil::IsFile(
+        static TBool IsLogoFile(
                 const TDesC& aFileDeclaration,
                 TFileName& aFilename );
 
@@ -542,6 +542,43 @@
 	             const TDesC& aPath,
 	             const TDesC& aFilename,         
 	             TFileName& aDrivePathName );
+
+      /**
+       * Resolves icon path information from the provided logo declaration.
+       * Example:
+       *    Decl.   = "mif(536999050\270513751\268475903\1.0\sources\icon.mif)"
+       *    Source  = "c\private\200159c0\themes\536999050\270513751\268475903\1.0\sources\icon.mif"
+       *    Target  = "c\private\102750f0\536999050\270513751\268475903\1.0\sources\icon.mif"
+       *    Up.decl = "mif(c\private\102750f0\536999050\270513751\268475903\1.0\sources\icon.mif)"	        
+       * @since S60 5.2
+       * @param aLogoDeclaration Skin():mif(), mif(), uid(), icon.mif declaration
+       * @param aAppUid      Identifies the private directory where the logo file is copied to
+       * @param aTargetPath  Empty or location of the target file
+       * @param aSourcePath  Empty or location of the source file 
+       * @param aUpdatedDeclaration Empty or declaration which points to the target location
+       */
+	    static void PopulateLogoPathsL(
+	            const TDesC& aLogoDeclaration,
+                const TUint aAppUid,
+                RBuf& aTargetPath,
+                RBuf& aSourcePath,
+                RBuf& aUpdatedDeclaration );
+
+	    /**
+	     * Finds ecplised files from the provided path in given drive order.
+	     * @since S60 5.2
+	     * @param aFs is a reference to open file server session handle
+	     * @param aDriveArray An array of drives in search order
+	     * @param aPath Relative path to be found
+	     * @param aFolders Search results or empty
+	     * @param aRecursive True if files should be found from any sudirectories 
+	     */	    	    
+	    static void FindFilesRecursivelyL(
+                RFs& aFs,
+                const RArray<TInt>& aDriveArray, 
+                const TDesC& aPath,        
+                RPointerArray<HBufC>& aFolders,
+                TBool aRecursive = EFalse );
 	    
 	private:
         /**
--- a/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h	Wed May 12 13:35:37 2010 +0300
@@ -179,7 +179,7 @@
 _LIT(KhspsThemeServerName,"hspsthemeserver");
 
 /** Supported manifest version */
-_LIT(KhspsSupportedManifestVersion,"1.0");
+_LIT(KhspsSupportedManifestVersion,"2.0");
 
 /** hspsThemeServer Uid3 = SECUREID. */
 const TUid KhspsThemeServerUid3 = {0x200159C0}; //old uid 0x10207254};
@@ -210,6 +210,7 @@
 class ChspsRomInstaller;
 class ChspsAutoInstaller;
 class ChspsThemeServerSession;
+class ChspsFamily;
 
 #ifdef HSPS_LOG_ACTIVE
 class ChspsLogBus;
@@ -631,7 +632,19 @@
     * @returns The active family
     */
    TUint32 GetActiveFamilyL( 
-           const TInt aAppUid );      
+           const TInt aAppUid );    
+
+   /**
+    * Installs widgets located at \private\200159C0\install\ directories.
+    * @since S60 5.0 
+    */
+   void InstallWidgetsL();   
+   
+   /**
+    * Install all widgets from uda
+    * @since S60 5.2
+    */
+   void InstallUDAWidgetsL();   
    
 public: // from MhspsFileChangeObserver
 	
@@ -671,10 +684,11 @@
          
     void HandleCenRepChangeL( const TUint32 aId );    
      
-#if defined(WINSCW) || defined(__WINS__)    
+    
 public: // from MshspFamilyObserver    
     TBool HandleFamilyChangeL( const ThspsFamily aNewFamily );
-#endif // defined(WINSCW)
+
+    ChspsFamily* Family();
     
 private:
 	
@@ -806,12 +820,6 @@
      * @since S60 5.0 
      */
     void HandleRomInstallationsL();
-    
-    /**
-     * Installs widgets located at \private\200159C0\install\ directories.
-     * @since S60 5.0 
-     */
-    void InstallWidgetsL();
                                         
     /**
      * Initiates uninstallation of a manifest file located under the imports folder.
@@ -977,15 +985,8 @@
      */
     void RestoreConfigurationL(
         ChspsODT& aOdt );
-    
-    /**
-     * Install all widgets from uda
-     * @since S60 5.2
-     */
-    void InstallUDAWidgetsL();
-    
-#if defined(WINSCW) || defined(__WINS__)    
 
+#if defined(WINSCW) || defined(__WINS__)
     /**
      * Executed at startup to activate root configurations which were designed
      * for the current resolution.
@@ -993,7 +994,7 @@
      */
     void ActivateRootConfigurationsL();
            
-#endif // defined(WINSCW)
+#endif // defined(WINSCW) || defined(__WINS__)
         
 #ifdef _hsps_SERVER_SHUTDOWN_ENABLED_    
     CShutdown* iShutdown;
@@ -1066,10 +1067,10 @@
     CHSPSBRHandler* iBRHandler;
     
 
-#if defined(WINSCW) || defined(__WINS__)
-    // Listener for resolution and orientation changes
-    ChspsFamilyListener* iFamilyListener;
-#endif // defined(WINSCW)    
+
+    // Family handler, own
+    ChspsFamily* iFamily;
+    
     
 #ifdef HSPS_LOG_ACTIVE    
     /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenpluginsrv/hspsmanager/src/hspsfamily.cpp	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2010 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:  Family gets resolution and orientation
+*
+*/
+
+#include "hspsfamily.h"
+#include "hsps_builds_cfg.hrh"
+#include "hspsmanifest.h"
+#include <featmgr.h>
+
+
+_LIT8(KTch, "_tch");
+const TInt KMaxFamilyLength( 20 );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::NewL
+// -----------------------------------------------------------------------------
+//
+ChspsFamily* ChspsFamily::NewL()
+    {
+    ChspsFamily* self = new(ELeave) ChspsFamily();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::ChspsFamily
+// -----------------------------------------------------------------------------
+//
+ChspsFamily::ChspsFamily() 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::ConstructL
+// -----------------------------------------------------------------------------
+//
+void ChspsFamily::ConstructL()
+    {    
+
+    User::LeaveIfError( iWsSession.Connect() );
+            
+    iScreenDevice = new (ELeave) CWsScreenDevice( iWsSession );
+
+    User::LeaveIfError( iScreenDevice->Construct() );  
+    
+    }
+
+
+// ------------------------------------------------------------------------------
+// ChspsFamily::~ChspsFamily
+// ------------------------------------------------------------------------------
+ChspsFamily::~ChspsFamily()
+    {
+
+    delete iScreenDevice;
+    iWsSession.Close();    
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::GetFamilyString 
+// -----------------------------------------------------------------------------
+void ChspsFamily::GetFamilyString(        
+        TDes8& aFamily )
+    {                     
+    // Append input with a prefix based on the active screen resolution    
+    TPixelsTwipsAndRotation sizeAndRotation;
+    iScreenDevice->GetDefaultScreenSizeAndRotation( sizeAndRotation );
+    TSize resolution( sizeAndRotation.iPixelSize );  
+    if( resolution.iWidth > resolution.iHeight )
+        {
+        TInt temp = resolution.iHeight;
+        resolution.iHeight = resolution.iWidth;
+        resolution.iWidth = temp;        
+        }          
+    switch( resolution.iHeight )
+        {
+        case 320:
+            {
+            if ( resolution.iWidth == 240 )
+                {
+                aFamily.Append( KFamilyQvga );
+                }
+            }
+            break;
+        case 640:
+            {
+            if( resolution.iWidth == 360 )
+                {
+                aFamily.Append( KFamilyQhd );
+                }
+            else if( resolution.iWidth == 480 )
+                {
+                aFamily.Append( KFamilyVga );
+                }            
+            }
+            break;
+        
+        default:
+            break;
+        }    
+    if( aFamily.Length() > 0 )
+        {                     
+        aFamily.Append( KTch );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::GetFamilyType 
+// -----------------------------------------------------------------------------
+ThspsFamily ChspsFamily::GetFamilyType( 
+        const TDesC8& aFamilyString )
+    {
+    ThspsFamily family( EhspsFamilyUnknown );
+    
+    if( aFamilyString == KFamilyQvga )
+       {
+       family = EhspsFamilyQvga;
+       }
+    else if( aFamilyString == KFamilyQvga2 )
+       {
+       family = EhspsFamilyQvga2;
+       }
+    else if( aFamilyString == KFamilyVga )
+       {
+       family = EhspsFamilyVga;            
+       }
+    else if( aFamilyString == KFamilyVga3 )
+       {
+       family = EhspsFamilyVga3;
+       }
+    else if( aFamilyString == KFamilyQhd )
+       {
+       family = EhspsFamilyQhd;
+       }
+    else if( aFamilyString == KFamilyQhd_tch )
+       {
+       family = EhspsFamilyQhd_tch;
+       }
+   else if( aFamilyString == KFamilyVga_tch )
+       {
+       family = EhspsFamilyVga_tch;
+       }    
+   
+    return family;     
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsFamily::GetFamilyType
+// -----------------------------------------------------------------------------
+ThspsFamily ChspsFamily::GetFamilyType()
+    {
+    TBuf8<KMaxFamilyLength> familyString;
+    GetFamilyString( familyString );   
+    return GetFamilyType( familyString );
+    }
+
+ 
+
+// End of File
+
--- a/homescreenpluginsrv/hspsmanager/src/hspsfamilylistener.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsfamilylistener.cpp	Wed May 12 13:35:37 2010 +0300
@@ -19,7 +19,6 @@
 #include "hspsfamilylistener.h"
 #include "hsps_builds_cfg.hrh"
 #include "hspsmanifest.h"
-#include <featmgr.h>
 
 
 _LIT8(KTch, "_tch");
@@ -35,9 +34,9 @@
 //
 ChspsFamilyListener* ChspsFamilyListener::NewL( MhspsFamilyObserver& aObserver )
     {
-    ChspsFamilyListener* self = new(ELeave) ChspsFamilyListener( aObserver );
+    ChspsFamilyListener* self = new(ELeave) ChspsFamilyListener( );
     CleanupStack::PushL( self );
-    self->ConstructL();
+    self->ConstructL( aObserver );
     CleanupStack::Pop( self );
     return self;
     }
@@ -46,41 +45,77 @@
 // ChspsFamilyListener::ChspsFamilyListener
 // -----------------------------------------------------------------------------
 //
-ChspsFamilyListener::ChspsFamilyListener( MhspsFamilyObserver& aObserver ) 
-    : CActive( EPriorityStandard ), iObserver( aObserver), iActiveFamily( EhspsFamilyUnknown )    
+ChspsFamilyListener::ChspsFamilyListener() 
     {
-    CActiveScheduler::Add(this);
     }
 
 // -----------------------------------------------------------------------------
 // ChspsFamilyListener::ConstructL
 // -----------------------------------------------------------------------------
 //
-void ChspsFamilyListener::ConstructL()
+void ChspsFamilyListener::ConstructL( MhspsFamilyObserver& aObserver )
     {    
-    User::LeaveIfError( iWsSession.Connect() );
-    
+
+    // ChspsFamily::ConstructL ChspsFamily's second phase constructor call 
+    ChspsFamily::ConstructL();
+
+    iFamilyListenerActive = ChspsFamilyListenerActive::NewL( *this, aObserver );
+
     // A group needs to be instansiated so that we're able to receive events 
-    iWindowGroup = RWindowGroup( iWsSession );
+    iWindowGroup = RWindowGroup( WsSession() );
     User::LeaveIfError( iWindowGroup.Construct(2,ETrue) ); // '2' is a meaningless handle
     
     // Enables for EEventScreenDeviceChanged events
     iWindowGroup.EnableScreenChangeEvents(); 
-            
-    iScreenDevice = new (ELeave) CWsScreenDevice( iWsSession );
-    User::LeaveIfError( iScreenDevice->Construct() );  
     
     // Start the listener
-    Queue();    
+    iFamilyListenerActive->Queue();    
     }
 
+
+
+
+
+ChspsFamilyListenerActive* ChspsFamilyListenerActive::NewL( 
+    ChspsFamilyListener& aListener,
+    MhspsFamilyObserver& aObserver )
+    {
+    ChspsFamilyListenerActive* self = new( ELeave ) ChspsFamilyListenerActive( 
+            aListener,
+            aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+        
+ChspsFamilyListenerActive::~ChspsFamilyListenerActive()
+	{
+    Cancel();
+	}
+
+void ChspsFamilyListenerActive::ConstructL()
+	{
+	}
+
+ChspsFamilyListenerActive::ChspsFamilyListenerActive( 
+		ChspsFamilyListener& aListener,
+		MhspsFamilyObserver& aObserver )
+    :CActive( EPriorityStandard ), 
+    iListener( aListener),
+    iObserver( aObserver )
+	{
+    CActiveScheduler::Add(this);
+	}
+
+
 // ------------------------------------------------------------------------------
-// ChspsFamilyListener::Queue
+// ChspsFamilyListenerActive::Queue
 // ------------------------------------------------------------------------------
-void ChspsFamilyListener::Queue()
+void ChspsFamilyListenerActive::Queue()
     {
     ASSERT ( !IsActive() );
-    iWsSession.EventReady( &iStatus );
+    iListener.WsSession().EventReady( &iStatus );
     SetActive();
     }
 
@@ -89,139 +124,31 @@
 // ------------------------------------------------------------------------------
 ChspsFamilyListener::~ChspsFamilyListener()
     {
-    Cancel();
-    if ( iFeatureManagerLoaded )
+    if ( iFamilyListenerActive )
         {
-        FeatureManager::UnInitializeLib();
+        delete iFamilyListenerActive;
         }
-    delete iScreenDevice;
     iWindowGroup.Close();
-    iWsSession.Close();    
     }
 
+
+
+
 // -----------------------------------------------------------------------------
-// ChspsFileChangeListener::GetFamilyString 
+// ChspsFamilyListener::RunL 
 // -----------------------------------------------------------------------------
-void ChspsFamilyListener::GetFamilyString(        
-        TDes8& aFamily )
-    {                     
-    // Append input with a prefix based on the active screen resolution    
-    TPixelsTwipsAndRotation sizeAndRotation;
-    iScreenDevice->GetDefaultScreenSizeAndRotation( sizeAndRotation );
-    TSize resolution( sizeAndRotation.iPixelSize );  
-    if( resolution.iWidth > resolution.iHeight )
-        {
-        TInt temp = resolution.iHeight;
-        resolution.iHeight = resolution.iWidth;
-        resolution.iWidth = temp;        
-        }          
-    switch( resolution.iHeight )
-        {
-        case 320:
-            {
-            if ( resolution.iWidth == 240 )
-                {
-                aFamily.Append( KFamilyQvga );
-                }
-            }
-            break;
-        case 640:
-            {
-            if( resolution.iWidth == 360 )
-                {
-                aFamily.Append( KFamilyQhd );
-                }
-            else if( resolution.iWidth == 480 )
-                {
-                aFamily.Append( KFamilyVga );
-                }            
-            }
-            break;
-        
-        default:
-            break;
-        }    
-    if( aFamily.Length() > 0 )
-        {                     
-//        // Append input with a suffix based on the touch support
-//        if ( !iFeatureManagerLoaded )
-//            {
-//            FeatureManager::InitializeLibL();
-//            iFeatureManagerLoaded = ETrue;
-//            }
-//        if ( FeatureManager::FeatureSupported( KFeatureIdPenSupport ) )
-//            {
-            aFamily.Append( KTch );
-//            }                
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsFileChangeListener::GetFamilyType 
-// -----------------------------------------------------------------------------
-ThspsFamily ChspsFamilyListener::GetFamilyType( 
-        const TDesC8& aFamilyString )
-    {
-    ThspsFamily family( EhspsFamilyUnknown );
-    
-    if( aFamilyString == KFamilyQvga )
-       {
-       family = EhspsFamilyQvga;
-       }
-    else if( aFamilyString == KFamilyQvga2 )
-       {
-       family = EhspsFamilyQvga2;
-       }
-    else if( aFamilyString == KFamilyVga )
-       {
-       family = EhspsFamilyVga;            
-       }
-    else if( aFamilyString == KFamilyVga3 )
-       {
-       family = EhspsFamilyVga3;
-       }
-    else if( aFamilyString == KFamilyQhd )
-       {
-       family = EhspsFamilyQhd;
-       }
-    else if( aFamilyString == KFamilyQhd_tch )
-       {
-       family = EhspsFamilyQhd_tch;
-       }
-   else if( aFamilyString == KFamilyVga_tch )
-       {
-       family = EhspsFamilyVga_tch;
-       }    
-   
-    return family;     
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsFileChangeListener::GetFamilyType
-// -----------------------------------------------------------------------------
-ThspsFamily ChspsFamilyListener::GetFamilyType()
-    {
-    TBuf8<KMaxFamilyLength> familyString;
-    GetFamilyString( familyString );   
-    return GetFamilyType( familyString );
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsFileChangeListener::RunL 
-// -----------------------------------------------------------------------------
-void ChspsFamilyListener::RunL()
+void ChspsFamilyListenerActive::RunL()
     {
     TWsEvent wsEvent;
-    iWsSession.GetEvent(wsEvent);                                   
+    iListener.WsSession().GetEvent(wsEvent);
     switch( wsEvent.Type() )
         {
         case EEventScreenDeviceChanged:
             {                    
-            ThspsFamily newFamily = GetFamilyType();
+            ThspsFamily newFamily = iListener.GetFamilyType();
             if ( newFamily > EhspsFamilyUnknown )
                 {                
                 iObserver.HandleFamilyChangeL( newFamily );
-                iActiveFamily = newFamily;
                 }
             break;
             }
@@ -236,15 +163,15 @@
 // ChspsFileChangeListener::DoCancel
 // -----------------------------------------------------------------------------
 //
-void ChspsFamilyListener::DoCancel()
+void ChspsFamilyListenerActive::DoCancel()
     {
-    iWsSession.EventReadyCancel();
+    iListener.WsSession().EventReadyCancel();
     }
  
 // -----------------------------------------------------------------------------
 // ChspsFileChangeListener::RunError
 // -----------------------------------------------------------------------------
-TInt ChspsFamilyListener::RunError(TInt /*aError*/)
+TInt ChspsFamilyListenerActive::RunError(TInt /*aError*/)
     {
     return KErrNone;
     }
--- a/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp	Wed May 12 13:35:37 2010 +0300
@@ -58,7 +58,7 @@
 _LIT(KPathDelim, "\\");
 _LIT(KPrivateInstall, "\\private\\200159c0\\install\\");
 _LIT(KHsps, "\\hsps\\" );
-_LIT(KXuikon, "xuikon\\" );
+_LIT(KXuikon, "xuikon" );
 
 const TInt KMaxMediaTypeLength = 100;
 
@@ -380,7 +380,7 @@
         if( iLogBus )
             {
             iLogBus->LogText( _L( "ChspsInstallationHandler::hspsInstallTheme(): - Installation failed with error code %d" ),
-                    errorCode );
+                    err );
             }
 #endif       
         }
@@ -462,7 +462,7 @@
         }                
         
     // Check the parsed input        
-    ValidateL();                    
+    FinalizeParsingL();                    
     }
 
 // -----------------------------------------------------------------------------
@@ -482,7 +482,8 @@
         {
         pathParser.PopDir(); // pop "hsps" folder 
         path.Copy( pathParser.FullName() );
-        path.Append( KXuikon );        
+        path.Append( KXuikon );
+        path.Append( KPathDelim );
         }
     return path;
     }
@@ -491,7 +492,7 @@
 // ChspsInstallationHandler::ValidateL() 
 // -----------------------------------------------------------------------------
 //
-void ChspsInstallationHandler::ValidateL()
+void ChspsInstallationHandler::FinalizeParsingL()
     {               
     // Check resources
     TFileName interfacePath( GetInterfacePath() );       
@@ -802,13 +803,24 @@
     
         User::Leave( KErrNotSupported );     
         }
-    else
+
+    ChspsFamily* family = iThemeServer.Family();
+    if ( !family )
         {
-        // Store package version
-        iOdt->SetPackageVersionL( *iPackageVersion );
+        User::Leave( KErrNotSupported );
         }
 
-    // Set the resolution family
+    ThspsFamily familyType = family->GetFamilyType();
+    if ( familyType == EhspsFamilyUnknown )
+        {
+        User::Leave( KErrNotSupported );
+        }
+#if !defined(WINSCW) && !defined(__WINS__)
+    if ( !( familyType & iFamilyMask ) )
+        {
+        User::Leave( KErrNotSupported );
+        }
+#endif // !defined(WINSCW) && !defined(__WINS__)
     iOdt->SetFamily( iFamilyMask );    
             
     // Store root, provider and theme uid
@@ -1675,7 +1687,11 @@
                     iPackageVersion = HBufC::NewL( KMaxFileName );
                     iPackageVersion->Des().Copy( aAttributes[argIndex].Value().DesC() );
                     // Is manifest supported by this parser?
-                    iPackageVerSupported = ETrue; //TODO temporarily enable till 0.3 to 1.0 changes have been integrated ( iPackageVersion->Des().Compare(KhspsSupportedManifestVersion) == 0);                     
+                    iPackageVerSupported = EFalse;
+                    if ( iPackageVersion->Des().Compare( KhspsSupportedManifestVersion ) == 0 )
+                        {
+                        iPackageVerSupported = ETrue;
+                        }
                     break;
                     }
                 }
@@ -1754,10 +1770,8 @@
     
     if ( localName == KFamily )
         {
-#if defined(WINSCW) || defined(__WINS__)        
         const TPtrC8 familyPtr( iContent->Des() );        
-        iFamilyMask |= ChspsFamilyListener::GetFamilyType( familyPtr );
-#endif // defined(WINSCW)        
+        iFamilyMask |= ChspsFamily::GetFamilyType( familyPtr );
         }    
     else if ( localName == KConfigurationType )
         {
@@ -2260,105 +2274,114 @@
     CleanupStack::PopAndDestroy( dtdPath );
     }
 
+// -----------------------------------------------------------------------------
+// ChspsInstallationHandler::AddInterfaceResourcesV2L
+// -----------------------------------------------------------------------------
+//
 void ChspsInstallationHandler::AddInterfaceResourcesV2L(
         const TDesC& aPath )
-    {                      
-    // Find all locale specific subfolders
-    TFindFile fileFinder( iFsSession );
-    _LIT( KFilter, "*" );
-    CDir* fileList( NULL );    
-    fileFinder.FindWildByDir( KFilter, aPath, fileList );
-    if ( fileList )
-        {
-        CleanupStack::PushL( fileList );
-        TFileName localePath;
-        for( TInt i = 0; i < fileList->Count(); i++ )       
+    {                                          
+    RArray<TInt> driveArray;
+    CleanupClosePushL( driveArray );
+    
+    // Set search order for eclipsing, only the ROM and UDA drives should be scanned
+    driveArray.Append( EDriveC );
+    driveArray.Append( EDriveZ );
+        
+    // Find all unique locale entries under the Xuikon folders in either drive
+    RPointerArray<HBufC> locales;    
+    CleanupClosePushL( locales );              
+    hspsServerUtil::FindFilesRecursivelyL(
+            iFsSession,
+            driveArray,
+            aPath,            
+            locales,
+            EFalse );
+        
+    // Find all file entries under the Xuikon folders in either drive
+    RPointerArray<HBufC> folders;    
+    CleanupClosePushL( folders );    
+    hspsServerUtil::FindFilesRecursivelyL(
+            iFsSession,
+            driveArray,
+            aPath,
+            folders,
+            ETrue );
+           
+    // Loop language folders
+    for(TInt localeIndex=0; localeIndex < locales.Count(); localeIndex++ )
+        {                    
+        TParsePtrC localeParser( locales[ localeIndex ]->Des() );
+        TPath localePath = localeParser.Path();
+        
+        TPath tempPath = locales[ localeIndex ]->Des();        
+        if( tempPath.Right( KPathDelim().Length() ).Compare( KPathDelim() ) == 0 )
             {
-            const TEntry& entry = (*fileList)[i];                        
-            if ( entry.IsDir() )
+            tempPath.Delete( tempPath.Length() - KPathDelim().Length(), KPathDelim().Length() );
+            }        
+        TParsePtrC tempParser( tempPath );
+        TFileName localeName = tempParser.Name();                        
+        TInt languageIndex = 0;
+        TLex lex( localeName );
+        if( lex.Val( languageIndex ) != KErrNone )
+            {
+            continue;
+            }
+        if( languageIndex < ELangTest ) 
+            {
+            User::Leave( KErrIllegalInstallation );
+            }
+                
+        // If we found the first language specification          
+        if ( !iDefaultSpecificationSet )
+            {
+            // Assume this is the default language shown when device language is not supported
+            iDefaultSpecification = (TLanguage)languageIndex;
+            iDefaultSpecificationSet = ETrue;
+            }
+                       
+        // Loop file resources which should be found from either drive
+        ChspsResource* resource = NULL;
+        for( TInt resourceIndex=0; resourceIndex < iTempLocalizedResourceList->Count(); resourceIndex++ )
+            {              
+            resource = iTempLocalizedResourceList->At( resourceIndex );              
+            TFileName file;
+            
+            for( TInt folderIndex=0; folderIndex < folders.Count(); folderIndex++ )
                 {
-                TInt languageIndex = 0;
-                TLex lex( entry.iName );
-                TInt error = lex.Val( languageIndex );    
-                                
-                // See enumarations from e32lang.h
-                if( !error && languageIndex >= ELangTest )
-                    {               
-                    // If we found the first language specification          
-                    if ( !iDefaultSpecificationSet )
+                TParsePtrC folderParser( folders[ folderIndex ]->Des() );
+                TPath folderPath = folderParser.Path();
+                TFileName name = folderParser.Name();
+                
+                if( localePath.CompareF( folderPath ) == 0 )                                                    
+                    {
+                    TFileName fixedName = hspsServerUtil::GetFixedOdtName( folderParser.NameAndExt() );
+                    if( fixedName.CompareF( resource->FileName() ) == 0  )
                         {
-                        // Assume this is the default language shown incase 
-                        // there is no locale for the active UI language
-                        iDefaultSpecification = (TLanguage)languageIndex;
-                        iDefaultSpecificationSet = ETrue;
+                        file = folders[ folderIndex ]->Des();                        
+                        break;           
                         }
-                                        
-                    // Setup a path to the subdirectory 
-                    localePath.Copy( aPath );
-                    localePath.Append( entry.iName );
-                    localePath.Append( KPathDelim );
-                    
-                    // Find localized resources 
-                    AddLocalizedResourcesV2L( 
-                        localePath,
-                        (TLanguage)languageIndex );
-                    }                                       
+                    }                                    
                 }
-                        
-            }        
-        CleanupStack::PopAndDestroy( fileList );
-        fileList = NULL;
-        }        
-    
-    // If no DTD files were found 
-    if ( iDefaultSpecification != ELangTest || !iDefaultSpecificationSet )
-        {        
-        // Halt installation, test language was not found
-        User::Leave( KErrNotFound );
-        }
-    }    
-    
-void ChspsInstallationHandler::AddLocalizedResourcesV2L(
-        const TDesC& aPath,
-        const TLanguage aLanguage )
-    {
-    TFindFile fileFinder( iFsSession );
-    _LIT( KFilter, "*" );
-    CDir* fileList( NULL );    
-    fileFinder.FindWildByDir( KFilter, aPath, fileList );
-    if ( fileList )
-        {
-        CleanupStack::PushL( fileList );
-        
-        TFileName localePath;
-        ChspsResource* resource = NULL;
-        for( TInt i = 0; i < fileList->Count(); i++ )       
-            {
-            const TEntry& entry = (*fileList)[i];                        
-            if ( !entry.IsDir() )
-                {    
-                TParsePtrC parserPtr( entry.iName );
-                TFileName modName = hspsServerUtil::GetFixedOdtName( entry.iName );
-                
-                TBool addingOk = EFalse;                
-                for( TInt resourceIndex=0; resourceIndex < iTempLocalizedResourceList->Count(); resourceIndex++ )
-                    {                                                                                                                           
-                    resource = iTempLocalizedResourceList->At( resourceIndex );
-                    if( modName.CompareF( resource->FileName() ) == 0 )
+            
+            if( file.Length() )
+                {                
+                TBool duplicate = EFalse;
+                for( TInt i=0; i< iResourceList->Count(); i++ )
+                    {
+                    ChspsResource* r = iResourceList->At(i);
+                    if( r->Language() == languageIndex 
+                            && r->FileName().CompareF( file ) == 0 )
                         {
-                        addingOk = ETrue;     
+                        duplicate = ETrue;
                         break;
                         }
                     }
-                if ( addingOk )
-                    {                                
-                    HBufC* resourcePath = HBufC::NewLC( aPath.Length() + entry.iName.Length() );
-                    resourcePath->Des().Copy( aPath );
-                    resourcePath->Des().Append( entry.iName );
-                                
+                if( !duplicate )
+                    {
+                    
                     TPtrC8 mimeType;
-                    TPtrC8 tag;
-                                                                        
+                    TPtrC8 tag;                                                               
                     HBufC8* tagBuf8 = NULL;                    
                     if ( resource->Tags().Length() )
                         {
@@ -2366,12 +2389,12 @@
                         tagBuf8->Des().Copy( resource->Tags() );
                         tag.Set( tagBuf8->Des() );
                         }
-                    
+                                
                     // Add localized files into the resource array                    
                     AddResourceL(
                         *iResourceList,
-                        *resourcePath,
-                        aLanguage,
+                        file,
+                        (TLanguage)languageIndex,
                         EResourceOther,
                         mimeType,
                         tag );
@@ -2380,16 +2403,24 @@
                         {
                         CleanupStack::PopAndDestroy( tagBuf8 );
                         }
-                    CleanupStack::PopAndDestroy( resourcePath );
-                    }                                
+                    
+                    }
                 }
             }
-        
-        CleanupStack::PopAndDestroy( fileList );
-        fileList = NULL;
-        }
-    }
 
+        }     
+            
+    folders.ResetAndDestroy();
+    locales.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 3, &driveArray );  // driveArray, locales, folders, 
+     
+    if ( iDefaultSpecification != ELangTest || !iDefaultSpecificationSet )
+        {        
+        // Halt installation, test language was not found
+        User::Leave( KErrNotFound );
+        }    
+    }    
+    
 // -----------------------------------------------------------------------------
 // Finds locale specific subdirectories and resources and appends those
 // into the resource array 
@@ -2580,7 +2611,7 @@
     
     // check whether skin/mif/uid declarations were used
     TFileName filename;    
-    if ( hspsServerUtil::IsFile( resultPtr, filename ) )
+    if ( hspsServerUtil::IsLogoFile( resultPtr, filename ) )
         {                                                                              
         // check whether the file reference is valid
         TPath fullname;
--- a/homescreenpluginsrv/hspsmanager/src/hspsmaintenancehandler.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsmaintenancehandler.cpp	Wed May 12 13:35:37 2010 +0300
@@ -91,14 +91,15 @@
         ChspsThemeServer& aThemeServer, 
         const TUint aSecureId ): 
     CTimer(EPriorityLow), 
-    iLanguage ( aThemeServer.DeviceLanguage() ),
     iThemeServer( aThemeServer ), 
     iSecureId( aSecureId ),
     iCentralRepository( aThemeServer.CentralRepository() ),    
     iDefinitionRepository( aThemeServer.DefinitionRepository() ),
     iSecurityEnforcer( aThemeServer.SecurityEnforcer() ),
     iHeaderListCache( aThemeServer.HeaderListCache() ),
-    iFileMan( NULL )
+    iServerSession( NULL ),         
+    iFileMan( NULL ),
+    iMaintainLogoResources( EFalse )
     { 
     iDeliveryCount = 0;
     iSubscription = EFalse;
@@ -194,11 +195,11 @@
             }
         iSearchMask = ChspsODT::NewL();
         iSearchMask->UnMarshalHeaderL(searchMaskData);
-        
-        // check the device language
-        iLanguage  = iThemeServer.DeviceLanguage();        
- 	    iSearchMask->SetOdtLanguage( (TInt)iLanguage );
-                 
+                
+        iMaintainLogoResources = EFalse;
+        TPckg<TInt> intPkg( iMaintainLogoResources );                                    
+        messagePtr.ReadL(3, intPkg );
+                                                           
         // now there is a subscription
         iSubscription = ETrue;
         // fetch the header list from repository
@@ -242,9 +243,6 @@
         // is there headers to delivere left
         if (iHeaderDataList->Count() > iDeliveryCount)
             {                                    
-            // Handle copying of logo icon resources
-            CopyIconsToHomescreenL( aMessage.SecureId().iId );
-            
             // at least one header on the list
             TPtr8 bufPtr( iHeaderDataList->At(iDeliveryCount)->Des() );
             iMessagePtr.WriteL(2, bufPtr, 0);
@@ -262,82 +260,6 @@
         }
     }
     
-// -----------------------------------------------------------------------------
-// ChspsMaintenanceHandler::CopyIconsToHomescreenL
-// -----------------------------------------------------------------------------
-//
-void ChspsMaintenanceHandler::CopyIconsToHomescreenL(
-        const TUint aAppUid ) 
-    {        
-    HBufC8* headerData = iHeaderDataList->At(iDeliveryCount);
-    ChspsODT* header = ChspsODT::UnMarshalHeaderLC( headerData->Des() );
-    if ( iServerSession && header )
-        {    
-        if( header->LogoFile().Length() )
-            {                              
-            // If a file reference was found from the logo declaration
-            TFileName filename;
-            if ( hspsServerUtil::IsFile( header->LogoFile(), filename ) )
-                {
-                if ( !iFileMan )
-                    {                
-                    iFileMan = CFileMan::NewL( iServerSession->FileSystem() );
-                    }
-    
-                // Get client's private directory: 
-                // We should use some common directory if there are more than one SAPI clients,
-                // for now we can copy files to AI3's private folder
-                _LIT( KPrivatePath, "c:\\private\\%X\\");
-                TPath privatePath;            
-                privatePath.Format( KPrivatePath, aAppUid );                
-                                                                                        
-                // Append private path to the logo file reference
-                TInt offset = header->LogoFile().FindF( filename );
-                if ( offset >= 0 )
-                    {                                      
-                    // Insert private path prior to the file reference                    
-                    HBufC* logoBuf = HBufC::NewLC( 
-                            privatePath.Length() + header->LogoFile().Length() );
-                    logoBuf->Des().Copy( header->LogoFile() );
-                    logoBuf->Des().Insert( offset, privatePath );
-                    header->SetLogoFileL( logoBuf->Des() );
-                    CleanupStack::PopAndDestroy( logoBuf );
-                                        
-                    // Replace the serialized header descriptor                    
-                    HBufC8* newHeaderData = header->MarshalHeaderL();                    
-                    CleanupStack::PushL( newHeaderData );
-                    iHeaderDataList->InsertL( 
-                           iDeliveryCount,
-                           newHeaderData );                       
-                    CleanupStack::Pop( newHeaderData );                    
-                    delete headerData;
-                    headerData = 0;
-                    iHeaderDataList->Delete( iDeliveryCount + 1 );
-                    }                               
-
-                // Set target directory for file copying
-                TPath targetPath;            
-                targetPath.Copy( privatePath );
-                targetPath.Append( filename );
-                
-                // Set source directory for file copying
-                TFileName sourceFile;     
-                _LIT( KThemesFolder, "themes\\" );
-                iServerSession->FileSystem().SessionPath( sourceFile );
-                sourceFile.Append( KThemesFolder );                
-                sourceFile.Append( filename );
-                
-                // Create the target path and copy files when required
-                hspsServerUtil::CopyResourceFileL(
-                        iServerSession->FileSystem(),
-                        *iFileMan, 
-                        targetPath,
-                        sourceFile );
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy( header );
-    }
 
 // -----------------------------------------------------------------------------
 // ChspsMaintenanceHandler::SetServerSession
@@ -1120,7 +1042,7 @@
                     CleanupStack::PushL( pluginIter );                                
                     ChspsDomNode* pluginNode =  pluginIter->First();                              
                     TBool steppingtoConfNode(EFalse);                     
-                    while(pluginNode && !steppingtoConfNode)
+                    while( pluginNode && !steppingtoConfNode )
                         {
                         const TDesC8& pluginNodeName = pluginNode->Name();
                          
@@ -1135,10 +1057,18 @@
                         }
                     CleanupStack::PopAndDestroy( pluginIter );
                     
-                    // Copy the plugin configuration to the main document.
-                    ChspsDomNode* rootCopy = pluginNode->CloneL( node->StringPool());
-                    rootCopy->SetParent( node );
-                    node->AddChildL( rootCopy );
+                    if ( pluginNode )
+                        {
+                        // Copy the plugin configuration to the main document.
+                        ChspsDomNode* rootCopy = pluginNode->CloneL( node->StringPool());
+                        rootCopy->SetParent( node );
+                        node->AddChildL( rootCopy );
+                        }
+                    else
+                        {
+                        // configuration is corrupted
+                        User::Leave( KErrCorrupt );
+                        }
                     }
                
                 CleanupStack::PopAndDestroy( pluginOdt );
@@ -1859,14 +1789,20 @@
     {
     TBool isView = EFalse;
     
-    ChspsDomNode* confNode = 
-            (ChspsDomNode*)aPluginNode.ChildNodes().FindByName( KConfigurationElement );
+    ChspsDomNode* confNode = static_cast<ChspsDomNode*>(
+            aPluginNode.ChildNodes().FindByName( KConfigurationElement ));
+    
     if( confNode )
         {
-        ChspsDomAttribute* typeAttr = 
-                (ChspsDomAttribute*)confNode->AttributeList().FindByName( KConfigurationAttrType );
-        isView = ( typeAttr->Value().CompareF( KConfTypeView ) == 0 );            
+        ChspsDomAttribute* typeAttr = static_cast<ChspsDomAttribute*>(
+                confNode->AttributeList().FindByName( KConfigurationAttrType ));
+        
+        if( typeAttr )
+            {
+            isView = ( typeAttr->Value().CompareF( KConfTypeView ) == 0 ); 
+            }     
         }
+    
     return isView;
     }
 
@@ -3841,8 +3777,10 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-ThspsServiceCompletedMessage ChspsMaintenanceHandler::hspsGetListHeaders(const ChspsODT& /*aSearchMask*/,
-                                                     CArrayPtrFlat<ChspsODT>& /*aHeaderList*/)        
+ThspsServiceCompletedMessage ChspsMaintenanceHandler::hspsGetListHeaders(
+        const ChspsODT& /*aSearchMask*/,
+        const TBool /*aCopyLogos*/,
+        CArrayPtrFlat<ChspsODT>& /*aHeaderList*/)        
     {
     return EhspsServiceNotSupported;
     }
@@ -4052,6 +3990,18 @@
         {
         After(KHeaderListUpdatePollingTimeSpan);    
         }      
+    
+    else if( aRepositoryInfo.iEventType & EhspsODTAdded
+            || aRepositoryInfo.iEventType & EhspsODTUpdated )
+        {
+        // If a widget has been installed or updated
+        if( iServerSession )
+            {
+            // Make sure all logos are copied when user retrieves the list
+            iServerSession->SetIconFileCopyRequired( ETrue );
+            }
+        }
+ 
     return EFalse;
     }
 
@@ -4315,37 +4265,83 @@
 void ChspsMaintenanceHandler::GetHeaderListL( 
         CArrayPtrSeg<HBufC8>& aHeaderDataList, 
         const ChspsODT& aSearchMask )
-    {    
-    HBufC8* headerBuf = aSearchMask.MarshalHeaderL();
-    if ( !headerBuf )
-        {
-        User::Leave(KErrGeneral);
-        }
-    CleanupStack::PushL( headerBuf );    
-    ChspsODT* searchOdt = ChspsODT::UnMarshalHeaderLC( *headerBuf );
-    
+    {            
     // Reset search results
     aHeaderDataList.ResetAndDestroy();
+                    
+    if( !iFileMan )
+       {                
+       iFileMan = CFileMan::NewL( iServerSession->FileSystem() );
+       }    
         
     for ( TInt i = 0; i < iHeaderListCache.Count(); i++ )
         {
         ChspsODT* header = iHeaderListCache.At( i );
         
-        // Check whether the header matches the search criteria
-        if ( FilterHeader( *searchOdt, *header ) )
+        // Header clone is needed because it prevents modifying list cache
+        ChspsODT* clone = header->CloneL();
+        CleanupStack::PushL( clone ); 
+        
+        // Check whether the header matches the search criteria (family etc)
+        if ( FilterHeader( aSearchMask, *clone ) )
             {
-            // Append to the search results
-            HBufC8* data = header->MarshalHeaderL();
+        
+            // Update file paths into the existing logo declarations
+            if( clone->LogoFile().Length() &&
+                iMaintainLogoResources &&
+                ( header->ConfigurationType() == EhspsWidgetConfiguration ||
+                  header->ConfigurationType() == EhspsTemplateConfiguration ) )
+                {    
+            
+                RBuf targetFile;
+                CleanupClosePushL( targetFile );       
+                targetFile.CreateL( KMaxFileName );
+                
+                RBuf sourceFile;
+                CleanupClosePushL( sourceFile );
+                sourceFile.CreateL( KMaxFileName );
+                
+                RBuf newDeclaration;
+                CleanupClosePushL( newDeclaration );
+                newDeclaration.CreateL( clone->LogoFile().Length() + KMaxFileName );
+                
+                // Find location of the logo file and location where it shold be copied                
+                hspsServerUtil::PopulateLogoPathsL(
+                    clone->LogoFile(),
+                    iSecureId,
+                    targetFile,
+                    sourceFile,
+                    newDeclaration );
+                
+                if( targetFile.Length()
+                        && sourceFile.Length() 
+                        && newDeclaration.Length() )
+                    {
+                    // Update private path information to the logo declaration                
+                    clone->SetLogoFileL( newDeclaration );
+                                        
+                    hspsServerUtil::CopyResourceFileL(
+                        iServerSession->FileSystem(),
+                        *iFileMan,                         
+                        targetFile,
+                        sourceFile );
+                    }
+                
+                CleanupStack::PopAndDestroy( 3, &targetFile ); // targetFile, sourceFile, newDeclaration                
+                }      
+        
+            // Convert the header to a descriptor
+            HBufC8* data = clone->MarshalHeaderL();            
             if ( data )
                 {
+                // Append to the search results
                 CleanupStack::PushL( data );
                 aHeaderDataList.AppendL( data );
                 CleanupStack::Pop( data );
                 }
             }
-        }                              
-        
-    CleanupStack::PopAndDestroy( 2, headerBuf ); // searchOdt, headerBuf    
+        CleanupStack::PopAndDestroy( clone );
+        }          
     }
 
 // -----------------------------------------------------------------------------
@@ -4555,7 +4551,7 @@
             )
         &&
             (
-            ( aMask.ConfigurationType() && aMask.ConfigurationType() == aHeader.ConfigurationType() )
+            ( aMask.ConfigurationType() && ( aHeader.ConfigurationType() == aMask.ConfigurationType() ) )
             ||
             ( !aMask.ConfigurationType() )
             )            
@@ -4723,10 +4719,7 @@
         
         // Get active root configuration for the client application
         ChspsODT* appODT = ChspsODT::NewL();
-        CleanupStack::PushL( appODT );
-        iThemeServer.GetActivateAppConfigurationL( 
-                params.appUid,
-                *appODT );     
+        CleanupStack::PushL( appODT );    
 
 #ifdef HSPS_LOG_ACTIVE                
         if( iLogBus )
@@ -4741,12 +4734,20 @@
         TInt err = KErrNone;
         if ( !params.restoreAll )
             {
-            // Remove all widgets from the active view
-            err = RestoreActiveViewL( *appODT );
-            }        
+            // reinstall all widgets
+            TRAP( err, iThemeServer.InstallWidgetsL();
+                       iThemeServer.InstallUDAWidgetsL() );
+            
+            // Force updating of the header cache
+            iThemeServer.UpdateHeaderListCacheL();          
+            }  
+        
+        iThemeServer.GetActivateAppConfigurationL( 
+                params.appUid,
+                *appODT );
         
         // As a backup, if restoration of the active view fails,  
-        // or if all views but the locked view should be removed
+        // or if all views but the locked view should be removedc
         if ( err || params.restoreAll )
             {                        
             // Remove all views but the locked one and reset active view            
--- a/homescreenpluginsrv/hspsmanager/src/hspsrominstaller.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsrominstaller.cpp	Wed May 12 13:35:37 2010 +0300
@@ -105,6 +105,43 @@
     }
 
 // -----------------------------------------------------------------------------
+// ChspsRomInstaller::InstallL()
+// -----------------------------------------------------------------------------
+//
+void ChspsRomInstaller::InstallL()
+    {
+    RPointerArray<HBufC> pluginFolders;
+    CleanupClosePushL( pluginFolders );             
+            
+    // Find UDA and ROM widgets to be installed     
+    FindInstallationFilesL( pluginFolders );
+            
+    // Install the manifest files    
+    for( TInt index=0; index < pluginFolders.Count(); index++ )
+        {         
+        TPtrC namePtr( pluginFolders[index]->Des() );                               
+                
+        // Synchronous method
+        ThspsServiceCompletedMessage ret = EhspsInstallThemeFailed;
+        TRAP_IGNORE( ret = InstallThemeL( namePtr  ) );
+        if ( ret != EhspsInstallThemeSuccess )
+            {
+//            User::Leave( KErrAbort );
+            }
+        }
+    
+    if ( pluginFolders.Count() == 0 )
+        {
+        // Mandatory plugins were missing 
+        User::Leave( KErrCorrupt );
+        }
+        
+    pluginFolders.ResetAndDestroy();
+    CleanupStack::PopAndDestroy( 1, &pluginFolders );
+    }
+
+
+// -----------------------------------------------------------------------------
 // ChspsRomInstaller::FindInstallationFilesL()
 // -----------------------------------------------------------------------------
 //
@@ -160,6 +197,11 @@
                 manifest.Append( KBackslash );
                 manifest.Append( KManifest );
                 
+                if( !BaflUtils::FileExists( iFsSession, manifest ) )
+                    {
+                    continue;
+                    }
+                
                 // Check for duplicates
                 TBool isShadowed = EFalse;
                 TParsePtrC manifestPtr( manifest );                
@@ -254,7 +296,9 @@
     // Start installation by reading the manifest file
     iRet = iInstallationHandler->hspsInstallTheme( aFileName, iHeaderData );    
     if ( iRet == EhspsInstallThemeSuccess && !IsActive() )
-        {                
+        {            
+        iRet = EhspsInstallThemeFailed;
+        
         // Continue with remaining installation phases
         SetActive();
         iInstallationHandler->hspsInstallNextPhaseL( iHeaderData, iStatus );        
@@ -332,6 +376,7 @@
 //
 TInt ChspsRomInstaller::RunError( TInt /*aError*/ )
     {
+    iRet = EhspsInstallThemeFailed;
     // Called when error occurred in asynchronous request
     CActiveScheduler::Stop();    
     return KErrNone;
--- a/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1660,10 +1660,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// hspsServerUtil::IsFile
+// hspsServerUtil::IsLogoFile
 // -----------------------------------------------------------------------------
 //
-TBool hspsServerUtil::IsFile(
+TBool hspsServerUtil::IsLogoFile(
         const TDesC& aFileDeclaration,
         TFileName& aFilename )        
     {
@@ -1891,6 +1891,127 @@
               
      return err;
      }
+     
+// -----------------------------------------------------------------------------
+// hspsServerUtil::ResolveLogoPathL
+// -----------------------------------------------------------------------------
+void hspsServerUtil::PopulateLogoPathsL(
+        const TDesC& aLogoDeclaration,
+        const TUint aAppUid,
+        RBuf& aTargetPath,
+        RBuf& aSourcePath,
+        RBuf& aUpdatedDeclaration)
+    {        
+    // Process widget types only 
+    if ( aLogoDeclaration.Length() && aAppUid > 0 )
+        {                          
+        // Get possible file name from the optional logo declaration
+        // and if found, populate the paths and update the declaration 
+        TFileName filename;
+        if( IsLogoFile( aLogoDeclaration, filename ) )
+            {      
+            // Get client's private directory                
+            _LIT( KClientPrivatePath, "c:\\private\\%X\\");
+            TPath clientPath;            
+            clientPath.Format( KClientPrivatePath, aAppUid );
+                                    
+            // Updated logo declaration
+            TInt offset = aLogoDeclaration.FindF( filename );                       
+            __ASSERT_DEBUG( offset != KErrNotFound, User::Leave( KErrCorrupt ) );            
+            if( aLogoDeclaration.Length() + aLogoDeclaration.Mid( offset ).Length() < KMaxFileName )
+                {
+                aUpdatedDeclaration.Copy( aLogoDeclaration );
+                aUpdatedDeclaration.Insert( offset, clientPath );
+                                                               
+                // Set path and name of the target file            
+                if( clientPath.Length() + filename.Length() < KMaxFileName )
+                    {
+                    aTargetPath.Copy( clientPath );
+                    aTargetPath.Append( filename );
+                    
+                    // Set name of the source file
+                    _LIT( KServerPrivateFolder, "c:\\private\\200159c0\\themes\\" );
+                    if( KServerPrivateFolder().Length() + filename.Length() < KMaxFileName )
+                        {                       
+                        aSourcePath.Copy( KServerPrivateFolder );
+                        aSourcePath.Append( filename );                        
+                        }
+                    }
+                }
+                        
+            }
+        }
+    }     
+
+// -----------------------------------------------------------------------------
+// hspsServerUtil::FindFilesRecursivelyL
+// -----------------------------------------------------------------------------
+void hspsServerUtil::FindFilesRecursivelyL(
+        RFs& aFs,
+        const RArray<TInt>& aDriveArray, 
+        const TDesC& aPath,        
+        RPointerArray<HBufC>& aFolders,
+        TBool aRecursive )
+    {
+    TParsePtrC parser( aPath );
+  
+    TFindFile fileFinder( aFs );    
+    fileFinder.SetFindMask( KDriveAttExclude|KDriveAttRemovable|KDriveAttRemote|KDriveAttSubsted );
+    
+    _LIT(KMaskFile, "*");          
+    for( TInt driveIndex=0; driveIndex < aDriveArray.Count(); driveIndex++ )
+        {
+        TChar driveChar;
+        User::LeaveIfError( RFs::DriveToChar( aDriveArray[driveIndex], driveChar ) );
+        TBuf16<2> driveBuf(2);
+        driveBuf[0] = TUint( driveChar );
+        driveBuf[1] = TUint( TChar(':') );
+                        
+        TPath path;        
+        path.Copy( driveBuf );        
+        path.Append( parser.Path() );
+                        
+        CDir* dirList( NULL );             
+        fileFinder.FindWildByDir( KMaskFile, path, dirList );
+        if ( dirList )
+          {
+          CleanupStack::PushL( dirList );
+                       
+          const TInt count = dirList->Count();          
+          for( TInt entryIndex = 0; entryIndex < count; entryIndex++ )
+              {
+              const TEntry& entry = (*dirList)[ entryIndex ];                        
+                                                         
+              TFileName file( path );              
+              file.Append( entry.iName );
+              if( entry.IsDir() )
+                  {
+                  file.Append( KDoubleBackSlash );
+                  }
+                                
+              if( !BaflUtils::FileExists( aFs, file ) )
+                  {
+                  continue;
+                  }
+              if( entry.IsDir() && aRecursive )
+                  {                                
+                  FindFilesRecursivelyL( aFs, aDriveArray, file, aFolders );                  
+                  }
+              else
+                  {                                             
+                  HBufC* nameBuf = file.AllocLC();                
+                  aFolders.AppendL( nameBuf );
+                  CleanupStack::Pop( nameBuf );
+                  }              
+              } 
+          
+          CleanupStack::PopAndDestroy( dirList );
+          dirList = 0;
+          } // dirlist
+    
+        } // driveIndex    
+    }
+
 
 // -----------------------------------------------------------------------------
 // hspsServerUtil::hspsServerUtil
--- a/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp	Wed May 12 13:35:37 2010 +0300
@@ -35,6 +35,7 @@
 #include "hspsdefinitionrepository.h"
 #include "hspsdefinitionengineinterface.h"
 #include "hspsconfiguration.h"
+#include "hspsfamily.h"
 #ifdef _hsps_PERFORMANCE_TEST_
 #include "hspstimemon.h"
 #endif //_hsps_PERFORMANCE_TEST_
@@ -316,7 +317,10 @@
     
     // Get active device language
     iDeviceLanguage = GetDeviceLanguage();
-            
+#ifdef HSPS_LOG_ACTIVE    
+    iLogBus->LogText( _L( "ChspsThemeServer::GetDeviceLanguage() %d" ), iDeviceLanguage );
+#endif
+
     // Setup a search mask for finding headers from the cache
     iCacheMask = ChspsODT::NewL();
 
@@ -345,10 +349,13 @@
     // Start observing the notifications
     iDefinitionRepository->RegisterObserverL( *this );
            
-	// Resolution & orientation change listener
+
 #if defined(WINSCW) || defined(__WINS__)
-    iFamilyListener = ChspsFamilyListener::NewL( *this );
-#endif // defined(WINSCW)    
+    // Resolution & orientation change listener
+    iFamily = ChspsFamilyListener::NewL( *this );
+#else 
+    iFamily = ChspsFamily::NewL();
+#endif //defined(WINSCW) || defined(__WINS__)
     
     // Auto-localize ODTs in the Definition Repository when the device language has changed
     HandleLanguageChangeL();            
@@ -440,11 +447,12 @@
     DisableAutoInstallation();
 #endif //__DISABLE_SISX_INSTALLATION_
 
-#if defined(WINSCW) || defined(__WINS__)    
-    delete iFamilyListener;
-    iFamilyListener = NULL;
-#endif // defined(WINSCW)    
-    
+    if ( iFamily )
+        {
+        delete iFamily;
+        iFamily = NULL;
+        }
+
     delete iCenRepListener;
     iCenRepListener = NULL;
     
@@ -515,7 +523,7 @@
 
 #ifdef HSPS_LOG_ACTIVE    
     iLogBus->LogText( _L( "ChspsThemeServer::AddSession(): - now %d concurrent sessions." ),
-            iSessionCount );
+        iSessions.Count() );
 #endif    
     }
 
@@ -544,7 +552,7 @@
 
 #ifdef HSPS_LOG_ACTIVE    
     iLogBus->LogText( _L( "ChspsThemeServer::DropSession(): - %d concurrent sessions left." ),
-            iSessionCount );
+        iSessions.Count() );
 #endif    
     }
   
@@ -1882,10 +1890,6 @@
 //
 TLanguage ChspsThemeServer::GetDeviceLanguage()
     {
-#ifdef HSPS_LOG_ACTIVE    
-    iLogBus->LogText( _L( "ChspsThemeServer::GetDeviceLanguage(): %d returned" ), User::Language() );
-#endif                    
-
     return User::Language();
     } 
 	
@@ -2757,7 +2761,7 @@
     // Activate client specific root configurations from active display resolution
     ActivateRootConfigurationsL();
 #endif // defined(WINSCW)    
-    
+
     res.Close();    
     CleanupStack::PopAndDestroy(1, &res); 
     }
@@ -2774,44 +2778,8 @@
 	iRomInstaller->SetLogBus( iLogBus );
 #endif
 		
-	RPointerArray<HBufC> pluginFolders;
-    CleanupClosePushL( pluginFolders );				
-	        
-    // Find UDA and ROM widgets to be installed     
-    iRomInstaller->FindInstallationFilesL( pluginFolders );
-            
-	// Install the manifest files    
-    for( TInt index=0; index < pluginFolders.Count(); index++ )
-        {         
-        TPtrC namePtr( pluginFolders[index]->Des() );                               
-#ifdef HSPS_LOG_ACTIVE            
-        iLogBus->LogText( _L( "ChspsThemeServer::InstallWidgetsL(): - installing configuration: %S" ), &namePtr );
-#endif      
-                
-        // Synchronous method
-        ThspsServiceCompletedMessage ret = iRomInstaller->InstallThemeL( namePtr  );
-        if ( ret != EhspsInstallThemeSuccess )
-            {
-#ifdef HSPS_LOG_ACTIVE            
-            iLogBus->LogText( _L( "ChspsThemeServer::InstallWidgetsL(): - installation failed: %S" ), &namePtr );
-#endif                  
-//            User::Leave( KErrAbort );
-            }
-        }
-    
-    if ( pluginFolders.Count() == 0 )
-        {
-#ifdef HSPS_LOG_ACTIVE            
-        iLogBus->LogText( _L( "ChspsThemeServer::InstallWidgetsL(): - mandatory plugins were not found!" ) );
-#endif                                  
-        // Mandatory plugins were missing 
-        User::Leave( KErrCorrupt );
-        }
-        
-    pluginFolders.ResetAndDestroy();
-    CleanupStack::PopAndDestroy( 1, &pluginFolders );
-		
-	// The ROM installer is not needed anymore and therefore it can be released
+	iRomInstaller->InstallL();
+			
 	delete iRomInstaller;
 	iRomInstaller = 0;
 	
@@ -3516,7 +3484,7 @@
 void ChspsThemeServer::ActivateRootConfigurationsL()
     {
     // Get family from the active resolution
-    const ThspsFamily family = iFamilyListener->GetFamilyType();
+    const ThspsFamily family = iFamily->GetFamilyType();
         
     // Try to activate an application configuration which was designed 
     // for the active resolution
@@ -3526,6 +3494,8 @@
         HandleFamilyChangeL( KDefaultFamily );
         }
     }
+#endif // defined(WINSCW) || defined(__WINS__)
+
 
 // -----------------------------------------------------------------------------
 // ChspsThemeServer::HandleFamilyChangeL()
@@ -3631,7 +3601,14 @@
     return activated;
     }
 
-#endif // defined(WINSCW)
+// -----------------------------------------------------------------------------
+// ChspsThemeServer::Family()
+// -----------------------------------------------------------------------------
+//
+ChspsFamily* ChspsThemeServer::Family()
+	{
+	return iFamily;
+	}
 
 // end of file
 
--- a/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def	Wed May 12 13:35:37 2010 +0300
@@ -22,33 +22,31 @@
 	?SetLogoFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 21 NONAME ; void ChspsODT::SetLogoFileL(class TDesC16 const &)
 	?SetFamily@ChspsODT@@QAEXK@Z @ 22 NONAME ; void ChspsODT::SetFamily(unsigned long)
 	?CloneL@ChspsODT@@QBEPAV1@XZ @ 23 NONAME ; class ChspsODT * ChspsODT::CloneL(void) const
-	?PackageVersion@ChspsODT@@QBEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & ChspsODT::PackageVersion(void) const
-	?AddResourceL@ChspsODT@@QAEXPAVChspsResource@@@Z @ 25 NONAME ; void ChspsODT::AddResourceL(class ChspsResource *)
-	?SetPackageVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 26 NONAME ; void ChspsODT::SetPackageVersionL(class TDesC16 const &)
-	?SetMultiInstance@ChspsODT@@QAEXH@Z @ 27 NONAME ; void ChspsODT::SetMultiInstance(int)
-	?MultiInstance@ChspsODT@@QBEHXZ @ 28 NONAME ; int ChspsODT::MultiInstance(void) const
-	?ConfigurationType@ChspsODT@@QBEIXZ @ 29 NONAME ; unsigned int ChspsODT::ConfigurationType(void) const
-	?NewLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 30 NONAME ; class ChspsODT * ChspsODT::NewLC(class TDesC8 const &)
-	?ProviderName@ChspsODT@@QBEABVTDesC16@@XZ @ 31 NONAME ; class TDesC16 const & ChspsODT::ProviderName(void) const
-	?ResourceL@ChspsODT@@QBEAAVChspsResource@@H@Z @ 32 NONAME ; class ChspsResource & ChspsODT::ResourceL(int) const
-	?OdtLanguage@ChspsODT@@QBEHXZ @ 33 NONAME ; int ChspsODT::OdtLanguage(void) const
-	?MarshalHeaderL@ChspsODT@@QBEPAVHBufC8@@XZ @ 34 NONAME ; class HBufC8 * ChspsODT::MarshalHeaderL(void) const
-	?RootUid@ChspsODT@@QBEHXZ @ 35 NONAME ; int ChspsODT::RootUid(void) const
-	?ProviderUid@ChspsODT@@QBEHXZ @ 36 NONAME ; int ChspsODT::ProviderUid(void) const
-	?SetDescriptionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 37 NONAME ; void ChspsODT::SetDescriptionL(class TDesC16 const &)
-	?ThemeShortName@ChspsODT@@QBEABVTDesC16@@XZ @ 38 NONAME ; class TDesC16 const & ChspsODT::ThemeShortName(void) const
-	?ThemeFullName@ChspsODT@@QBEABVTDesC16@@XZ @ 39 NONAME ; class TDesC16 const & ChspsODT::ThemeFullName(void) const
-	?SetThemeVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 40 NONAME ; void ChspsODT::SetThemeVersionL(class TDesC16 const &)
-	?InternalizeResourceListL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 41 NONAME ; void ChspsODT::InternalizeResourceListL(class RReadStream &)
-	?CloneL@ChspsODT@@QAEXAAV1@@Z @ 42 NONAME ; void ChspsODT::CloneL(class ChspsODT &)
-	?SetPreviewFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 43 NONAME ; void ChspsODT::SetPreviewFileL(class TDesC16 const &)
-	?SetOdtLanguage@ChspsODT@@QAEXH@Z @ 44 NONAME ; void ChspsODT::SetOdtLanguage(int)
-	?ExternalizeHeaderL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 45 NONAME ; void ChspsODT::ExternalizeHeaderL(class RWriteStream &) const
-	?InternalizeHeaderL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 46 NONAME ; void ChspsODT::InternalizeHeaderL(class RReadStream &)
-	?ExternalizeL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 47 NONAME ; void ChspsODT::ExternalizeL(class RWriteStream &) const
-	?SetProviderUid@ChspsODT@@QAEXH@Z @ 48 NONAME ; void ChspsODT::SetProviderUid(int)
-	?UnMarshalHeaderL@ChspsODT@@QAEXABVTDesC8@@@Z @ 49 NONAME ; void ChspsODT::UnMarshalHeaderL(class TDesC8 const &)
-	?LogoFile@ChspsODT@@QBEABVTDesC16@@XZ @ 50 NONAME ; class TDesC16 const & ChspsODT::LogoFile(void) const
-	?ThemeUid@ChspsODT@@QBEHXZ @ 51 NONAME ; int ChspsODT::ThemeUid(void) const
-	?DeleteAllResources@ChspsODT@@QAEXXZ @ 52 NONAME ; void ChspsODT::DeleteAllResources(void)
+	?AddResourceL@ChspsODT@@QAEXPAVChspsResource@@@Z @ 24 NONAME ; void ChspsODT::AddResourceL(class ChspsResource *)
+	?SetMultiInstance@ChspsODT@@QAEXH@Z @ 25 NONAME ; void ChspsODT::SetMultiInstance(int)
+	?MultiInstance@ChspsODT@@QBEHXZ @ 26 NONAME ; int ChspsODT::MultiInstance(void) const
+	?ConfigurationType@ChspsODT@@QBEIXZ @ 27 NONAME ; unsigned int ChspsODT::ConfigurationType(void) const
+	?NewLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 28 NONAME ; class ChspsODT * ChspsODT::NewLC(class TDesC8 const &)
+	?ProviderName@ChspsODT@@QBEABVTDesC16@@XZ @ 29 NONAME ; class TDesC16 const & ChspsODT::ProviderName(void) const
+	?ResourceL@ChspsODT@@QBEAAVChspsResource@@H@Z @ 30 NONAME ; class ChspsResource & ChspsODT::ResourceL(int) const
+	?OdtLanguage@ChspsODT@@QBEHXZ @ 31 NONAME ; int ChspsODT::OdtLanguage(void) const
+	?MarshalHeaderL@ChspsODT@@QBEPAVHBufC8@@XZ @ 32 NONAME ; class HBufC8 * ChspsODT::MarshalHeaderL(void) const
+	?RootUid@ChspsODT@@QBEHXZ @ 33 NONAME ; int ChspsODT::RootUid(void) const
+	?ProviderUid@ChspsODT@@QBEHXZ @ 34 NONAME ; int ChspsODT::ProviderUid(void) const
+	?SetDescriptionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 35 NONAME ; void ChspsODT::SetDescriptionL(class TDesC16 const &)
+	?ThemeShortName@ChspsODT@@QBEABVTDesC16@@XZ @ 36 NONAME ; class TDesC16 const & ChspsODT::ThemeShortName(void) const
+	?ThemeFullName@ChspsODT@@QBEABVTDesC16@@XZ @ 37 NONAME ; class TDesC16 const & ChspsODT::ThemeFullName(void) const
+	?SetThemeVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 38 NONAME ; void ChspsODT::SetThemeVersionL(class TDesC16 const &)
+	?InternalizeResourceListL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 39 NONAME ; void ChspsODT::InternalizeResourceListL(class RReadStream &)
+	?CloneL@ChspsODT@@QAEXAAV1@@Z @ 40 NONAME ; void ChspsODT::CloneL(class ChspsODT &)
+	?SetPreviewFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 41 NONAME ; void ChspsODT::SetPreviewFileL(class TDesC16 const &)
+	?SetOdtLanguage@ChspsODT@@QAEXH@Z @ 42 NONAME ; void ChspsODT::SetOdtLanguage(int)
+	?ExternalizeHeaderL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 43 NONAME ; void ChspsODT::ExternalizeHeaderL(class RWriteStream &) const
+	?InternalizeHeaderL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 44 NONAME ; void ChspsODT::InternalizeHeaderL(class RReadStream &)
+	?ExternalizeL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 45 NONAME ; void ChspsODT::ExternalizeL(class RWriteStream &) const
+	?SetProviderUid@ChspsODT@@QAEXH@Z @ 46 NONAME ; void ChspsODT::SetProviderUid(int)
+	?UnMarshalHeaderL@ChspsODT@@QAEXABVTDesC8@@@Z @ 47 NONAME ; void ChspsODT::UnMarshalHeaderL(class TDesC8 const &)
+	?DeleteAllResources@ChspsODT@@QAEXXZ @ 48 NONAME ; void ChspsODT::DeleteAllResources(void)
+	?LogoFile@ChspsODT@@QBEABVTDesC16@@XZ @ 49 NONAME ; class TDesC16 const & ChspsODT::LogoFile(void) const
+	?ThemeUid@ChspsODT@@QBEHXZ @ 50 NONAME ; int ChspsODT::ThemeUid(void) const
 
--- a/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def	Wed May 12 13:35:37 2010 +0300
@@ -16,8 +16,8 @@
 	_ZN8ChspsODT16UnMarshalHeaderLERK6TDesC8 @ 15 NONAME
 	_ZN8ChspsODT17SetThemeFullNameLERK7TDesC16 @ 16 NONAME
 	_ZN8ChspsODT17UnMarshalHeaderLCERK6TDesC8 @ 17 NONAME
-	_ZN8ChspsODT18InternalizeHeaderLER11RReadStream @ 18 NONAME
-	_ZN8ChspsODT18SetPackageVersionLERK7TDesC16 @ 19 NONAME
+	_ZN8ChspsODT18DeleteAllResourcesEv @ 18 NONAME
+	_ZN8ChspsODT18InternalizeHeaderLER11RReadStream @ 19 NONAME
 	_ZN8ChspsODT18SetThemeShortNameLERK7TDesC16 @ 20 NONAME
 	_ZN8ChspsODT20SetConfigurationTypeEj @ 21 NONAME
 	_ZN8ChspsODT24InternalizeResourceListLER11RReadStream @ 22 NONAME
@@ -38,18 +38,16 @@
 	_ZNK8ChspsODT13ResourceCountEv @ 37 NONAME
 	_ZNK8ChspsODT13ThemeFullNameEv @ 38 NONAME
 	_ZNK8ChspsODT14MarshalHeaderLEv @ 39 NONAME
-	_ZNK8ChspsODT14PackageVersionEv @ 40 NONAME
-	_ZNK8ChspsODT14ThemeShortNameEv @ 41 NONAME
-	_ZNK8ChspsODT17ConfigurationTypeEv @ 42 NONAME
-	_ZNK8ChspsODT24ExternalizeResourceListLER12RWriteStream @ 43 NONAME
-	_ZNK8ChspsODT5FlagsEv @ 44 NONAME
-	_ZNK8ChspsODT6CloneLEv @ 45 NONAME
-	_ZNK8ChspsODT6FamilyEv @ 46 NONAME
-	_ZNK8ChspsODT7RootUidEv @ 47 NONAME
-	_ZNK8ChspsODT8LogoFileEv @ 48 NONAME
-	_ZNK8ChspsODT8ThemeUidEv @ 49 NONAME
-	_ZNK8ChspsODT9ResourceLEi @ 50 NONAME
-	_ZTI8ChspsODT @ 51 NONAME
-	_ZTV8ChspsODT @ 52 NONAME
-	_ZN8ChspsODT18DeleteAllResourcesEv @ 53 NONAME
+	_ZNK8ChspsODT14ThemeShortNameEv @ 40 NONAME
+	_ZNK8ChspsODT17ConfigurationTypeEv @ 41 NONAME
+	_ZNK8ChspsODT24ExternalizeResourceListLER12RWriteStream @ 42 NONAME
+	_ZNK8ChspsODT5FlagsEv @ 43 NONAME
+	_ZNK8ChspsODT6CloneLEv @ 44 NONAME
+	_ZNK8ChspsODT6FamilyEv @ 45 NONAME
+	_ZNK8ChspsODT7RootUidEv @ 46 NONAME
+	_ZNK8ChspsODT8LogoFileEv @ 47 NONAME
+	_ZNK8ChspsODT8ThemeUidEv @ 48 NONAME
+	_ZNK8ChspsODT9ResourceLEi @ 49 NONAME
+	_ZTI8ChspsODT @ 50 NONAME
+	_ZTV8ChspsODT @ 51 NONAME
 
--- a/homescreenpluginsrv/hspsodt/src/hspsodt.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspsodt/src/hspsodt.cpp	Wed May 12 13:35:37 2010 +0300
@@ -22,6 +22,9 @@
 #include "hspsdomdocument.h"
 #include "hspsresource.h"
 
+// ODT version number
+_LIT( KHpspOdtVersion, "3.0" );
+
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -62,7 +65,6 @@
     aTarget.SetThemeFullNameL(      aSource.ThemeFullName() );
     aTarget.SetThemeShortNameL(     aSource.ThemeShortName() );
     aTarget.SetThemeVersionL(       aSource.ThemeVersion() );
-    aTarget.SetPackageVersionL(     aSource.PackageVersion() );
     aTarget.SetDescriptionL(        aSource.Description() );
     aTarget.SetLogoFileL(           aSource.LogoFile() );
     aTarget.SetPreviewFileL(        aSource.PreviewFile() );
@@ -126,7 +128,6 @@
     delete iThemeFullName;
     delete iThemeShortName;
     delete iThemeVersion;
-    delete iPackageVersion;
     // clean up the array
     if( iResourceList )
         {
@@ -219,14 +220,10 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------    
 void ChspsODT::ExternalizeHeaderL( RWriteStream& aStream ) const
-    {    
-    const TDesC& packageVersion = PackageVersion();
-    aStream.WriteInt32L( packageVersion.Length() );
-    if( packageVersion.Length() > 0 )
-        {
-        aStream << packageVersion;
-        }
-        
+    {
+    aStream.WriteInt32L( KHpspOdtVersion().Length() );
+    aStream << KHpspOdtVersion();
+
     aStream.WriteUint32L( iThemeUid );
     
     const TDesC& providerName = ProviderName();
@@ -297,11 +294,8 @@
 TInt ChspsODT::HeaderSize() const
     {
     TInt size = sizeof( TInt32 );
-    if( PackageVersion().Length() > 0 )
-        {         
-        size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
-        size += PackageVersion().Size();
-        }
+    size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+    size += KHpspOdtVersion().Size();
     
     size += sizeof( TUint32 ); // iThemeUid
     
@@ -370,42 +364,18 @@
 EXPORT_C void ChspsODT::InternalizeHeaderL( RReadStream& aStream )
     {    
     TInt len = aStream.ReadInt32L();
-    HBufC* version = NULL;
-    if( len > 0 )
-        {
-        version = HBufC::NewL( aStream, len );
-        }
-    CleanupStack::PushL( version );    
-    
-    // Check version request.
-    if( iPackageVersion )
+    HBufC* odtVersion = NULL;
+    if ( len > 0 )
         {
-        TBool supported = ETrue;
-        if( version == NULL )
-            {
-            supported = EFalse;
-            }
-        else if( version &&
-                 version->Compare( *iPackageVersion ) != 0 )
-            {
-            supported = EFalse;
-            }    
-    
-        if( !supported )
-            {
-            // Package version check requested (iPackageVersion defined) 
-            // and package version not supported
-            User::Leave( KErrNotSupported );
-            }
+        odtVersion = HBufC::NewL( aStream, len );
         }
-    
-    if( version )
+    CleanupStack::PushL( odtVersion );
+    // ODT version check.
+    if ( KHpspOdtVersion() != *odtVersion )
         {
-        delete iPackageVersion;
-        iPackageVersion = NULL;    
-        iPackageVersion = version->AllocL();
+        User::Leave( KErrNotSupported );
         }
-    CleanupStack::PopAndDestroy( version );
+    CleanupStack::PopAndDestroy( odtVersion );
 
     iThemeUid = aStream.ReadUint32L();
           
@@ -927,42 +897,6 @@
 	}
 
 // -----------------------------------------------------------------------------
-// ChspsODT::SetPackageVersionL
-// Set package version
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C void ChspsODT::SetPackageVersionL( const TDesC& aVersion )
-    {
-    if( iPackageVersion )
-        {
-        delete iPackageVersion;
-        iPackageVersion = NULL;
-        }
-    
-    if( aVersion.Length() != 0 )
-        {        
-        iPackageVersion = aVersion.AllocL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsODT::PackageVersion
-// Get package version
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C const TDesC& ChspsODT::PackageVersion() const
-    {
-    if ( iPackageVersion )
-        {
-        return *iPackageVersion;
-        }
-    else
-        {
-        return KNullDesC;
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // ChspsODT::SetFamily
 // -----------------------------------------------------------------------------
 EXPORT_C void ChspsODT::SetFamily( const TUint32 aFamilyMask )
--- a/homescreenpluginsrv/hspstools/group/hspstools.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspstools/group/hspstools.mmp	Wed May 12 13:35:37 2010 +0300
@@ -57,7 +57,7 @@
 
 nostrictdef
 
-LIBRARY		 euser.lib flogger.lib hspsdomdocument.lib liwservicehandler.lib estor.lib efsrv.lib hspsodt.lib charconv.lib hspsresource.lib
+LIBRARY    euser.lib flogger.lib hspsdomdocument.lib liwservicehandler.lib estor.lib efsrv.lib hspsodt.lib charconv.lib hspsresource.lib
 
 #ifdef ENABLE_ABIV2_MODE
 DEBUGGABLE
--- a/homescreenpluginsrv/hspstools/src/hspslogbusfile.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/hspstools/src/hspslogbusfile.cpp	Wed May 12 13:35:37 2010 +0300
@@ -18,7 +18,7 @@
 
 #include "hspslogbusfile.h"
 #include "e32debug.h"
-
+#include "f32file.h"
 // Constants
 
 #ifdef HSPS_BUILD_LOG_IMPLEMENTATION
@@ -86,6 +86,13 @@
 #ifdef HSPS_BUILD_LOG_IMPLEMENTATION
 EXPORT_C TFileName ChspsLogBusFile::CreateLogFilename( const TDesC& aBaseline )
     {
+    RFs fs;
+    if ( KErrNone == fs.Connect() )
+        {
+        fs.MkDirAll(_L("c:\\logs\\hsps\\"));
+        fs.Close();
+        }
+    
     TFileName fileName;
     
     // Append baseline and trailing '_'.
--- a/homescreenpluginsrv/inc/hspsclient.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/inc/hspsclient.h	Wed May 12 13:35:37 2010 +0300
@@ -267,8 +267,10 @@
         /**
         * From MhspsMaintenanceService.
         */
-        IMPORT_C ThspsServiceCompletedMessage hspsGetListHeaders(const ChspsODT& aSearchMask,
-                                   CArrayPtrFlat<ChspsODT>& aHeaderList);
+        IMPORT_C ThspsServiceCompletedMessage hspsGetListHeaders(
+                const ChspsODT& aSearchMask,
+                const TBool aCopyLogos, 
+                CArrayPtrFlat<ChspsODT>& aHeaderList );
         
         /** 
         * From MhspsMaintenanceService.
@@ -324,11 +326,14 @@
         * @param aSearchMask is ChspsODT-object which attributes are filled to present search 
         *        parameters for theme set queried by client. This parametrisation follows 
         *        the high-level schema. 
+        * @param aCopyLogos is set if client wants to view logos         
         * @param aHeaderList is an list object able to carry ChspsODT-objects. 
         * @return Error code
         */
-        IMPORT_C TInt hspsGetHeaders(const ChspsODT& aSearchMask,
-                                   CArrayPtrFlat<ChspsODT>& aHeaderList);
+        IMPORT_C TInt hspsGetHeaders(
+                const ChspsODT& aSearchMask,
+                const TBool aCopyLogos,
+                CArrayPtrFlat<ChspsODT>& aHeaderList);
 
         /**
         * From MhspsMaintenanceService        
--- a/homescreenpluginsrv/inc/hspsclientsession.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/inc/hspsclientsession.h	Wed May 12 13:35:37 2010 +0300
@@ -85,11 +85,12 @@
         * @since S60 5.0
         * @param aResultData        Result data.
         * @param aSearchMaskData    Search mask data.
+        * @param aCopyLogos         Set if logo resources should be copied to client         
         * @param aHeaderData        Header data.
         * @return Symbian error code.
         */
         IMPORT_C TInt GetListHeaders(TDes8& aResultData, const TDesC8& aSearchMaskData,
-                       TDes8& aHeaderData);
+                       const TBool aCopyLogos,TDes8& aHeaderData);
     
         /**
         * SetActiveTheme.
--- a/homescreenpluginsrv/inc/hspsodt.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/inc/hspsodt.h	Wed May 12 13:35:37 2010 +0300
@@ -384,22 +384,6 @@
         * @return TUint configuration type.
         */ 
         IMPORT_C TUint ConfigurationType() const;
-
-        /**
-        * Set package version.
-        * 
-        * @since S60 5.0
-        * @param aVersion Version. 
-        */ 
-        IMPORT_C void SetPackageVersionL( const TDesC& aVersion );
-        
-        /**
-        * Get configuration type.
-        * 
-        * @since S60 5.0
-        * @return TDesC package version
-        */ 
-        IMPORT_C const TDesC& PackageVersion() const;
         
         /**
         * Set family.
@@ -506,9 +490,6 @@
         TInt HeaderSize() const;
         
     private:    // Data        
-        // Indicates whether we are able to internalize the instance        
-        HBufC* iPackageVersion;        
-        
         // Identifies specific configuration
         TUint  iThemeUid;
         HBufC* iProviderName;
--- a/homescreenpluginsrv/inc/hspsthememanagement.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/inc/hspsthememanagement.h	Wed May 12 13:35:37 2010 +0300
@@ -1294,11 +1294,14 @@
         * @param aSearchMask is ChspsODT-object which attributes are filled to present search 
         *        parameters for theme set queried by client. This parametrisation follows the 
         *        high-level schema. 
+        * @param aCopyLogos indicates that logo resources should be copied to a private directory
         * @param aHeaderList is an list object able to carry ChspsODT-objects. 
         * @return ThspsServiceCompletedMessage expressing the result of the call.
         */
-        virtual ThspsServiceCompletedMessage hspsGetListHeaders(const ChspsODT& aSearchMask,
-                                 CArrayPtrFlat<ChspsODT>& aHeaderList) = 0;
+        virtual ThspsServiceCompletedMessage hspsGetListHeaders(
+                const ChspsODT& aSearchMask,
+                const TBool aCopyLogos, 
+                CArrayPtrFlat<ChspsODT>& aHeaderList) = 0;
 
         /** hspsGetListHeaders
         * 
--- a/homescreenpluginsrv/rom/hsps.iby	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreenpluginsrv/rom/hsps.iby	Wed May 12 13:35:37 2010 +0300
@@ -10,7 +10,7 @@
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
-*
+* NTT DOCOMO, INC - Fixing Bug 399 - hsps.iby includes 200159C9.txt which is already included by s60cenrep_variant.iby
 * Description:  IBY file for ROM image creation
 *
 */
@@ -47,9 +47,6 @@
 //Backup registration
 data=DATAZ_\private\200159c0\backup_registration.xml        private\200159c0\backup_registration.xml     
 
-//Cenrep ini
-data=DATAZ_\private\10202be9\200159c9.txt			private\10202be9\200159c9.txt
-
 #endif // HSPS_IBY
 
 //  End of File  
--- a/homescreensrv_plat/ai_content_model_api/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_content_model_api/group/bld.inf	Wed May 12 13:35:37 2010 +0300
@@ -28,8 +28,3 @@
 ../inc/aicontentobserver.h     MW_LAYER_PLATFORM_EXPORT_PATH(aicontentobserver.h)
 ../inc/aicontentmodel.h     MW_LAYER_PLATFORM_EXPORT_PATH(aicontentmodel.h)
 ../inc/aicontentrequest.h   MW_LAYER_PLATFORM_EXPORT_PATH(aicontentrequest.h)
-
-// Deprecated
-../inc/aipropertyextension.h     MW_LAYER_PLATFORM_EXPORT_PATH(aipropertyextension.h)
-../inc/aipropertyextension.inl     MW_LAYER_PLATFORM_EXPORT_PATH(aipropertyextension.inl)
-../inc/aieventhandlerextension.h     MW_LAYER_PLATFORM_EXPORT_PATH(aieventhandlerextension.h)
--- a/homescreensrv_plat/ai_content_model_api/inc/aieventhandlerextension.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Event handling extension for the CAiContentPublisher interface.
-*
-*/
-
-
-#ifndef M_AIEVENTHANDLEREXTENSION_H
-#define M_AIEVENTHANDLEREXTENSION_H
-
-#include <e32std.h>
-
-/**
- *  Extension of the CAiContentPublisher interface, which allows Active Idle
- *  Framework to notify their plug-ins that they must to handle event.
- *  Plug-ins must provide implementation of interface only if they are
- *  supporting event model (e.g. provides possibility to manipulate engine 
- *  properties via UI).
- *
- *  @since S60 3.2
- */
-class MAiEventHandlerExtension
-    {
-public:
-    /**
-     * Invoked by the framework when plug-in must handle an event.
-     *
-     * @param aEvent - unique identifier of event from plug-in content model.
-     * @param aParam - parameters associated with event. Each UI Definition
-     *        declares events in the format: <event name>(<event params>),
-     *        where <event name> is mapped by the framework to unique
-     *        identifier supplied in aEvent, <event params> are provided to
-     *        plug-in as-is in the descriptor.
-     */
-    virtual void HandleEvent(TInt aEvent, const TDesC& aParam) = 0;
-
-    /**
-    * Invoked by the framework when plug-in must handle an event.
-    *
-    * @param aEventName - name of the event from plug-in content model.
-    * @param aParam - parameters associated with event. Each UI Definition
-    *        declares events in the format: <event name>(<event params>),
-    *        where  <event name> mapping to unique identifier supplied by event 
-    *        is failed by the frame work then the  <event name> and  
-    *        <event params>  are provied to plug-in as-is in the descriptor.
-    */
-    virtual void HandleEvent(const TDesC& /*aEventName*/, const TDesC& /*aParam*/) { };
-    
-    /**
-    * Invoked by the framework for querying if plugin has menu item
-    *
-    * @param aMenuItem menu item name
-    * @return ETrue if plugin has specific menu item, EFalse otherwise
-    */    
-    virtual TBool HasMenuItem(const TDesC& /*aMenuItem*/) { return EFalse; }
-    
-protected:
-    /**
-     * Protected destructor prevents deletion through this interface.
-     */
-    ~MAiEventHandlerExtension() { }
-    };
-
-#endif // M_AIEVENTHANDLEREXTENSION_H
--- a/homescreensrv_plat/ai_content_model_api/inc/aipropertyextension.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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: 
-*
-*/
-
-
-#ifndef M_AIPROPERTYEXTENSION_H
-#define M_AIPROPERTYEXTENSION_H
-
-#include <e32std.h>
-
-/**
- * Maximum length for Content publisher name
- */
-const TInt KAiPublisherNameMaxLength = 128;
-
-/**
- * Maximum length for Content publisher namespace
- */
-const TInt KAiPublisherNamespaceMaxLength = 32;
-
-/**
- * Content publisher name buffer
- */
-typedef TBuf<KAiPublisherNameMaxLength> TAiPublisherName;
-
-/**
- * Content publisher namespace buffer
- */
-typedef TBuf8<KAiPublisherNamespaceMaxLength> TAiPublisherNamespace;
-
-/**
- * Contains information about Content publisher plug-in.
- */
-struct TAiPublisherInfo
-    {
-    TAiPublisherInfo() 
-        : iUid( TUid::Null() ), 
-          iName( KNullDesC ), 
-          iNamespace( KNullDesC8 )
-        {
-        }
-    
-    inline TAiPublisherInfo& operator= (const TAiPublisherInfo& aInfo)
-        {
-        iUid = TUid::Uid( aInfo.iUid.iUid );
-        iName.Copy( aInfo.iName );
-        iNamespace.Copy( aInfo.iNamespace );   
-        return *this;  
-        }
-        
-    inline TBool operator== (const TAiPublisherInfo& aInfo) const
-        {
-        if( iUid == aInfo.iUid && 
-            iName == aInfo.iName &&
-            iNamespace == aInfo.iNamespace )
-            {
-            return ETrue;
-            }
-            
-        return EFalse;                                       
-        }
-    
-    TUid                  iUid;
-    TAiPublisherName      iName;
-    TAiPublisherNamespace iNamespace;
-    };
-
-/**
- * Defines set of properties supported by plug-in.
- *
- * Example how to provide and set the properties.
- * @code
- * void CMyAiPlugin::ConstructL()
- *     {
- *     iInfo = new (ELeave) TAiPublisherInfo;
- *     iContent = AiUtility::CreateContentItemArrayIteratorL( KMyAiPluginContent );
- *     iResources = AiUtility::CreateContentItemArrayIteratorL( KMyAiPluginResources );
- *     iEvents = AiUtility::CreateContentItemArrayIteratorL( KMyAiPluginEvents );
- *     }
- *
- * void CMyAiPlugin::SetPropertyL( TInt aProperty, TAny* aValue )
- *     {
- *     if( !aValue ) return;
- * 
- *     switch( aProperty )
- *         {
- *         case EAiPublisherInfo:
- *             {
- *             const TAiPublisherInfo* info =
- *                 static_cast<const TAiPublisherInfo*>(aValue);
- *             iInfo->iUid.iUid = info->iUid.iUid;
- *             iInfo->iName.Copy( info->iName );
- *             break;
- *             }
- *         }
- *      }
- *
- * TAny* CMyAiPlugin::GetPropertyL( TInt aProperty )
- *     {
- *     switch( aProperty )
- *         {
- *         case EAiPublisherInfo:
- *             return iInfo;
- * 
- *         case EAiPublisherContent:
- *             return iContent;
- * 
- *         case EAiPublisherResources:
- *             return iResources;
- * 
- *         case EAiPublisherEvents:
- *             return iEvents;
- *         }
- *     return NULL;
- *     }
- * @endcode
- */
-enum TAiPublisherProperty
-    {
-    /**
-     * Enables read-only access to Plug-in information. GetProperty MUST return
-     * instance of struct TAiPublisherInfo via TAny* .
-     */
-    EAiPublisherInfo = 0x0001,
-
-    /**
-     * Enables read-only access to iterator of content selectors. GetProperty
-     * MUST return instance of MAiContentItemIterator for content selectors.
-     */
-    EAiPublisherContent,
-
-    /**
-     * Enables read-only access to iterator of content references. GetProperty
-     * MUST return instance of MAiContentItemIterator for content references.
-     */
-    EAiPublisherResources,
-
-    /**
-     * Enables read-only access to iterator of events supported by plug-in.
-     * GetProperty MUST return instance of MAiContentItemIterator for events.
-     */
-    EAiPublisherEvents,
-
-    /**
-     * Provides access to MAiContentRequest interface for refreshing a content
-     * item.
-     * @see EAiPublisherContent
-     */
-    EAiContentRequest,
-
-    /**
-     * Provides access to MAiContentRequest interface for refreshing a resource
-     * item.
-     * @see EAiPublisherResources
-     */
-    EAiResourceRequest,
-
-    /**
-     * Provides access to localized plugin name if supported. HBufC*
-     * @see EAiPublisherResources
-     */
-    EAiPluginName
-    };
-
-
-/**
- * Property extension interface for CAiContentPublisher.
- *
- * @see CAiContentPublisher::Extension
- * @since S60 3.2
- */
-class MAiPropertyExtension
-    {
-public:  // New functions
-
-    /**
-     * Read property of publisher plug-in.
-     *
-     * @param aProperty - identification of property.
-     * @return Pointer to property value.
-     */
-    virtual TAny* GetPropertyL(TInt aProperty) = 0;
-
-    /**
-     * Helper function for accessing the Publisher Info Property.
-     */
-    inline const TAiPublisherInfo* PublisherInfoL();
-
-    /**
-     * Write property value.
-     *
-     * @param aProperty - identification of property.
-     * @param aValue - contains pointer to property value.
-     */
-    virtual void SetPropertyL(TInt aProperty, TAny* aValue) = 0;
-
-protected:
-    /**
-     * Protected destructor prevents deletion through this interface.
-     */
-    ~MAiPropertyExtension() { }
-    };
-
-#include <aipropertyextension.inl>
-
-#endif  // M_AIPROPERTYEXTENSION_H
--- a/homescreensrv_plat/ai_content_model_api/inc/aipropertyextension.inl	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
-* Copyright (c) 2005-2005 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:  Inline function implementations for MAiPropertyExtension
-*
-*/
-
-
-inline const TAiPublisherInfo* MAiPropertyExtension::PublisherInfoL()
-    {
-    return static_cast<TAiPublisherInfo*>(this->GetPropertyL(EAiPublisherInfo));
-    }
--- a/homescreensrv_plat/ai_plugin_information_api/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_plugin_information_api/group/bld.inf	Wed May 12 13:35:37 2010 +0300
@@ -25,4 +25,3 @@
 PRJ_EXPORTS
 
 ../inc/activeidle2domainpskeys.h     MW_LAYER_PLATFORM_EXPORT_PATH(activeidle2domainpskeys.h)
-../inc/activeidle2internalpskeys.h     MW_LAYER_PLATFORM_EXPORT_PATH(activeidle2internalpskeys.h)
--- a/homescreensrv_plat/ai_plugin_information_api/inc/activeidle2domainpskeys.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_plugin_information_api/inc/activeidle2domainpskeys.h	Wed May 12 13:35:37 2010 +0300
@@ -68,10 +68,6 @@
 
 const TUint KActiveIdleActOnSendKey = 0x00000004; // Contains 0 if we are to ignore the send or > 0 if we need to react to it
 
-const TUint KActiveIdleTouchToolbarWidth = 0x00000005;
-
-const TUint KActiveIdleTouchToolbarHeight = 0x00000006;
-
 const TUint KActiveIdleSimRegFailedReceived = 0x00000007; // Contains 1 if we have received sim reg failed message, 0 if not.
 
 enum EPSActiveIdleSimRegReceiveStatus
@@ -85,33 +81,6 @@
     EPSSimRegFailedMessageReceived
 };
 
-const TUint KActiveIdleThemeSupportsXsp = 0x00000008;   // Contains one value from following enumeration
-
-enum EPSActiveIdleThemeSupportsXsp
-{
-    // Value indicates that xSP feature is not supported in currently active theme
-    EPSAiXspNotSupported,
-
-    // Value indicates that the current theme supports the xSP feature
-    EPSAiXspIsSupported
-};
-
-const TUint KActiveIdleLaunch = 0x00000009; // Contains information if shortcut launching is ongoing or not
-
-enum EPSActiveIdleIdleLaunch
-{
-
-	// Value indicates that no shortcut is in launching state and new launch tapping can be handled
-	EPSAiLaunchNotActive = 0,
-	
-	// Value indicates that active idle shortcut is launching
-	EPSAiLaunchIsActive	
-};
-
-
-// Indicates that Active Idle 2 should be restarted.
-const TUint KActiveIdleRestartAI2 = 0x0000000B;
-
 // Indicates that all the CPS Harvester plugins have been updated
 const TUint KActiveIdleCpsPluginsUpdated = 0x0000000C;
 
@@ -150,21 +119,6 @@
 */
 const TUid KPSUidActiveIdle2 =  {0x102750F0}; // ActiveIdle2 SID
 
-/**
-*
-* First iterate Active plugin UID range to find all
-* active plugin UID's. Use that UID as a key to find the plugins name
-* from the name range.
-*
-*/
-
-/**
-* Active plugin count
-*
-* Possible integer values:
-* 0x000000000 - 0xFFFFFFFF : Active plugin count
-*/
-const TUint KAIActivePluginCount = 0x00000000;
 
 /**
 * Active plugin UID range
@@ -175,13 +129,4 @@
 const TUint KAIActivePluginRangeStart = 0x00000001;
 const TUint KAIActivePluginRangeEnd   = 0x0FFFFFFF;
 
-/**
-* Active plugin name range
-*
-* Possible string values:
-* Plugin name
-*/
-const TUint KAIPluginNameRangeStart = 0x10000000;
-const TUint KAIPluginNameRangeEnd   = 0xFFFFFFFF;
-
 #endif // ACTIVEIDLE2_DOMAIN_PS_KEYS_H
--- a/homescreensrv_plat/ai_plugin_information_api/inc/activeidle2internalpskeys.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2002 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:  Internal Publish & Subscribe keys for Active Idle 2
-*
-*/
-
-
-#ifndef __ACTIVEIDLE2INTERNALPSKEYS_H__
-#define __ACTIVEIDLE2INTERNALPSKEYS_H__
-
-/**
- * Gives possibility to execute shortcuts defined by localapp URL.
- * This UID is used as a key id under KUidSystemCategory.
- * Clients must supply string in localapp URL format defined by RFC 2396.
- *
- * @type RProperty::EText
- */
-const TUint32 KPSUidShortcutCmd = 0x102750FF;
-
-/**
- * Shortcut Plug-in command for enabling keylock.
- */
-_LIT( KAiPSEnableKeyLock, "localapp:keylock?on");
-
-/**
- * Shortcut Plug-in command for canceling keylock.
- */
-_LIT( KAiPSSkipKeyLock, "localapp:keylock?skip");
-
-/**
- * Shortcut Plug-in command for timeoutting keylock.
- */
-_LIT( KAiPSKeyLockTimeout, "localapp:keylock?timeout");
-
-/**
- * Shortcut Plug-in command for launching Logs to dialed calls view.
- */
-_LIT( KAiPSLaunchLogs, "localapp:logs?view=dialled");
-
-/**
- * Shortcut Plug-in command for launching Voice Dial UI.
- */
-_LIT( KAiPSLaunchNameDialer, "localapp:voicedial");
-
-/**
- * Shortcut Plug-in command for canceling voice dial ui.
- */
-_LIT( KAiPSSkipNameDialer, "localapp:voicedial?skip");
-
-
-// Restart code for category KPSUidAiInformation = 0x101FD657 key KActiveIdleRestartAI2 0xA
-const TInt KActiveIdleRestartCode = 0xFA93BAD2;
-
-
-
-/**
- * Publish and Subscribe key for data plugin states in KPSUidActiveIdle2 category (AI plug-in registry API)
- */
-const TUint KPSAiDataPluginState = 0x0000000F; //  Contains one value from following emuneration
-
-/**
- * States for the KPSAiDataPluginState key
- */
-enum EPSAiDataPluginState
-{    
-    EPSAiDataPluginsNotLoaded,
-    EPSAiDataPluginsLoaded
-};
-
-
-#endif // __ACTIVEIDLE2INTERNALPSKEYS_H__
--- a/homescreensrv_plat/ai_plugin_management_api/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_plugin_management_api/group/bld.inf	Wed May 12 13:35:37 2010 +0300
@@ -33,7 +33,3 @@
 ../inc/hscontentpublisher.inl        MW_LAYER_PLATFORM_EXPORT_PATH(hscontentpublisher.inl)
 ../inc/hspublisherinfo.h             MW_LAYER_PLATFORM_EXPORT_PATH(hspublisherinfo.h)
 ../inc/hspublisherinfo.inl           MW_LAYER_PLATFORM_EXPORT_PATH(hspublisherinfo.inl)
-
-// Deprecated
-../inc/aicontentpublisheruid.hrh     MW_LAYER_PLATFORM_EXPORT_PATH(aicontentpublisheruid.hrh)
-../inc/aicontentpublisher.h          MW_LAYER_PLATFORM_EXPORT_PATH(aicontentpublisher.h)
--- a/homescreensrv_plat/ai_plugin_management_api/inc/aicontentpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,398 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Interface for Active Idle content publisher plug-ins.
-*
-*/
-
-
-#ifndef C_AICONTENTPUBLISHER_H
-#define C_AICONTENTPUBLISHER_H
-
-#include <ecom/ecom.h>
-#include <aicontentpublisheruid.hrh>
-
-/**
- * ECom plugin interface UID
- */
-const TUid KInterfaceUidContentPlugin = { AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER }; 
-
-/**
- * API Extension UID for MAiPropertyExtension.
- *
- * @see CAiContentPublisher::Extension
- * @see MAiPropertyExtension
- */
-const TUid KExtensionUidProperty      = { 0x1 };
-
-/**
- * API Extension UID for MAiEventExtension.
- *
- * @see CAiContentPublisher::Extension
- * @see MAiEventExtension
- */
-const TUid KExtensionUidEventHandler  = { 0x2 };
-
-/**
- * Defines set of reasons for plug-in state change.
- */
-enum TAiTransitionReason
-    {
-    
-    /**
-     * Unknown transition reason.
-     */
-    EAiUnknownTransitionReason = 0,
-    
-    /**
-     * System has started up.
-     */
-    EAiSystemStartup,
-
-    /**
-     * System is shutting down.
-     */
-    EAiSystemShutdown,
-
-    /**
-     * Backlight on.
-     */
-    EAiBacklightOn,
-
-    /**
-     * Backlight off.
-     */
-    EAiBacklightOff,
-
-    /**
-     * Backup or restore has been initiated.
-     */
-    EAiBackupRestoreStarted,
-
-    /**
-     * Backup or restore has ended.
-     */
-    EAiBackupRestoreEnded,
-
-    /**
-     * Call started.
-     */
-    EAiPhoneCallStarted,
-
-    /**
-     * Call ended.
-     */
-    EAiPhoneCallEnded,
-    
-    /**
-     * Active Idle UI Definition change has started.
-     */
-    EAiUiDefinitionChangeStarted,
-
-    /**
-     * Active Idle UI Definition change has ended.
-     */
-    EAiUiDefinitionChangeEnded,
-
-    /**
-     * Phone general theme has changed.
-     */
-    EAiGeneralThemeChanged,
-    
-    /**
-     * Screen layout has changed.
-     */
-    EAiScreenLayoutChanged,
-
-    /**
-     * System clock crossed midnight.
-     */
-    EAiMidnightPassed,
-
-    /**
-     * Language has been changed.
-     */
-    EAiLanguageChanged,
-
-    /**
-     * System time has been changed by user.
-     */
-    EAiTimeChanged,
-
-    /**
-     * Idle changes to background.
-     */
-    EAiIdleBackground,
-
-    /**
-     * Idle changes to foreground.
-     */
-    EAiIdleForeground,
-
-    /**
-     * Suspending plugins.
-     */
-    EAiSuspendPlugins,
-
-    /**
-     * Keylock enabled.
-     */
-    EAiKeylockEnabled,
-
-    /**
-     * Keylock disabled.
-     */
-    EAiKeylockDisabled,
-    
-    /**
-	 * Plugins can go online
-	 */
-	EAiIdleOnLine,
-	
-	/**
-	 * Plugins must go offline 
-	 */
-	EAiIdleOffLine,
-	
-	/**
-	 * Page changed    
-	 */
-	EAiIdlePageSwitch
-    };
-
-class MAiContentObserver;
-class MAiPluginSettings;
-typedef RPointerArray< MAiPluginSettings > RAiSettingsItemArray;
-
-/**
- *  ECom plug-in interface that Active Idle plug-ins must implement.
- *  It is used to control plug-in life cycle: load/destroy plug-ins;
- *  suspend/resume plug-in execution.
- *
- *  @since S60 3.2
- */
-class CAiContentPublisher : public CBase
-    {
-public:   // Constructors and destructor
-
-    /**
-     * Creates a new plug-in instance based on implementation UID.
-     *
-     * @param aImpUid implementation UID of plug-in to instantiate.
-     * @return pointer to the instantiated interface implementation.
-     * @pre Interface implementation exists by uid aImpUid.
-     */
-    inline static CAiContentPublisher* NewL(TUid aImpUid);
-
-    /**
-     * Creates a new plug-in instance based on mime type.
-     *
-     * @param aMime MIME type of plug-in to instantiate.
-     * @return pointer to the instantiated interface implementation.
-     */
-    inline static CAiContentPublisher* NewL(const TDesC8& aMime);
-
-    /**
-     * Destroys instance of the plug-in. Called by the framework during plug-in
-     * unloading phase.
-     */
-    inline virtual ~CAiContentPublisher();
-
-public:  // New functions
-    /**
-     * This method transit the plugin to "Alive" state.
-     * The method is called by the framework to instruct plug-in that it is
-     * allowed to actively publish its data to its observers. This means the plugin
-     * is allowed to consume memory and CPU resources, e.g plug-in is able load 
-     * engines, run timers, perform asynchronous operations, etc. The method 
-     * transits the plug-in to "Alive" state. There can be many concurrent
-     * calls to resume, with different or the same reason code, this allows
-     * the plugin to properly respond to enviroment change that raise the
-     * need to re-publish content (changes like date/time change etc).
-     *
-     * @param aReason reason for state change, see TAiTransitionChange.
-     * @pre None
-     * @post Plugin is in resumed state and actively publishes its data.
-	 *
-	 * Short example what a typical resume implementation does.
-	 * @code
-	 * if( !MyEngineCreated() )
-	 *     {
-     *     CreateEngine();
-	 *     }
-     * StartEngine();
-	 * @endcode
-     */
-    virtual void Resume(TAiTransitionReason aReason) = 0;
-
-    /**
-     * This method transits the plug-in to "Suspendend" state.
-     * The method is called by the framework to instruct plug-in that it is
-     * not allowed to consume CPU resources, e.g plug-in MUST stop each
-     * timer, cancel outstanding asynchronous operations, etc. 
-     *
-     * @param aReason reason for state change, see TAiTransitionChange.
-     * @pre None
-     * @post Plugin suspends publishing data and free resources (timers etc).
-     *
-	 * Short example what a typical suspend implementation does.
-	 * @code
-     * DisableEngine();
-	 * @endcode
-     */
-    virtual void Suspend(TAiTransitionReason aReason) = 0;
-
-    /**
-     * This method transits the plug-in to "Idle" state.
-     * The method is called by the framework to request the plug-in free all
-     * memory and CPU resources and close all its open files, the plug-in 
-     * should unload its engines during backup operation.
-     *
-     * @param aReason reason for state change, see TAiTransitionChange.
-     * @pre None
-     * @post Plugin stops publishing data and frees all possible resources.
-     *
-	 * Short example what a typical stop implementation does.
-	 * @code
-     * DestroyEngine();
-	 * @endcode
-     */
-    virtual void Stop(TAiTransitionReason aReason) = 0;
-
-    /**
-     * Adds the content observer / subscriber to plug-in. The plug-in MUST
-     * maintain a registry of subscribers and send notification to all them
-     * whenever the plug-in changes state or new content available.
-     *
-     * @param aObserver content observer to register.
-     * @pre None
-     * @post Plugin publishes its data to the subscribed observer.
-     *
-	 * Short example what a typical subscribe implementation does and
-     * one alternative how observers are used.
-	 * @code
-     * if( !ObserverAlreadyAdded( aObserver ) )
-     *     {
-     *     iMyContentObservers.AppendL( aObserver );
-     *     }
-     *
-     * ...
-     *
-     * // Engine reports data changed
-     *
-     * const TDesC& data = iEngine->LatestData();
-     * for( TInt i = 0; i < iMyContentObservers.Count(); ++i )
-     *     {
-     *     iMyContentObservers[i].Publish( data );
-     *     }
-	 * @endcode
-     */
-    virtual void SubscribeL(MAiContentObserver& aObserver) = 0;
-
-    /**
-     * Configures the plug-in.
-     *
-     * @param aSettings setting items defined in the UI definition.
-     *                  This plugin takes ownership of the
-     *                  MAiPluginSettings objects in the array.
-     *                  If this method leaves the caller will handle the cleanup.
-     * @pre None
-     * @post Plugin has set its state according to relevant settings.
-     *
-	 * Short example how to read plugin settings.
-	 * @code
-     * for( TInt i = 0; i < aSettings.Count(); ++i )
-     *     {
-     *     MAiPluginSettingsItem& item = (aSettings[i])->AiPluginSettingsItem();
-     *     TInt32 value = 0;
-     *     if( ParseInt( value, item.Value() ) != KErrNone )
-     *         {
-     *         continue;
-     *         }
-     *     if( value < 0 )
-     *         {
-     *         continue; // All our settings are counts, skip bad settings
-     *         }
-     *     if( item.Key() == EMySettingMaxUsers )
-     *         {
-     *         iEngine->SetMaxUsers( value );
-     *         continue;
-     *         }
-     *     else if( item.Key() == EMySettingNumItems )
-     *         {
-     *         iNumItems = value;
-     *         continue;
-     *         }
-     *     }
-     * // We own the array so destroy it
-     * aSettings.ResetAndDestroy();
-	 * @endcode
-     */
-    virtual void ConfigureL( RAiSettingsItemArray& aSettings) = 0;
-
-    /**
-     * Returns interface extension. In S60 3.2 only event & property
-     * extensions are supported. See MAiEventHandlerExtension & MAiPropertyExtension
-     * interfaces.
-     *
-     * @param  aUid - UID of the extension interface to access.
-     * @see MAiEventExtension
-     * @see MAiPropertyExtension
-     * @return the extension interface. Actual type depends on the passed aUid 
-     *         argument.
-     *
-     * Example on how to properly return an extension.
-     * @code
-     * if (aUid == KExtensionUidProperty)
-     *     {
-     *     return static_cast<MAiPropertyExtension*>(this);
-     *     }
-     * else if (aUid == KExtensionUidEventHandler)
-     *     {
-     *     return static_cast<MAiEventHandlerExtension*>(this);
-     *     }
-     * return NULL; // Requested extension not supported
-     * @endcode
-     */
-    virtual TAny* Extension(TUid aUid) = 0;
-
-private:     // data
-    /** An identifier used during destruction. */
-    TUid iDestructKey; 
-    };
-
-inline CAiContentPublisher* CAiContentPublisher::NewL(TUid aImplUid)
-    {
-    TAny* ptr = REComSession::CreateImplementationL(aImplUid,
-        _FOFF(CAiContentPublisher, iDestructKey));
-
-    return reinterpret_cast<CAiContentPublisher*> (ptr);
-    }
-
-inline CAiContentPublisher* CAiContentPublisher::NewL(const TDesC8& aMime)
-    {
-    TEComResolverParams params;
-    params.SetDataType(aMime);
-
-    TAny* ptr = REComSession::CreateImplementationL(KInterfaceUidContentPlugin,
-        _FOFF(CAiContentPublisher, iDestructKey), params);
-
-    return reinterpret_cast<CAiContentPublisher*> (ptr);
-    }
-
-inline CAiContentPublisher::~CAiContentPublisher()
-    {
-    REComSession::DestroyedImplementation(iDestructKey);
-    }
-
-#endif // C_AICONTENTPUBLISHER_H
--- a/homescreensrv_plat/ai_plugin_management_api/inc/aicontentpublisheruid.hrh	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Resource headers for aicontentpublisher
-*
-*/
-
-
-#ifndef AICONTENTPUBLISHERUID_HRH
-#define AICONTENTPUBLISHERUID_HRH
-
-/**
- * Ecom interface uid for CAiContentPublisher.
- *
- * Example resource of a plugin that implements content publisher interface.
- * @code
- * #include <aicontentpublisheruid.hrh>
- * #include <ecom/registryinfov2.rh>
- *
- * #define MY_DLL_UID                   0xFFEEDDCC
- * #define MY_PLUGIN_IMPLEMENTATION_UID 0xBBAA9988
- *
- * RESOURCE REGISTRY_INFO registry_info
- * {
- *     resource_format_version = RESOURCE_FORMAT_VERSION_2;
- *     dll_uid = MY_DLL_UID;
- * 
- *     // Interface info array
- *     interfaces = 
- *     {
- *         INTERFACE_INFO
- *         {
- *             // UID of the implemented interface
- *             interface_uid = AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER;
- * 
- *             implementations = 
- *             {
- *                 IMPLEMENTATION_INFO
- *                 {
- *                     implementation_uid = MY_PLUGIN_IMPLEMENTATION_UID;
- *                     version_no         = 1;
- *                     display_name       = "My plugin";
- *                 }
- *             };
- *         }
- *     };
- * }
- * @endcode
- */
-#define AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER 0x102750ED
-
-#endif // AICONTENTPUBLISHERUID_HRH
--- a/homescreensrv_plat/ai_plugin_management_api/inc/hscontentpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_plugin_management_api/inc/hscontentpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -165,7 +165,12 @@
          * Provides access to localized plugin name if supported. HBufC*
          * @see EPublisherResources
          */    
-        EPluginName
+        EPluginName,
+
+        /**
+         * Provides access to CPS command buffer.
+         */    
+        ECpsCmdBuffer        
         };
 
 public:
--- a/homescreensrv_plat/ai_utilities_api/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/ai_utilities_api/group/bld.inf	Wed May 12 13:35:37 2010 +0300
@@ -31,7 +31,4 @@
 ../inc/aipluginsettings.h         MW_LAYER_PLATFORM_EXPORT_PATH(aipluginsettings.h)
 ../inc/aistrcnv.h                 MW_LAYER_PLATFORM_EXPORT_PATH(aistrcnv.h)
 ../inc/contentprioritymap.h       MW_LAYER_PLATFORM_EXPORT_PATH(contentprioritymap.h)
-
-#ifdef __COVER_DISPLAY
-../inc/aisecondarydisplayapi.h       MW_LAYER_PLATFORM_EXPORT_PATH(secondarydisplay/aisecondarydisplayapi.h)
-#endif
+../inc/aicpscommandbuffer.h       MW_LAYER_PLATFORM_EXPORT_PATH(aicpscommandbuffer.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/ai_utilities_api/inc/aicpscommandbuffer.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2010 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:  Cps command buffer interface
+*
+*/
+
+
+#ifndef M_CAICPSCOMMANDBUFFER_H
+#define M_CAICPSCOMMANDBUFFER_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Forward declarations
+class MLiwInterface;
+class CLiwDefaultMap;
+class CLiwServiceHandler;
+
+/**
+ * AI Cps command buffer interface
+ *
+ * @lib aifw  
+ * @since S60 v5.2
+ */
+class MAiCpsCommandBuffer
+    {
+public:
+    // new functions
+    
+	/**
+    * Adds command to command buffer queue
+    *
+    * @since S60 5.2
+    * @param aPluginId plugin id.
+    * @param aType type of the cps registry.
+    * @param aFilter filter values.
+    * @param aAction action trigger.
+    */
+    virtual void AddCommand( const TDesC& aPluginId,
+            const TDesC& aType, CLiwDefaultMap* aFilter,
+            const TDesC8& aAction ) = 0;
+            
+    /**
+     * Gets Service Handler 
+     *
+     * @since S60 5.2
+     * @return Service handler
+     */                 
+    virtual CLiwServiceHandler* ServiceHandler() const = 0;            
+
+    /**
+     * Gets IContentPublishing Interface
+     *
+     * @since S60 5.2
+     * @return Interface
+     */                     
+    virtual MLiwInterface* CpsInterface() const = 0;
+       
+protected:
+    // destructor
+
+    ~MAiCpsCommandBuffer() { }
+    };
+
+#endif // M_CAICPSCOMMANDBUFFER_H
+
+// End of file
+
--- a/homescreensrv_plat/ai_utilities_api/inc/aisecondarydisplayapi.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
-* Copyright (c) 2005 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:  This file contains note definitions for Cover UI sync
-*
-*/
-
-
-#ifndef AISECONDARYDISPLAYAPI_HRH
-#define AISECONDARYDISPLAYAPI_HRH
-
-// CONSTANTS
-const TUid KAICategory = { 0x102750F3 };
-
-// DATA TYPES
-
-// Enumerates dialogs
-enum TAiDialogIndex
-    {
-    EAiNoNote = 0,
-    EAiSimRegistrationFailed
-    };
-
-#endif // AISECONDARYDISPLAYAPI_HRH
-
-// End of File
-
--- a/homescreensrv_plat/context_utility_api/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
-* Copyright (c) 2008 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:  File that exports the files belonging to context utility api
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../inc/hgcontextutilitybase.h  MW_LAYER_PLATFORM_EXPORT_PATH(hg/hgcontextutilitybase.h)
-../inc/hgcontextutility.h      MW_LAYER_PLATFORM_EXPORT_PATH(hg/hgcontextutility.h)
-../inc/hgcontextdef.h          MW_LAYER_PLATFORM_EXPORT_PATH(hg/hgcontextdef.h)
--- a/homescreensrv_plat/context_utility_api/inc/hgcontextdef.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context types
-*
-*/
-
-
-#ifndef HGCONTEXTDEF_H
-#define HGCONTEXTDEF_H
-
-#include <e32base.h>
-
-// context source
-_LIT( KHgCFSource, "Hg" );
-
-// context types
-_LIT( KHgCFTypeContact, "Contact" );
-_LIT( KHgCFTypePbkContact, "PbkContact" );
-_LIT( KHgCFTypePbkContactMulti, "PbkContactMulti" );
-_LIT( KHgCFTypeText, "Text" );
-_LIT( KHgCFTypePhoto, "Photo" );
-_LIT( KHgCFTypeActiveDate, "ActiveDate" );
-_LIT( KHgCFTypeUrl, "Url" );
-_LIT( KHgCFTypeDate, "Date" );
-
-_LIT( KHgCFTypeMusicState, "MusicState" );
-_LIT( KHgCFTypeMusicArtist, "MusicArtist" );
-_LIT( KHgCFTypeMusicTitle, "MusicTitle" );
-_LIT( KHgCFTypeMusicAlbum, "MusicAlbum" );
-_LIT( KHgCFTypeMusicAlbumArt, "MusicAlbumArt" );
-_LIT( KHgCFTypeMusicUri, "MusicUri" );
-_LIT( KHgCFTypeMusicGenre, "MusicGenre" );
-_LIT( KHgCFTypeMusicType, "MusicType" );
-
-_LIT( KHgCFTypeMusicRadioName, "MusicRadioName" );
-_LIT( KHgCFTypeMusicRadioUrl, "MusicRadioUrl" );
-_LIT( KHgCFTypeMusicRadioFrequency, "MusicRadioFrequency" );
-_LIT( KHgCFTypeMusicRadioRDSPI, "MusicRadioRDSPI" );
-
-_LIT( KHgCFTypeVideoState, "VideoState" );
-_LIT( KHgCFTypeVideoTitle, "VideoTitle" );
-_LIT( KHgCFTypeVideoUri, "VideoUri" );
-_LIT( KHgCFTypeVideoType, "VideoType" );
-
-_LIT( KHgCFTypeTvChannelName, "TvChannelName" );
-_LIT( KHgCFTypeTvProgramName, "TvProgramName" );
-_LIT( KHgCFTypeTvProgramDesc, "TvProgramDesc" );
-_LIT( KHgCFTypeTvProgramGenre, "TvProgramGenre" );
-
-_LIT( KHgCFTypeGpsLatitude, "GpsLatitude" );
-_LIT( KHgCFTypeGpsLongitude, "GpsLongitude" );
-
-_LIT( KHgCFTypeOviId, "OviId" );
-
-// some pre-defined values
-_LIT( KHgCFValueUnknownContact, "<unknown>" ); // special value for PbkContact
-_LIT( KHgCFValueUnknownInfo, "<unknown>" ); // e.g. for TV contexts, when information is not available
-_LIT( KHgCFValueMusicTypePlayer, "MusicPlayer" );
-_LIT( KHgCFValueMusicTypeRadio, "Radio" );
-_LIT( KHgCFValueVideoTypeLocal, "VideoLocal" );
-_LIT( KHgCFValueVideoTypeStream, "VideoStream" );
-
-_LIT( KHgCFServiceIdPrefixOvi, "Ovi" ); // for CHgContextUtility::PublishServiceIdL
-
-#endif // HGCONTEXTDEF_H
--- a/homescreensrv_plat/context_utility_api/inc/hgcontextutility.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,327 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
- *
-*/
-
-
-#ifndef HGCONTEXTUTILITY_H
-#define HGCONTEXTUTILITY_H
-
-#include <e32base.h>
-#include <e32cmn.h>
-#include <bamdesca.h>
-#include <badesca.h>
-#include <mdccommon.h>
-#include <hg/hgcontextutilitybase.h>
-
-class MVPbkStoreContact;
-class MVPbkContactLink;
-class CVPbkContactLinkArray;
-class CMdESession;
-
-/**
- *  Utility class to publish and access context through the Context Framework.
- *  @lib hgcontextutility.lib
- *
- *  Typical usage in applications that are publishing context:
- *  During construction:
- *  \code
- *    iContextUtility = CHgContextUtility::NewL();
- *    iContextUtility->RePublishWhenFgL( ETrue );
- *  \endcode
- *  Publishing is accomplished with one single call, for example:
- *  \code
- *    void ContactChanged( MVPbkStoreContact* aNewContact ) {
- *      ...
- *      iContextUtility->PublishContactContextL( *aNewContact );
- *      ...
- *  \endcode
- *
- *  By default publishing requests are ignored if the application is
- *  not in foreground (does not apply to apps that do not have the
- *  ui environment). If there is still a good reason to allow this
- *  then call AllowPublishFromBackground( ETrue ).
- */
-NONSHARABLE_CLASS( CHgContextUtility ) : public CHgContextUtilityBase
-    {
-public:
-    /**
-     * 2-phased constructor.
-     */
-    IMPORT_C static CHgContextUtility* NewL();
-    
-    /**
-     * 2-phased constructor.
-     */
-    IMPORT_C static CHgContextUtility* NewLC();
-    
-    /*
-     * Destructor.
-     */
-    IMPORT_C ~CHgContextUtility();
-
-    /**
-     * Publishes contact context.
-     * @param   aContact            contact
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL( const MVPbkStoreContact& aContact,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes contact context.
-     * @param   aContactLink        contact link
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL( const MVPbkContactLink& aContactLink,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes contact context.
-     * Attempts to publish an empty value will be ignored.
-     *
-     * Prefer using the overloads taking vpbk contact or link, whenever possible.
-     * Use this in case of unknown contacts only, that is, a name, phone number,
-     * or email address that does not belong to a phonebook contact.
-     *
-     * @param   aContactName    formatted name, phone number, or email address,
-     * or a combination of them, e.g. "firstname lastname", "+12345678",
-     * "lastname firstname <abcd@efg.com>", "firstname, lastname <0501234567>".
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL( const TDesC& aContactName,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * Ownership of passed pointers is not taken.
-     * @param   aContacts           contact array
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL(
-        const RPointerArray<MVPbkStoreContact>& aContacts,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * @param   aContactLinks       contact link array
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL(
-        const CVPbkContactLinkArray& aContactLinks,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Overload for publishing multiple contacts.
-     * @param   aContactNames   string array, for element format
-     * see PublishContactContextL(const TDesC&)
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishContactContextL( const MDesCArray& aContactNames,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes freetext context.
-     * Not to be used for bulk text (e.g. full content of some text viewer component).
-     * @param   aText   some text, typically the highlighted substring
-     * from a viewer or editor control
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishTextContextL( const TDesC& aText,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes URL context.
-     * @param   aUrl    URL
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishUrlContextL( const TDesC& aUrl,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes date/time context.
-     * @param   aTime   time
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishTimeContextL( const TTime& aTime,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes photo context.
-     * @param   aFilename   name of image file, with full path
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishPhotoContextL( const TDesC& aFilename,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Publishes photo context.
-     * @param   aMdeItemId  item id for the Image object in MDS
-     * @param   aMdeSession opened metadata engine session
-     * @param   aDelay              if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishPhotoContextL( TItemId aMdeItemId,
-        CMdESession& aMdeSession,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-    
-    /**
-     * Publishes TV context.
-     * Pass KNullDesC if some of the needed data is not available.
-     * @param   aChannelName        channel name
-     * @param   aProgramName        program name
-     * @param   aProgramDescription program description
-     * @param   aGenre              genre
-     */
-    IMPORT_C void PublishTvContextL(
-        const TDesC& aChannelName,
-        const TDesC& aProgramName,
-        const TDesC& aProgramDescription,
-        const TDesC& aGenre );
-
-    /**
-     * Publishes an account id as contact context.
-     *
-     * @param   aServiceId  the service prefix, e.g. "Ovi"
-     * @param   aAccountId  the account id
-     * @param   aDelay   if non-zero then context is published only after
-     * a short delay. If a new publish call is made before the timer fires the
-     * pending value will not be published.
-     */
-    IMPORT_C void PublishServiceIdL( const TDesC& aServiceId,
-        const TDesC& aAccountId,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-
-    /**
-     * Enables or disables automatic re-publishing of the latest
-     * context (published via this context utility instance) whenever
-     * the application comes to foreground.
-     *
-     * It is DISABLED by default.
-     *
-     * By enabling this the applications do not have to care about
-     * context publishing in HandleForegroundEventL etc.
-     *
-     * The feature needs CCoeEnv and calls will be ignored if the
-     * environment is not available.
-     *
-     * @param   aEnable     flag to turn the feature on/off
-     */
-    IMPORT_C void RePublishWhenFgL( TBool aEnable );
-
-    /**
-     * Enables or disables context publishing when being in background.
-     * Applies to all PublishContextL variants.
-     * If disabled then no context will be published if it seems that the
-     * caller application is not in foreground.
-     * Has no effect if there is no CCoeEnv available, publishing is always
-     * allowed in that case.
-     *
-     * It is DISABLED by default, that is, publishing is not allowed
-     * from applications that are not in foreground.
-     *
-     * @param   aAllow  flag to turn the feature on/off
-     */
-    IMPORT_C void AllowPublishFromBackground( TBool aAllow );
-        
-    /**
-     * Adds new music context info to music context publishing parameters.
-     * This method is to be used in context with PublishMusicContextL. Fill in the
-     * parameters and then call PublishMusicContextL.
-     * This parameter list is cleared after publishing music context.
-     * 
-     * @param aKey Name of the key to be published.
-     * @param aData Data for the key.
-     * @leave KErrNotFound, when key is empty.
-     * @leave KErrAlreadyExists, when key is already in the list.
-     * @see hgcontextdef.h for keys
-     * @see PublishMusicContextL
-     */
-    IMPORT_C void AddMusicContextInfoL( const TDesC& aKey, const TDesC& aData );
-    
-    /**
-     * Publishes music context from provided parameters as music context.
-     * Publishes all known (in hgcontextdef.h) music context fields as music
-     * context. All keys, which do not contain any data, are automatically 
-     * filled with '<unknown>' -string.
-     * Clears the parameter list after publishing the context.
-     * 
-     * @leave KErrNotReady, when music context data parameter list is empty.
-     * * @see hgcontextdef.h for keys
-     * @see AddMusicContextInfoL
-     */
-    IMPORT_C void PublishMusicContextL( 
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );
-    
-    /**
-     * Publishes Radio context.
-     * Pass KNullDesC if some of the needed data is not available.
-     * @param   aRadioName        radio name
-     * @param   aRadioUrl         radio url
-     * @param   aRadioFrequency   radio frequency
-     * @param   aRadioRDSPI       radio identification code
-     */
-    IMPORT_C void PublishRadioContextL( 
-            const TDesC& aRadioName,
-            const TDesC& aRadioUrl,
-            const TDesC& aRadioFrequency,
-            const TDesC& aRadioRDSPI );
-    
-    /**
-     * Creates a combined string from the elements of the given array.
-     * Returns NULL if the array has less than 2 elements.
-     * @param   aArray      string array
-     * @return  combined string or NULL, ownership transferred to caller
-     */
-    IMPORT_C static HBufC* BuildCombinedStringL( const MDesCArray& aArray );
-
-    /**
-     * Splits the given combined string and appends the components to
-     * the given array. The initial content of the array is not modified.
-     * If aString does not seem to be a string combined from multiple entries
-     * then aString is appended to aArray without any changes.
-     * @param   aString     combined string, input
-     * @param   aArray      array, output
-     */
-    IMPORT_C static void SplitCombinedStringL( const TDesC& aString,
-        CDesCArray& aArray );
-
-protected:
-    CHgContextUtility();
-    void ConstructL();
-    };
-    
-#endif /* HGCONTEXTUTILITY_H */
--- a/homescreensrv_plat/context_utility_api/inc/hgcontextutilitybase.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Context publishing helper dll
- *
-*/
-
-
-#ifndef HGCONTEXTUTILITYBASE_H
-#define HGCONTEXTUTILITYBASE_H
-
-#include <e32base.h>
-#include <bamdesca.h>
-
-class CHgContextUtilityImpl;
-
-/**
- *  Utility base class to publish and access context through the Context Framework.
- *  @lib hgcontextutility.lib
- */
-class CHgContextUtilityBase : public CBase
-    {
-public:    
-    /**
-     * Publishes context.
-     * Also defines the context if it has not been defined.
-     * Publishing empty value is not allowed, however such errors are ignored
-     * here so the function will not leave when CFW responds with KErrArgument.
-     * The security policy for the context will be set to require
-     * LocalServices capability.
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context
-     */
-    IMPORT_C void PublishContextL( const TDesC& aContextType,
-        const TDesC& aContextData );
-    
-    /**
-     * Publishes context, the value will contain all the strings
-     * from the given array, typically by using some separator character.
-     * @see PublishContextL
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context will be a combined
-     * version of all the strings from this array
-     */
-    IMPORT_C void PublishContextL( const TDesC& aContextType,
-        const MDesCArray& aContextData );
-    
-    /**
-     * Publishes context but only after a short interval, using a timer.
-     * If it is called again before the timer expires then the timer
-     * is restarted (and so the previous pending value is never published).
-     * @param   aContextType    context type, source is always KHgCFSource
-     * @param   aContextData    value for the context
-     * @param   aDelay          delay for the timer, in microseconds
-     */
-    IMPORT_C void PublishContextDelayedL( const TDesC& aContextType,
-        const TDesC& aContextData, const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Overload for delayed publishing of a value combined from multiple strings.
-     * @param   aContextType    context type
-     * @param   aContextData    string array
-     * @param   aDelay          delay for the timer, in microseconds
-     */
-    IMPORT_C void PublishContextDelayedL( const TDesC& aContextType,
-        const MDesCArray& aContextData, const TTimeIntervalMicroSeconds32& aDelay );
-
-    /**
-     * Requests the given context and returns the value for the
-     * first result. Returns NULL if not found.
-     * @param   aContextType    context type, the source is always KHgCFSource
-     */        
-    IMPORT_C HBufC* GetContextL( const TDesC& aContextType );
-    
-    /**
-     * Requests the given context and returns the value for the
-     * first result. Returns NULL if not found.
-     * @param   aContextSource  context source
-     * @param   aContextType    context type
-     */
-    IMPORT_C HBufC* GetContextL( const TDesC& aContextSource,
-        const TDesC& aContextType );
-
-protected:
-    CHgContextUtilityBase();
-    ~CHgContextUtilityBase();
-    void BaseConstructL();
-    CHgContextUtilityImpl* iImpl;
-    };
-    
-#endif /* HGCONTEXTUTILITYBASE_H */
--- a/homescreensrv_plat/context_utility_api/tsrc/bwins/t_ui_context_utility_apiu.def	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-EXPORTS
-	?LibEntryL@@YAPAVCTestModuleBase@@XZ @ 1 NONAME ; class CTestModuleBase * LibEntryL(void)
-	?SetRequirements@@YAHAAPAVCTestModuleParam@@AAK@Z @ 2 NONAME ; int SetRequirements(class CTestModuleParam * &, unsigned long &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABV?$RPointerArray@VMVPbkStoreContact@@@@ABVTTimeIntervalMicroSeconds32@@@Z @ 3 NONAME ; void CHgContextUtility::PublishContactContextL(class RPointerArray<class MVPbkStoreContact> const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 4 NONAME ; void CHgContextUtility::PublishContactContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	??1CHgContextUtility@@UAE@XZ @ 5 NONAME ; CHgContextUtility::~CHgContextUtility(void)
-	?NewLC@CHgContextUtility@@SAPAV1@XZ @ 6 NONAME ; class CHgContextUtility * CHgContextUtility::NewLC(void)
-	?RePublishWhenFgL@CHgContextUtility@@QAEXH@Z @ 7 NONAME ; void CHgContextUtility::RePublishWhenFgL(int)
-	?PublishPhotoContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 8 NONAME ; void CHgContextUtility::PublishPhotoContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContextDelayedL@CHgContextUtilityBase@@QAEXABVTDesC16@@ABVMDesC16Array@@ABVTTimeIntervalMicroSeconds32@@@Z @ 9 NONAME ; void CHgContextUtilityBase::PublishContextDelayedL(class TDesC16 const &, class MDesC16Array const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMVPbkContactLink@@ABVTTimeIntervalMicroSeconds32@@@Z @ 10 NONAME ; void CHgContextUtility::PublishContactContextL(class MVPbkContactLink const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishUrlContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 11 NONAME ; void CHgContextUtility::PublishUrlContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishTvContextL@CHgContextUtility@@QAEXABVTDesC16@@000@Z @ 12 NONAME ; void CHgContextUtility::PublishTvContextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-	?PublishContextL@CHgContextUtilityBase@@QAEXABVTDesC16@@ABVMDesC16Array@@@Z @ 13 NONAME ; void CHgContextUtilityBase::PublishContextL(class TDesC16 const &, class MDesC16Array const &)
-	?AllowPublishFromBackground@CHgContextUtility@@QAEXH@Z @ 14 NONAME ; void CHgContextUtility::AllowPublishFromBackground(int)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMVPbkStoreContact@@ABVTTimeIntervalMicroSeconds32@@@Z @ 15 NONAME ; void CHgContextUtility::PublishContactContextL(class MVPbkStoreContact const &, class TTimeIntervalMicroSeconds32 const &)
-	?GetContextL@CHgContextUtilityBase@@QAEPAVHBufC16@@ABVTDesC16@@@Z @ 16 NONAME ; class HBufC16 * CHgContextUtilityBase::GetContextL(class TDesC16 const &)
-	?NewL@CHgContextUtility@@SAPAV1@XZ @ 17 NONAME ; class CHgContextUtility * CHgContextUtility::NewL(void)
-	?PublishContextDelayedL@CHgContextUtilityBase@@QAEXABVTDesC16@@0ABVTTimeIntervalMicroSeconds32@@@Z @ 18 NONAME ; void CHgContextUtilityBase::PublishContextDelayedL(class TDesC16 const &, class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?SplitCombinedStringL@CHgContextUtilityImpl@@SAXABVTDesC16@@AAVCDesC16Array@@@Z @ 19 NONAME ABSENT ; void CHgContextUtilityImpl::SplitCombinedStringL(class TDesC16 const &, class CDesC16Array &)
-	?PublishTextContextL@CHgContextUtility@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds32@@@Z @ 20 NONAME ; void CHgContextUtility::PublishTextContextL(class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContextL@CHgContextUtilityBase@@QAEXABVTDesC16@@0@Z @ 21 NONAME ; void CHgContextUtilityBase::PublishContextL(class TDesC16 const &, class TDesC16 const &)
-	?GetContextL@CHgContextUtilityBase@@QAEPAVHBufC16@@ABVTDesC16@@0@Z @ 22 NONAME ; class HBufC16 * CHgContextUtilityBase::GetContextL(class TDesC16 const &, class TDesC16 const &)
-	?BuildCombinedStringL@CHgContextUtilityImpl@@SAPAVHBufC16@@ABVMDesC16Array@@@Z @ 23 NONAME ABSENT ; class HBufC16 * CHgContextUtilityImpl::BuildCombinedStringL(class MDesC16Array const &)
-	?PublishPhotoContextL@CHgContextUtility@@QAEXKAAVCMdESession@@ABVTTimeIntervalMicroSeconds32@@@Z @ 24 NONAME ; void CHgContextUtility::PublishPhotoContextL(unsigned long, class CMdESession &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVCVPbkContactLinkArray@@ABVTTimeIntervalMicroSeconds32@@@Z @ 25 NONAME ; void CHgContextUtility::PublishContactContextL(class CVPbkContactLinkArray const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishTimeContextL@CHgContextUtility@@QAEXABVTTime@@ABVTTimeIntervalMicroSeconds32@@@Z @ 26 NONAME ; void CHgContextUtility::PublishTimeContextL(class TTime const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishContactContextL@CHgContextUtility@@QAEXABVMDesC16Array@@ABVTTimeIntervalMicroSeconds32@@@Z @ 27 NONAME ; void CHgContextUtility::PublishContactContextL(class MDesC16Array const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishServiceIdL@CHgContextUtility@@QAEXABVTDesC16@@0ABVTTimeIntervalMicroSeconds32@@@Z @ 28 NONAME ; void CHgContextUtility::PublishServiceIdL(class TDesC16 const &, class TDesC16 const &, class TTimeIntervalMicroSeconds32 const &)
-	?PublishMusicContextL@CHgContextUtility@@QAEXABVTTimeIntervalMicroSeconds32@@@Z @ 29 NONAME ; void CHgContextUtility::PublishMusicContextL(class TTimeIntervalMicroSeconds32 const &)
-	?AddMusicContextInfoL@CHgContextUtility@@QAEXABVTDesC16@@0@Z @ 30 NONAME ; void CHgContextUtility::AddMusicContextInfoL(class TDesC16 const &, class TDesC16 const &)
-	?MatchPhoneNumberL@CHgCtxContactMatcher@@QAEXABVTDesC16@@HW4TVPbkPhoneNumberMatchFlags@CVPbkPhoneNumberMatchStrategy@@AAVCVPbkContactLinkArray@@AAVTRequestStatus@@@Z @ 31 NONAME ; void CHgCtxContactMatcher::MatchPhoneNumberL(class TDesC16 const &, int, enum CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags, class CVPbkContactLinkArray &, class TRequestStatus &)
-	?OpenStoreL@CHgCtxContactMatcher@@QAEXABVCVPbkContactStoreUriArray@@AAVTRequestStatus@@@Z @ 32 NONAME ; void CHgCtxContactMatcher::OpenStoreL(class CVPbkContactStoreUriArray const &, class TRequestStatus &)
-	?SplitAndMatchL@CHgCtxContactMatcher@@QAEXABVTDesC16@@ABVMVPbkFieldTypeList@@AAVCVPbkContactLinkArray@@@Z @ 33 NONAME ; void CHgCtxContactMatcher::SplitAndMatchL(class TDesC16 const &, class MVPbkFieldTypeList const &, class CVPbkContactLinkArray &)
-	?GetFieldDataBinaryL@CHgCtxContactMatcher@@QBE?AVTPtrC8@@ABVMVPbkStoreContact@@ABVMVPbkFieldType@@@Z @ 34 NONAME ; class TPtrC8 CHgCtxContactMatcher::GetFieldDataBinaryL(class MVPbkStoreContact const &, class MVPbkFieldType const &) const
-	?OpenAllStoresL@CHgCtxContactMatcher@@QAEXXZ @ 35 NONAME ; void CHgCtxContactMatcher::OpenAllStoresL(void)
-	?GetNameL@CHgCtxContactMatcher@@QAEPAVHBufC16@@AAVMVPbkStoreContactFieldCollection@@@Z @ 36 NONAME ; class HBufC16 * CHgCtxContactMatcher::GetNameL(class MVPbkStoreContactFieldCollection &)
-	?OpenDefaultMatchStoresL@CHgCtxContactMatcher@@QAEXAAVTRequestStatus@@@Z @ 37 NONAME ; void CHgCtxContactMatcher::OpenDefaultMatchStoresL(class TRequestStatus &)
-	?OpenAllStoresL@CHgCtxContactMatcher@@QAEXAAVTRequestStatus@@@Z @ 38 NONAME ; void CHgCtxContactMatcher::OpenAllStoresL(class TRequestStatus &)
-	?GetFieldDataDateTimeL@CHgCtxContactMatcher@@QBE?AVTTime@@ABVMVPbkStoreContact@@ABVMVPbkFieldType@@@Z @ 39 NONAME ; class TTime CHgCtxContactMatcher::GetFieldDataDateTimeL(class MVPbkStoreContact const &, class MVPbkFieldType const &) const
-	?SplitFindStringL@CHgCtxContactMatcher@@SAPAVCDesC16Array@@ABVTDesC16@@@Z @ 40 NONAME ; class CDesC16Array * CHgCtxContactMatcher::SplitFindStringL(class TDesC16 const &)
-	?GetAddressesL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@@Z @ 41 NONAME ; void CHgCtxContactMatcher::GetAddressesL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &)
-	?OpenOwnNumberStoresL@CHgCtxContactMatcher@@QAEXAAVTRequestStatus@@@Z @ 42 NONAME ; void CHgCtxContactMatcher::OpenOwnNumberStoresL(class TRequestStatus &)
-	?GetCustomFieldL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@W4TVPbkFieldTypeName@@W4TVPbkFieldTypeParameter@@@Z @ 43 NONAME ; void CHgCtxContactMatcher::GetCustomFieldL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &, enum TVPbkFieldTypeName, enum TVPbkFieldTypeParameter)
-	?MatchDataL@CHgCtxContactMatcher@@QAEXABVTDesC16@@ABVMVPbkFieldTypeList@@AAVCVPbkContactLinkArray@@@Z @ 44 NONAME ; void CHgCtxContactMatcher::MatchDataL(class TDesC16 const &, class MVPbkFieldTypeList const &, class CVPbkContactLinkArray &)
-	?IsOwnNumberL@CHgCtxContactMatcher@@QAEXABVTDesC16@@AAVTRequestStatus@@@Z @ 45 NONAME ; void CHgCtxContactMatcher::IsOwnNumberL(class TDesC16 const &, class TRequestStatus &)
-	?IsOwnNumberL@CHgCtxContactMatcher@@QAEXABVTDesC16@@AAH@Z @ 46 NONAME ; void CHgCtxContactMatcher::IsOwnNumberL(class TDesC16 const &, int &)
-	?OpenOwnNumberStoresL@CHgCtxContactMatcher@@QAEXXZ @ 47 NONAME ; void CHgCtxContactMatcher::OpenOwnNumberStoresL(void)
-	?GetWebAddressesL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@W4TWebAddressesType@1@@Z @ 48 NONAME ; void CHgCtxContactMatcher::GetWebAddressesL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &, enum CHgCtxContactMatcher::TWebAddressesType)
-	?FieldTypes@CHgCtxContactMatcher@@QBEABVMVPbkFieldTypeList@@XZ @ 49 NONAME ; class MVPbkFieldTypeList const & CHgCtxContactMatcher::FieldTypes(void) const
-	?GetContactManager@CHgCtxContactMatcher@@QAEAAVCVPbkContactManager@@XZ @ 50 NONAME ; class CVPbkContactManager & CHgCtxContactMatcher::GetContactManager(void)
-	?GetNamesForFindL@CHgCtxContactMatcher@@QAEPAVHBufC16@@AAVMVPbkStoreContactFieldCollection@@@Z @ 51 NONAME ; class HBufC16 * CHgCtxContactMatcher::GetNamesForFindL(class MVPbkStoreContactFieldCollection &)
-	?GetNumbersL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@@Z @ 52 NONAME ; void CHgCtxContactMatcher::GetNumbersL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &)
-	?ContactNameFormatterL@CHgCtxContactMatcher@@QAEAAVMPbk2ContactNameFormatter@@XZ @ 53 NONAME ; class MPbk2ContactNameFormatter & CHgCtxContactMatcher::ContactNameFormatterL(void)
-	?IsEmailAddressL@CHgCtxContactMatcher@@SAHABVTDesC16@@@Z @ 54 NONAME ; int CHgCtxContactMatcher::IsEmailAddressL(class TDesC16 const &)
-	?IsPhoneNumberL@CHgCtxContactMatcher@@SAHABVTDesC16@@@Z @ 55 NONAME ; int CHgCtxContactMatcher::IsPhoneNumberL(class TDesC16 const &)
-	?GetFieldDataTextL@CHgCtxContactMatcher@@QBE?AVTPtrC16@@ABVMVPbkStoreContact@@ABVMVPbkFieldType@@@Z @ 56 NONAME ; class TPtrC16 CHgCtxContactMatcher::GetFieldDataTextL(class MVPbkStoreContact const &, class MVPbkFieldType const &) const
-	?RegisterContactObserverL@CHgCtxContactMatcher@@QAEXAAVMHgCtxContactObserver@@@Z @ 57 NONAME ; void CHgCtxContactMatcher::RegisterContactObserverL(class MHgCtxContactObserver &)
-	?GetContactStoresL@CHgCtxContactMatcher@@QAEAAVMVPbkContactStoreList@@XZ @ 58 NONAME ; class MVPbkContactStoreList & CHgCtxContactMatcher::GetContactStoresL(void)
-	?GetStoreContactL@CHgCtxContactMatcher@@QAEXABVMVPbkContactLink@@PAPAVMVPbkStoreContact@@AAVTRequestStatus@@@Z @ 59 NONAME ; void CHgCtxContactMatcher::GetStoreContactL(class MVPbkContactLink const &, class MVPbkStoreContact * *, class TRequestStatus &)
-	?CancelOperation@CHgCtxContactMatcher@@QAEXXZ @ 60 NONAME ; void CHgCtxContactMatcher::CancelOperation(void)
-	?NewLC@CHgCtxContactMatcher@@SAPAV1@PAVRFs@@@Z @ 61 NONAME ; class CHgCtxContactMatcher * CHgCtxContactMatcher::NewLC(class RFs *)
-	?GetCustomFieldTypeLC@CHgCtxContactMatcher@@QAEPAVCVPbkFieldTypeRefsList@@W4TVPbkFieldTypeName@@W4TVPbkFieldTypeParameter@@@Z @ 62 NONAME ; class CVPbkFieldTypeRefsList * CHgCtxContactMatcher::GetCustomFieldTypeLC(enum TVPbkFieldTypeName, enum TVPbkFieldTypeParameter)
-	?CloseStoresL@CHgCtxContactMatcher@@QAEXXZ @ 63 NONAME ; void CHgCtxContactMatcher::CloseStoresL(void)
-	?SplitMsgContactL@CHgCtxContactMatcher@@SAXABVTDesC16@@AAVCDesC16Array@@@Z @ 64 NONAME ; void CHgCtxContactMatcher::SplitMsgContactL(class TDesC16 const &, class CDesC16Array &)
-	?GetImppFieldL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@PAVCDesC16Array@@11@Z @ 65 NONAME ; void CHgCtxContactMatcher::GetImppFieldL(class MVPbkStoreContactFieldCollection &, class CDesC16Array *, class CDesC16Array *, class CDesC16Array *)
-	?GetNamesForFindL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@@Z @ 66 NONAME ; void CHgCtxContactMatcher::GetNamesForFindL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &)
-	?NewL@CHgCtxContactMatcher@@SAPAV1@PAVRFs@@@Z @ 67 NONAME ; class CHgCtxContactMatcher * CHgCtxContactMatcher::NewL(class RFs *)
-	?MatchDataL@CHgCtxContactMatcher@@QAEXABVMDesC16Array@@ABVMVPbkFieldTypeList@@AAVCVPbkContactLinkArray@@ABVTCallBack@@@Z @ 68 NONAME ; void CHgCtxContactMatcher::MatchDataL(class MDesC16Array const &, class MVPbkFieldTypeList const &, class CVPbkContactLinkArray &, class TCallBack const &)
-	?OpenStoreL@CHgCtxContactMatcher@@QAEXABVCVPbkContactStoreUriArray@@@Z @ 69 NONAME ; void CHgCtxContactMatcher::OpenStoreL(class CVPbkContactStoreUriArray const &)
-	?FindContactWithBirthdayL@CHgCtxContactMatcher@@QAEXABVTTime@@AAVCVPbkContactLinkArray@@@Z @ 70 NONAME ; void CHgCtxContactMatcher::FindContactWithBirthdayL(class TTime const &, class CVPbkContactLinkArray &)
-	?LookupL@CHgCtxContactMatcher@@QAEXABVTDesC16@@AAVCVPbkContactLinkArray@@@Z @ 71 NONAME ; void CHgCtxContactMatcher::LookupL(class TDesC16 const &, class CVPbkContactLinkArray &)
-	?UnregisterContactObserver@CHgCtxContactMatcher@@QAEXAAVMHgCtxContactObserver@@@Z @ 72 NONAME ; void CHgCtxContactMatcher::UnregisterContactObserver(class MHgCtxContactObserver &)
-	?MatchPhoneNumberL@CHgCtxContactMatcher@@QAEXABVTDesC16@@HW4TVPbkPhoneNumberMatchFlags@CVPbkPhoneNumberMatchStrategy@@AAVCVPbkContactLinkArray@@@Z @ 73 NONAME ; void CHgCtxContactMatcher::MatchPhoneNumberL(class TDesC16 const &, int, enum CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags, class CVPbkContactLinkArray &)
-	?OpenDefaultMatchStoresL@CHgCtxContactMatcher@@QAEXXZ @ 74 NONAME ; void CHgCtxContactMatcher::OpenDefaultMatchStoresL(void)
-	??1CHgCtxContactMatcher@@UAE@XZ @ 75 NONAME ; CHgCtxContactMatcher::~CHgCtxContactMatcher(void)
-	?GetStoreContactL@CHgCtxContactMatcher@@QAEXABVMVPbkContactLink@@PAPAVMVPbkStoreContact@@@Z @ 76 NONAME ; void CHgCtxContactMatcher::GetStoreContactL(class MVPbkContactLink const &, class MVPbkStoreContact * *)
-	?GetEmailAddressesL@CHgCtxContactMatcher@@QAEXAAVMVPbkStoreContactFieldCollection@@AAVCDesC16Array@@@Z @ 77 NONAME ; void CHgCtxContactMatcher::GetEmailAddressesL(class MVPbkStoreContactFieldCollection &, class CDesC16Array &)
-	?MatchDataL@CHgCtxContactMatcher@@QAEXABVTDesC16@@ABVMVPbkFieldTypeList@@AAVCVPbkContactLinkArray@@AAVTRequestStatus@@@Z @ 78 NONAME ; void CHgCtxContactMatcher::MatchDataL(class TDesC16 const &, class MVPbkFieldTypeList const &, class CVPbkContactLinkArray &, class TRequestStatus &)
-	?GetThumbnailL@CHgCtxContactMatcher@@QAEPAVCFbsBitmap@@AAVMVPbkStoreContactFieldCollection@@@Z @ 79 NONAME ; class CFbsBitmap * CHgCtxContactMatcher::GetThumbnailL(class MVPbkStoreContactFieldCollection &)
-	?SplitCombinedStringL@CHgContextUtility@@SAXABVTDesC16@@AAVCDesC16Array@@@Z @ 80 NONAME ; void CHgContextUtility::SplitCombinedStringL(class TDesC16 const &, class CDesC16Array &)
-	?BuildCombinedStringL@CHgContextUtility@@SAPAVHBufC16@@ABVMDesC16Array@@@Z @ 81 NONAME ; class HBufC16 * CHgContextUtility::BuildCombinedStringL(class MDesC16Array const &)
-	?PublishRadioContextL@CHgContextUtility@@QAEXABVTDesC16@@000@Z @ 82 NONAME ; void CHgContextUtility::PublishRadioContextL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-
--- a/homescreensrv_plat/context_utility_api/tsrc/eabi/t_ui_context_utility_apiu.def	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-EXPORTS
-	_Z9LibEntryLv @ 1 NONAME
-	_Z15SetRequirementsRP16CTestModuleParamRm @ 2 NONAME
-	_ZN17CHgContextUtility16RePublishWhenFgLEi @ 3 NONAME
-	_ZN17CHgContextUtility17PublishTvContextLERK7TDesC16S2_S2_S2_ @ 4 NONAME
-	_ZN17CHgContextUtility18PublishUrlContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 5 NONAME
-	_ZN17CHgContextUtility19PublishTextContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 6 NONAME
-	_ZN17CHgContextUtility19PublishTimeContextLERK5TTimeRK27TTimeIntervalMicroSeconds32 @ 7 NONAME
-	_ZN17CHgContextUtility20PublishPhotoContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 8 NONAME
-	_ZN17CHgContextUtility20PublishPhotoContextLEmR11CMdESessionRK27TTimeIntervalMicroSeconds32 @ 9 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK12MDesC16ArrayRK27TTimeIntervalMicroSeconds32 @ 10 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK13RPointerArrayI17MVPbkStoreContactERK27TTimeIntervalMicroSeconds32 @ 11 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK16MVPbkContactLinkRK27TTimeIntervalMicroSeconds32 @ 12 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK17MVPbkStoreContactRK27TTimeIntervalMicroSeconds32 @ 13 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK21CVPbkContactLinkArrayRK27TTimeIntervalMicroSeconds32 @ 14 NONAME
-	_ZN17CHgContextUtility22PublishContactContextLERK7TDesC16RK27TTimeIntervalMicroSeconds32 @ 15 NONAME
-	_ZN17CHgContextUtility26AllowPublishFromBackgroundEi @ 16 NONAME
-	_ZN17CHgContextUtility4NewLEv @ 17 NONAME
-	_ZN17CHgContextUtility5NewLCEv @ 18 NONAME
-	_ZN17CHgContextUtilityD0Ev @ 19 NONAME
-	_ZN17CHgContextUtilityD1Ev @ 20 NONAME
-	_ZN17CHgContextUtilityD2Ev @ 21 NONAME
-	_ZN21CHgContextUtilityBase11GetContextLERK7TDesC16 @ 22 NONAME
-	_ZN21CHgContextUtilityBase11GetContextLERK7TDesC16S2_ @ 23 NONAME
-	_ZN21CHgContextUtilityBase15PublishContextLERK7TDesC16RK12MDesC16Array @ 24 NONAME
-	_ZN21CHgContextUtilityBase15PublishContextLERK7TDesC16S2_ @ 25 NONAME
-	_ZN21CHgContextUtilityBase22PublishContextDelayedLERK7TDesC16RK12MDesC16ArrayRK27TTimeIntervalMicroSeconds32 @ 26 NONAME
-	_ZN21CHgContextUtilityBase22PublishContextDelayedLERK7TDesC16S2_RK27TTimeIntervalMicroSeconds32 @ 27 NONAME
-	_ZN21CHgContextUtilityImpl20BuildCombinedStringLERK12MDesC16Array @ 28 NONAME ABSENT
-	_ZN21CHgContextUtilityImpl20SplitCombinedStringLERK7TDesC16R12CDesC16Array @ 29 NONAME ABSENT
-	_ZTI11CHgTestBase @ 30 NONAME ; #<TI>#
-	_ZTI21CHgContextUtilityBase @ 31 NONAME ; #<TI>#
-	_ZTV11CHgTestBase @ 32 NONAME ; #<VT>#
-	_ZTV21CHgContextUtilityBase @ 33 NONAME ; #<VT>#
-	_ZN17CHgContextUtility17PublishServiceIdLERK7TDesC16S2_RK27TTimeIntervalMicroSeconds32 @ 34 NONAME
-	_ZN17CHgContextUtility20AddMusicContextInfoLERK7TDesC16S2_ @ 35 NONAME
-	_ZN17CHgContextUtility20PublishMusicContextLERK27TTimeIntervalMicroSeconds32 @ 36 NONAME
-	_ZN17CHgContextUtility20BuildCombinedStringLERK12MDesC16Array @ 37 NONAME
-	_ZN17CHgContextUtility20PublishRadioContextLERK7TDesC16S2_S2_S2_ @ 38 NONAME
-	_ZN17CHgContextUtility20SplitCombinedStringLERK7TDesC16R12CDesC16Array @ 39 NONAME
-	_ZN20CHgCtxContactMatcher10MatchDataLERK12MDesC16ArrayRK18MVPbkFieldTypeListR21CVPbkContactLinkArrayRK9TCallBack @ 40 NONAME
-	_ZN20CHgCtxContactMatcher10MatchDataLERK7TDesC16RK18MVPbkFieldTypeListR21CVPbkContactLinkArray @ 41 NONAME
-	_ZN20CHgCtxContactMatcher10MatchDataLERK7TDesC16RK18MVPbkFieldTypeListR21CVPbkContactLinkArrayR14TRequestStatus @ 42 NONAME
-	_ZN20CHgCtxContactMatcher10OpenStoreLERK25CVPbkContactStoreUriArray @ 43 NONAME
-	_ZN20CHgCtxContactMatcher10OpenStoreLERK25CVPbkContactStoreUriArrayR14TRequestStatus @ 44 NONAME
-	_ZN20CHgCtxContactMatcher11GetNumbersLER32MVPbkStoreContactFieldCollectionR12CDesC16Array @ 45 NONAME
-	_ZN20CHgCtxContactMatcher12CloseStoresLEv @ 46 NONAME
-	_ZN20CHgCtxContactMatcher12IsOwnNumberLERK7TDesC16R14TRequestStatus @ 47 NONAME
-	_ZN20CHgCtxContactMatcher12IsOwnNumberLERK7TDesC16Ri @ 48 NONAME
-	_ZN20CHgCtxContactMatcher13GetAddressesLER32MVPbkStoreContactFieldCollectionR12CDesC16Array @ 49 NONAME
-	_ZN20CHgCtxContactMatcher13GetImppFieldLER32MVPbkStoreContactFieldCollectionP12CDesC16ArrayS3_S3_ @ 50 NONAME
-	_ZN20CHgCtxContactMatcher13GetThumbnailLER32MVPbkStoreContactFieldCollection @ 51 NONAME
-	_ZN20CHgCtxContactMatcher14IsPhoneNumberLERK7TDesC16 @ 52 NONAME
-	_ZN20CHgCtxContactMatcher14OpenAllStoresLER14TRequestStatus @ 53 NONAME
-	_ZN20CHgCtxContactMatcher14OpenAllStoresLEv @ 54 NONAME
-	_ZN20CHgCtxContactMatcher14SplitAndMatchLERK7TDesC16RK18MVPbkFieldTypeListR21CVPbkContactLinkArray @ 55 NONAME
-	_ZN20CHgCtxContactMatcher15CancelOperationEv @ 56 NONAME
-	_ZN20CHgCtxContactMatcher15GetCustomFieldLER32MVPbkStoreContactFieldCollectionR12CDesC16Array18TVPbkFieldTypeName23TVPbkFieldTypeParameter @ 57 NONAME
-	_ZN20CHgCtxContactMatcher15IsEmailAddressLERK7TDesC16 @ 58 NONAME
-	_ZN20CHgCtxContactMatcher16GetNamesForFindLER32MVPbkStoreContactFieldCollection @ 59 NONAME
-	_ZN20CHgCtxContactMatcher16GetNamesForFindLER32MVPbkStoreContactFieldCollectionR12CDesC16Array @ 60 NONAME
-	_ZN20CHgCtxContactMatcher16GetStoreContactLERK16MVPbkContactLinkPP17MVPbkStoreContact @ 61 NONAME
-	_ZN20CHgCtxContactMatcher16GetStoreContactLERK16MVPbkContactLinkPP17MVPbkStoreContactR14TRequestStatus @ 62 NONAME
-	_ZN20CHgCtxContactMatcher16GetWebAddressesLER32MVPbkStoreContactFieldCollectionR12CDesC16ArrayNS_17TWebAddressesTypeE @ 63 NONAME
-	_ZN20CHgCtxContactMatcher16SplitFindStringLERK7TDesC16 @ 64 NONAME
-	_ZN20CHgCtxContactMatcher16SplitMsgContactLERK7TDesC16R12CDesC16Array @ 65 NONAME
-	_ZN20CHgCtxContactMatcher17GetContactManagerEv @ 66 NONAME
-	_ZN20CHgCtxContactMatcher17GetContactStoresLEv @ 67 NONAME
-	_ZN20CHgCtxContactMatcher17MatchPhoneNumberLERK7TDesC16iN29CVPbkPhoneNumberMatchStrategy26TVPbkPhoneNumberMatchFlagsER21CVPbkContactLinkArray @ 68 NONAME
-	_ZN20CHgCtxContactMatcher17MatchPhoneNumberLERK7TDesC16iN29CVPbkPhoneNumberMatchStrategy26TVPbkPhoneNumberMatchFlagsER21CVPbkContactLinkArrayR14TRequestStatus @ 69 NONAME
-	_ZN20CHgCtxContactMatcher18GetEmailAddressesLER32MVPbkStoreContactFieldCollectionR12CDesC16Array @ 70 NONAME
-	_ZN20CHgCtxContactMatcher20GetCustomFieldTypeLCE18TVPbkFieldTypeName23TVPbkFieldTypeParameter @ 71 NONAME
-	_ZN20CHgCtxContactMatcher20OpenOwnNumberStoresLER14TRequestStatus @ 72 NONAME
-	_ZN20CHgCtxContactMatcher20OpenOwnNumberStoresLEv @ 73 NONAME
-	_ZN20CHgCtxContactMatcher21ContactNameFormatterLEv @ 74 NONAME
-	_ZN20CHgCtxContactMatcher23OpenDefaultMatchStoresLER14TRequestStatus @ 75 NONAME
-	_ZN20CHgCtxContactMatcher23OpenDefaultMatchStoresLEv @ 76 NONAME
-	_ZN20CHgCtxContactMatcher24FindContactWithBirthdayLERK5TTimeR21CVPbkContactLinkArray @ 77 NONAME
-	_ZN20CHgCtxContactMatcher24RegisterContactObserverLER21MHgCtxContactObserver @ 78 NONAME
-	_ZN20CHgCtxContactMatcher25UnregisterContactObserverER21MHgCtxContactObserver @ 79 NONAME
-	_ZN20CHgCtxContactMatcher4NewLEP3RFs @ 80 NONAME
-	_ZN20CHgCtxContactMatcher5NewLCEP3RFs @ 81 NONAME
-	_ZN20CHgCtxContactMatcher7LookupLERK7TDesC16R21CVPbkContactLinkArray @ 82 NONAME
-	_ZN20CHgCtxContactMatcher8GetNameLER32MVPbkStoreContactFieldCollection @ 83 NONAME
-	_ZN20CHgCtxContactMatcherD0Ev @ 84 NONAME
-	_ZN20CHgCtxContactMatcherD1Ev @ 85 NONAME
-	_ZN20CHgCtxContactMatcherD2Ev @ 86 NONAME
-	_ZNK20CHgCtxContactMatcher10FieldTypesEv @ 87 NONAME
-	_ZNK20CHgCtxContactMatcher17GetFieldDataTextLERK17MVPbkStoreContactRK14MVPbkFieldType @ 88 NONAME
-	_ZNK20CHgCtxContactMatcher19GetFieldDataBinaryLERK17MVPbkStoreContactRK14MVPbkFieldType @ 89 NONAME
-	_ZNK20CHgCtxContactMatcher21GetFieldDataDateTimeLERK17MVPbkStoreContactRK14MVPbkFieldType @ 90 NONAME
-	_ZThn12_N20CHgCtxContactMatcherD0Ev @ 91 NONAME
-	_ZThn12_N20CHgCtxContactMatcherD1Ev @ 92 NONAME
-	_ZThn16_N20CHgCtxContactMatcherD0Ev @ 93 NONAME
-	_ZThn16_N20CHgCtxContactMatcherD1Ev @ 94 NONAME
-	_ZThn20_N20CHgCtxContactMatcherD0Ev @ 95 NONAME
-	_ZThn20_N20CHgCtxContactMatcherD1Ev @ 96 NONAME
-	_ZThn4_N20CHgCtxContactMatcherD0Ev @ 97 NONAME
-	_ZThn4_N20CHgCtxContactMatcherD1Ev @ 98 NONAME
-	_ZThn8_N20CHgCtxContactMatcherD0Ev @ 99 NONAME
-	_ZThn8_N20CHgCtxContactMatcherD1Ev @ 100 NONAME
-
--- a/homescreensrv_plat/context_utility_api/tsrc/group/bld.inf	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  T_ui_context_utility_api test module.
-*
-*/
-
-
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_TESTEXPORTS
-
-PRJ_EXPORTS
-
-PRJ_TESTMMPFILES
-t_ui_context_utility_api.mmp
-
-PRJ_MMPFILES
-
-//  End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/group/context_utility_api.bat	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-ATSInterface.exe -testmodule T_ui_context_utility_api
\ No newline at end of file
--- a/homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*TYPE STIFUNIT*//*
-* Copyright (c) 2002 - 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:  T_ui_context_utility_api test module.
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-TARGET          T_ui_context_utility_api.dll
-TARGETTYPE      dll
-UID             0x1000008D 0x101FB3E7
-
-CAPABILITY      ALL -TCB
-
-DEFFILE         T_ui_context_utility_api.def
-
-USERINCLUDE     ../inc
-USERINCLUDE     ../../inc 
-USERINCLUDE     ../../../../contextutility/inc
-
-// USERINCLUDE for base test class
-USERINCLUDE     ../testbase
-
-APP_LAYER_SYSTEMINCLUDE
-
-SYSTEMINCLUDE   /epoc32/include/internal
-
-SOURCEPATH      ../src
-SOURCE          T_ui_context_utility_api.cpp
-SOURCE          T_ui_context_utility_api_cases.cpp
-SOURCE          wait.cpp
-SOURCE          hgctxcontactmatcher.cpp
-
-SOURCEPATH      ../../../../contextutility/src
-SOURCE          hgcontextutilityimpl.cpp
-SOURCE          hgcontextutility.cpp
-SOURCE          hgcontextutilitybase.cpp
-
-// SOURCEPATH for base test class
-SOURCEPATH      ../testbase
-SOURCE          hgtestbase.cpp
-
-LIBRARY         euser.lib
-LIBRARY         estor.lib
-LIBRARY         bafl.lib
-LIBRARY         stiftestinterface.lib
-LIBRARY         avkon.lib
-LIBRARY         aknnotify.lib
-LIBRARY         eikcore.lib 
-LIBRARY         cfclient.lib
-LIBRARY         cfservices.lib
-LIBRARY         cone.lib
-LIBRARY         ws32.lib
-LIBRARY         mdeclient.lib
-LIBRARY         vpbkeng.lib
-LIBRARY         efsrv.lib
-LIBRARY         Pbk2Presentation.lib
-LIBRARY         fbscli.lib
-LIBRARY         imageconversion.lib
-LIBRARY         commonengine.lib
-
-DEBUGLIBRARY    flogger.lib
-
-LANG            SC
-
-EXPORTUNFROZEN
-
-// End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.pkg	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-;
-; Copyright (c) 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:
-;
-;
-; Installation file for STIF
-;
-
-; Languages
-&EN
-
-; Provide value for uid
-#{"STIF"},(0x00000000),1,1,0,TYPE=SA
-
-; Series60 product id for S60 3.0
-[0x101F7961], 0, 0, 0, {"Series60ProductID"}
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-; Logo
-; None
-
-; Package signature - Optional
-; None
-
-; Start of Package body
-
-; Condition blocks
-; None
-
-; Options list
-; None
-
-; Install files
-"\epoc32\release\armv5\udeb\T_ui_context_utility_api.dll"   -   "!:\Sys\Bin\T_ui_context_utility_api.dll"
-"context_utility_api.bat"  					                -   "c:\context_utility_api.bat"
-  
-; Embedded SIS 
-; None
-
-; End of Package body
-
-; PKG dependencies
-; None
-
-; PKG capabilities
-; None
--- a/homescreensrv_plat/context_utility_api/tsrc/inc/hgctxcontactmatcher.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,904 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Contact metching class
-*
-*/
-
-
-#ifndef HGCONTACTMATCHER_H
-#define HGCONTACTMATCHER_H
-
-// System includes
-#include <e32base.h>
-#include <e32std.h>
-#include <bamdesca.h>
-#include <badesca.h>
-
-#include <MVPbkSingleContactOperationObserver.h>
-#include <MVPbkContactStoreListObserver.h>
-#include <MVPbkContactFindObserver.h>
-#include <MVPbkFieldType.h>
-#include <CVPbkPhoneNumberMatchStrategy.h>
-#include <MVPbkContactFindFromStoresObserver.h>
-#include <MVPbkContactViewObserver.h>
-
-#include <finditemengine.h>
-
-// Classes referenced
-class RFs;
-class CActiveSchedulerWait;
-class CVPbkContactManager;
-class MVPbkContactLink;
-class CVPbkContactLinkArray;
-class CVPbkContactStoreUriArray;
-class MVPbkContactOperationBase;
-class MVPbkFieldType;
-class MVPbkFieldTypeList;
-class MVPbkStoreContact;
-class MVPbkStoreContactField;
-class CVPbkFieldTypeRefsList;
-class MVPbkStoreContactFieldCollection;
-class MVPbkContactFieldSelector;
-
-class CPbk2SortOrderManager;
-class MPbk2ContactNameFormatter;
-class CFbsBitmap;
-
-/**
- * Observer interface for contact added/changed/deleted notifications.
- */
-class MHgCtxContactObserver
-    {
-public:
-    /**
-     * Called when a contact is added, changed, or deleted.
-     */
-    virtual void HandleContactEventL() = 0;
-    };
-    
-/**
-* CHgCtxContactMatcher class is an API for contact matching.
-*
-* Before a method starts executing a Virtual Phonebook operation,
-* it checks if there's an older asynchronous operation already in execution.
-* If there is, synchronous methods leave with error code KErrInUse.
-* Asynchronous methods complete the request with same error code.
-*
-* If phone backup/restore has been detected, using methods which
-* require Virtual Phonebook is not possible normally. 
-* Instead those methods leave with error code KErrAccessDenied.
-* Once EStoreBackupRestoreCompleted event has been received,
-* methods can be called normally.
-*
-* @lib hgcontextservicesutils.lib
-*/
-
-NONSHARABLE_CLASS( CHgCtxContactMatcher ) : public CBase,
-	public MVPbkSingleContactOperationObserver,
-	public MVPbkContactStoreListObserver,
-	public MVPbkContactFindObserver, 
-	public MVPbkContactFindFromStoresObserver,
-	public MVPbkContactViewObserver
-    {
-public: // Construct & destruct
-
-    /**
-    * Two-phase constructor for CHgCtxContactMatcher class.
-    *
-    * @param  aFsSession File server session.
-    *
-    * @return CHgCtxContactMatcher* Pointer to newly created instance.
-    */
-    IMPORT_C static CHgCtxContactMatcher* NewL( RFs* aFsSession = 0 );
-
-    /**
-    * Two-phase constructor for CHgCtxContactMatcher class.
-    * Like NewL(), but also places instance on cleanup stack.
-    *
-    * @return CHgCtxContactMatcher* Pointer to newly created instance.
-    */
-    IMPORT_C static CHgCtxContactMatcher* NewLC( RFs* aFsSession = 0 );
-
-    /**
-    * C++ destructor.
-    */
-    IMPORT_C ~CHgCtxContactMatcher();
-
-private: // Internal construct
-
-    /**
-    * C++ Constructor.
-    */
-    CHgCtxContactMatcher( RFs* aFsSession );
-
-    /**
-    * Second phase constructor
-    */
-    void ConstructL();
-
-public: // API methods
-
-    /**
-    * Opens one or more contact stores for future match operations.
-    *
-    * @param aUriArray  Array of contact store URIs to be opened.
-    *
-    * @exception KErrNotSupported when none of the stores opens
-    * @exception KErrGeneral if some stores are already open
-    */
-    IMPORT_C void OpenStoreL( const CVPbkContactStoreUriArray& aUriArray );
-
-    /**
-    * Opens one or more contact stores for future match operations.
-    * Asynchronous version.
-    *
-    * @param aUriArray  Array of contact store URIs to be opened.
-    * @param aStatus  Completion status of the request.
-    *                 KErrNone - at least one store opened successfully
-    *                 KErrNotSupported - all stores failed to open
-    *                 KErrGeneral - if some stores are already open
-    */		    
-    IMPORT_C void OpenStoreL( const CVPbkContactStoreUriArray& aUriArray,
-        TRequestStatus& aStatus );			    
-
-    /**
-    * Opens all contact stores for future match operations.
-    * NOTE: does not open OwnNumber store.
-    *
-    * @exception KErrNotSupported when none of the stores opens
-    * @exception KErrGeneral if some stores are already open
-    */
-    IMPORT_C void OpenAllStoresL();
-
-    /**
-    * Opens all contact stores for future match operations.
-    * Asynchronous version.
-    * NOTE: does not open OwnNumber store.
-    *
-    * @param aStatus  Completion status of the request.
-    *                 KErrNone - at least one store opened successfully
-    *                 KErrNotSupported - all stores failed to open
-    *                 KErrGeneral - if some stores are already open
-    */
-    IMPORT_C void OpenAllStoresL( TRequestStatus& aStatus );			
-
-    /**
-    * Opens default contact stores for future match operations.
-    * Used to find local aliases to phone numbers and email addresses
-    * NOTE: does not open OwnNumber store or fixed dialing store
-    * Opens the stores in the default preference order
-    *
-    * @exception KErrNotSupported when none of the stores opens
-    * @exception KErrGeneral if some stores are already open
-    */
-    IMPORT_C void OpenDefaultMatchStoresL();
-
-    /**
-    * Opens default contact stores for future match operations.
-    * Used to find local aliases to phone numbers and email addresses
-    * Asynchronous version.
-    * NOTE: does not open OwnNumber store or fixed dialing store
-    * Opens the stores in the default preference order
-    *
-    * @param aStatus  Completion status of the request.
-    *                 KErrNone - at least one store opened successfully
-    *                 KErrNotSupported - all stores failed to open
-    *                 KErrGeneral - if some stores are already open
-    */
-    IMPORT_C void OpenDefaultMatchStoresL( TRequestStatus& aStatus );
-
-    /**
-    * Opens all OwnNumber stores for future match operations.
-    *
-    * @exception KErrNotSupported when none of the stores opens
-    * @exception KErrGeneral if some stores are already open
-    */
-    IMPORT_C void OpenOwnNumberStoresL();
-
-    /**
-    * Opens all OwnNumber stores for future match operations.       
-    *
-    * @param aStatus  Completion status of the request.
-    *                 KErrNone - at least one store opened successfully
-    *                 KErrNotSupported - all stores failed to open
-    *                 KErrGeneral - if some stores are already open
-    */	
-    IMPORT_C void OpenOwnNumberStoresL( TRequestStatus& aStatus );	
-
-    /**
-    * Closes all currently open contact stores
-    * including OwnNumber stores.
-    *
-    * @return Leaves on error.
-    */
-    IMPORT_C void CloseStoresL();
-
-    /**
-    * Determines whether a phone number is OwnNumber. Synchronous version.
-    * The method searches for the number from currently open stores.
-    * In order to use SIM's ISDN store, it should be the only open store.
-    * Can be opened with OpenOwnNumberStoresL().
-    *
-    * @param aSearch  Phone number to search for
-    * @param aResult  Boolean result.
-    */
-    IMPORT_C void IsOwnNumberL( const TDesC& aSearch, TBool& aResult );
-
-    /**
-    * Determines whether a phone number is OwnNumber. Asynchronous version.
-    * The method searches for the number from currently open stores.
-    * In order to use SIM's ISDN store, it should be the only open store.
-    * Can be opened with OpenOwnNumberStoresL().
-    *
-    * @param aSearch  Phone number to search for
-    * @param aStatus  Request status containing the result and 
-    *                 possible error code.
-    *                 KErrNone     = TRUE,
-    *                 KErrNotFound = FALSE,
-    *                 other value  = system wide error code.        
-    */
-    IMPORT_C void IsOwnNumberL( const TDesC& aSearch, TRequestStatus& aStatus );
-
-    /**
-    * Finds contacts with phone numbers that match the search string.
-    * Synchronous version.
-    * Contacts are searched from all currently open contact stores.
-    * Matching is done from the end of the phone number.
-    * Note: If the search string is shorter than 7 digits, matching from
-    * Phone memory contact store works ONLY if the phone number is
-    * exactly the same as the search string.
-    * Example:
-    * Search string "567" would find phone number "567", but not "1234567".
-    * From SIM stores both numbers would be found.
-    *
-    * @param aSearch  Search string
-    * @param aDigits  Number of digits to match from the end of phone number.
-    * @param aFlags   Search all or stop at first match.
-    *                 See enum values from CVPbkPhoneNumberMatchStrategy.h
-    * @param aLinkArray  Links to matching contacts are returned in this
-    *                 array that method caller provides.
-    *
-    * @return KErrNone = success, otherwise an error code. ,,list of codes
-    */
-    IMPORT_C void MatchPhoneNumberL( const TDesC& aSearch, TInt aDigits,
-        CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags,
-        CVPbkContactLinkArray& aLinkArray );
-
-    /**
-    * Finds contacts with phone numbers that match the search string.
-    * Asynchronous version.
-    * Searching is done according to parameters like in the synchronous version,
-    * but status code is returned in aStatus.
-    *
-    * @param aStatus  Completion status of the request.
-    *                 Values: KErrNone = success, otherwise an error code.
-    */
-    IMPORT_C void MatchPhoneNumberL( const TDesC& aSearch, TInt aDigits,
-        CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags,
-        CVPbkContactLinkArray& aLinkArray, TRequestStatus& aStatus );
-
-    /**
-    * Returns the global list of possible field types.
-    *
-    * @return List of field types
-    */
-    IMPORT_C const MVPbkFieldTypeList& FieldTypes() const;
-                
-    /**
-    * Gets a store contact from a contact link.
-    * @param aContactLink  The link from which store contact should be returned.
-    * @param aStoreContact Pointer to store contact.
-    *                      Client must take the ownership immediately.
-    */
-    IMPORT_C void GetStoreContactL( const MVPbkContactLink& aContactLink,
-        MVPbkStoreContact** aStoreContact );
-        
-    /**
-    * Gets a store contact from a contact link.
-    * Asynchronous version.
-    * Parameters like in the synchronous version,
-    * but status code is returned in aStatus.
-    *
-    * @param aStatus  Completion status of the request.
-    *                 Values: KErrNone = success, otherwise an error code.
-    */
-    IMPORT_C void GetStoreContactL( const MVPbkContactLink& aContactLink,
-        MVPbkStoreContact** aStoreContact, TRequestStatus& aStatus );
-
-    /**
-    * Returns a pointer to contact's field data of given field type.
-    * If the field type isn't found from contact, return value is KNullDesC.
-    * NOTE: this works only for field types of storage type 
-    * EVPbkFieldStorageTypeText.
-    * For other types, leaves with error code KErrArgument.
-    *
-    * @param  aStoreContact The contact from which field data should be returned.
-    * @param  aFieldType    Field's type.
-    * @return TPtrC pointer to field's data.
-    */
-    IMPORT_C TPtrC GetFieldDataTextL( const MVPbkStoreContact& aStoreContact,
-        const MVPbkFieldType& aFieldType ) const; 
-
-    /**
-    * Returns a pointer to contact's field data of given field type.
-    * If the field type isn't found from contact, return value is
-    * "1.1.1111". (d.m.yyyy).
-    * NOTE: this works only for field types of storage type 
-    * EVPbkFieldStorageTypeDateTime.
-    * For other types, leaves with error code KErrArgument.
-    *
-    * @param  aStoreContact The contact from which field data should be returned.
-    * @param  aFieldType    Field's type.
-    * @return TTime pointer to field's data.
-    */
-    IMPORT_C TTime GetFieldDataDateTimeL( const MVPbkStoreContact& aStoreContact,
-        const MVPbkFieldType& aFieldType ) const; 
-
-    /**
-    * Returns a pointer to contact's field data of given field type.
-    * If the field type isn't found from contact, return value is KNullDesC8.
-    * NOTE: this works only for field types of storage type 
-    * EVPbkFieldStorageTypeBinary.
-    * For other types, leaves with error code KErrArgument.
-    *
-    * @param  aStoreContact The contact from which field data should be returned.
-    * @param  aFieldType    Field's type.
-    * @return TPtrC8 pointer to field's data.
-    */
-    IMPORT_C TPtrC8 GetFieldDataBinaryL(  const MVPbkStoreContact& aStoreContact,
-        const MVPbkFieldType& aFieldType ) const; 		    		    
-
-    /**
-    * Cancels asynchronous operation.
-    */	
-    IMPORT_C void CancelOperation();
-
-    /**
-    * Returns the used contact store list, needed for e.g. aiw fetch
-    * @return The used contact store list
-    */
-    IMPORT_C MVPbkContactStoreList& GetContactStoresL();
-
-    /**
-    * Returns the name of the contact in the same format as MPbk2ContactNameFormatter
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @return HBufC* the name of the contact or null
-    */
-    IMPORT_C HBufC* GetNameL(
-        MVPbkStoreContactFieldCollection& aFieldCollection );
-
-    /**
-    * Returns reference to the contactmanager
-    * @return reference to the contact manager
-    */
-    IMPORT_C CVPbkContactManager& GetContactManager();
-    
-    /**
-    * Finds contacts with field data that match the search string.
-    * Contacts are searched from all currently open contact stores.
-    * Matching is done from field types given by the method caller.
-    * The list of all possible field types can be fetched from the wrapper
-    * using FieldTypes().
-    *
-    * @param aSearch  Search string
-    * @param aFieldTypes  List of field types included in matching.
-    * @param aLinkArray  Links to matching contacts are returned 
-    *                    in this array that method caller provides.
-    *
-    * @return KErrNone = success, otherwise an error code. ,,list of codes
-    */
-    IMPORT_C void MatchDataL( const TDesC& aSearch, const MVPbkFieldTypeList& aFieldTypes, 		
-        CVPbkContactLinkArray& aLinkArray);
-
-    /**
-    * Finds contacts with field data that match the search string.
-    * Contacts are searched from all currently open contact stores.
-    * Matching is done from field types given by the method caller.
-    * The list of all possible field types can be fetched from the wrapper
-    * using FieldTypes().
-    *
-    * @param aSearchStrings  Search strings
-    * @param aFieldTypes  List of field types included in matching.
-    * @param aLinkArray  Links to matching contacts are returned
-    *                    in this array that method caller provides.
-    * @param aWordParserCallBack is the callback function to the parser
-    *
-    * @return KErrNone = success, otherwise an error code.
-    */
-    IMPORT_C void MatchDataL( const MDesC16Array& aSearchStrings, 
-        const MVPbkFieldTypeList& aFieldTypes,
-        CVPbkContactLinkArray& aLinkArray,
-        const TCallBack& aWordParserCallBack );		   
-
-    /**
-    * Finds contacts with field data that match the search string.
-    * Asynchronous version.
-    * Searching is done according to parameters like in the synchronous version,
-    * but status code is returned in aStatus.
-    *
-    * @param aStatus  Completion status of the request.
-    *                 Values: KErrNone = success, otherwise an error code.
-    */
-    IMPORT_C void MatchDataL( const TDesC& aSearch, const MVPbkFieldTypeList& aFieldTypes, 		
-        CVPbkContactLinkArray& aLinkArray, TRequestStatus& aStatus );
-        
-     /**
-    * Returns reference to the contact name formatter. Object is created if not used earlier.
-    * @return reference to the contact name formatter
-    */
-    IMPORT_C MPbk2ContactNameFormatter& ContactNameFormatterL();
-    
-    /**
-     * Splits the input to words and then performs a MatchDataL using the same
-     * splitter callback function.
-     *
-     * LookupL and this are the preferred functions to do text-based lookups from Hg code.
-     *
-     * @see MatchDataL
-     * @see LookupL
-     */
-    IMPORT_C void SplitAndMatchL( const TDesC& aData,
-        const MVPbkFieldTypeList& aFieldTypes,
-        CVPbkContactLinkArray& aLinkArray );
-        
-    /**
-     * Registers for getting notifications when a contact is added, changed, or deleted.
-     * Does nothing if already added.
-     * @param   aObserver   ref to observer
-     */
-    IMPORT_C void RegisterContactObserverL( MHgCtxContactObserver& aObserver );
-    
-    /**
-     * Unregisters the given observer.
-     * Does nothing if the given observer has not been registered before.
-     * @param   aObserver   ref to observer
-     */
-    IMPORT_C void UnregisterContactObserver( MHgCtxContactObserver& aObserver );
-    
-    /**
-     * Looks up a contact based on
-     *   - name, or
-     *   - phone number, or
-     *   - email address, or
-     *   - service id
-     *
-     * Also handles the "name <number>" or "name <email>" format.
-     *
-     * For service IDs the full uri must be given, e.g. if a contact
-     * has an Ovi ID in phonebook set to "somebody" then the search will
-     * only succeed if aData contains "Ovi:somebody" (unless of course
-     * the string "somebody" matches some name fields).
-     *
-     * @param   aData           name or phone number of email address
-     * @param   aLinkArray      array to which the result links are added,
-     *                          no items are appended if not found
-     */
-    IMPORT_C void LookupL( const TDesC& aData, CVPbkContactLinkArray& aLinkArray );
-
-    /**
-    * Returns the phone numbers of the contact.
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @param    aArray         Phone numbers are appended to this. (not resetted)
-    */
-    IMPORT_C void GetNumbersL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray );
- 
-    /**
-    * Returns the email addresses of the contact.
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @param    aArray          Email addresses are appended to this. (not resetted)
-    */
-    IMPORT_C void GetEmailAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray );
-
-    /**
-    * Constructs the address (e.g. street, city, country) for the contact.
-    * The elements are combined into one string, using space as separator.
-    * aArray will have 0-3 items appended: nothing, or general and/or work and/or home address.
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @param  aArray           Addresses are appended to this. (not resetted)
-    */
-    IMPORT_C void GetAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray );
-
-    enum TWebAddressesType
-        {
-        EWebAddresses, //for general web adress
-        EWebAddressesHome, //for home web adress
-        EWebAddressesWork //for work web adress
-        };
-    
-    /**
-    * Gets the prefered web address for the contact.
-    * 
-    * aArray can have 0 or more items appended.
-    * 
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @param  aArray           Web addresses are appended to this. (not resetted)
-    * @param  aType            Determinates which web adress return, @see TWebAddressesType
-    */
-    IMPORT_C void GetWebAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray,
-        TWebAddressesType aType );   
-      
-    
-    /**
-    * Gets the thumbnail for a contact.
-    * @param  aFieldCollection The fieldcollection of the contact
-    * @return bitmap or null (null if not found)
-    */
-    IMPORT_C CFbsBitmap* GetThumbnailL(
-        MVPbkStoreContactFieldCollection& aFieldCollection );
-
-    /**
-     * Checks if the given string is a phone number.
-     */
-    IMPORT_C static TBool IsPhoneNumberL( const TDesC& aData );
-    
-    /**
-     * Checks if the given string is an email address.
-     */
-    IMPORT_C static TBool IsEmailAddressL( const TDesC& aData );
-    
-    /**
-     * Appends content of name fields to the given array.
-     * Uses less fields than LookupL, here only family and given name
-     * are taken and returned.
-     *
-     * @param   aFieldCollection        fields to check
-     * @param   aArray                  array to which strings are appended
-     */
-    IMPORT_C void GetNamesForFindL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray );
-        
-    /**
-     * Gets content of name fields.
-     * Overload for getting results in one string instead of an array.
-     * @param   aFieldCollection    fields to check
-     * @return  content of name fields in no particular order separated by a space
-     */
-    IMPORT_C HBufC* GetNamesForFindL(
-        MVPbkStoreContactFieldCollection& aFieldCollection );
-        
-    /**
-     * Splits a string into parts.
-     * Space, comma, and semicolon are treated as separators.
-     */
-    IMPORT_C static CDesCArray* SplitFindStringL(const TDesC& aFindString);
-    
-    /**
-     * Splits a "name1 name2 ... <something>" into two parts:
-     * "name1 name2 ..." and "something".
-     * < and > characters are removed.
-     * The resulting strings are appended to the given arrray.
-     * Such format is used by messaging components and this function
-     * is useful if a search has to be made based on both the name and
-     * the phone number / email address.
-     * @param   aString     input string
-     * @param   aArray      array to append to
-     */
-    IMPORT_C static void SplitMsgContactL( const TDesC& aString, CDesCArray& aArray );
-
-    /**
-     * Appends the values from all matching text fields to a given array.
-     * @param   aFieldCollection    fields to scan through
-     * @param   aArray              destination array
-     * @param   aVersitName         versit property name
-     * @param   aVersitParam        versit property parameter
-     */
-    IMPORT_C void GetCustomFieldL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray,
-        TVPbkFieldTypeName aVersitName,
-        TVPbkFieldTypeParameter aVersitParam );
-
-    /**
-     * Returns a matching field type for the given versit name/parameter.
-     * The returned list is empty if no matching field types were found.
-     * @param   aVersitName         versit property name
-     * @param   aVersitParam        versit property parameter
-     * @return  field type list, also on the cleanup stack
-     */
-    IMPORT_C CVPbkFieldTypeRefsList* GetCustomFieldTypeLC(
-        TVPbkFieldTypeName aVersitName,
-        TVPbkFieldTypeParameter aVersitParam );
-
-    /**
-     * Finds impp field data.
-     * @param   aFieldCollection    fields to scan
-     * @param   aSchemeOnlyAray     if non-null then scheme parts are appended to here
-     * @param   aUriOnlyArray       if non-null then uri parts are appended to here
-     * @param   aFullArray          if non-null then full field contents are appended to here
-     */
-    IMPORT_C void GetImppFieldL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray* aSchemeOnlyArray,
-        CDesCArray* aUriOnlyArray,
-        CDesCArray* aFullArray );
-
-    /**
-     * Finds all contacts that have a birthday on the given month/day.
-     * Other components from aDate - like year, hours, etc. - are ignored.
-     * @param   aDate       date to look for
-     * @param   aLinkArray  links are appended to this array
-     * If no matching contacts are found then aLinkArray is left untouched.
-     */
-    IMPORT_C void FindContactWithBirthdayL( const TTime& aDate,
-        CVPbkContactLinkArray& aLinkArray );
-        
-private: // from MVPbkContactStoreListObserver, MVPbkContactStoreObserver
-
-    /**
-    * Called when the opening process is complete, ie. all stores have
-    * been reported either failed or successfully opened.
-    */
-    void OpenComplete();
-
-    /**
-    * Called when a contact store is ready for use.
-    */
-    void StoreReady( MVPbkContactStore& aContactStore );
-
-    /**
-    * Called when a contact store becomes unavailable.
-    * Client may inspect the reason of the unavailability and decide whether or not
-    * it will keep the store opened (ie. listen to the store events).
-    * @param aContactStore The store that became unavailable.
-    * @param aReason The reason why the store is unavailable.
-    *                This is one of the system wide error codes.
-    */
-    void StoreUnavailable( MVPbkContactStore& aContactStore, TInt aReason );
-
-    /**
-    * Called when changes occur in the contact store.
-    * @see TVPbkContactStoreEvent, MVPbkContactStoreObserver.h
-    *
-    * @param aContactStore
-    * @param aStoreEvent Event that has occured.
-    */
-    void HandleStoreEventL( MVPbkContactStore& aContactStore,
-        TVPbkContactStoreEvent aStoreEvent );
-
-private: // from MVPbkContactFindFromStoresObserver
-    /**
-    * Called when find is complete on a single store. Callee takes
-    * ownership of the results. In case of an error during find,
-    * the aResultsFromStore may contain only partial results of the find.
-    *
-    * @param aStore is the store from which the contacts were searched from
-    *
-    * @param aResultsFromStore Array of contact links that matched the find.
-    *                 Callee must take ownership of this object in
-    *                 the end of the function, ie. in case the function
-    *                 does not leave.
-    */
-    void FindFromStoreSucceededL( MVPbkContactStore& aStore,
-        MVPbkContactLinkArray* aResultsFromStore );
-                        
-    /**
-    * This function is called if/when there were errors while searching
-    * from a store.
-    * @param aStore is the store from which the search was done.
-    * @param aError is the error code.
-    */
-    void FindFromStoreFailed( MVPbkContactStore& aStore, TInt aError );
-
-    /**
-    * Called when find is complete.
-    */
-    void FindFromStoresOperationComplete();
-
-private: // from MVPbkContactFindObserver
-
-    /**
-    * Called when find is complete. Callee takes ownership of the results.
-    * In case of an error during find, the aResults may contain only
-    * partial results of the find.
-    *
-    * @param aResults Array of contact links that matched the find.
-    *                 Callee must take ownership of this object in
-    *                 the end of the function, ie. in case the function
-    *                 does not leave.
-    */
-    void FindCompleteL( MVPbkContactLinkArray* aResults );
-
-    /**
-    * Called in case the find fails for some reason.
-    * 
-    * @param aError One of the system wide error codes.
-    */
-    void FindFailed( TInt aError );
-
-private: // from MVPbkSingleContactOperationObserver
-
-    /**
-    * Called when operation is completed.
-    *
-    * @param aOperation the completed operation.
-    * @param aContact  the contact returned by the operation.
-    *                  Client must take the ownership immediately.
-    */
-    void VPbkSingleContactOperationComplete(
-        MVPbkContactOperationBase& aOperation, MVPbkStoreContact* aContact );
-
-    /**
-    * Called if the operation fails.
-    *
-    * @param aOperation    the failed operation.
-    * @param aError        error code of the failure.
-    */
-    void VPbkSingleContactOperationFailed(
-        MVPbkContactOperationBase& aOperation, TInt aError );        
-
-private: // from MVPbkContactViewObserver
-    void ContactViewReady(
-            MVPbkContactViewBase& aView );
-    void ContactViewUnavailable(
-            MVPbkContactViewBase& aView );
-    void ContactAddedToView(
-            MVPbkContactViewBase& aView, 
-            TInt aIndex, 
-            const MVPbkContactLink& aContactLink );
-    void ContactRemovedFromView(
-            MVPbkContactViewBase& aView, 
-            TInt aIndex, 
-            const MVPbkContactLink& aContactLink );
-    void ContactViewError(
-            MVPbkContactViewBase& aView, 
-            TInt aError, 
-            TBool aErrorNotified );
-
-private: // Constants
-
-    // Wrapper method IDs for calls that have an asynchronous version
-    enum TMethodId
-        {
-        ENoMethod = 0,
-        EMatchPhoneNumber,
-        EMatchData,
-        EGetStoreContact,
-        EOpenStore, 
-        ECloseStores 
-        };
-
-    // Wrapper method processing status.
-    enum TMethodStatus
-        {
-        EIdle = 0,
-        EExecuting,
-        EFinished
-        };
-
-private: // Methods
-    const MVPbkStoreContactField* FindField( const MVPbkStoreContact& aContact,
-        const MVPbkFieldType& aFType ) const;
-    static CVPbkContactStoreUriArray* GetStoreArrayLC(
-        const TDesC& (* const aFuncPtrs[])() );
-    void OpenStoreL( const TDesC& (* const aFuncPtrs[])() );
-    void OpenStoreL( const TDesC& (* const aFuncPtrs[])(),
-        TRequestStatus&  aStatus );
-    void FreeOldOperation();
-
-    // Copies the entries to the existing recipient array
-    void CopyFindResultsL( MVPbkContactLinkArray* aResults );
-
-    // Open store, code common to sync/async versions.
-    void OpenStoreCommonL( const CVPbkContactStoreUriArray& aUriArray );
-
-    // Match phonenumber, code common to sync/async versions.
-    void MatchPhoneNumberCommonL( const TDesC& aData, TInt aDigits,
-        CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags );
-
-    void InitOperationL( TMethodId aApiMethod );
-    void InitOperationL( TMethodId aApiMethod, TRequestStatus* aStatus );
-    void InitOperation( TRequestStatus* aStatus );
-    void OperationComplete( TInt ErrorCode = KErrNone );
-    void OperationFailed( TInt aError );
-    void CleanupNumberMatch();
-    void RemoveSimilarEmailAddressesL( const TDesC& aData, CVPbkContactLinkArray& aLinkArray, const MVPbkFieldTypeList& aFieldTypes );
-
-    void TryTextLookupL( const TDesC& aName, CVPbkContactLinkArray& aLinkArray );
-    void TryNumberLookupL( const TDesC& aName, CVPbkContactLinkArray& aLinkArray );
-
-    void PreCreateNameFieldTypesL();
-    void PreCreateEmailFieldTypesL();
-    void PreCreateXspIdFieldTypesL();
-    void PreCreateNumberFieldTypesL();
-    void PreCreateAddressFieldTypesL();
-    void PreCreateWebAddressFieldTypesL();
-    void PreCreateWebAddressHomeFieldTypesL();
-    void PreCreateWebAddressWorkFieldTypesL();
-    void PreCreateWorkAddressFieldTypesL();
-    void PreCreateHomeAddressFieldTypesL();
-    
-    void GetTextFieldsL( const CVPbkFieldTypeRefsList& aList,
-        const MVPbkStoreContactFieldCollection& aFieldCollection, CDesCArray& aArray );
-
-private: // Data
-
-    // Used members
-
-    RFs* iFsSession;
-    TBool iFsSessionOwned;
-    MVPbkStoreContact** iResultStoreContact; // result of GetStoreContact
-    CVPbkContactLinkArray* iResultContactLinkArray; // result of matching operations
-    TInt iResultContactLinkCnt; // number of links found in matching operations
-    TRequestStatus* iClientStatus; // request status used in asynch calls
-
-    // Own members
-    CVPbkContactManager* iContactManager;
-    MVPbkContactOperationBase* iOperation;  // CM operation being processed
-    CActiveSchedulerWait iASchedulerWait;   // used in asynch calls
-    CVPbkContactStoreUriArray* iStoreUris;  // used in matching
-    CVPbkPhoneNumberMatchStrategy* iMatchStrategy; // used in matching
-    CVPbkPhoneNumberMatchStrategy::TConfig* iStratConfig;  // used in matching
-    TBool iSync;  // is this wrapper call Synchronous (1) or Asynchronous (0) 
-    TInt iError;  // error code used while processing VPbk-operations
-    TBool iBackup;// contact store backup/restore in progress
-    // API method ID. Needed for cleanup after method finishes.
-    TMethodId iApiMethod;
-    // API method status. Needed to know processing has finished.
-    TMethodStatus iApiMethodStatus;
-
-    CPbk2SortOrderManager* iSortOrderManager;
-    MPbk2ContactNameFormatter* iNameFormatter;
-    
-    RPointerArray<MHgCtxContactObserver> iContactObservers; // ptrs not owned
-    CVPbkFieldTypeRefsList* iNameFieldTypes;
-    CVPbkFieldTypeRefsList* iEmailFieldTypes;
-    CVPbkFieldTypeRefsList* iXspIdFieldTypes;
-    CVPbkFieldTypeRefsList* iNumberFieldTypes;
-    CVPbkFieldTypeRefsList* iAddressFieldTypes;
-    CVPbkFieldTypeRefsList* iWebAddressFieldTypes;
-    CVPbkFieldTypeRefsList* iWebAddressHomeFieldTypes;
-    CVPbkFieldTypeRefsList* iWebAddressWorkFieldTypes;
-    CVPbkFieldTypeRefsList* iWorkAddressFieldTypes;
-    CVPbkFieldTypeRefsList* iHomeAddressFieldTypes;
-    };
-
-/**
-* Panic codes used in CHgCtxContactMatcher.
-*
-* @since 3.1u
-*/
-class HgContactMatcherPanics
-    {
-public: // API
-        
-    /**
-    * Panic codes
-    */
-    enum TPanic
-        {
-        EPanNullPointer = 0,
-        EPanInvalidParam,
-        EPanInvalidOp
-        };
-
-public:
-
-    /**
-    * Panic
-    */
-    static void Panic( TPanic aPanic );
-    };
-
-#endif
-
-// End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/inc/t_ui_context_utility_api.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  T_ui_context_utility_api test module.
-*
-*/
-
-
-
-#ifndef T_ui_context_utility_api_H
-#define T_ui_context_utility_api_H
-
-// INCLUDES
-#include "hgtestbase.h"
-#include "hgctxcontactmatcher.h"
-
-// Logging path
-_LIT( KT_ui_context_utility_apiLogPath, "\\logs\\testframework\\T_ui_context_utility_api\\" );
-// Log file
-_LIT( KT_ui_context_utility_apiLogFile, "T_ui_context_utility_api.txt" );
-
-// CLASS DECLARATION
-
-/**
-*  This a T_ui_context_utility_api class.
-*/
-NONSHARABLE_CLASS(CT_ui_context_utility_api) : public CHgTestBase
-    {
-    public:
-
-        CT_ui_context_utility_api();
-
-        void ConstructL();
-
-        static CT_ui_context_utility_api* NewL();
-        
-        void CreateEnvL();
-        void DestroyEnv();
-        TInt LoadTestCasesL(
-                    TInt& _test_case_no,
-                    CT_ui_context_utility_api::TCallReason aRunReason,
-                    TInt aTestToRun,
-                    RPointerArray<TTestCaseInfo>& aTestCases,
-                    TTestResult& aResult);
-        
-        ~CT_ui_context_utility_api();
-        
-        TInt RunTestL(
-            CT_ui_context_utility_api::TCallReason aRunReason,
-            TInt aTestToRun,
-            RPointerArray<TTestCaseInfo>& aTestCases,
-            TTestResult& aResult);
-        
-        RPtrHashMap<TDesC, TDesC>* GetImplHashTablePtr()
-            {
-            class CTestUtility : public CBase
-                {
-            public:
-                CHgContextUtilityImpl* iImpl;
-                };
-            
-            class CTestImplementation : CTimer
-                {
-            public:
-                // number of pointers before iMusicContextInfo, calculate M-classes as pointers too
-                TInt unneeded[12]; 
-                RPtrHashMap<TDesC, TDesC> iMusicContextInfo;
-                };
-            
-            // Fetch the pointer to hash table for testing purposes
-            return &((CTestImplementation*)((CTestUtility*)iContextUtility)->iImpl)->iMusicContextInfo;
-            }
-		#define TEST_VAR_DECLARATIONS
-        /**
-         * all testmodule-global variables declarations are inserted here
-         */
-        #include "../src/T_ui_context_utility_api_cases.cpp"
-		#undef TEST_VAR_DECLARATIONS
-        
-        // for creating test env
-        CTrapCleanup* ENV_cleanup;
-        TInt ENV_err;
-        CEikonEnv* ENV_env;
-        CAknAppUi* ENV_aknAppUI;
-    };
-
-#endif      // T_ui_context_utility_api_H
-
-// End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/src/hgctxcontactmatcher.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2539 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Contact matching class
-*
-*/
-
-
-// System includes
-#include <e32base.h>
-#include <bamdesca.h>
-#include <cntitem.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <fbs.h>
-#include <imageconversion.h>
-#include <data_caging_path_literals.hrh>
-
-#include <CVPbkContactManager.h>
-#include <MVPbkContactStoreList.h>
-#include <MVPbkContactStore.h>
-#include <CVPbkContactStoreUriArray.h>
-#include <MVPbkContactLinkArray.h>
-#include <MVPbkContactLink.h>
-#include <MVPbkFieldType.h>
-#include <MVPbkStoreContact.h>
-#include <MVPbkStoreContactField.h>
-#include <MVPbkStoreContactFieldCollection.h>
-#include <MVPbkContactFieldData.h>
-#include <MVPbkContactFieldTextData.h>
-#include <MVPbkContactFieldUriData.h>
-#include <MVPbkContactFieldDateTimeData.h>
-#include <MVPbkContactFieldBinaryData.h>
-#include <MVPbkContactOperationBase.h>
-#include <MVPbkContactStoreProperties.h>
-#include <TVPbkContactStoreUriPtr.h>
-#include <VPbkContactStoreUris.h>
-#include <MPbk2ContactNameFormatter.h>
-#include <CVPbkFieldTypeSelector.h>
-#include <TVPbkFieldVersitProperty.h>
-#include <CVPbkFieldTypeRefsList.h>
-#include <TVPbkWordParserCallbackParam.h>
-#include <CVPbkContactViewDefinition.h>
-#include <MVPbkContactViewBase.h>
-#include <coemain.h>
-#include <CPbk2SortOrderManager.h>
-#include <Pbk2ContactNameFormatterFactory.h>
-
-#include "hgctxcontactmatcher.h"
-
-
-#include "hgctxutilslogging.h"
-
-
-// ================= Static Constant Data ===================
-
-typedef const TDesC& (*UriFuncPtr)();
-
-// Number match store URIs in priority order.
-// When doing number matching, order of the stores in the uri array will
-// determine which stores are searched first (sequential match). We stop
-// the search when first match is found.
-static const UriFuncPtr NumberMatchStoreUris[] =
-    {
-    VPbkContactStoreUris::DefaultCntDbUri,
-    // If we don't manage to open some store, we remove it from our array
-    VPbkContactStoreUris::SimGlobalAdnUri,
-    VPbkContactStoreUris::SimGlobalSdnUri,
-    NULL,   // end marker
-    };
-
-// All store URIs except own number store
-static const UriFuncPtr AllStoreUris[] =
-    {
-    VPbkContactStoreUris::DefaultCntDbUri,
-    // If we don't manage to open some store, we remove it from our array
-    VPbkContactStoreUris::SimGlobalAdnUri,
-    VPbkContactStoreUris::SimGlobalSdnUri,
-    VPbkContactStoreUris::SimGlobalFdnUri,
-    NULL,   // end marker
-    };
-
-// Own number store URIs
-static const UriFuncPtr OwnNumberStoreUris[] =
-    {
-    VPbkContactStoreUris::SimGlobalOwnNumberUri,
-    NULL,   // end marker
-    };
-
-// number of digits that must match from the right side of a phone number
-const TInt KNumberMatchLenFromRight = 7;
-
-// granularity for CDesCArray
-const TInt KArrayGranularity = 4;
-
-//               YYYYMMDD:HHMMSS.MMMMMM
-_LIT(KNullTime, "11110000:010101.00000");
-
-// ================= STATIC FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// FindWordSplitterL
-// ---------------------------------------------------------
-//
-static TInt FindWordSplitterL( TAny* aParams )
-	{
-	TVPbkWordParserCallbackParam* parser = 
-        static_cast<TVPbkWordParserCallbackParam*>( aParams );
-        
-    const TText* ptr = parser->iStringToParse->Ptr();
-	const TText* end = ptr + parser->iStringToParse->Length();
-
-	const TText* startOfWord=NULL;
-	for ( ; ; )
-		{
-		if ( ptr==end || TChar(*ptr).IsSpace() || *ptr == ',' || *ptr == ';' )
-			{
-			if ( startOfWord )
-				{
-				TPtrC addWord( startOfWord,ptr - startOfWord );
-				parser->iWordArray->AppendL( addWord );
-				startOfWord = NULL;
-				}
-			if ( ptr == end )
-                {
-				break;
-                }
-			}
-		else if ( !startOfWord )
-            {
-			startOfWord = ptr;
-            }
-		ptr++;
-		}
-	return( KErrNone );
-	}
-
-static HBufC* CombineStringsLC( CDesCArray& aArray )
-    {
-    TInt len = 0;
-    for ( TInt i = 0, ie = aArray.Count(); i != ie; ++i )
-        {
-        len += aArray[i].Length() + 1;
-        }
-    HBufC* result = HBufC::NewLC( len );
-    TPtr p( result->Des() );
-    for ( TInt i = 0, ie = aArray.Count(); i != ie; ++i )
-        {
-        if ( i )
-            {
-            p.Append( ' ' );
-            }
-        p.Append( aArray[i] );
-        }
-    return result;
-    }
-    
-// ================= MEMBER FUNCTIONS =======================
-
-// ----------------------------------------------------------------------------
-// Two-phase constructor for CHgCtxContactMatcher class.
-// ----------------------------------------------------------------------------
-EXPORT_C CHgCtxContactMatcher* CHgCtxContactMatcher::NewL(
-    RFs* aFsSession )
-    {
-    CHgCtxContactMatcher* self = CHgCtxContactMatcher::NewLC( aFsSession );
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-// Two-phase constructor for CHgCtxContactMatcher class.
-// ----------------------------------------------------------------------------
-EXPORT_C CHgCtxContactMatcher* CHgCtxContactMatcher::NewLC(
-    RFs* aFsSession )
-    {
-    CHgCtxContactMatcher* self = new ( ELeave ) CHgCtxContactMatcher( aFsSession );
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-// C++ destructor.
-// ----------------------------------------------------------------------------
-EXPORT_C CHgCtxContactMatcher::~CHgCtxContactMatcher()
-    {
-    delete iNameFieldTypes;
-    delete iNumberFieldTypes;
-    delete iEmailFieldTypes;
-    delete iXspIdFieldTypes;
-    delete iAddressFieldTypes;
-	delete iWebAddressFieldTypes;
-    delete iHomeAddressFieldTypes;
-    delete iWorkAddressFieldTypes;
-    
-    FreeOldOperation();
-    CleanupNumberMatch();
-    delete iStoreUris;
-    delete iContactManager;
-    delete iSortOrderManager;
-    delete iNameFormatter;
-
-    if ( iClientStatus )
-        {
-        User::RequestComplete( iClientStatus, KErrCancel );
-        }
-    if ( iASchedulerWait.IsStarted() )
-        {
-        iASchedulerWait.AsyncStop();
-        }
-        
-    iContactObservers.Close();
-    
-    if ( iFsSessionOwned && iFsSession )
-        {
-        iFsSession->Close();
-        delete iFsSession;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// C++ Constructor.
-// ----------------------------------------------------------------------------
-CHgCtxContactMatcher::CHgCtxContactMatcher( RFs* aFsSession) : iFsSession( aFsSession )
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// Second phase constructor
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::ConstructL()
-    {
-    if ( !iFsSession )
-        {
-        // The contact manager would be okay with NULL but some of our own functions
-        // need an RFs.
-        iFsSessionOwned = ETrue;
-        iFsSession = new ( ELeave ) RFs;
-        User::LeaveIfError( iFsSession->Connect() );
-        }
-        
-    iContactManager = CVPbkContactManager::NewL(
-        *CVPbkContactStoreUriArray::NewLC(), iFsSession );
-    CleanupStack::PopAndDestroy(); // CVPbkContactStoreUriArray
-
-    // No stores open yet
-    iStoreUris = CVPbkContactStoreUriArray::NewL();
-    }
-
-//******************* API-methods *********************************************
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenStoreL(
-    const CVPbkContactStoreUriArray& aUriArray )
-    {
-    InitOperationL( EOpenStore );
-    OpenStoreCommonL( aUriArray );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        // Wait until stores are open
-        iASchedulerWait.Start();
-        }
-    User::LeaveIfError( iError );
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenStoreL(
-    const CVPbkContactStoreUriArray& aUriArray, TRequestStatus&  aStatus )
-    {
-    InitOperationL( EOpenStore );
-    OpenStoreCommonL( aUriArray );
-    InitOperation( &aStatus );
-
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        }
-    }
-
-
-// ----------------------------------------------------------------------------
-// Common code to sync/async versions.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::OpenStoreCommonL(
-    const CVPbkContactStoreUriArray& aUriArray )
-    {
-    if (iStoreUris->Count())
-        {
-        // Opening more stores when some stores are already open is not
-        // supported. Support would require managing iStoreUris properly
-        // so that it contains all open stores.
-        User::Leave(KErrGeneral);
-        }
-
-    const TInt count = aUriArray.Count();
-    
-    for (TInt i = 0; i < count; ++i)
-        {
-        // Appended Uri:s to the array. If store fails to open it is removed
-        // from the array. This keeps Uri's in priority order in the array.
-        TVPbkContactStoreUriPtr uriPtr = aUriArray[i];
-        iStoreUris->AppendL( uriPtr );
-
-        iContactManager->LoadContactStoreL( uriPtr );
-        }
-    MVPbkContactStoreList& storeList = iContactManager->ContactStoresL();
-    storeList.OpenAllL( *this );
-    }
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenAllStoresL()
-    {
-    OpenStoreL(AllStoreUris);
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenAllStoresL( TRequestStatus& aStatus )
-    {
-    OpenStoreL(AllStoreUris, aStatus);
-    }
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenDefaultMatchStoresL()
-    {
-    OpenStoreL(NumberMatchStoreUris);
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenDefaultMatchStoresL( TRequestStatus& aStatus )
-    {
-    OpenStoreL(NumberMatchStoreUris, aStatus);
-    }
-
-// ----------------------------------------------------------------------------
-// Open OwnNumber stores.
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenOwnNumberStoresL()
-    {
-    OpenStoreL(OwnNumberStoreUris);
-    }
-
-// ----------------------------------------------------------------------------
-// Open OwnNumber stores.
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::OpenOwnNumberStoresL( TRequestStatus& aStatus )
-    {
-    OpenStoreL(OwnNumberStoreUris, aStatus);
-    }
-
-// ----------------------------------------------------------------------------
-// Close all open stores.
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::CloseStoresL()
-    {
-    // Closing stores does not work. MatchDataL() finds contacts from
-    // closed stores.
-
-    InitOperationL( ECloseStores );
-
-    iApiMethodStatus = EExecuting;
-    TRAPD( err, iContactManager->ContactStoresL().CloseAll( *this ) );
-    iApiMethodStatus = EFinished;
-    if ( err == KErrNone)
-        {
-        delete iStoreUris; iStoreUris = NULL;
-        iStoreUris = CVPbkContactStoreUriArray::NewL();        
-        }
-    else
-        {
-        User::Leave(err);
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::MatchPhoneNumberL(
-    const TDesC& aData, TInt aDigits,
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags,
-    CVPbkContactLinkArray& aLinkArray )
-    {
-    InitOperationL( EMatchPhoneNumber );
-    iResultContactLinkArray = &aLinkArray;
-
-    // Start asynchronous matching and wait until results are ready
-    MatchPhoneNumberCommonL( aData, aDigits, aFlags );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        iASchedulerWait.Start();
-        }
-    User::LeaveIfError( iError );
-    }
-
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::MatchPhoneNumberL(
-    const TDesC& aData, TInt aDigits,
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags,
-    CVPbkContactLinkArray& aLinkArray, TRequestStatus& aStatus )
-    {
-    InitOperationL( EMatchPhoneNumber );
-    iResultContactLinkArray = &aLinkArray;
-    // Start asynchronous matching
-    MatchPhoneNumberCommonL( aData, aDigits, aFlags );
-    InitOperation( &aStatus );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Common code for sync and async versions
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::MatchPhoneNumberCommonL(
-    const TDesC& aData, TInt aDigits,
-    CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aFlags )
-    {
-    // Delete resources allocated for previous match
-    CleanupNumberMatch();
-
-    // iStoreUris is filled when stores are opened
-
-    iStratConfig = new (ELeave) CVPbkPhoneNumberMatchStrategy::TConfig(
-        aDigits,
-        *iStoreUris,
-        CVPbkPhoneNumberMatchStrategy::EVPbkSequentialMatch,
-        aFlags);
-    iMatchStrategy = CVPbkPhoneNumberMatchStrategy::NewL(
-                *iStratConfig,
-                *iContactManager,
-                *this);
-    // Start asynchronous matching
-    iMatchStrategy->MatchL( aData );
-    }
-
-
-// ----------------------------------------------------------------------------
-// Find from a store succeeded
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FindFromStoreSucceededL( MVPbkContactStore& /*aStore*/,
-        MVPbkContactLinkArray* aResultsFromStore )
-    {
-    __ASSERT_DEBUG( aResultsFromStore, HgContactMatcherPanics::Panic(
-        HgContactMatcherPanics::EPanNullPointer ));
-
-    // Take the ownership of the result immediately
-    CleanupDeletePushL( aResultsFromStore );
-
-    CopyFindResultsL( aResultsFromStore );
-
-    CleanupStack::PopAndDestroy(); // aResultsFromStore
-    }
-
-// ----------------------------------------------------------------------------
-// Copy the found results for a store into array
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::CopyFindResultsL( MVPbkContactLinkArray*
-    aResults )
-    {
-    const TInt count = aResults->Count();
-    if ( iResultContactLinkArray )
-        {
-        // Copy links to the member array
-        for ( TInt i = 0; i < count; ++i )
-            {
-            iResultContactLinkArray->AppendL( aResults->At( i ).CloneLC() );
-            CleanupStack::Pop(); // cloned link
-            }
-        }
-    else
-        {
-        iResultContactLinkCnt += count;
-        }
-    }
-
-
-// ----------------------------------------------------------------------------
-// Find failed
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FindFromStoreFailed( MVPbkContactStore& /*aStore*/, TInt /*aError*/ )
-    {
-    //no operation, search to continue from the other stores
-    }
-
-
-// ----------------------------------------------------------------------------
-// Find complete
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FindFromStoresOperationComplete()
-    {
-    if (!iResultContactLinkArray)
-        {
-        // Links were not copied. Result is whether any links found or not.
-        OperationComplete( iResultContactLinkCnt ? KErrNone:KErrNotFound );
-        }
-    else
-        {
-        OperationComplete();
-        iResultContactLinkArray = NULL;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Return global list of field types.
-// ----------------------------------------------------------------------------
-EXPORT_C const MVPbkFieldTypeList& CHgCtxContactMatcher::FieldTypes() const
-    {
-    return iContactManager->FieldTypes();
-    }
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetStoreContactL(
-    const MVPbkContactLink& aLink, MVPbkStoreContact** aStoreContact )
-    {
-    InitOperationL( EGetStoreContact );
-    iResultStoreContact = aStoreContact;
-
-    // Start asynchronous operation and wait until results are ready
-    FreeOldOperation();
-    iOperation = iContactManager->RetrieveContactL( aLink, *this );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        iASchedulerWait.Start();
-        }
-    User::LeaveIfError( iError );
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetStoreContactL(
-    const MVPbkContactLink& aLink, MVPbkStoreContact** aStoreContact,
-    TRequestStatus& aStatus )
-    {
-    InitOperationL( EGetStoreContact );
-    iResultStoreContact = aStoreContact;
-    // Start asynchronous operation
-    FreeOldOperation();
-    iOperation = iContactManager->RetrieveContactL( aLink, *this );
-    InitOperation( &aStatus );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::IsOwnNumberL( const TDesC& aNumber, TBool& aResult )
-    {
-    InitOperationL( EMatchPhoneNumber );
-
-     // Not interested in links, only whether found or not
-    iResultContactLinkArray = NULL;
-    iResultContactLinkCnt = 0;
-
-    // Start asynchronous matching and wait until results are ready
-    MatchPhoneNumberCommonL( aNumber, aNumber.Length(),
-        CVPbkPhoneNumberMatchStrategy::EVPbkStopOnFirstMatchFlag );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        iASchedulerWait.Start();
-        }
-    User::LeaveIfError( iError );
-
-    aResult = iResultContactLinkCnt > 0;
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::IsOwnNumberL( const TDesC& aNumber,
-    TRequestStatus& aStatus )
-    {
-    InitOperationL( EMatchPhoneNumber );
-
-     // Not interested in links, only whether found or not
-    iResultContactLinkArray = NULL;
-    iResultContactLinkCnt = 0;
-
-    // Start asynchronous matching
-    MatchPhoneNumberCommonL( aNumber, aNumber.Length(),
-        CVPbkPhoneNumberMatchStrategy::EVPbkStopOnFirstMatchFlag );
-    InitOperation( &aStatus );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Cancel asynchronous operation
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::CancelOperation()
-    {
-    if (iApiMethodStatus != EExecuting)
-        {
-        return;
-        }
-
-    __ASSERT_DEBUG(!iSync, HgContactMatcherPanics::Panic(
-        HgContactMatcherPanics::EPanInvalidOp));
-
-    switch(iApiMethod)
-        {
-        case EMatchData:
-        case EGetStoreContact:
-            FreeOldOperation(); // deleting the operation cancels it
-            break;
-        case EMatchPhoneNumber:
-            CleanupNumberMatch();
-            break;
-        default:
-            ;
-        }
-
-    User::RequestComplete( iClientStatus, KErrCancel );
-
-    iApiMethod = ENoMethod;
-    iApiMethodStatus = EFinished;
-    }
-
-// ----------------------------------------------------------------------------
-// GetFieldData, for EVPbkFieldStorageTypeText
-// ----------------------------------------------------------------------------
-EXPORT_C TPtrC CHgCtxContactMatcher::GetFieldDataTextL(
-    const MVPbkStoreContact& aContact,
-    const MVPbkFieldType& aFType ) const
-    {
-    TPtrC ret(KNullDesC);
-    const MVPbkStoreContactField* field = FindField( aContact, aFType);
-    if (field)
-        {
-        const MVPbkContactFieldData& fdata = field->FieldData();
-        if (fdata.DataType() == EVPbkFieldStorageTypeText)
-            {
-            const MVPbkContactFieldTextData& fdata2 =
-                MVPbkContactFieldTextData::Cast(fdata);
-            ret.Set( fdata2.Text() );
-            }
-        else
-            {
-            User::Leave( KErrArgument );
-            }
-        }
-    return ret;
-    }
-
-// ----------------------------------------------------------------------------
-// GetFieldData, for EVPbkFieldStorageTypeDateTime
-// ----------------------------------------------------------------------------
-EXPORT_C TTime CHgCtxContactMatcher::GetFieldDataDateTimeL(
-    const MVPbkStoreContact& aContact,
-    const MVPbkFieldType& aFType ) const
-    {
-    TTime ret(KNullTime);
-    const MVPbkStoreContactField* field = FindField( aContact, aFType);
-    if (field)
-        {
-        const MVPbkContactFieldData& fdata = field->FieldData();
-        if (fdata.DataType() == EVPbkFieldStorageTypeDateTime)
-            {
-            const MVPbkContactFieldDateTimeData& fdata2 =
-                MVPbkContactFieldDateTimeData::Cast( fdata );
-            ret = fdata2.DateTime();
-            }
-        else
-            {
-            User::Leave( KErrArgument );
-            }
-        }
-    return ret;
-    }
-
-// ----------------------------------------------------------------------------
-// GetFieldData, for EVPbkFieldStorageTypeBinary
-// ----------------------------------------------------------------------------
-EXPORT_C TPtrC8 CHgCtxContactMatcher::GetFieldDataBinaryL(
-    const MVPbkStoreContact& aContact,
-    const MVPbkFieldType& aFType ) const
-    {
-    TPtrC8 ret(KNullDesC8);
-    const MVPbkStoreContactField* field = FindField( aContact, aFType);
-    if (field)
-        {
-        const MVPbkContactFieldData& fdata = field->FieldData();
-        if (fdata.DataType() == EVPbkFieldStorageTypeBinary)
-            {
-            const MVPbkContactFieldBinaryData& fdata2 =
-                MVPbkContactFieldBinaryData::Cast( fdata );
-            ret.Set( fdata2.BinaryData() );
-            }
-        else
-            {
-            User::Leave( KErrArgument );
-            }
-        }
-    return ret;
-    }
-
-
-//******************************** Private Methods ***************************
-
-// ----------------------------------------------------------------------------
-// Finds a field of given type from contact.
-// Returns pointer to field or NULL if not found.
-// ----------------------------------------------------------------------------
- const MVPbkStoreContactField* CHgCtxContactMatcher::FindField(
-    const MVPbkStoreContact& aContact,
-    const MVPbkFieldType& aFType ) const
-    {
-    const MVPbkStoreContactFieldCollection& coll = aContact.Fields();
-    TInt n = coll.FieldCount();
-
-    const MVPbkStoreContactField* field = NULL;
-    TBool bFound = EFalse;
-    for(TInt i=0; i < n && !bFound; ++i)
-        {
-        field = &coll.FieldAt( i );
-        const MVPbkFieldType* ftype = field->MatchFieldType( 0 );
-        if ( ftype )
-            {
-            if ( ftype->IsSame( aFType ))
-                {
-                bFound = ETrue;
-                }
-            }
-        }
-    if ( !bFound )
-        {
-        field = NULL;
-        }
-    return field;
-    }
-
-// ----------------------------------------------------------------------------
-// Get URI array with stores
-// ----------------------------------------------------------------------------
-CVPbkContactStoreUriArray* CHgCtxContactMatcher::GetStoreArrayLC(
-    const TDesC& (* const aFuncPtrs[])() )
-    {
-    CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
-
-    // Add stores
-    for(TInt i = 0; aFuncPtrs[i]; i++)
-        {
-        TVPbkContactStoreUriPtr uriPtr(aFuncPtrs[i]());
-        uriArray->AppendL(uriPtr);
-        }
-    return uriArray;
-    }
-
-// ----------------------------------------------------------------------------
-// Open stores. Synchronous version
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::OpenStoreL(const TDesC& (* const aFuncPtrs[])())
-    {
-    CVPbkContactStoreUriArray* uriArray = GetStoreArrayLC(aFuncPtrs);
-
-    CHgCtxContactMatcher::OpenStoreL(*uriArray);
-    CleanupStack::PopAndDestroy(uriArray);
-    }
-
-// ----------------------------------------------------------------------------
-// Open stores. Asynchronous version
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::OpenStoreL(const TDesC& (* const aFuncPtrs[])(),
-    TRequestStatus&  aStatus)
-    {
-    CVPbkContactStoreUriArray* uriArray = GetStoreArrayLC(aFuncPtrs);
-
-    CHgCtxContactMatcher::OpenStoreL(*uriArray, aStatus);
-    CleanupStack::PopAndDestroy(uriArray);
-    }
-
-// ----------------------------------------------------------------------------
-// Called when the opening process is complete,
-// ie. all stores have been reported either failed or successfully opened.
-// ----------------------------------------------------------------------------
-//
-void CHgCtxContactMatcher::OpenComplete()
-    {
-    TInt error = KErrNone;
-    if ( iStoreUris->Count() == 0 )
-        {
-        // unable to open any of the specified stores
-        error = KErrNotSupported;
-        }
-    OperationComplete( error );
-    }
-
-// ----------------------------------------------------------------------------
-// Called when a contact store is ready to use.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::StoreReady( MVPbkContactStore& /*aContactStore*/ )
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// Called when a contact store becomes unavailable.
-// Client may inspect the reason of the unavailability and decide whether or not
-// it will keep the store opened (ie. listen to the store events).
-// @param aContactStore The store that became unavailable.
-// @param aReason The reason why the store is unavailable.
-//                This is one of the system wide error codes.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::StoreUnavailable( MVPbkContactStore& aContactStore,
-    TInt /*aReason*/ )
-    {
-    // Remove contact store from uri list
-    iStoreUris->Remove( aContactStore.StoreProperties().Uri() );
-    }
-
-// ----------------------------------------------------------------------------
-// Called when changes occur in the contact store.
-// @see TVPbkContactStoreEvent
-//
-// @param aStoreEvent Event that has occured.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::HandleStoreEventL(
-        MVPbkContactStore& /*aContactStore*/,
-        TVPbkContactStoreEvent aStoreEvent)
-    {
-    // Contact and group events can be ignored, but we pass backup events for the observer.
-    switch ( aStoreEvent.iEventType )
-        {
-        case TVPbkContactStoreEvent::EStoreBackupBeginning:
-        case TVPbkContactStoreEvent::EStoreRestoreBeginning:
-            {
-            iBackup = ETrue;
-            break;
-            }
-        case TVPbkContactStoreEvent::EStoreBackupRestoreCompleted:
-            {
-            iBackup = EFalse;
-            break;
-            }
-        case TVPbkContactStoreEvent::EContactAdded:
-        case TVPbkContactStoreEvent::EContactDeleted:
-        case TVPbkContactStoreEvent::EContactChanged:
-            {
-            for ( TInt i = 0, ie = iContactObservers.Count(); i != ie; ++i )
-                {
-                iContactObservers[i]->HandleContactEventL();
-                }
-            break;
-            }
-        default:
-            break;
-        }
-    }
-
-
-// ----------------------------------------------------------------------------
-// Called when find is complete. Callee takes ownership of the results.
-// In case of an error during find, the aResults may contain only
-// partial results of the find.
-//
-// @param aResults Array of contact links that matched the find.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FindCompleteL( MVPbkContactLinkArray* aResults )
-    {
-    __ASSERT_DEBUG( aResults, HgContactMatcherPanics::Panic(
-        HgContactMatcherPanics::EPanNullPointer ));
-
-    // Take the ownership of the result immediately
-    CleanupDeletePushL( aResults );
-
-    CopyFindResultsL( aResults );
-
-    CleanupStack::PopAndDestroy(); // aResults
-
-    if (!iResultContactLinkArray)
-        {
-        // No need to copy links. Only interested whether found or not
-        OperationComplete( iResultContactLinkCnt ? KErrNone:KErrNotFound );
-        }
-    else
-        {
-        OperationComplete();
-        iResultContactLinkArray = NULL;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// Called in case the find fails for some reason.
-//
-// @param aError One of the system wide error codes.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FindFailed( TInt aError )
-    {
-    OperationFailed( aError );
-    iResultContactLinkArray = NULL;
-    }
-
-// ----------------------------------------------------------------------------
-// Free old VPbk-operation.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::FreeOldOperation()
-    {
-    delete iOperation;
-    iOperation = NULL;
-    }
-
-// ----------------------------------------------------------------------------
-// Called when operation is completed.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::VPbkSingleContactOperationComplete(
-        MVPbkContactOperationBase& /*aOperation*/, MVPbkStoreContact* aContact)
-    {
-    *iResultStoreContact = aContact;
-    iResultStoreContact  = NULL;
-    OperationComplete();
-    }
-
-// ----------------------------------------------------------------------------
-// Called if the operation fails.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::VPbkSingleContactOperationFailed(
-    MVPbkContactOperationBase& /*aOperation*/, TInt aError)
-    {
-    OperationFailed( aError );
-    }
-
-// ----------------------------------------------------------------------------
-// Set member variables for sync operation
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::InitOperationL( TMethodId aMethod )
-    {
-    if ( iBackup )
-        {
-        User::Leave( KErrAccessDenied );
-        }
-
-    // Check whether operation is in progress
-    if ( iApiMethodStatus == EExecuting )
-        {
-        User::Leave( KErrInUse );
-        }
-
-    iSync  = ETrue;
-    iError = KErrNone;
-    iApiMethod = aMethod;
-    iApiMethodStatus = EIdle;
-    }
-
-// ----------------------------------------------------------------------------
-// Set member variables for async operation
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::InitOperationL( TMethodId aMethod, TRequestStatus* aStatus )
-    {
-    InitOperationL( aMethod );
-
-    iSync  = EFalse;
-    iClientStatus  = aStatus;
-    *iClientStatus = KRequestPending;
-    }
-    
-// ----------------------------------------------------------------------------
-// Set member variables for async operation
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::InitOperation( TRequestStatus* aStatus )
-    {
-    iSync  = EFalse;
-    iClientStatus  = aStatus;
-    *iClientStatus = KRequestPending;
-    }
-
-// ----------------------------------------------------------------------------
-// Sync/async operation finished succesfully, return results to method caller.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::OperationComplete( TInt aErrorCode )
-    {
-    if (iSync)
-        {
-        if ( iASchedulerWait.IsStarted() )
-            {
-            iASchedulerWait.AsyncStop();
-            }
-        }
-    else
-        {
-        if ( iClientStatus )
-            {
-            User::RequestComplete( iClientStatus, aErrorCode );
-            iClientStatus = NULL;
-            }
-        }
-    iApiMethodStatus = EFinished;
-    }
-
-// ----------------------------------------------------------------------------
-// Sync/async operation failed, return results to method caller.
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::OperationFailed( TInt aError )
-    {
-    iError = aError;
-    OperationComplete( aError );
-    }
-
-// ----------------------------------------------------------------------------
-// Free resources allocated for number matching
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::CleanupNumberMatch()
-{
-    delete iMatchStrategy;
-    iMatchStrategy = NULL;
-
-    delete iStratConfig;
-    iStratConfig = NULL;
-
-    // store uris are not deleted here - opened array remains valid
-    // until new set of stores is opened.
-}
-
-// ---------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetContactStoresL
-// ---------------------------------------------------------------------------
-EXPORT_C MVPbkContactStoreList& CHgCtxContactMatcher::GetContactStoresL()
-    {
-    return iContactManager->ContactStoresL();
-    }
-
-
-// -----------------------------------------------------------------------------
-// TInt CHgCtxContactMatcher::GetName
-//
-// Returns the formatted name fo the contact
-// -----------------------------------------------------------------------------
-EXPORT_C HBufC* CHgCtxContactMatcher::GetNameL( MVPbkStoreContactFieldCollection&
-                                                                aFieldCollection )
-    {
-    MPbk2ContactNameFormatter& nameFormatter = ContactNameFormatterL();
-    
-    HBufC* formattedName = nameFormatter.GetContactTitleOrNullL( aFieldCollection, 
-    						                                     MPbk2ContactNameFormatter::EUseSeparator );
-    return formattedName;
-    }
-
-// -----------------------------------------------------------------------------
-// CVPbkContactManager& CHgCtxContactMatcher::GetContactManager( )
-// -----------------------------------------------------------------------------
-EXPORT_C CVPbkContactManager& CHgCtxContactMatcher::GetContactManager()
-    {
-    return *iContactManager;
-    }
-    
-
-// ----------------------------------------------------------------------------
-// Synchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::MatchDataL( const TDesC& aData,
-    const MVPbkFieldTypeList& aFieldTypes,
-    CVPbkContactLinkArray& aLinkArray)
-    {
-    InitOperationL( EMatchData );
-    iResultContactLinkArray = &aLinkArray;
-
-    // Start asynchronous matching and wait until results are ready
-    FreeOldOperation();
-    iOperation = iContactManager->FindL(aData, aFieldTypes, *this);
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        iASchedulerWait.Start();
-        }
-
-    User::LeaveIfError( iError );
-    RemoveSimilarEmailAddressesL( aData, aLinkArray, aFieldTypes );
-   	}
-
-// ----------------------------------------------------------------------------
-// Remove contacts that do not have exactly the correct email address
-// e.g. if cbd@test.com address is requested, the for example a contact with address abcd@test.com will be removed
-// from the result.
-// This filtering is done only in the syncronous version of MatchDataL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::RemoveSimilarEmailAddressesL( const TDesC& aData, CVPbkContactLinkArray& aLinkArray, const MVPbkFieldTypeList& aFieldTypes )
-    {
-    TVPbkFieldVersitProperty prop;
-    prop.SetName( EVPbkVersitNameEMAIL );
-    // do extra checks for email addresses
-    
-    const MVPbkFieldType* foundType = NULL;
-    // Continue only if at least one type is EVPbkVersitNameEMAIL
-    TInt i;
-    for ( i = 0 ; i < aFieldTypes.FieldTypeCount() ; i++ )
-        {
-        foundType = &(aFieldTypes.FieldTypeAt( i ));
-        if ( foundType->VersitProperties().Count() > 0
-            && foundType->VersitProperties()[0].Name() == prop.Name() )
-            {
-            break;
-            }
-        }
-    if ( i == aFieldTypes.FieldTypeCount() )
-    	{
-    	// no email types
-    	return;
-    	}
-    
-    const MVPbkFieldTypeList& fieldTypeList = FieldTypes();
-
-    TInt index = 0;
-	TBool isExactMatch;
-    while( index < aLinkArray.Count() )
-    	{
-	    MVPbkStoreContact* storeContact;
-	    GetStoreContactL( aLinkArray.At( index ), &storeContact );
-	    storeContact->PushL();
-	    
-	    isExactMatch = EFalse;
-        for ( TInt i = 0; i < fieldTypeList.FieldTypeCount(); i++ )
-            {
-            // find the email property
-            foundType = &(fieldTypeList.FieldTypeAt( i ));
-            if ( foundType->VersitProperties().Count() > 0
-                && foundType->VersitProperties()[0].Name() == prop.Name() )
-                {
-                TPtrC src = GetFieldDataTextL(*storeContact, *foundType );
-                if ( aData.CompareF( src ) == 0 )
-        	    	{
-        	    	isExactMatch = ETrue;
-        	    	}
-                }
-            }
-	    if ( isExactMatch )
-            {
-            // go for the next contact
-            index++;
-            }
-        else
-        	{
-            // remove the contact, because the email address does not match the one queried. 
-            // the next one will take plce of this contact in the list (=do not increase index)
-            aLinkArray.Delete( index ); 
-        	}
-	    CleanupStack::PopAndDestroy( storeContact );
-    	}
-    }
-
-// ----------------------------------------------------------------------------
-// Asynchronous version
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::MatchDataL( const TDesC& aData,
-    const MVPbkFieldTypeList& aFieldTypes,
-    CVPbkContactLinkArray& aLinkArray,
-    TRequestStatus& aStatus)
-    {
-    InitOperationL( EMatchData );
-    iResultContactLinkArray = &aLinkArray;
-
-    // Start asynchronous matching
-    FreeOldOperation();
-    iOperation = iContactManager->FindL(aData, aFieldTypes, *this);
-    InitOperation( &aStatus );
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        }
-    }
-// ----------------------------------------------------------------------------
-// MatchData for searchstrings
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::MatchDataL( const MDesC16Array& aSearchStrings,
-    const MVPbkFieldTypeList& aFieldTypes,
-    CVPbkContactLinkArray& aLinkArray,
-    const TCallBack& aWordParserCallBack )
-    {
-    InitOperationL( EMatchData );
-    iResultContactLinkArray = &aLinkArray;
-
-    // Start asynchronous matching and wait here until results are ready
-    FreeOldOperation();
-    iOperation = iContactManager->FindL( aSearchStrings, aFieldTypes,
-        *this, aWordParserCallBack );
-
-    if ( iApiMethodStatus != EFinished )
-        {
-        iApiMethodStatus = EExecuting;
-        iASchedulerWait.Start();
-        }
-    User::LeaveIfError( iError );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactNameFormatterL
-// ----------------------------------------------------------------------------
-EXPORT_C MPbk2ContactNameFormatter& CHgCtxContactMatcher::ContactNameFormatterL()
-    {
-    //first initialise, if not already initialised
-    if ( !iSortOrderManager )
-        {
-        iSortOrderManager = CPbk2SortOrderManager::NewL( FieldTypes() );
-        }
-        
-    if ( !iNameFormatter )
-        {
-        iNameFormatter = Pbk2ContactNameFormatterFactory::CreateL( FieldTypes(),
-                                                                  *iSortOrderManager );
-        }
-    return *iNameFormatter;
-    }
-
-
-// ---------------------------------------------------------------------------
-// HgContactMatcherPanics::Panic
-//
-// Panic function
-// ---------------------------------------------------------------------------
-void HgContactMatcherPanics::Panic( TPanic aPanic )
-    {
-    _LIT(KPanicCategory, "ContactMatcher");
-    User::Panic( KPanicCategory, aPanic );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::SplitAndMatchL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::SplitAndMatchL( const TDesC& aData,
-        const MVPbkFieldTypeList& aFieldTypes,
-        CVPbkContactLinkArray& aLinkArray)
-    {
-    CDesCArray* wordArray = SplitFindStringL( aData );
-    CleanupStack::PushL( wordArray );
-    TCallBack findParser( FindWordSplitterL );
-    MatchDataL( *wordArray, aFieldTypes, aLinkArray, findParser );
-    CleanupStack::PopAndDestroy( wordArray );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::RegisterContactObserverL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::RegisterContactObserverL(
-        MHgCtxContactObserver& aObserver )
-    {
-    if ( iContactObservers.Find( &aObserver ) == KErrNotFound )
-        {
-        iContactObservers.AppendL( &aObserver );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::UnregisterContactObserver
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::UnregisterContactObserver(
-        MHgCtxContactObserver& aObserver )
-    {
-    TInt pos = iContactObservers.Find( &aObserver );
-    if ( pos >= 0 )
-        {
-        iContactObservers.Remove( pos );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::LookupL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::LookupL( const TDesC& aData,
-        CVPbkContactLinkArray& aLinkArray )
-    {
-    HGLOG_CONTEXT( LookupL, HGLOG_LOCAL );
-    HGLOG1_IN( "'%S'", &aData );
-
-    // Take part_A from "part_A <part_B>"
-    // or part_A from "part_A".
-    TPtrC input( aData );
-    TInt ltPos = input.Locate( '<' );
-    TInt gtPos = input.Locate( '>' );
-    if ( ltPos != KErrNotFound && gtPos> ltPos )
-        {
-        input.Set( aData.Mid( 0, ltPos ) );
-        }
-    HBufC* trimmedInput = input.AllocLC();
-    trimmedInput->Des().Trim();
-
-    TInt oldCount = aLinkArray.Count();
-    if ( IsPhoneNumberL( *trimmedInput ) )
-        {
-        TryNumberLookupL( *trimmedInput, aLinkArray );
-        }
-    else
-        {
-        TryTextLookupL( *trimmedInput, aLinkArray );
-        }
-
-    CleanupStack::PopAndDestroy( trimmedInput );
-
-    if ( aLinkArray.Count() == oldCount && ltPos != KErrNotFound && gtPos > ltPos )
-        {
-        // lookup for part_A was not successful so try part_B
-        trimmedInput = aData.Mid( ltPos + 1, gtPos - ltPos - 1 ).AllocLC();
-        trimmedInput->Des().Trim();
-        if ( IsPhoneNumberL( *trimmedInput ) )
-            {
-            TryNumberLookupL( *trimmedInput, aLinkArray );
-            }
-        else
-            {
-            TryTextLookupL( *trimmedInput, aLinkArray );
-            }
-        CleanupStack::PopAndDestroy( trimmedInput );
-        }
-        
-    HGLOG1_OUT( "got %d results", aLinkArray.Count() - oldCount );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateNameFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateNameFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateNameFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iNameFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( EVPbkVersitNameFN );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNameFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try FN" );
-        }
-
-    prop.SetName( EVPbkVersitNameN );
-    prop.SetSubField( EVPbkVersitSubFieldGivenName );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNameFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try given name" );
-        }
-    
-    prop.SetName( EVPbkVersitNameN );
-    prop.SetSubField( EVPbkVersitSubFieldFamilyName );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNameFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try family name" );
-        }
-    
-    prop.SetName( EVPbkVersitNameORG );
-    prop.SetSubField( EVPbkVersitSubFieldOrgName );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNameFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try org name" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateEmailFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateEmailFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateEmailFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iEmailFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( EVPbkVersitNameEMAIL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamINTERNET );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iEmailFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general email" );
-        }
-
-    prop.SetName( EVPbkVersitNameEMAIL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamINTERNET );
-    prop.Parameters().Add( EVPbkVersitParamWORK );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iEmailFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work email" );
-        }
-
-    prop.SetName( EVPbkVersitNameEMAIL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamINTERNET );
-    prop.Parameters().Add( EVPbkVersitParamHOME );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iEmailFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home email" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateXspIdFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateXspIdFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateXspIdFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iXspIdFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( EVPbkVersitNameIMPP );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iXspIdFieldTypes->AppendL( *t );
-        }
-        
-    HGLOG1_OUT( "found %d xsp id field types",
-        iXspIdFieldTypes->FieldTypeCount() );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateNumberFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateNumberFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateNumberFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iNumberFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamCELL );
-    prop.Parameters().Add( EVPbkVersitParamHOME );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home mobile" );
-        }
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamCELL );
-    prop.Parameters().Add( EVPbkVersitParamWORK );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work mobile" );
-        }
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamCELL );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general mobile" );
-        }
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamHOME );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home landline" );
-        }
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    prop.Parameters().Add( EVPbkVersitParamWORK );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work landline" );
-        }
-
-    prop.SetName( EVPbkVersitNameTEL );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    prop.Parameters().Reset();
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iNumberFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general landline" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateAddressFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateAddressFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iAddressFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldCountry );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general country" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldRegion );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general region" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldLocality );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general locality" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldStreet );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try general street" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateWebAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateWebAddressFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateWebAddressFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iWebAddressFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.Parameters().Add( EVPbkVersitParamPREF );
-    prop.SetName( EVPbkVersitNameURL );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWebAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try prefered url" );
-        }        
-    
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateWebAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateWebAddressHomeFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateWebAddressHomeFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iWebAddressHomeFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.Parameters().Add( EVPbkVersitParamHOME );
-    prop.SetName( EVPbkVersitNameURL );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWebAddressHomeFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home url" );
-        }   
-    
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateWebAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateWebAddressWorkFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateWebAddressWorkFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iWebAddressWorkFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.Parameters().Add( EVPbkVersitParamWORK );
-    prop.SetName( EVPbkVersitNameURL );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWebAddressWorkFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work url" );
-        }      
-    
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateHomeAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateHomeAddressFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateHomeAddressFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iHomeAddressFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-    prop.Parameters().Add( EVPbkVersitParamHOME );
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldCountry );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iHomeAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home country" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldRegion );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iHomeAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home region" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldLocality );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iHomeAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home locality" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldStreet );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iHomeAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try home street" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::PreCreateWorkAddressFieldTypesL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::PreCreateWorkAddressFieldTypesL()
-    {
-    HGLOG_CONTEXT( PreCreateWorkAddressFieldTypesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    iWorkAddressFieldTypes = CVPbkFieldTypeRefsList::NewL();
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-    prop.Parameters().Add( EVPbkVersitParamWORK );
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldCountry );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWorkAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work country" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldRegion );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWorkAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work region" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldLocality );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWorkAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work locality" );
-        }
-
-    prop.SetName( EVPbkVersitNameADR );
-    prop.SetSubField( EVPbkVersitSubFieldStreet );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        iWorkAddressFieldTypes->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "will try work street" );
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::TryTextLookupL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::TryTextLookupL( const TDesC& aName,
-        CVPbkContactLinkArray& aLinkArray )
-    {
-    HGLOG_CONTEXT( TryTextLookupL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    CVPbkFieldTypeRefsList* fieldTypes = CVPbkFieldTypeRefsList::NewL();
-    CleanupStack::PushL( fieldTypes );
-
-    // try name and email and ovi id fields
-    if ( !iNameFieldTypes )
-        {
-        PreCreateNameFieldTypesL();
-        }
-    for ( TInt i = 0, ie = iNameFieldTypes->FieldTypeCount(); i != ie; ++i )
-        {
-        fieldTypes->AppendL( iNameFieldTypes->FieldTypeAt( i ) );
-        }
-    if ( !iEmailFieldTypes )
-        {
-        PreCreateEmailFieldTypesL();
-        }
-    for ( TInt i = 0, ie = iEmailFieldTypes->FieldTypeCount(); i != ie; ++i )
-        {
-        fieldTypes->AppendL( iEmailFieldTypes->FieldTypeAt( i ) );
-        }
-    if ( !iXspIdFieldTypes )
-        {
-        PreCreateXspIdFieldTypesL();
-        }
-    for ( TInt i = 0, ie = iXspIdFieldTypes->FieldTypeCount(); i != ie; ++i )
-        {
-        fieldTypes->AppendL( iXspIdFieldTypes->FieldTypeAt( i ) );
-        }
-
-    SplitAndMatchL( aName, *fieldTypes, aLinkArray );
-
-    CleanupStack::PopAndDestroy( fieldTypes );
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::TryNumberLookupL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::TryNumberLookupL( const TDesC& aNumber,
-        CVPbkContactLinkArray& aLinkArray )
-    {
-    HGLOG_CONTEXT( TryNumberLookupL, HGLOG_LOCAL );
-    HGLOG_IN();
-    
-    MatchPhoneNumberL( aNumber,
-        KNumberMatchLenFromRight,
-        CVPbkPhoneNumberMatchStrategy::EVPbkMatchFlagsNone,
-        aLinkArray );
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetTextFieldsL
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::GetTextFieldsL(
-        const CVPbkFieldTypeRefsList& aList,
-        const MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray )
-    {
-    HGLOG_CONTEXT( GetTextFieldsL, HGLOG_LOCAL );
-    HGLOG_IN();
-        
-    for ( TInt i = 0, ie = aFieldCollection.FieldCount(); i != ie; ++i )
-        {
-        const MVPbkStoreContactField& field( aFieldCollection.FieldAt( i ) );
-        const MVPbkFieldType* type = field.BestMatchingFieldType();
-        if ( type && aList.ContainsSame( *type ) )
-            {
-            const MVPbkContactFieldData& fdata( field.FieldData() );
-            if ( fdata.DataType() == EVPbkFieldStorageTypeText )
-                {
-                const MVPbkContactFieldTextData& fdata2 =
-                    MVPbkContactFieldTextData::Cast( fdata );
-                const TDesC& text( fdata2.Text() );
-                aArray.AppendL( text );
-                HGLOG1( HGLOG_INFO, "found: '%S'", &text );
-                }
-            }
-        }
-        
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetNumbersL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetNumbersL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray )
-    {
-    HGLOG_CONTEXT( GetNumbersL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    if ( !iNumberFieldTypes )
-        {
-        PreCreateNumberFieldTypesL();
-        }
-    GetTextFieldsL( *iNumberFieldTypes, aFieldCollection, aArray );
-
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetEmailAddressesL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetEmailAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray )
-    {
-    HGLOG_CONTEXT( GetEmailAddressesL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    if ( !iEmailFieldTypes )
-        {
-        PreCreateEmailFieldTypesL();
-        }
-    GetTextFieldsL( *iEmailFieldTypes, aFieldCollection, aArray );
-
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetAddressesL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray )
-    {
-    HGLOG_CONTEXT( GetAddressesL, HGLOG_LOCAL );
-    HGLOG_IN();
-    
-    CDesC16ArrayFlat* arr = new ( ELeave ) CDesC16ArrayFlat( KArrayGranularity );
-    CleanupStack::PushL( arr );
-
-    if ( !iAddressFieldTypes )
-        {
-        PreCreateAddressFieldTypesL();
-        }
-    GetTextFieldsL( *iAddressFieldTypes, aFieldCollection, *arr );
-    if ( arr->Count() )
-        {
-        HBufC* combined = CombineStringsLC( *arr );
-        aArray.AppendL( *combined );
-        HGLOG1( HGLOG_INFO, "added '%S'", combined );
-        CleanupStack::PopAndDestroy( combined );
-        }
-
-    arr->Reset();
-    if ( !iHomeAddressFieldTypes )
-        {
-        PreCreateHomeAddressFieldTypesL();
-        }
-    GetTextFieldsL( *iHomeAddressFieldTypes, aFieldCollection, *arr );
-    if ( arr->Count() )
-        {
-        HBufC* combined = CombineStringsLC( *arr );
-        aArray.AppendL( *combined );
-        HGLOG1( HGLOG_INFO, "added '%S'", combined );
-        CleanupStack::PopAndDestroy( combined );
-        }
-
-    arr->Reset();
-    if ( !iWorkAddressFieldTypes )
-        {
-        PreCreateWorkAddressFieldTypesL();
-        }
-    GetTextFieldsL( *iWorkAddressFieldTypes, aFieldCollection, *arr );
-    if ( arr->Count() )
-        {
-        HBufC* combined = CombineStringsLC( *arr );
-        aArray.AppendL( *combined );
-        HGLOG1( HGLOG_INFO, "added '%S'", combined );
-        CleanupStack::PopAndDestroy( combined );
-        }
-
-    CleanupStack::PopAndDestroy( arr );
-    HGLOG_OUT();
-    }
-
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetWebAddressesL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetWebAddressesL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray,
-        TWebAddressesType aType  )
-    {
-    HGLOG_CONTEXT( GetWebAddressesL, HGLOG_LOCAL );
-    HGLOG_IN();
-    CVPbkFieldTypeRefsList* addressFieldTypes( NULL );
-    
-    switch ( aType )
-        {
-        case EWebAddresses:
-            {
-            if ( !iWebAddressFieldTypes )
-               {
-               PreCreateWebAddressFieldTypesL();
-               }
-            addressFieldTypes = iWebAddressFieldTypes;
-            }
-            break;
-            
-        case EWebAddressesHome:
-            {
-            if ( !iWebAddressHomeFieldTypes )
-               {
-               PreCreateWebAddressHomeFieldTypesL();
-               }
-            addressFieldTypes = iWebAddressHomeFieldTypes;
-            }
-            break;
-
-        case EWebAddressesWork:
-            {
-            if ( !iWebAddressWorkFieldTypes )
-                {
-                PreCreateWebAddressWorkFieldTypesL();
-                }
-            addressFieldTypes = iWebAddressWorkFieldTypes;
-            }
-            break;
-            
-        default:
-            break;
-        }
-    
-    if( addressFieldTypes )
-        {
-        GetTextFieldsL( *addressFieldTypes, aFieldCollection, aArray );
-        }
-    
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetThumbnailL
-// ----------------------------------------------------------------------------
-EXPORT_C CFbsBitmap* CHgCtxContactMatcher::GetThumbnailL(
-        MVPbkStoreContactFieldCollection& aFieldCollection )
-    {
-    HGLOG_CONTEXT( GetThumbnailL, HGLOG_LOCAL );
-    HGLOG_IN();
-    
-    CFbsBitmap* result = 0;
-    TVPbkFieldVersitProperty prop;
-    prop.SetName( EVPbkVersitNamePHOTO );
-    const MVPbkFieldType* t = FieldTypes().FindMatch( prop, 0 );
-    if ( t )
-        {
-        HGLOG0( HGLOG_INFO, "photo field type found" );
-        for ( TInt i = 0, ie = aFieldCollection.FieldCount(); i != ie; ++i )
-            {
-            const MVPbkStoreContactField& field( aFieldCollection.FieldAt( i ) );
-            const MVPbkFieldType* type = field.BestMatchingFieldType();
-            if ( type && type->IsSame( *t ) )
-                {
-                const MVPbkContactFieldData& fdata( field.FieldData() );
-                if ( fdata.DataType() == EVPbkFieldStorageTypeBinary )
-                    {
-                    HGLOG0( HGLOG_INFO, "found thumbnail" );
-                    const MVPbkContactFieldBinaryData& fdata2 =
-                        MVPbkContactFieldBinaryData::Cast( fdata );
-                    TPtrC8 data( fdata2.BinaryData() );
-                    CImageDecoder* decoder = 0;
-                    // DataNewL does not seem to work properly with
-                    // EOptionAlwaysThread, it will hang in WaitForRequest
-                    // for ever, at least in the panel app.
-                    // So write the image to a temporary file (duhhh...)
-                    // and use FileNewL.
-                    RFile f;
-                    TFileName tempFileName;
-                    iFsSession->CreatePrivatePath( EDriveC );
-                    iFsSession->PrivatePath( tempFileName );
-                    _LIT( KDriveC, "C:" );
-                    _LIT( KTempName, "hgctxthumb" );
-                    tempFileName.Insert( 0, KDriveC );
-                    tempFileName.Append( KTempName );
-                    HGLOG1( HGLOG_INFO, "tempfn='%S'", &tempFileName );
-                    User::LeaveIfError( f.Replace( *iFsSession, tempFileName,
-                                    EFileWrite ) );
-                    f.Write( data, data.Length() );
-                    f.Close();
-                    TRAPD( err, decoder = CImageDecoder::FileNewL( *iFsSession,
-                                    tempFileName,
-                                    CImageDecoder::EOptionAlwaysThread ) );
-                    HGLOG1( HGLOG_INFO, "decoder NewL result: %d", err );
-                    if ( err == KErrNone )
-                        {
-                        CleanupStack::PushL( decoder );
-                        result = new ( ELeave ) CFbsBitmap;
-                        CleanupStack::PushL( result );
-                        TSize sz( decoder->FrameInfo().iOverallSizeInPixels );
-                        TDisplayMode mode( decoder->FrameInfo().iFrameDisplayMode );
-                        HGLOG3( HGLOG_INFO, "size=%dx%d, mode=%d", sz.iWidth,
-                                sz.iHeight, mode );
-                        User::LeaveIfError( result->Create( sz, mode ) );
-        
-                        TRequestStatus status;
-                        HGLOG0( HGLOG_INFO, "starting to convert" );
-                        decoder->Convert( &status, *result );
-                        User::WaitForRequest( status );
-                        HGLOG1( HGLOG_INFO, "decoder Convert result: %d",
-                                status.Int() );
-                        CleanupStack::Pop( result );
-                        CleanupStack::PopAndDestroy( decoder );
-        
-                        if ( status.Int() != KErrNone )
-                            {
-                            delete result;
-                            result = 0;
-                            }
-                        else
-                            {
-                            // stop and return the bitmap
-                            break;
-                            }
-                        }                    
-                    }
-                }
-            }
-        }
-        
-    HGLOG_OUT();
-    return result;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::IsPhoneNumberL
-// ----------------------------------------------------------------------------
-EXPORT_C TBool CHgCtxContactMatcher::IsPhoneNumberL( const TDesC& aData )
-    {
-    TBool result = EFalse;
-    CFindItemEngine::SFoundItem item;
-    CFindItemEngine* search = CFindItemEngine::NewL( aData,
-        CFindItemEngine::EFindItemSearchPhoneNumberBin );
-    if ( search->ItemCount() )
-        {
-        search->Item( item );
-        result = item.iStartPos == 0;
-        }
-    delete search;
-    return result;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::IsEmailAddressL
-// ----------------------------------------------------------------------------
-EXPORT_C TBool CHgCtxContactMatcher::IsEmailAddressL( const TDesC& aData )
-    {
-    TBool result = EFalse;
-    CFindItemEngine::SFoundItem item;
-    CFindItemEngine* search = CFindItemEngine::NewL( aData,
-        CFindItemEngine::EFindItemSearchMailAddressBin );
-    if ( search->ItemCount() )
-        {
-        search->Item( item );
-        result = item.iStartPos == 0;
-        }
-    delete search;
-    return result;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetNamesForFindL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetNamesForFindL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray )
-    {
-    CVPbkFieldTypeRefsList* nameTypes = CVPbkFieldTypeRefsList::NewL();
-    CleanupStack::PushL( nameTypes );
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-    
-    prop.SetName( EVPbkVersitNameN );
-    prop.SetSubField( EVPbkVersitSubFieldGivenName );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        nameTypes->AppendL( *t );
-        }
-    
-    prop.SetName( EVPbkVersitNameN );
-    prop.SetSubField( EVPbkVersitSubFieldFamilyName );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        nameTypes->AppendL( *t );
-        }
-    
-    for ( TInt i = 0, ie = aFieldCollection.FieldCount(); i != ie; ++i )
-        {
-        const MVPbkStoreContactField& field( aFieldCollection.FieldAt( i ) );
-        t = field.MatchFieldType( 0 );
-        if ( t && nameTypes->ContainsSame( *t ) )
-            {
-            const MVPbkContactFieldData& fdata( field.FieldData() );
-            if ( fdata.DataType() == EVPbkFieldStorageTypeText )
-                {
-                const MVPbkContactFieldTextData& fdata2 =
-                    MVPbkContactFieldTextData::Cast( fdata );
-                aArray.AppendL( fdata2.Text() );
-                }
-            }
-        }
-
-    CleanupStack::PopAndDestroy( nameTypes );
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetNamesForFindL
-// ----------------------------------------------------------------------------
-EXPORT_C HBufC* CHgCtxContactMatcher::GetNamesForFindL(
-        MVPbkStoreContactFieldCollection& aFieldCollection )
-    {
-    CDesC16ArrayFlat* arr = new ( ELeave ) CDesC16ArrayFlat( KArrayGranularity );
-    CleanupStack::PushL( arr );
-    GetNamesForFindL( aFieldCollection, *arr );
-    HBufC* result = CombineStringsLC( *arr );
-    CleanupStack::Pop( result );
-    CleanupStack::PopAndDestroy( arr );
-    return result;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::SplitFindStringL
-// ----------------------------------------------------------------------------
-EXPORT_C CDesCArray* CHgCtxContactMatcher::SplitFindStringL(const TDesC& aFindString)
-    {
-	CDesCArray* wordArray = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
-	CleanupStack::PushL( wordArray );	
-	
-    TVPbkWordParserCallbackParam parser( &aFindString, wordArray );
-	FindWordSplitterL( &parser );
-	
-	CleanupStack::Pop(); // wordArray
-	return parser.iWordArray;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::SplitMsgContactL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::SplitMsgContactL( const TDesC& aString,
-        CDesCArray& aArray )
-    {
-    TInt pos = aString.Locate( '<' );
-    if ( pos >= 0 )
-        {
-        // skip spaces before '<'
-        TInt endPos = pos - 1;
-        while ( endPos > 0 && TChar( aString[endPos] ).IsSpace() )
-            {
-            --endPos;
-            }
-        // take the text before '<'
-        aArray.AppendL( aString.Left( endPos + 1 ) );
-        // take the text between '<' and '>'
-        TInt closePos = aString.Locate( '>' );
-        if ( closePos > pos )
-            {
-            aArray.AppendL( aString.Mid( pos + 1, closePos - pos - 1 ) );
-            }
-        }
-    else
-        {
-        aArray.AppendL( aString );
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetCustomFieldL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetCustomFieldL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray& aArray,
-        TVPbkFieldTypeName aVersitName,
-        TVPbkFieldTypeParameter aVersitParam )
-    {
-    HGLOG_CONTEXT( GetCustomFieldL, HGLOG_LOCAL );
-    HGLOG_IN();
-    
-    CVPbkFieldTypeRefsList* typeList = GetCustomFieldTypeLC(
-        aVersitName, aVersitParam );
-
-    GetTextFieldsL( *typeList, aFieldCollection, aArray );
-    
-    CleanupStack::PopAndDestroy( typeList );
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetCustomFieldTypeLC
-// ----------------------------------------------------------------------------
-EXPORT_C CVPbkFieldTypeRefsList* CHgCtxContactMatcher::GetCustomFieldTypeLC(
-        TVPbkFieldTypeName aVersitName,
-        TVPbkFieldTypeParameter aVersitParam )
-    {
-    HGLOG_CONTEXT( GetCustomFieldTypeLC, HGLOG_LOCAL );
-    HGLOG_IN();
-    
-    CVPbkFieldTypeRefsList* typeList = CVPbkFieldTypeRefsList::NewL();
-    CleanupStack::PushL( typeList );
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-
-    prop.SetName( aVersitName );
-    prop.Parameters().Add( aVersitParam );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        typeList->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "field found" );
-        }
-
-    HGLOG_OUT();
-    return typeList;
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::GetImppFieldL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::GetImppFieldL(
-        MVPbkStoreContactFieldCollection& aFieldCollection,
-        CDesCArray* aSchemeOnlyArray,
-        CDesCArray* aUriOnlyArray,
-        CDesCArray* aFullArray )
-    {
-    HGLOG_CONTEXT( GetImppFieldL, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    // this function will not build on TUBE
-    CVPbkFieldTypeRefsList* typeList = CVPbkFieldTypeRefsList::NewL();
-    CleanupStack::PushL( typeList );
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* t;
-    prop.SetName( EVPbkVersitNameIMPP );
-    t = types.FindMatch( prop, 0 );
-    if ( t )
-        {
-        typeList->AppendL( *t );
-        HGLOG0( HGLOG_INFO, "type found" );
-        }
-    for ( TInt i = 0, ie = aFieldCollection.FieldCount(); i != ie; ++i )
-        {
-        const MVPbkStoreContactField& field( aFieldCollection.FieldAt( i ) );
-        const MVPbkFieldType* type = field.BestMatchingFieldType();
-        if ( type && typeList->ContainsSame( *type ) )
-            {
-            const MVPbkContactFieldData& fdata( field.FieldData() );
-            HGLOG1( HGLOG_INFO, "field found %d", fdata.DataType() );
-            if ( fdata.DataType() == EVPbkFieldStorageTypeUri )
-                {
-                const MVPbkContactFieldUriData& fdata2 =
-                    MVPbkContactFieldUriData::Cast( fdata );
-                const TDesC& schemeOnly( fdata2.Scheme() );
-                const TDesC& uriOnly( fdata2.Text() );
-                const TDesC& fullText( fdata2.Uri() );
-                HGLOG3( HGLOG_INFO, "'%S' + '%S' = '%S'",
-                    &schemeOnly, &uriOnly, &fullText );
-                if ( aSchemeOnlyArray )
-                    {
-                    aSchemeOnlyArray->AppendL( schemeOnly );
-                    }
-                if ( aUriOnlyArray )
-                    {
-                    aUriOnlyArray->AppendL( uriOnly );
-                    }
-                if ( aFullArray )
-                    {
-                    aFullArray->AppendL( fullText );
-                    }
-                }
-            }
-        }                    
-    CleanupStack::PopAndDestroy( typeList );
-    
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::FindContactWithBirthdayL
-// ----------------------------------------------------------------------------
-EXPORT_C void CHgCtxContactMatcher::FindContactWithBirthdayL(
-        const TTime& aDate,
-        CVPbkContactLinkArray& aLinkArray )
-    {
-    HGLOG_CONTEXT( FindContactWithBirthdayL, HGLOG_LOCAL );
-    HGLOG1_IN( "%Ld", aDate.Int64() );
-
-    // extract month and day
-    TDateTime dt = aDate.DateTime();
-    TInt month = dt.Month();
-    TInt day = dt.Day();
-    HGLOG2( HGLOG_INFO, "wanted month = %d day = %d", month, day );
-
-    CVPbkFieldTypeRefsList* emptyList = CVPbkFieldTypeRefsList::NewL();
-    CleanupStack::PushL( emptyList );
-
-    // create view with all contacts
-    CVPbkContactViewDefinition* def = CVPbkContactViewDefinition::NewLC();
-    def->SetType( EVPbkContactsView );
-    def->SetUriL( VPbkContactStoreUris::DefaultCntDbUri() );
-    MVPbkContactViewBase* view = iContactManager->CreateContactViewLC(
-        *this, *def, *emptyList );
-
-    HGLOG0( HGLOG_INFO, "starting wait" );
-    iASchedulerWait.Start();
-    HGLOG0( HGLOG_INFO, "after wait" );
-
-    // view is ready
-    TInt ctCount = view->ContactCountL();
-    HGLOG1( HGLOG_INFO, "contact count: %d", ctCount );
-
-    // find the birthday field type
-    const MVPbkFieldTypeList& types( FieldTypes() );
-    TVPbkFieldVersitProperty prop;
-    const MVPbkFieldType* bdayFt;
-    prop.SetName( EVPbkVersitNameBDAY );
-    prop.SetSubField( EVPbkVersitSubFieldNone );
-    bdayFt = types.FindMatch( prop, 0 );
-
-    if ( bdayFt && ctCount )
-        {
-        HGLOG0( HGLOG_INFO, "found bday field type" );
-        TTime nullTime( KNullTime );
-        // go through all contacts and check birthday field values
-        for ( TInt i = 0; i < ctCount; ++i )
-            {
-            MVPbkContactLink* link( view->CreateLinkLC( i ) );
-            MVPbkStoreContact* contact = 0;
-            GetStoreContactL( *link, &contact );
-            if ( contact )
-                {
-                HGLOG1( HGLOG_INFO, "got contact, idx %d", i );
-                contact->PushL();
-                TTime bday;
-                bday = GetFieldDataDateTimeL( *contact, *bdayFt );
-                if ( bday != nullTime )
-                    {
-                    HGLOG1( HGLOG_INFO, "found bday %Ld", bday.Int64() );
-                    dt = bday.DateTime();
-                    TInt thisMonth = dt.Month();
-                    TInt thisDay = dt.Day();
-                    HGLOG2( HGLOG_INFO, "for this contact month = %d day = %d",
-                        thisMonth, thisDay );
-                    if ( thisMonth == month && thisDay == day )
-                        {
-                        HGLOG0( HGLOG_INFO, "match" );
-                        aLinkArray.AppendL( link );
-                        link = 0;
-                        }
-                    }
-                CleanupStack::PopAndDestroy(); // contact
-                }
-            CleanupStack::Pop(); // if matched then no ownership and link is NULL by now
-            delete link;
-            }
-        }
-
-    CleanupStack::PopAndDestroy(); // view
-    CleanupStack::PopAndDestroy( def );
-    CleanupStack::PopAndDestroy( emptyList );
-
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactViewReady
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::ContactViewReady(
-        MVPbkContactViewBase& aView ) 
-    {
-    HGLOG_CONTEXT( ContactViewReady, HGLOG_LOCAL );
-    HGLOG_IN();
-
-    if ( iASchedulerWait.IsStarted() )
-        {
-        iASchedulerWait.AsyncStop();
-        }
-
-    aView.RemoveObserver( *this ); 
-
-    HGLOG_OUT();
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactViewUnavailable
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::ContactViewUnavailable(
-        MVPbkContactViewBase& /*aView*/ )
-    {
-    // means that view is unavailable for now
-    // but ContactViewReady will be called at some point
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactAddedToView
-// ----------------------------------------------------------------------------
-void CHgCtxContactMatcher::ContactAddedToView(
-        MVPbkContactViewBase& /*aView*/, 
-        TInt /*aIndex*/,
-        const MVPbkContactLink& /*aContactLink*/ )
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactRemovedFromView
-// ----------------------------------------------------------------------------
- void CHgCtxContactMatcher::ContactRemovedFromView(
-        MVPbkContactViewBase& /*aView*/, 
-        TInt /*aIndex*/, 
-        const MVPbkContactLink& /*aContactLink*/ )
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CHgCtxContactMatcher::ContactViewError
-// ----------------------------------------------------------------------------
- void CHgCtxContactMatcher::ContactViewError(
-        MVPbkContactViewBase& aView, 
-        TInt aError, 
-        TBool /*aErrorNotified*/ )
-    {
-    HGLOG_CONTEXT( ContactViewError, HGLOG_LOCAL );
-    HGLOG1_IN( "aError = %d", aError );
-
-    if ( iASchedulerWait.IsStarted() )
-        {
-        iASchedulerWait.AsyncStop();
-        }
-
-    aView.RemoveObserver( *this ); 
-    
-    HGLOG_OUT();
-    }
-
-
-// End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  T_ui_context_utility_api class member functions
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <Stiftestinterface.h>
-#include <aknappui.h>
-#include <cfclient.h>
-#include "hgcontextutilityimpl.h"
-#include "hgcontextutility.h"
-#include "hgcontexttypes.h"
-#include "hgtestbasemacros.h"
-#include "T_ui_context_utility_api.h"
-#include "wait.h"
-#include "hgtestbasemacros.h"
-#include <cvpbkcontactmanager.h>
-#include <mvpbkcontactstore.h>
-#include <mvpbkcontactfieldtextdata.h>
-#include <mvpbkstorecontact.h>
-#include <MVPbkContactObserver.h>
-#include <MVPbkBatchOperationObserver.h>
-#include <CVPbkContactLinkArray.h>
-#include <MVPbkContactOperationBase.h>
-#include <VPbkEng.rsg>
-#include <mdesession.h>
-#include <e32math.h>
-#include <aknappui.h>
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CT_ui_context_utility_api::CT_ui_context_utility_api
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CT_ui_context_utility_api::CT_ui_context_utility_api()
-    {
-    iTestDllName = _L("CT_ui_context_utility_api").AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CT_ui_context_utility_api::ConstructL
-// Symbian 2nd phase constructor can leave.
-//
-// Note: If OOM test case uses STIF Logger, then STIF Logger must be created
-// with static buffer size parameter (aStaticBufferSize). Otherwise Logger
-// allocates memory from heap and therefore causes error situations with OOM
-// testing. For more information about STIF Logger construction, see STIF Users
-// Guide.
-// -----------------------------------------------------------------------------
-//
-void CT_ui_context_utility_api::ConstructL()
-    {
-    CHgTestBase::BaseConstructL( KT_ui_context_utility_apiLogPath,
-                             KT_ui_context_utility_apiLogFile );
-    }
-
-// -----------------------------------------------------------------------------
-// CT_ui_context_utility_api::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CT_ui_context_utility_api* CT_ui_context_utility_api::NewL()
-    {
-    CT_ui_context_utility_api* self = new (ELeave) CT_ui_context_utility_api;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// Destructor
-CT_ui_context_utility_api::~CT_ui_context_utility_api()
-    {
-
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-// -----------------------------------------------------------------------------
-// LibEntryL is a polymorphic Dll entry point
-// Returns: CTestModuleBase*: Pointer to Test Module object
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CTestModuleBase* LibEntryL()
-    {
-    return CT_ui_context_utility_api::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// SetRequirements handles test module parameters(implements evolution
-// version 1 for test module's heap and stack sizes configuring).
-// Returns: TInt: Symbian error code.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt SetRequirements( CTestModuleParam*& /*aTestModuleParam*/,
-                                TUint32& /*aParameterValid*/ )
-    {
-    return KErrNone;
-    }
-
-//// -----------------------------------------------------------------------------
-//// CT_ui_context_utility_api::RunTestL
-//// Method responsible for enumerating and running test cases (and also setup and teardown activities before
-//// and after each test case).
-//// -----------------------------------------------------------------------------
-TInt CT_ui_context_utility_api::RunTestL(
-        CT_ui_context_utility_api::TCallReason aRunReason, 
-        TInt aTestToRun, 
-        RPointerArray<TTestCaseInfo>& aTestCases,
-        TTestResult& aResult )
-    {
-    TInt _test_case_no = -1;
-    //test cases, setup and teardown include
-    
-    
-    if( aRunReason == CHgTestBase::ERunTestCase )
-        {
-        LoadTestCasesL(_test_case_no, aRunReason, STIF_RUN_SETUP, aTestCases, aResult);
-		LoadTestCasesL(_test_case_no, aRunReason, aTestToRun, aTestCases, aResult);
-		LoadTestCasesL(_test_case_no, aRunReason, STIF_RUN_TEARDOWN, aTestCases, aResult);
-        CreateEnvL();
-        _test_case_no = -1;
-        TRAPD(
-                errCode, 
-                LoadTestCasesL(_test_case_no, aRunReason, STIF_RUN_SETUP, aTestCases, aResult);
-                LoadTestCasesL(_test_case_no, aRunReason, aTestToRun, aTestCases, aResult);
-                LoadTestCasesL(_test_case_no, aRunReason, STIF_RUN_TEARDOWN, aTestCases, aResult);
-             )
-        DestroyEnv();
-        User::LeaveIfError( errCode );
-        }
-    else
-    	{
-    	LoadTestCasesL(_test_case_no, aRunReason, aTestToRun, aTestCases, aResult);
-    	}
-    
-    return _test_case_no;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-void CT_ui_context_utility_api::CreateEnvL()
-    {
-    CActiveScheduler::Install ( NULL );
-    ENV_cleanup = CTrapCleanup::New();
-    TInt ENV_err = KErrNone;
-    ENV_env = new CEikonEnv;
-    if ( ENV_env ) 
-        { 
-        TRAP( ENV_err, ENV_env->ConstructL() ); 
-        if ( ENV_err ) 
-            { 
-            return; 
-            }
-        ENV_aknAppUI = new CAknAppUi;
-        if (ENV_aknAppUI)
-            {
-            TRAP( ENV_err, ENV_aknAppUI->BaseConstructL( CEikAppUi::ENoAppResourceFile ) ); \
-            if ( ENV_err )
-                {
-                return;
-                }
-            }
-        }
-    }
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-void CT_ui_context_utility_api::DestroyEnv()
-    {
-    TInt KWait( 500000 );
-    CActiveSchedulerWait*  wait = new (ELeave) CActiveSchedulerWait();
-    CPeriodic*  periodic = CPeriodic::NewL( CActive::EPriorityIdle );
-    periodic->Start(KWait, KWait, TCallBack( CHgTestBase::CallStop, wait ) );
-    wait->Start();
-    delete periodic;
-    delete wait;
-    
-    if ( ENV_aknAppUI ) 
-        { 
-        ENV_aknAppUI->PrepareToExit(); 
-        }
-    if ( ENV_env ) 
-        { 
-        ENV_env->DestroyEnvironment(); 
-        }
-    if( ENV_cleanup )
-        {
-        delete ENV_cleanup;
-        }
-    CActiveScheduler::Install ( iActiveScheduler );
-    }
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-TInt CT_ui_context_utility_api::LoadTestCasesL(
-                    TInt& _test_case_no,
-                    CT_ui_context_utility_api::TCallReason aRunReason,
-                    TInt aTestToRun,
-                    RPointerArray<TTestCaseInfo>& aTestCases,
-                    TTestResult& aResult)
-    {
-#define TEST_CASES
-    #include "..\src\T_ui_context_utility_api_cases.cpp"
-#undef TEST_CASES
-    return KErrNone;
-    }
-//  End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api_cases.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1025 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  T_ui_context_utility_api test module.
-*
-*/
-
-
-// DEFINITION OF GLOBAL VARIABLES
-#ifdef TEST_VAR_DECLARATIONS
-// here You can define global objects used all over code 
-CHgContextUtility* iContextUtility;
-#endif
-
-// testing code starts here
-#ifdef TEST_CASES
-
-#ifndef KNAME
-#define KNAME
-_LIT(KName,"James Bond");
-#endif
-
-// STIF_SETUP defines activities needed before every test case.
-STIF_SETUP
-    {
-    iContextUtility = CHgContextUtility::NewL();
-    return KErrNone;
-    }
-
-// STIF_TEARDOWN defines activities needed after every test case
-STIF_TEARDOWN
-    {
-    delete iContextUtility;
-    return KErrNone;
-    }
-
-// a Canary test to verify test environment.
-STIF_TESTDEFINE( CanaryTest )
-{
-
-}
-
-STIF_TESTDEFINE( T_MemoryOnlyTest )
-{
-    /*private implementation IsForeground 
-    cant be covered by tests because covered by previous condition*/
-    iContextUtility->AllowPublishFromBackground( ETrue );
-    iContextUtility->AllowPublishFromBackground( EFalse );
-    return KErrNone;
-}
-//Test code for testing PublishContextL function call
-STIF_TESTDEFINE( T_PublishContextL )
-    {
-    // publish the Hg.Contact context to CF
-    iContextUtility->PublishContextL( KHgCFTypeContact, KName );
-    //private implementation with dalay cant be covered by test because its never called
-    return KErrNone;
-    }
-
-//Test code for testing T_PublishContextDelayedL function call
-STIF_TESTDEFINE( T_PublishContextDelayedL )
-    {
-    // publish the Hg.Contact context to CF
-    iContextUtility->PublishContextDelayedL( KHgCFTypeContact, KName ,50000);
-    iContextUtility->PublishContextDelayedL( KHgCFTypeContact, KName ,0);
-    return KErrNone;
-    }
-
-//Test code for testing GetContextL function call
-STIF_TESTDEFINE( T_GetContextL )
-    {
-    HBufC* icontext = iContextUtility->GetContextL( _L( "NonExistContextType" ));
-    
-    STIF_ASSERT_TRUE_DESC( icontext == NULL, _L( "Item found" ) );
-    delete icontext;
-    
-    // publish the Hg.Contact context to CF
-    iContextUtility->PublishContextL( KHgCFTypeContact, KName );
-
-    icontext = iContextUtility->GetContextL( KHgCFTypeContact);
-
-    STIF_ASSERT_TRUE_DESC( icontext != NULL, _L( "Context is not found" ) );
-    delete icontext;
-    
-    return KErrNone;
-    }
-
-//Test code for testing GetContextL function call
-STIF_TESTDEFINE( T_GetContextLWithContextSource )
-    {
-    HBufC* icontext = iContextUtility->GetContextL(KHgCFSource,_L( "NonExistContextType" ));
-    
-    STIF_ASSERT_TRUE_DESC( icontext == NULL, _L( "Item found" ) );
-    delete icontext;
-    
-    // publish the Hg.Contact context to CF
-    iContextUtility->PublishContextL( KHgCFTypeContact, KName );
-
-    icontext = iContextUtility->GetContextL(KHgCFSource,KHgCFTypeContact);
-
-    STIF_ASSERT_TRUE_DESC( icontext != NULL, _L( "Context is not found" ) );
-    delete icontext;
-
-    return KErrNone;
-    }
-
-//Test code for testing spliting combined context
-STIF_TESTDEFINE( T_SplitCombinedStringL )
-    {
-    HBufC* val( NULL );
-    _LIT( KDummyContext, "CtxUtilApiTest" );
-    const TInt KArrayGranularity( 3 );
-    CDesCArray* sourceArray = new( ELeave ) CDesC16ArrayFlat(KArrayGranularity);
-    CDesCArray* resultArray = new( ELeave ) CDesC16ArrayFlat(KArrayGranularity);
-    CleanupStack::PushL( sourceArray );
-    CleanupStack::PushL( resultArray );
-    
-    iContextUtility->PublishContextL( KDummyContext, *sourceArray );
-    //Can't be verified if current context is NULL, because could be already published
-    
-    sourceArray->AppendL( _L( "https://somedomain.com?param=parmaValue" ) );
-    iContextUtility->PublishContextL( KDummyContext, *sourceArray );//there only one value. nothing to combine but returned value should be equal
-    val = iContextUtility->GetContextL( KDummyContext );
-    CleanupStack::PushL( val );
-    STIF_ASSERT_TRUE( val && val->Length() );
-    CHgContextUtility::SplitCombinedStringL( *val, *resultArray );
-    CleanupStack::PopAndDestroy(val);
-    STIF_ASSERT_TRUE( resultArray->Count() == sourceArray->Count() );
-    for( TInt iter( 0 ); iter < sourceArray->Count(); ++iter )
-        {
-        STIF_ASSERT_TRUE( 0 == (*sourceArray)[iter].Compare((*resultArray)[iter]) );
-        }
-    CleanupStack::PopAndDestroy(resultArray);
-    
-    resultArray = new( ELeave ) CDesC16ArrayFlat(KArrayGranularity);
-    CleanupStack::PushL( resultArray );
-    sourceArray->AppendL( _L( "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" ));
-    sourceArray->AppendL( _L( "!@#$%^&&*()/\<>[]|~,." ) );
-    
-    iContextUtility->PublishContextL( KDummyContext, *sourceArray );
-    
-    val = iContextUtility->GetContextL( KDummyContext );
-    STIF_ASSERT_TRUE( val && val->Length() );
-    CleanupStack::PushL(val);
-    CHgContextUtility::SplitCombinedStringL( *val, *resultArray );
-    CleanupStack::PopAndDestroy( val );
-    STIF_ASSERT_TRUE( resultArray->Count() == sourceArray->Count() );
-    for( TInt iter( 0 ); iter < sourceArray->Count(); ++iter )
-        {
-        STIF_ASSERT_TRUE( 0 == (*sourceArray)[iter].Compare((*resultArray)[iter]) );
-        }
-    CleanupStack::PopAndDestroy(resultArray);
-    CleanupStack::PopAndDestroy(sourceArray);
-    return KErrNone;
-    }
-
-//Test code for testing PublishContextL with array argument
-STIF_TESTDEFINE( T_PublishContextLWithArray )
-    {
-    _LIT( KDummyContext, "CtxUtilApiTest" );
-    CDesCArray* arr = new ( ELeave ) CDesC16ArrayFlat( 4 );
-    CleanupStack::PushL( arr );
-    
-    iContextUtility->PublishContextL( KDummyContext, *arr );
-    
-    arr->AppendL( _L( "first item" ) );
-    arr->AppendL( _L( "second item" ) );
-    arr->AppendL( _L( "third item" ) );
-    iContextUtility->PublishContextL( KDummyContext, *arr );
-    HBufC* val = iContextUtility->GetContextL( KDummyContext );
-    STIF_ASSERT_TRUE( val && val->Length() );
-    delete val;
-    CleanupStack::PopAndDestroy( arr );
-    return KErrNone;
-    }
-
-//Test code for testing PublishContextDelayedL with array argument
-STIF_TESTDEFINE( T_PublishContextDelayedLWithArray )
-    {
-    _LIT( KDummyContext, "CtxUtilApiTest2" );
-    CDesCArray* arr = new ( ELeave ) CDesC16ArrayFlat( 4 );
-    CleanupStack::PushL( arr );
-    arr->AppendL( _L( "first item" ) );
-    arr->AppendL( _L( "second item" ) );
-    arr->AppendL( _L( "third item" ) );
-    iContextUtility->PublishContextDelayedL( KDummyContext, *arr, 500000 );
-    iContextUtility->PublishContextDelayedL( KDummyContext, *arr, 0 );
-    iContextUtility->PublishContextDelayedL( KDummyContext, *arr, 500000 );
-    CWait* wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    HBufC* val = iContextUtility->GetContextL( KDummyContext );
-    STIF_ASSERT_TRUE( val && val->Length() );
-    delete val;
-    CleanupStack::PopAndDestroy( arr );
-    return KErrNone;
-    }
-
-//Test code for testing RePublishWhenFgL with different arguments
-//Most probably nothing will happen because there is no CCoeEnv but
-//it should never crash.
-STIF_TESTDEFINE( T_RePublishWhenFgL )
-    {
-    iContextUtility->RePublishWhenFgL( ETrue );
-    iContextUtility->RePublishWhenFgL( EFalse );
-    iContextUtility->RePublishWhenFgL( ETrue );
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishContactContextL( const MVPbkStoreContact& aContact,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL1 )
-    {
-    CHgCtxContactMatcher* m = CHgCtxContactMatcher::NewLC();
-    m->OpenDefaultMatchStoresL();
-    CVPbkContactManager& cm( m->GetContactManager() );
-    MVPbkContactStoreList& sl( m->GetContactStoresL() );
-	MVPbkStoreContact* newContact = sl.At( 0 ).CreateNewContactLC();
-	const MVPbkFieldType* fieldType = m->FieldTypes().Find(R_VPBK_FIELD_TYPE_FIRSTNAME);
-	MVPbkStoreContactField* newField = newContact->CreateFieldLC(*fieldType);
-	MVPbkContactFieldTextData* textData = &(MVPbkContactFieldTextData::Cast(newField->FieldData()));
-	_LIT(KName, "ctxutiltester");
-	textData->SetTextL( KName );
-	newContact->AddFieldL(newField);
-	CleanupStack::Pop(newField);
-	CWait* wait = CWait::NewLC();
-    struct TDummyObs : public MVPbkContactObserver
-        {
-        CWait* iWait;
-        TDummyObs( CWait* aWait ) : iWait( aWait ) { }
-        void ContactOperationCompleted(TContactOpResult /*aResult*/) 
-            { 
-            iWait->Stop(); 
-            }
-        void ContactOperationFailed(TContactOp /*aOpCode*/, 
-                TInt /*aErrorCode*/, 
-                TBool /*aErrorNotified*/) { }
-        } dummyObs( wait );
-	newContact->CommitL( dummyObs );
-    wait->Start( 2000000 );
-    CleanupStack::PopAndDestroy( wait );
-
-    iContextUtility->PublishContactContextL( *newContact, 0 );
-    iContextUtility->PublishContactContextL( *newContact, 500000 );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    CVPbkContactLinkArray* ca = CVPbkContactLinkArray::NewLC();
-    ca->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    wait = CWait::NewL();
-    struct TDummyObs2 : public MVPbkBatchOperationObserver
-        {
-        CWait* iWait;
-        TDummyObs2( CWait* aWait ) : iWait( aWait ) { }
-        void StepComplete( 
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/ ) { }
-        TBool StepFailed(
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/, TInt /*aError*/ ) 
-            {
-            return EFalse;
-            }
-        void OperationComplete( 
-                MVPbkContactOperationBase& /*aOperation*/ ) 
-            { 
-            iWait->Stop(); 
-            }
-        } dummyObs2( wait );
-    MVPbkContactOperationBase* op = cm.DeleteContactsL( *ca, dummyObs2 );
-    CleanupDeletePushL( op );
-    wait->Start( 2000000 );
-    delete wait;
-    CleanupStack::PopAndDestroy( 4 ); // op, ca, newContact, m
-    
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishContactContextL( const MVPbkContactLink& aContactLink,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL2 )
-    {
-    CHgCtxContactMatcher* m = CHgCtxContactMatcher::NewLC();
-    m->OpenDefaultMatchStoresL();
-    CVPbkContactManager& cm( m->GetContactManager() );
-    MVPbkContactStoreList& sl( m->GetContactStoresL() );
-	MVPbkStoreContact* newContact = sl.At( 0 ).CreateNewContactLC();
-	const MVPbkFieldType* fieldType = m->FieldTypes().Find(R_VPBK_FIELD_TYPE_FIRSTNAME);
-	MVPbkStoreContactField* newField = newContact->CreateFieldLC(*fieldType);
-	MVPbkContactFieldTextData* textData = &(MVPbkContactFieldTextData::Cast(newField->FieldData()));
-	_LIT(KName, "ctxutiltester");
-	textData->SetTextL( KName );
-	newContact->AddFieldL(newField);
-	CleanupStack::Pop(newField);
-	CWait* wait = CWait::NewL();
-    struct TDummyObs : public MVPbkContactObserver
-        {
-        CWait* iWait;
-        TDummyObs( CWait* aWait ) : iWait( aWait ) { }
-        void ContactOperationCompleted(TContactOpResult /*aResult*/) 
-            { 
-            iWait->Stop(); 
-            }
-        void ContactOperationFailed(TContactOp /*aOpCode*/, 
-                TInt /*aErrorCode*/, 
-                TBool /*aErrorNotified*/){ }
-        } dummyObs( wait );
-	newContact->CommitL( dummyObs );
-    wait->Start( 2000000 );
-    delete wait;
-
-    CVPbkContactLinkArray* ca = CVPbkContactLinkArray::NewLC();
-    ca->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-
-    iContextUtility->PublishContactContextL( ca->At( 0 ), 0 );
-    iContextUtility->PublishContactContextL( ca->At( 0 ), 500000 );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    wait = CWait::NewL();
-    struct TDummyObs2 : public MVPbkBatchOperationObserver
-        {
-        CWait* iWait;
-        TDummyObs2( CWait* aWait ) : iWait( aWait ) { }
-        void StepComplete( 
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/ ) { }
-        TBool StepFailed(
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/, TInt /*aError*/ ) 
-            { 
-            return EFalse;
-            }
-        void OperationComplete( 
-                MVPbkContactOperationBase& /*aOperation*/ ) { iWait->Stop(); }
-        } dummyObs2( wait );
-    MVPbkContactOperationBase* op = cm.DeleteContactsL( *ca, dummyObs2 );
-    CleanupDeletePushL( op );
-    wait->Start( 2000000 );
-    delete wait;
-    
-    // test with (surely) non-existing link
-    iContextUtility->PublishContactContextL( ca->At( 0 ) );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    
-    CleanupStack::PopAndDestroy( 4 ); // op, ca, newContact, m
-    
-    return KErrNone;
-    }
-    
-/*    IMPORT_C void PublishContactContextL( const TDesC& aContactName,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL3 )
-    {
-    iContextUtility->PublishContactContextL( KName );
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    iContextUtility->PublishContactContextL( KName, 500000 );
-    iContextUtility->PublishContactContextL( KName, 500000 );
-    iContextUtility->PublishContactContextL( KName, 500000 );
-    ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-    
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishContactContextL(
-        const RPointerArray<MVPbkStoreContact>& aContacts,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL4 )
-    {
-    CHgCtxContactMatcher* m = CHgCtxContactMatcher::NewLC();
-    m->OpenDefaultMatchStoresL();
-    CVPbkContactManager& cm( m->GetContactManager() );
-    MVPbkContactStoreList& sl( m->GetContactStoresL() );
-	MVPbkStoreContact* newContact = sl.At( 0 ).CreateNewContactLC();
-	const MVPbkFieldType* fieldType = m->FieldTypes().Find(R_VPBK_FIELD_TYPE_FIRSTNAME);
-	MVPbkStoreContactField* newField = newContact->CreateFieldLC(*fieldType);
-	MVPbkContactFieldTextData* textData = &(MVPbkContactFieldTextData::Cast(newField->FieldData()));
-	_LIT(KName, "ctxutiltester");
-	textData->SetTextL( KName );
-	newContact->AddFieldL(newField);
-	CleanupStack::Pop(newField);
-    CWait* wait = CWait::NewL();	
-    struct TDummyObs : public MVPbkContactObserver
-        {
-        CWait* iWait;
-        TDummyObs( CWait* aWait ) : iWait( aWait ) { }
-        void ContactOperationCompleted(TContactOpResult /*aResult*/) { iWait->Stop(); }
-        void ContactOperationFailed(TContactOp /*aOpCode*/, TInt /*aErrorCode*/, TBool /*aErrorNotified*/) { }
-        } dummyObs( wait );
-	newContact->CommitL( dummyObs );
-    wait->Start( 2000000 );
-    delete wait;
-
-    RPointerArray<MVPbkStoreContact> pa;
-    CleanupClosePushL( pa );
-    pa.AppendL( newContact );
-    iContextUtility->PublishContactContextL( pa, 0 );
-    iContextUtility->PublishContactContextL( pa, 500000 );
-    CleanupStack::PopAndDestroy( &pa );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    RPointerArray<MVPbkStoreContact> pa2;
-    CleanupClosePushL( pa2 );
-    pa2.AppendL( newContact );
-    pa2.AppendL( newContact );
-    pa2.AppendL( newContact );
-    pa2.AppendL( newContact );
-    iContextUtility->PublishContactContextL( pa2, 500000 );
-    iContextUtility->PublishContactContextL( pa2, 0 );    
-    CleanupStack::PopAndDestroy( &pa2 );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    CVPbkContactLinkArray* ca = CVPbkContactLinkArray::NewLC();
-    ca->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    wait = CWait::NewL();    
-    struct TDummyObs2 : public MVPbkBatchOperationObserver
-        {
-        CWait* iWait;
-        TDummyObs2( CWait* aWait ) : iWait( aWait ) { }
-        void StepComplete( 
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/ ) { }
-        TBool StepFailed(
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/, TInt /*aError*/ ) 
-            {
-            return EFalse;    
-            }
-        void OperationComplete( 
-                MVPbkContactOperationBase& /*aOperation*/ ) { iWait->Stop(); }
-        } dummyObs2( wait );
-    MVPbkContactOperationBase* op = cm.DeleteContactsL( *ca, dummyObs2 );
-    CleanupDeletePushL( op );
-    wait->Start( 2000000 );
-    delete wait;
-    CleanupStack::PopAndDestroy( 4 ); // op, ca, newContact, m
-    
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishContactContextL(
-        const RPointerArray<MVPbkContactLink>& aContactLinks,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL5 )
-    {
-    CHgCtxContactMatcher* m = CHgCtxContactMatcher::NewLC();
-    m->OpenDefaultMatchStoresL();
-    CVPbkContactManager& cm( m->GetContactManager() );
-    MVPbkContactStoreList& sl( m->GetContactStoresL() );
-	MVPbkStoreContact* newContact = sl.At( 0 ).CreateNewContactLC();
-	const MVPbkFieldType* fieldType = 
-        m->FieldTypes().Find(R_VPBK_FIELD_TYPE_FIRSTNAME);
-	MVPbkStoreContactField* newField = newContact->CreateFieldLC(*fieldType);
-	MVPbkContactFieldTextData* textData = 
-        &(MVPbkContactFieldTextData::Cast(newField->FieldData()));
-	_LIT(KName, "ctxutiltester");
-	textData->SetTextL( KName );
-	newContact->AddFieldL(newField);
-	CleanupStack::Pop(newField);
-    CWait* wait = CWait::NewL();	
-    struct TDummyObs : public MVPbkContactObserver
-        {
-        CWait* iWait;
-        TDummyObs( CWait* aWait ) : iWait( aWait ) { }
-        void ContactOperationCompleted(TContactOpResult /*aResult*/) 
-            { 
-            iWait->Stop(); 
-            }
-        void ContactOperationFailed(TContactOp /*aOpCode*/, 
-                TInt /*aErrorCode*/, 
-                TBool /*aErrorNotified*/) { }
-        } dummyObs( wait );
-	newContact->CommitL( dummyObs );
-    wait->Start( 2000000 );
-    delete wait;
-
-    CVPbkContactLinkArray* pa = CVPbkContactLinkArray::NewLC();
-    pa->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    iContextUtility->PublishContactContextL( *pa, 0 );
-    iContextUtility->PublishContactContextL( *pa, 500000 );
-    CleanupStack::PopAndDestroy( pa );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    CVPbkContactLinkArray* pa2 = CVPbkContactLinkArray::NewLC();
-    pa2->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    pa2->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    pa2->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    iContextUtility->PublishContactContextL( *pa2, 500000 );
-    iContextUtility->PublishContactContextL( *pa2, 0 );    
-    CleanupStack::PopAndDestroy( pa2 );
-    wait = CWait::NewL();
-    wait->Start( 2000000 );
-    delete wait;
-    ctx = iContextUtility->GetContextL( KHgCFTypeContact);
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-
-    CVPbkContactLinkArray* ca = CVPbkContactLinkArray::NewLC();
-    ca->AppendL( newContact->CreateLinkLC() );
-    CleanupStack::Pop();
-    wait = CWait::NewL();    
-    struct TDummyObs2 : public MVPbkBatchOperationObserver
-        {
-        CWait* iWait;
-        TDummyObs2( CWait* aWait ) : iWait( aWait ) { }
-        void StepComplete( 
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/ ) { }
-        TBool StepFailed(
-                MVPbkContactOperationBase& /*aOperation*/,
-                TInt /*aStepSize*/, TInt /*aError*/ ) 
-            { 
-            return EFalse; 
-            }
-        void OperationComplete( 
-                MVPbkContactOperationBase& /*aOperation*/ ) { iWait->Stop(); }
-        } dummyObs2( wait );
-    MVPbkContactOperationBase* op = cm.DeleteContactsL( *ca, dummyObs2 );
-    CleanupDeletePushL( op );
-    wait->Start( 2000000 );
-    delete wait;
-    CleanupStack::PopAndDestroy( 4 ); // op, ca, newContact, m
-    
-    return KErrNone;
-    }
-    
-/*IMPORT_C void PublishContactContextL( const MDesCArray& aContactNames,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishContactContextL6 )
-    {
-    CDesCArray* arr = new ( ELeave ) CDesC16ArrayFlat( 4 );
-    CleanupStack::PushL( arr );
-    arr->AppendL( _L( "first item" ) );
-    arr->AppendL( _L( "second item" ) );
-    arr->AppendL( _L( "third item" ) );
-    iContextUtility->PublishContactContextL( *arr );
-    iContextUtility->PublishContactContextL( *arr, 500000 );
-    iContextUtility->PublishContactContextL( *arr );
-    CleanupStack::PopAndDestroy( arr );
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishTextContextL( const TDesC& aText,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishTextContextL )
-    {
-    iContextUtility->PublishTextContextL( KNullDesC, 100 );
-    iContextUtility->PublishTextContextL( _L("fbngiuwetghorb rteogvhetui gherigth" ) );
-    iContextUtility->PublishTextContextL( KNullDesC );
-    iContextUtility->PublishTextContextL( _L("+35442754") );
-    iContextUtility->PublishTextContextL( _L("35442754") );
-    iContextUtility->PublishTextContextL( _L("abcdef@ghijk.com") );
-    iContextUtility->PublishTextContextL( _L(" " ) );
-    return KErrNone;
-    }
-            
-/*    IMPORT_C void PublishUrlContextL( const TDesC& aUrl,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishUrlContextL )
-    {
-    _LIT( KNokiaDomain, "http://www.nokia.com" );
-    _LIT( KSomeDomain, "http://www.somedomain.com" );
-    iContextUtility->PublishUrlContextL( KNokiaDomain, 1000 );
-    iContextUtility->PublishUrlContextL( KSomeDomain );
-    iContextUtility->PublishUrlContextL( KNokiaDomain );
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeUrl );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    STIF_ASSERT_TRUE( 0 == ctx->Compare( KNokiaDomain ) );
-    delete ctx;
-    return KErrNone;
-    }
-        
-/*    IMPORT_C void PublishTimeContextL( const TTime& aTime,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishTimeContextL )
-    {
-    TTime t( 0 );
-    iContextUtility->PublishTimeContextL( t, 100 );
-    iContextUtility->PublishTimeContextL( t );
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeActiveDate );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    delete ctx;
-    return KErrNone;
-    }
-        
-/*    IMPORT_C void PublishPhotoContextL( const TDesC& aFilename,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishPhotoContextL )
-    {
-    _LIT( KJpegPath, "c:\\image.jpg" );
-    _LIT( KPngPath, "c:\\image.png" );
-    iContextUtility->PublishPhotoContextL( KJpegPath, 100 );
-    iContextUtility->PublishPhotoContextL( KPngPath, 0 );
-    iContextUtility->PublishPhotoContextL( KJpegPath );
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypePhoto );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    STIF_ASSERT_TRUE( 0 == ctx->Compare(KJpegPath) );
-    delete ctx;
-    
-    iContextUtility->PublishPhotoContextL( KPngPath, 100000 );
-    ctx = iContextUtility->GetContextL( KHgCFTypePhoto );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL, _L( "Context not found" ) );
-    STIF_ASSERT_TRUE( 0 == ctx->Compare(KJpegPath) );
-    delete ctx;
-    return KErrNone;
-    }
-        
-/*    IMPORT_C void PublishPhotoContextL( TItemId aMdeItemId,
-        CMdESession& aMdeSession,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 );*/
-STIF_TESTDEFINE( T_PublishPhotoContextL2 )
-    {
-    CWait* wait = CWait::NewLC();
-    struct TObs : public MMdESessionObserver {
-        CWait* iWait;
-        TObs( CWait* aWait ) : iWait( aWait ) { }
-        void HandleSessionOpened( CMdESession& /*aSession*/, TInt /*aError*/ ) { iWait->Stop(); }
-        void HandleSessionError( CMdESession& /*aSession*/, TInt /*aError*/ ) { }
-        } mdeobs( wait );
-    CMdESession* s = CMdESession::NewLC( mdeobs );
-    wait->Start( 5000000 );
-    // invalid item id
-    TRAPD( err, iContextUtility->PublishPhotoContextL( 0, *s ) );
-    STIF_ASSERT_TRUE( err != KErrNone ); // leave should have occured
-    for ( TInt i = 0; i < 100; ++i )
-        {
-        TRAP_IGNORE( iContextUtility->PublishPhotoContextL( TItemId( i ), *s ) );
-        }
-    CleanupStack::PopAndDestroy( 2 );
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishTvContextL( const TDesC& aChannelName,
-        const TDesC& aProgramName, const TDesC& aProgramDescription,
-        const TDesC& aGenre ); */
-STIF_TESTDEFINE( T_PublishTvContextL )
-    {
-    _LIT( K1, "channel A" );
-    _LIT( K2, "program X" );
-    _LIT( K3, "very interesting program" );
-    iContextUtility->PublishTvContextL( K1, K2, K3, KNullDesC );
-    iContextUtility->PublishTvContextL( K1, K2, K3, KNullDesC );
-    iContextUtility->PublishTvContextL( K1, K2, KNullDesC, KNullDesC );
-    HBufC* ctx = iContextUtility->GetContextL( KHgCFTypeTvProgramName );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL && !ctx->Compare( K2 ),
-        _L( "Context not found" ) );
-    delete ctx;
-
-    iContextUtility->PublishTvContextL( KNullDesC, K2, KNullDesC, KNullDesC );
-    iContextUtility->PublishTvContextL( KNullDesC, KNullDesC, KNullDesC, KNullDesC );
-    iContextUtility->PublishTvContextL( KNullDesC, K2, KNullDesC, KNullDesC );
-    iContextUtility->PublishTvContextL( KNullDesC, KNullDesC, KNullDesC, _L("movie") );
-    ctx = iContextUtility->GetContextL( KHgCFTypeTvChannelName );
-    STIF_ASSERT_TRUE_DESC( ctx != NULL && !ctx->Compare( KHgCFValueUnknownInfo ),
-        _L( "Context not found" ) );
-    delete ctx;
-    return KErrNone;
-    }
-
-/*    IMPORT_C void PublishServiceIdL( const TDesC& aServiceId,
-        const TDesC& aAccountId,
-        const TTimeIntervalMicroSeconds32& aDelay = 0 ); */
-STIF_TESTDEFINE( T_PublishServiceIdL )
-    {
-    iContextUtility->PublishServiceIdL( _L("Ovi"), _L("someid") );
-    iContextUtility->PublishServiceIdL( _L("Ovi"), _L("someid"), 1000000 );
-    iContextUtility->PublishServiceIdL( _L("Ovi"), _L("someid") );
-    }
-
-/*  IMPORT_C void AddMusicContextInfoL( 
-        const TDesC& aKey, 
-        const TDesC& aData ); */
-STIF_TESTDEFINE( T_AddMusicContextInfoL )
-    {
-    // Fetch the pointer to hash table for testing purposes
-    RPtrHashMap<TDesC, TDesC>* hash = GetImplHashTablePtr();
-    _LIT( KPlaying, "Playing" );
-    _LIT( KArtist, "Hans Zimmer");
-    _LIT( KTitle, "Why so serious" );
-    _LIT( KAlbum, "Dark Knight" );
-    _LIT( KGenre, "Soundtrack" );
-    
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 0, _L("There is stuff in the list!") );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicState ) == NULL,       _L( "State in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicArtist ) == NULL,      _L( "Artist in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicTitle ) == NULL,       _L( "Title in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicAlbum ) == NULL,       _L( "Album in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicAlbumArt ) == NULL,    _L( "Art in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicUri ) == NULL,  _L( "Uri in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicGenre ) == NULL,       _L( "Genre in the list!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Find( KHgCFTypeMusicType ) == NULL,        _L( "Type in the list!" ) );
-    
-    // No room for empty keys
-    TRAPD( err, iContextUtility->AddMusicContextInfoL( KNullDesC,       KPlaying ) );
-    STIF_ASSERT_TRUE_DESC( err == KErrNotFound, _L( "Empty key didn't cause leave!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 0, _L( "There is stuff in the list!" ) );
-    
-    // Fill all values and test they will be there.
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicState,       KPlaying );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicArtist,      KArtist );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicTitle,       KTitle );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicAlbum,       KAlbum );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicAlbumArt,    KHgCFValueUnknownInfo );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicUri,  KNullDesC );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicGenre,       KGenre );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicType,        KHgCFValueMusicTypePlayer );
-    
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 8, _L( "List should contain 8 items." ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicState )->CompareC( KPlaying ), 
-            _L( "Wrong state in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicArtist )->CompareC( KArtist ), 
-            _L( "Wrong artist in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicTitle )->CompareC( KTitle ), 
-            _L( "Wrong title in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicAlbum )->CompareC( KAlbum ), 
-            _L( "Wrong album in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicAlbumArt )->CompareC( KHgCFValueUnknownInfo ), 
-            _L( "Wrong art in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicUri )->CompareC( KHgCFValueUnknownInfo ), 
-            _L( "Wrong uri in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicGenre )->CompareC( KGenre ), 
-            _L( "Wrong genre in the table!" ) );
-    STIF_ASSERT_TRUE_DESC( !hash->Find( KHgCFTypeMusicType )->CompareC( KHgCFValueMusicTypePlayer ), 
-            _L( "Wrong type in the table!" ) );
-    
-    // An attempt to add same key twice, causes problems.
-    TRAP( err, iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicState,       KPlaying ) );
-    STIF_ASSERT_TRUE_DESC( err == KErrAlreadyExists, _L( "Adding same key should cause a leave!" ) );
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 8, _L( "List should contain 8 items!" ) );
-    
-    return KErrNone;
-    }
-
-/** IMPORT_C void PublishMusicContextL( 
-        const TTimeIntervalMicroSeconds32& aDelay = 0 ); */
-STIF_TESTDEFINE( T_PublishMusicContextL )
-    {
-    RPtrHashMap<TDesC, TDesC>* hash = GetImplHashTablePtr();
-    _LIT( KPlaying, "Playing" );
-    _LIT( KArtist, "John Williams");
-    _LIT( KTitle, "Raiders March" );
-    _LIT( KAlbum, "Raiders of the Lost Ark" );
-
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 0, _L( "There is stuff in the list!" ) );
-    TRAPD( err, iContextUtility->PublishMusicContextL() );
-    STIF_ASSERT_TRUE_DESC( err == KErrNotReady, _L( "No point to publish anything, when list is empty!" ) );
-    
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicState,       KPlaying );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicArtist,      KArtist );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicTitle,       KTitle );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicAlbum,       KAlbum );
-    iContextUtility->AddMusicContextInfoL( KHgCFTypeMusicAlbumArt,    KHgCFValueUnknownInfo );
-
-    iContextUtility->PublishMusicContextL();
-    STIF_ASSERT_TRUE_DESC( hash->Count() == 0, _L( "There is stuff in the list!" ) );
-    
-    HBufC* musicState = iContextUtility->GetContextL( KHgCFTypeMusicState );
-    HBufC* musicArtist = iContextUtility->GetContextL( KHgCFTypeMusicArtist );
-    HBufC* musicTitle = iContextUtility->GetContextL( KHgCFTypeMusicTitle );
-    HBufC* musicAlbum = iContextUtility->GetContextL( KHgCFTypeMusicAlbum );
-    HBufC* musicAlbumArt = iContextUtility->GetContextL( KHgCFTypeMusicAlbumArt );
-    HBufC* musicGeneralUri = iContextUtility->GetContextL( KHgCFTypeMusicUri );
-    HBufC* musicGenre = iContextUtility->GetContextL( KHgCFTypeMusicGenre );
-    HBufC* musicType = iContextUtility->GetContextL( KHgCFTypeMusicType );
-        
-    STIF_ASSERT_TRUE_DESC( musicState != NULL       
-            && !musicState->Compare( KPlaying ),    _L( "Music context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicArtist != NULL      
-            && !musicArtist->Compare( KArtist ),    _L( "Artist context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicTitle != NULL       
-            && !musicTitle->Compare( KTitle ),      _L( "Title context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicAlbum != NULL       
-            && !musicAlbum->Compare( KAlbum ),      _L( "Album context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicAlbumArt != NULL   
-            && !musicAlbumArt->Compare( KHgCFValueUnknownInfo ), _L( "Art context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicGeneralUri != NULL  
-            && !musicGeneralUri->Compare( KHgCFValueUnknownInfo ), _L( "Uri context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicGenre != NULL       
-            && !musicGenre->Compare( KHgCFValueUnknownInfo ),   _L( "Genre context not found" ) );
-    STIF_ASSERT_TRUE_DESC( musicType != NULL        
-            && !musicType->Compare( KHgCFValueUnknownInfo ),    _L( "Type context not found" ) );
-
-    delete musicState;
-    delete musicArtist;
-    delete musicTitle;
-    delete musicAlbum;
-    delete musicAlbumArt;
-    delete musicGeneralUri;
-    delete musicGenre;
-    delete musicType;
-
-    return KErrNone;
-    }
-
-STIF_TESTDEFINE( T_PublishRadioContextL )
-    {
-    _LIT( KTestRadioName, "radio test name" );
-    _LIT( KTestRadioUrl, "radio test url" );
-    _LIT( KTestRadioFrequency, "radio test frequency" );
-    _LIT( KTestRadioRDSPI, "radio test rdspi" );
-    
-    HBufC* ctxRadioName = NULL;
-    HBufC* ctxRadioUrl = NULL;
-    HBufC* ctxRadioFrequency = NULL;
-    HBufC* ctxRadioRDSPI = NULL;
-    
-    RArray<TPtrC> testData;
-    CleanupClosePushL(testData);
-        
-    // Empty Values
-    iContextUtility->PublishRadioContextL(KNullDesC, KNullDesC, KNullDesC, KNullDesC);
-    ctxRadioName = iContextUtility->GetContextL(KHgCFTypeMusicRadioName);
-    ctxRadioUrl = iContextUtility->GetContextL(KHgCFTypeMusicRadioUrl);
-    ctxRadioFrequency = iContextUtility->GetContextL(KHgCFTypeMusicRadioFrequency);
-    ctxRadioRDSPI = iContextUtility->GetContextL(KHgCFTypeMusicRadioRDSPI);
-    STIF_ASSERT_TRUE_DESC( ctxRadioName != NULL && !ctxRadioName->Compare( KHgCFValueUnknownInfo ),
-        _L( "Empty value: ctxRadioName error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioUrl != NULL && !ctxRadioUrl->Compare( KHgCFValueUnknownInfo ),
-        _L( "Empty value: ctxRadioUrl error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioFrequency != NULL && !ctxRadioFrequency->Compare( KHgCFValueUnknownInfo ),
-        _L( "Empty value: ctxRadioFrequency error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioRDSPI != NULL && !ctxRadioRDSPI->Compare( KHgCFValueUnknownInfo ),
-        _L( "Empty value: ctxRadioRDSPI error." ) );
-    delete ctxRadioName;
-    delete ctxRadioUrl;
-    delete ctxRadioFrequency;
-    delete ctxRadioRDSPI;
-    
-    // One value
-    testData.Reset();
-    testData.ReserveL(16);
-    for(TInt i = 0; i < 12; i++)
-        {
-        testData.AppendL(KNullDesC());
-        }
-    testData.Insert(KTestRadioName(), 0);
-    testData.Insert(KTestRadioUrl(), 5);
-    testData.Insert(KTestRadioFrequency(), 10);
-    testData.Insert(KTestRadioRDSPI(), 15);
-    for(TInt i = 0; i < 16; i += 4)
-        {
-        iContextUtility->PublishRadioContextL(testData[i], testData[i+1], testData[i+2], testData[i+3]);
-        ctxRadioName = iContextUtility->GetContextL(KHgCFTypeMusicRadioName);
-        ctxRadioUrl = iContextUtility->GetContextL(KHgCFTypeMusicRadioUrl);
-        ctxRadioFrequency = iContextUtility->GetContextL(KHgCFTypeMusicRadioFrequency);
-        ctxRadioRDSPI = iContextUtility->GetContextL(KHgCFTypeMusicRadioRDSPI);
-        STIF_ASSERT_TRUE_DESC( ctxRadioName != NULL &&
-            !ctxRadioName->Compare( testData[i].Length() ? testData[i] : KHgCFValueUnknownInfo() ),
-            _L( "One value: ctxRadioName error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioUrl != NULL &&
-            !ctxRadioUrl->Compare( testData[i+1].Length() ? testData[i+1] : KHgCFValueUnknownInfo() ),
-            _L( "One value: ctxRadioUrl error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioFrequency != NULL &&
-            !ctxRadioFrequency->Compare( testData[i+2].Length() ? testData[i+2] : KHgCFValueUnknownInfo() ),
-            _L( "One value: ctxRadioFrequency error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioRDSPI != NULL &&
-            !ctxRadioRDSPI->Compare( testData[i+3].Length() ? testData[i+3] : KHgCFValueUnknownInfo() ),
-            _L( "One value: ctxRadioRDSPI error." ) );
-        delete ctxRadioName;
-        delete ctxRadioUrl;
-        delete ctxRadioFrequency;
-        delete ctxRadioRDSPI;
-        }
-    
-    // Two values
-    testData.Reset();
-    testData.ReserveL(24);
-    for(TInt i = 0; i < 12; i++)
-        {
-        testData.AppendL(KNullDesC());
-        }
-    testData.Insert(KTestRadioName(), 0);
-    testData.Insert(KTestRadioUrl(), 1);
-    testData.Insert(KTestRadioName(), 4);
-    testData.Insert(KTestRadioFrequency(), 6);
-    testData.Insert(KTestRadioName(), 8);
-    testData.Insert(KTestRadioRDSPI(), 11);
-    testData.Insert(KTestRadioUrl(), 13);
-    testData.Insert(KTestRadioFrequency(), 14);
-    testData.Insert(KTestRadioUrl(), 17);
-    testData.Insert(KTestRadioRDSPI(), 19);
-    testData.Insert(KTestRadioFrequency(), 22);
-    testData.Insert(KTestRadioRDSPI(), 23);
-    for(TInt i = 0; i < 24; i += 4)
-        {
-        iContextUtility->PublishRadioContextL(testData[i], testData[i+1], testData[i+2], testData[i+3]);
-        ctxRadioName = iContextUtility->GetContextL(KHgCFTypeMusicRadioName);
-        ctxRadioUrl = iContextUtility->GetContextL(KHgCFTypeMusicRadioUrl);
-        ctxRadioFrequency = iContextUtility->GetContextL(KHgCFTypeMusicRadioFrequency);
-        ctxRadioRDSPI = iContextUtility->GetContextL(KHgCFTypeMusicRadioRDSPI);
-        STIF_ASSERT_TRUE_DESC( ctxRadioName != NULL &&
-            !ctxRadioName->Compare( testData[i].Length() ? testData[i] : KHgCFValueUnknownInfo() ),
-            _L( "Two values: ctxRadioName error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioUrl != NULL &&
-            !ctxRadioUrl->Compare( testData[i+1].Length() ? testData[i+1] : KHgCFValueUnknownInfo() ),
-            _L( "Two values: ctxRadioUrl error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioFrequency != NULL &&
-            !ctxRadioFrequency->Compare( testData[i+2].Length() ? testData[i+2] : KHgCFValueUnknownInfo() ),
-            _L( "Two values: ctxRadioFrequency error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioRDSPI != NULL &&
-            !ctxRadioRDSPI->Compare( testData[i+3].Length() ? testData[i+3] : KHgCFValueUnknownInfo() ),
-            _L( "Two values: ctxRadioRDSPI error." ) );
-        delete ctxRadioName;
-        delete ctxRadioUrl;
-        delete ctxRadioFrequency;
-        delete ctxRadioRDSPI;
-        }
-    
-    // Three values
-    testData.Reset();
-    testData.ReserveL(16);
-    for(TInt i = 0; i < 4; i++)
-        {
-        testData.AppendL(KTestRadioName());
-        testData.AppendL(KTestRadioUrl());
-        testData.AppendL(KTestRadioFrequency());
-        testData.AppendL(KTestRadioRDSPI());
-        }
-    testData.Remove(3);
-    testData.Insert(KNullDesC(), 3);
-    testData.Remove(6);
-    testData.Insert(KNullDesC(), 6);
-    testData.Remove(9);
-    testData.Insert(KNullDesC(), 9);
-    testData.Remove(12);
-    testData.Insert(KNullDesC(), 12);
-    for(TInt i = 0; i < 16; i += 4)
-        {
-        iContextUtility->PublishRadioContextL(testData[i], testData[i+1], testData[i+2], testData[i+3]);
-        ctxRadioName = iContextUtility->GetContextL(KHgCFTypeMusicRadioName);
-        ctxRadioUrl = iContextUtility->GetContextL(KHgCFTypeMusicRadioUrl);
-        ctxRadioFrequency = iContextUtility->GetContextL(KHgCFTypeMusicRadioFrequency);
-        ctxRadioRDSPI = iContextUtility->GetContextL(KHgCFTypeMusicRadioRDSPI);
-        STIF_ASSERT_TRUE_DESC( ctxRadioName != NULL &&
-            !ctxRadioName->Compare( testData[i].Length() ? testData[i] : KHgCFValueUnknownInfo() ),
-            _L( "Three values: ctxRadioName error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioUrl != NULL &&
-            !ctxRadioUrl->Compare( testData[i+1].Length() ? testData[i+1] : KHgCFValueUnknownInfo() ),
-            _L( "Three values: ctxRadioUrl error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioFrequency != NULL &&
-            !ctxRadioFrequency->Compare( testData[i+2].Length() ? testData[i+2] : KHgCFValueUnknownInfo() ),
-            _L( "Three values: ctxRadioFrequency error." ) );
-        STIF_ASSERT_TRUE_DESC( ctxRadioRDSPI != NULL &&
-            !ctxRadioRDSPI->Compare( testData[i+3].Length() ? testData[i+3] : KHgCFValueUnknownInfo() ),
-            _L( "Three values: ctxRadioRDSPI error." ) );
-        delete ctxRadioName;
-        delete ctxRadioUrl;
-        delete ctxRadioFrequency;
-        delete ctxRadioRDSPI;
-        }
-    
-    // Four values
-    iContextUtility->PublishRadioContextL(KTestRadioName, KTestRadioUrl, KTestRadioFrequency, KTestRadioRDSPI);
-    ctxRadioName = iContextUtility->GetContextL(KHgCFTypeMusicRadioName);
-    ctxRadioUrl = iContextUtility->GetContextL(KHgCFTypeMusicRadioUrl);
-    ctxRadioFrequency = iContextUtility->GetContextL(KHgCFTypeMusicRadioFrequency);
-    ctxRadioRDSPI = iContextUtility->GetContextL(KHgCFTypeMusicRadioRDSPI);
-    STIF_ASSERT_TRUE_DESC( ctxRadioName != NULL && !ctxRadioName->Compare( KTestRadioName ),
-        _L( "Four values: ctxRadioName error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioUrl != NULL && !ctxRadioUrl->Compare( KTestRadioUrl ),
-        _L( "Four values: ctxRadioUrl error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioFrequency != NULL && !ctxRadioFrequency->Compare( KTestRadioFrequency ),
-        _L( "Four values: ctxRadioFrequency error." ) );
-    STIF_ASSERT_TRUE_DESC( ctxRadioRDSPI != NULL && !ctxRadioRDSPI->Compare( KTestRadioRDSPI ),
-        _L( "Four values: ctxRadioRDSPI error." ) );
-    delete ctxRadioName;
-    delete ctxRadioUrl;
-    delete ctxRadioFrequency;
-    delete ctxRadioRDSPI;
-    
-    CleanupStack::PopAndDestroy(&testData);
-    
-    return KErrNone;
-    }
-
-#endif
-
-// end of file
--- a/homescreensrv_plat/context_utility_api/tsrc/src/wait.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
-* Copyright (c) 2006-2006 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:  CWait class implementation
-*
-*/
-
-
-#include "wait.h"
-
-// CONSTANTS
-
-_LIT( KPanicCat, "ActTimSche" );
-
-enum TPanicReason
-    {
-    EAlreadyStarted
-    };
-    
-LOCAL_C void Panic( TInt aCode )
-    {
-    User::Panic( KPanicCat, aCode );
-    }
-
-// MEMBER FUNCTIONS
-
-CWait* CWait::NewL()
-    {
-
-    CWait* self =
-        CWait::NewLC();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-  
-CWait* CWait::NewLC()
-   {
-
-    CWait* self =
-        new( ELeave ) CWait;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-
-    return self;
-    }
-  
-CWait::CWait():
-    CTimer( EPriorityStandard )
-    {
-    
-    // Double check if base class adds active object into scheduler
-    if( !IsAdded() )
-        {
-        CActiveScheduler::Add( this );
-        }
-    }
-
-void CWait::ConstructL()
-    {
-
-    // Do base constructions
-    CTimer::ConstructL();
-    
-    // Initialize active scheduler wait
-    iWait = new( ELeave ) CActiveSchedulerWait;
-    }
-
-// Destructor
-CWait::~CWait()
-    {
-
-    Cancel();
-    delete iWait;
-    }
-
-// METHODS
-
-//-----------------------------------------------------------------------------
-// CWait::Start
-//-----------------------------------------------------------------------------
-//
-void CWait::Start(
-    const TTimeIntervalMicroSeconds32& aInterval )
-    {
-
-    __ASSERT_ALWAYS( !IsActive(), Panic( EAlreadyStarted ) );
-    
-    After( aInterval );
-    iWait->Start();
-    }
-
-//-----------------------------------------------------------------------------
-// CWait::Stop
-//-----------------------------------------------------------------------------
-//
-void CWait::Stop()
-    {
-
-    Cancel();
-    }
-
-//-----------------------------------------------------------------------------
-// CWait::RunL
-//-----------------------------------------------------------------------------
-//
-void CWait::RunL()
-    {
-
-    // Double check that wait really started
-    if( iWait->IsStarted() )
-        {
-        iWait->AsyncStop();
-        }
-    }
-
-//-----------------------------------------------------------------------------
-// CWait::DoCancel
-//-----------------------------------------------------------------------------
-//
-void CWait::DoCancel()
-    {
-
-    // Double check that wait really started
-    CTimer::DoCancel();
-    if( iWait->IsStarted() )
-        {
-        iWait->AsyncStop();
-        }
-    }
-
-
-// end of file
--- a/homescreensrv_plat/context_utility_api/tsrc/src/wait.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
-* Copyright (c) 2008 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:  CWait class declaration.
-*
-*/
-
-
-
-#ifndef C_WAIT_H
-#define C_WAIT_H
-
-#include <e32base.h>
-
-/**
-*  Timed active scheduler wait.
-*  This class wraps inside a timer and scheduler wait.
-*  Wait will be automatically stopped after specified time.
-*/
-NONSHARABLE_CLASS( CWait ): public CTimer
-    {
-    public:  // Constructors and destructor
-
-        // Two-phased constructor.
-        static CWait* NewL();
-        static CWait* NewLC();
-               
-        // Destructor.
-        virtual ~CWait();
-        
-    public: // New methods
-    
-        /**
-        * Starts waiting in the scheduler.
-        * Wait will be automatically stopped after aInterval amount
-        * of time has passed.
-        * 
-        * @param aInterval Interval after wait will be stopped.
-        * @return None
-        */
-        void Start( const TTimeIntervalMicroSeconds32& aInterval );
-
-        /**
-        * Stops scheduler wait.
-        * 
-        * @param None
-        * @return None
-        */
-        void Stop();
-        
-    private: // From base classes
-    
-        // @see CActive
-        void RunL();
-        
-        // @see CActive
-        void DoCancel();
-        
-    private:
-    
-        CWait();
-        void ConstructL();
-
-    private: // Data
-    
-        // Own: Active scheduler wait
-        CActiveSchedulerWait* iWait;
-    };
-
-#endif
--- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  hgtestbase class member functions
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <Stiftestinterface.h>
-#include "hgtestbase.h"
-#include <e32math.h>
-#include <e32math.h>
-#include <aknappui.h>
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::CHgTestBase
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CHgTestBase::CHgTestBase()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::ConstructL
-// Symbian 2nd phase constructor can leave.
-//
-// Note: If OOM test case uses STIF Logger, then STIF Logger must be created
-// with static buffer size parameter (aStaticBufferSize). Otherwise Logger 
-// allocates memory from heap and therefore causes error situations with OOM 
-// testing. For more information about STIF Logger construction, see STIF Users 
-// Guide.
-// -----------------------------------------------------------------------------
-//
-void CHgTestBase::BaseConstructL( const TDesC& aTestPath,
-                                            const TDesC& aTestFile )
-    {
-    iLog = CStifLogger::NewL( aTestPath, 
-                          aTestFile);
-
-    // Sample how to use logging
-    _LIT( KLogStart, "Logging starts!" );
-    iLog->Log( KLogStart );
-
-    iVersionLogged = EFalse;
-    iNumberOfTestCases = 0;
-
-    // Construct active scheduler
-    iActiveScheduler = new ( ELeave ) CActiveScheduler;
-
-    // Install active scheduler
-    // We don't need to check whether an active scheduler is already installed
-    // as this is a new thread, so there won't be one
-    CActiveScheduler::Install ( iActiveScheduler );
-    }
-
-// Destructor
-CHgTestBase::~CHgTestBase()
-    {
-    
-    delete iTestDllName;
-    delete iLog;
-    //delete ENV_cleanup;
-    delete iActiveScheduler;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::InitL
-// InitL is used to initialize the Test Module.
-// -----------------------------------------------------------------------------
-//
-TInt CHgTestBase::InitL( 
-    TFileName& /*aIniFile*/, 
-    TBool /*aFirstTime*/ )
-    {
-    return KErrNone;
-
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::GetTestCasesL
-// GetTestCases is used to inquire test cases from the Test Module. Test
-// cases are stored to array of test cases. The Test Framework will be 
-// the owner of the data in the RPointerArray after GetTestCases return
-// and it does the memory deallocation. 
-// -----------------------------------------------------------------------------
-//
-TInt CHgTestBase::GetTestCasesL( 
-    const TFileName& /*aConfig*/, 
-    RPointerArray<TTestCaseInfo>& aTestCases )
-    {
-    TTestResult dummyResult;
-    return MainTestL(CHgTestBase::EEnumerateTestCases, -1, aTestCases, dummyResult); 
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::OOMTestQueryL
-// Used to check if a particular test case should be run in OOM conditions and 
-// which memory allocations should fail.    
-// -----------------------------------------------------------------------------
-//
-TBool CHgTestBase::OOMTestQueryL( 
-                                const TFileName& /* aTestCaseFile */, 
-                                const TInt /*aCaseNumber*/, 
-                                TOOMFailureType& /* aFailureType */, 
-                                TInt& /*aFirstMemFailure*/, 
-                                TInt& /*aLastMemFailure*/ ) 
-    {
-    return EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::OOMTestInitializeL
-// Used to perform the test environment setup for a particular OOM test case. 
-// Test Modules may use the initialization file to read parameters for Test 
-// Module initialization but they can also have their own configure file or 
-// some other routine to initialize themselves.  
-//
-// NOTE: User may add implementation for OOM test environment initialization.
-// Usually no implementation is required.
-// -----------------------------------------------------------------------------
-//
-void CHgTestBase::OOMTestInitializeL( 
-                                const TFileName& /* aTestCaseFile */, 
-                                const TInt /* aCaseNumber */ )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::OOMHandleWarningL
-// In some cases the heap memory allocation should be skipped, either due to
-// problems in the OS code or components used by the code being tested, or even 
-// inside the tested components which are implemented this way on purpose (by 
-// design), so it is important to give the tester a way to bypass allocation 
-// failures.
-//
-// NOTE: User may add implementation for OOM test warning handling. Usually no
-// implementation is required.
-// -----------------------------------------------------------------------------
-//
-void CHgTestBase::OOMHandleWarningL( 
-                                const TFileName& /* aTestCaseFile */,
-                                const TInt /* aCaseNumber */, 
-                                TInt& /* aFailNextValue */ )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::OOMTestFinalizeL
-// Used to perform the test environment cleanup for a particular OOM test case.
-//
-// NOTE: User may add implementation for OOM test environment finalization.
-// Usually no implementation is required.
-// -----------------------------------------------------------------------------
-//
-void CHgTestBase::OOMTestFinalizeL( 
-                                const TFileName& /* aTestCaseFile */, 
-                                const TInt /* aCaseNumber */ )
-    {
-    }
-
-void CHgTestBase::SendTestModuleVersion( const TDesC& aModuleName )
-    {
-    TVersion moduleVersion;
-    moduleVersion.iMajor = TEST_MODULE_VERSION_MAJOR;
-    moduleVersion.iMinor = TEST_MODULE_VERSION_MINOR;
-    moduleVersion.iBuild = TEST_MODULE_VERSION_BUILD;
-    
-    TBool newVersionOfMethod = ETrue;
-    TestModuleIf().SendTestModuleVersion(moduleVersion, aModuleName, newVersionOfMethod);
-    }
-    
-// -----------------------------------------------------------------------------
-// CHgTestBase::RunTestCaseL
-// RunTestCaseL is used to run an individual test case specified
-// by aTestCase. Test cases that can be run may be requested from
-// Test Module by GetTestCases method before calling RunTestCase.
-// -----------------------------------------------------------------------------
-//
-TInt CHgTestBase::RunTestCaseL(
-    const TInt aCaseNumber,
-    const TFileName& /*aConfig*/,
-    TTestResult& aResult )
-    {
-    if(!iVersionLogged)
-        {
-        CHgTestBase::SendTestModuleVersion( *iTestDllName );
-        iVersionLogged = ETrue;
-        }
-
-    RPointerArray<TTestCaseInfo> aTestCases; //temporary
-
-    /**
-     * SetupL is responsible for inicialization of all fields (etc.) common for all testcases
-     * MainTestL starts required testcase
-     * TeardownL destroys all data that was created by SetupL
-     */
-    TInt errSetup = KErrNone;
-    TInt errTestcase = KErrNone;
-
-    if(aCaseNumber > iNumberOfTestCases)
-        return KErrNotFound;
-
-    __UHEAP_MARK;
-
-    //TRAP(errSetup, MainTestL(CHgTestBase::ERunTestCase, STIF_RUN_SETUP, aTestCases, aResult);
-    TRAP(errTestcase, MainTestL(CHgTestBase::ERunTestCase, aCaseNumber, aTestCases, aResult));
-      //      MainTestL(CHgTestBase::ERunTestCase, STIF_RUN_TEARDOWN, aTestCases, aResult));
-
-    __UHEAP_MARKEND;
-
-    if(errTestcase != KErrNone)
-        {
-        aResult.SetResult(errTestcase, _L("Testcase failed"));
-        }
-    if(errSetup != KErrNone)
-        {
-        aResult.SetResult(errSetup, _L("Setup or teardown failed"));
-        }
-
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgTestBase::MainTestL
-// Method responsible for enumerating and running test cases (and also setup and teardown activities before
-// and after each test case).
-// -----------------------------------------------------------------------------
-//
-TInt CHgTestBase::MainTestL(CHgTestBase::TCallReason aRunReason,
-                             TInt aTestToRun,
-                             RPointerArray<TTestCaseInfo>& aTestCases,
-                             TTestResult& aResult )
-    {
-    if(aRunReason == CHgTestBase::ERunTestCase)
-        {
-        if(aTestToRun < 0)
-            {
-            iLog->Log(_L("Running setup or teardown"));
-            }
-        else
-            {
-            iLog->Log(_L("Running test case #%d"), aTestToRun);
-            }
-        }
-    else
-        {
-        iLog->Log(_L("Enumerating test cases."));
-        }
-
-    TInt result = -1;
-
-    // this method must be implemented in the test case
-    result = RunTestL( aRunReason, aTestToRun, aTestCases, aResult );
-
-    if(aRunReason != CHgTestBase::ERunTestCase)
-        {
-        iNumberOfTestCases = result;
-        iLog->Log(_L("Enumeration completed."));
-        }
-
-    // Test case was executed
-    return KErrNone;
-    }    
-    
-//  End of File
--- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,233 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  hgtestbase module.
-*
-*/
-
-
-#include <e32svr.h>
-#include "StifTestModule.h"
-#include <StifLogger.h>
-
-#include "hgtestbasemacros.h"
-
-// MACROS
-#define TEST_MODULE_VERSION_MAJOR 0
-#define TEST_MODULE_VERSION_MINOR 0
-#define TEST_MODULE_VERSION_BUILD 0
-
-// CLASS DECLARATION
-
-// FORWARD DECLARATIONS
-class CHgTestClass;
-class CEikonEnv;
-class CAknAppUi;
-
-// DATA TYPES
-typedef TInt (CHgTestClass::* TestFunction)(TTestResult&);
-
-/**
-*  An internal structure containing a test case name and
-*  the pointer to function doing the test
-*/
-class TCaseInfoInternal
-{
-public:
-    const TText*    iCaseName;
-    TestFunction    iMethod;
-    TBool           iIsOOMTest;
-    TInt            iFirstMemoryAllocation;
-    TInt            iLastMemoryAllocation;
-};
-
-// CLASS DECLARATION
-
-/**
-*  A structure containing a test case name and
-*  the pointer to function doing the test
-*/
-class TCaseInfo
-{
-public:
-    TPtrC           iCaseName;
-    TestFunction    iMethod;
-    TBool           iIsOOMTest;
-    TInt            iFirstMemoryAllocation;
-    TInt            iLastMemoryAllocation;
-
-TCaseInfo( const TText* a ) : iCaseName( (TText*) a )
-    {
-    };
-
-};
-    
-class CHgTestBase : public CTestModuleBase
-{
-
-public:  //Enums
-        // Reason for running test method
-		enum TCallReason
-		    {
-		    EEnumerateTestCases,
-		    ERunTestCase,
-		    };
-        
-public:  // Constructors and destructor
-    /**
-    * Destructor.
-    */
-    virtual ~CHgTestBase();
-    
-public: // New functions
-    static TInt CallStop( TAny* aWait )
-        {
-        (static_cast<CActiveSchedulerWait*>(aWait))->AsyncStop();
-        }
-public: // Functions from base classes
-
-    /**
-    * From CTestModuleBase InitL is used to initialize the 
-    *       test class object. It is called once for every instance of 
-    *       TestModule test class object after its creation.
-    * @param aIniFile Initialization file for the test module (optional)
-    * @param aFirstTime Flag is true when InitL is executed for first 
-    *               created instance of test class object
-    * @return Symbian OS error code
-    */
-    TInt InitL( TFileName& aIniFile, TBool aFirstTime );
-
-    /**
-    * From CTestModuleBase GetTestCasesL is used to inquiry test cases 
-    *   from test class object. 
-    * @param aTestCaseFile Test case file (optional)
-    * @param aTestCases  Array of TestCases returned to test framework
-    * @return Symbian OS error code
-    */
-    TInt GetTestCasesL( const TFileName& aTestCaseFile, 
-                        RPointerArray<TTestCaseInfo>& aTestCases );
-
-
-    /**
-    * From CTestModuleBase; OOMTestQueryL is used to specify is particular
-    * test case going to be executed using OOM conditions
-    * @param aTestCaseFile Test case file (optional)
-    * @param aCaseNumber Test case number (optional)
-    * @param aFailureType OOM failure type (optional)
-    * @param aFirstMemFailure The first heap memory allocation failure value (optional)
-    * @param aLastMemFailure The last heap memory allocation failure value (optional)
-    * @return TBool
-    */
-    virtual TBool OOMTestQueryL( const TFileName& /* aTestCaseFile */, 
-                                 const TInt /* aCaseNumber */, 
-                                 TOOMFailureType& aFailureType, 
-                                 TInt& /* aFirstMemFailure */, 
-                                 TInt& /* aLastMemFailure */ );
-
-    /**
-    * From CTestModuleBase; OOMTestInitializeL may be used to initialize OOM
-    * test environment
-    * @param aTestCaseFile Test case file (optional)
-    * @param aCaseNumber Test case number (optional)
-    * @return None
-    */
-    virtual void OOMTestInitializeL( const TFileName& /* aTestCaseFile */, 
-                                const TInt /* aCaseNumber */ ); 
-
-    /**
-    * From CTestModuleBase; OOMHandleWarningL
-    * @param aTestCaseFile Test case file (optional)
-    * @param aCaseNumber Test case number (optional)
-    * @param aFailNextValue FailNextValue for OOM test execution (optional)
-    * @return None
-    *
-    * User may add implementation for OOM test warning handling. Usually no
-    * implementation is required.           
-    */
-    virtual void OOMHandleWarningL( const TFileName& /* aTestCaseFile */,
-                                    const TInt /* aCaseNumber */, 
-                                    TInt& /* aFailNextValue */); 
-
-    /**
-    * From CTestModuleBase; OOMTestFinalizeL may be used to finalize OOM
-    * test environment
-    * @param aTestCaseFile Test case file (optional)
-    * @param aCaseNumber Test case number (optional)
-    * @return None
-    *
-    */
-    virtual void OOMTestFinalizeL( const TFileName& /* aTestCaseFile */, 
-                                   const TInt /* aCaseNumber */ );
-
-    /**
-     * Method used to log version of test module
-     */
-    void SendTestModuleVersion( const TDesC& aTestPath );
-
-private:
-    /**
-    * From CTestModuleBase RunTestCaseL is used to run an individual 
-    *   test case. 
-    * @param aCaseNumber Test case number
-    * @param aTestCaseFile Test case file (optional)
-    * @param aResult Test case result returned to test framework (PASS/FAIL)
-    * @return Symbian OS error code (test case execution error, which is 
-    *           not reported in aResult parameter as test case failure).
-    */   
-    TInt RunTestCaseL( const TInt aCaseNumber, 
-                       const TFileName& aTestCaseFile,
-                       TTestResult& aResult );
-
-    /**
-    * Method containing all test cases, setup and teardown sections.
-    */
-    TInt MainTestL(CHgTestBase::TCallReason aRunReason, TInt aTestToRun, RPointerArray<TTestCaseInfo>& aTestCases,
-            TTestResult& aResult);
-
-protected:
-
-    /**
-    * C++ default constructor.
-    */
-    CHgTestBase();
-
-    /**
-    * By default Symbian 2nd phase constructor is private.
-    */
-    void BaseConstructL( const TDesC& aTestPath,
-                     const TDesC& aTestFile );
-
-    /**
-     * Put here the #include of the test cases cpp file
-     */
-    virtual TInt RunTestL(
-            CHgTestBase::TCallReason aRunReason, 
-            TInt aTestToRun, 
-            RPointerArray<TTestCaseInfo>& aTestCases,
-            TTestResult& aResult) = 0;
-
-protected:    // Data
-    // Pointer to test (function) to be executed
-    TestFunction iMethod;
-
-    // Pointer to logger
-    CStifLogger * iLog; 
-
-    // Flag saying if version of test module was already sent
-    TBool iVersionLogged;
-    // Total number of test cases
-    TInt iNumberOfTestCases;
-      HBufC16* iTestDllName;
-    // activescheduler for connecting
-    CActiveScheduler* iActiveScheduler;
-};
--- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbasemacros.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
-* Copyright (c) 2002 - 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:  hgtestbasemacros test module.
-*
-*/
-
-
-
-#ifndef hgtestbasemacros_H
-#define hgtestbasemacros_H
-
-_LIT( KAssertFailedEquals, "AssertEquals Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedNotEquals, "AssertNotEquals Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedNull, "AssertNull Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedNotNull, "AssertNotNull Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedSame, "AssertSame Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedNotSame, "AssertNotSame Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedTrue, "AssertTrue Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedFalse, "AssertFalse Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedNotLeaves, "AssertNotLeaves Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedLeaves, "AssertLeaves Failed [F:%s][L:%d]" );
-_LIT( KAssertFailedLeavesWith, "AssertLeavesWith Failed [F:%s][L:%d]" );
-
-
-#ifdef _UNICODE
-	#define __STIF_WIDEN2(x) L ## x
-	#define __STIF_WIDEN(x) __STIF_WIDEN2(x)
-	#define __STIF_DBG_FILE__ __STIF_WIDEN(__FILE__)
-#else
-	#define __STIF_DBG_FILE__ __FILE__
-#endif
-
-
-// Logs to the STIF log file AND to the RDebug
-#define STIF_LOG( aMessage ) \
-    iLog->Log( _L( aMessage ) ); RDebug::Print( _L( aMessage ) );
-
-
-// Defines a separate test case which consists of two blocks - one for enumeration of test cases
-// second for running the testcase.
-#define STIF_TESTDEFINE( aTestName ) \
-_test_case_no++; \
-if( aRunReason == CHgTestBase::EEnumerateTestCases ) \
-	{ \
-  TTestCaseInfo* newCase = new( ELeave ) TTestCaseInfo(); \
-  CleanupStack::PushL( newCase ); \
-  newCase->iCaseNumber = _test_case_no; \
-  newCase->iTitle.Copy( _L( #aTestName ) ); \
-  User::LeaveIfError(aTestCases.Append ( newCase ) ); \
-  CleanupStack::Pop( newCase ); \
-	} \
-else if(aRunReason == CHgTestBase::ERunTestCase && _test_case_no == aTestToRun)
-
-#define STIF_RUN_SETUP -1
-#define STIF_RUN_TEARDOWN -2
-
-// Defines a setup section of MainTestL method
-#define STIF_SETUP \
-	if( aRunReason == CHgTestBase::ERunTestCase && aTestToRun == STIF_RUN_SETUP )
-
-// Defines a teardown section of MainTestL method
-#define STIF_TEARDOWN \
-	if( aRunReason == CHgTestBase::ERunTestCase && aTestToRun == STIF_RUN_TEARDOWN )
-		
-/*********************************************************************************
- * Assert Macros
- *********************************************************************************/
-#define __STIF_ASSERT_SHARED( aFunction, aMessage ) \
-	if(!aFunction) \
-		{ \
-		iLog->Log( aMessage, __STIF_DBG_FILE__, __LINE__ );\
-		aResult.SetResult( KErrGeneral, _L("Testcase failed"));\
-		User::Leave( KErrGeneral );\
-		}
-
-#define __STIF_ASSERT_SHARED_DESC( aFunction, aMessage, aDesc ) \
-	if(!aFunction) \
-		{ \
-		iLog->Log( aMessage, __STIF_DBG_FILE__, __LINE__ );\
-		aResult.SetResult( KErrGeneral, aDesc );\
-		User::Leave( KErrGeneral );\
-		} \
-	else \
-		{ \
-		aResult.SetResult( KErrNone, aDesc ); \
-		}
-		
-		
-
-#define STIF_ASSERT_EQUALS( aExpected, aActual ) \
-	__STIF_ASSERT_SHARED( AssertEquals( aExpected, aActual ) , KAssertFailedEquals );
-
-#define STIF_ASSERT_EQUALS_DESC( aExpected, aActual, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( AssertEquals( aExpected, aActual ) , KAssertFailedEquals, aDescription ); 
-
-#define STIF_ASSERT_NOT_EQUALS( aExpected, aActual ) \
-	__STIF_ASSERT_SHARED( !AssertEquals( aExpected, aActual ) , KAssertFailedNotEquals );
-
-#define STIF_ASSERT_NOT_EQUALS_DESC( aExpected, aActual, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( !AssertEquals( aExpected, aActual ) , KAssertFailedNotEquals, aDescription );
-
-#define STIF_ASSERT_NULL( aPtr ) \
-	__STIF_ASSERT_SHARED( AssertNull( aPtr ), KAssertFailedNull );
-
-#define STIF_ASSERT_NULL_DESC( aPtr, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( AssertNull( aPtr ), KAssertFailedNull, aDescription );
-
-#define STIF_ASSERT_NOT_NULL( aPtr ) \
-	__STIF_ASSERT_SHARED( !AssertNull( aPtr ), KAssertFailedNotNull );
-
-#define STIF_ASSERT_NOT_NULL_DESC( aPtr, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( !AssertNull( aPtr ), KAssertFailedNotNull, aDescription );
-
-#define STIF_ASSERT_SAME( aExpectedPtr, aActualPtr ) \
-	__STIF_ASSERT_SHARED( AssertSame( aExpectedPtr, aActualPtr ), KAssertFailedSame );
-
-#define STIF_ASSERT_SAME_DESC( aExpectedPtr, aActualPtr, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( AssertSame( aExpectedPtr, aActualPtr ), KAssertFailedSame, aDescription );
-
-#define STIF_ASSERT_NOT_SAME( aExpectedPtr, aActualPtr) \
-	__STIF_ASSERT_SHARED( !AssertSame( aExpectedPtr, aActualPtr ), KAssertFailedNotSame );
-
-#define STIF_ASSERT_NOT_SAME_DESC( aExpectedPtr, aActualPtr, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( !AssertSame( aExpectedPtr, aActualPtr ), KAssertFailedNotSame, aDescription );
-
-#define STIF_ASSERT_TRUE( aCondition ) \
-	__STIF_ASSERT_SHARED( AssertTrue( aCondition ), KAssertFailedTrue );
-
-#define STIF_ASSERT_TRUE_DESC( aCondition, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( AssertTrue( aCondition ), KAssertFailedTrue, aDescription );
-
-#define STIF_ASSERT_FALSE( aCondition ) \
-	__STIF_ASSERT_SHARED( !AssertTrue( aCondition ), KAssertFailedFalse );
-
-#define STIF_ASSERT_FALSE_DESC( aCondition, aDescription ) \
-	__STIF_ASSERT_SHARED_DESC( !AssertTrue( aCondition), KAssertFailedFalse, aDescription );
-
-// Eclosing block is used to create the scope for the __leaveValue	
-#define STIF_ASSERT_NOT_LEAVES( aStatement ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED( AssertEquals( __leaveValue, KErrNone ), KAssertFailedNotLeaves ); \
-    }
-
-#define STIF_ASSERT_NOT_LEAVES_DESC( aStatement, aDescription ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED_DESC( AssertEquals( __leaveValue, KErrNone ), KAssertFailedNotLeaves, aDescription ); \
-    }    
-
-// Eclosing block is used to create the scope for the __leaveValue	
-#define STIF_ASSERT_LEAVES( aStatement ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED( !AssertEquals( __leaveValue, KErrNone ), KAssertFailedLeaves ); \
-    }
-
-#define STIF_ASSERT_LEAVES_DESC( aStatement, aDescription ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED_DESC( !AssertEquals( __leaveValue, KErrNone ), KAssertFailedLeaves, aDescription ); \
-    }   
-
-// Eclosing block is used to create the scope for the __leaveValue	
-#define STIF_ASSERT_LEAVES_WITH( aLeaveCode, aStatement ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED( AssertEquals( __leaveValue, aLeaveCode ), KAssertFailedLeaves ); \
-    }
-
-#define STIF_ASSERT_LEAVES_WITH_DESC( aLeaveCode, aStatement, aDescription ) \
-    { \
-    TRAPD( __leaveValue, aStatement ); \
-    __STIF_ASSERT_SHARED_DESC( AssertEquals( __leaveValue, aLeaveCode ), KAssertFailedLeaves, aDescription ); \
-    }
-
-#define STIF_ASSERT_PANIC( aPanicCode, aStatement ) \
-	{ \
-	TestModuleIf().SetExitReason( CTestModuleIf::EPanic, aPanicCode ); \
-	aStatement; \
-	}
-
-#define STIF_ASSERT_PANIC_DESC( aPanicCode, aStatement, aDescription ) \
-	{ \
-	TestModuleIf().SetExitReason( CTestModuleIf::EPanic, aPanicCode ); \
-	aResult.SetResult(KErrNone, aDescription); \
-	aStatement; \
-	}
-#include "sitfunitutils.inl"
-
-#endif
--- a/homescreensrv_plat/context_utility_api/tsrc/testbase/sitfunitutils.inl	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
-* Copyright (c) 2006 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:  inline functions for the STIFUnit utils
-*
-*/
-
-
-template <class T>
-inline TBool AssertEquals(const T& aExpected, const T& aActual)
-/**
- * AssertEquals
- *
- * @prototype
- * @test
- *
- * @param aExpected - Expected result
- * @param aActual - Actual result
- * @return - True if equal
- */
-	{
-	if( aExpected==aActual )
-		{
-		return ETrue;
-		}
-	return EFalse;
-	}
-
-template <class T>
-inline TBool AssertNull(const T* aPtr)
-/**
- * AssertNull
- *
- * @prototype
- * @test
- *
- * @param aPtr - Pointer
- * @return - True if NULL
- */
-	{
-	if( aPtr==NULL )
-		{
-		return ETrue;
-		}
-	return EFalse;
-	}
-
-template <class T>
-inline TBool AssertSame(const T* aExpectedPtr, const T* aActualPtr)
-/**
- * AssertSame
- *
- * @prototype
- * @test
- *
- * @param aExpectedPtr - Expected pointer
- * @param aActualPtr - Actual pointer
- * @return - True if equal
- */
-	{
-	if( aExpectedPtr==aActualPtr )
-		{
-		return ETrue;
-		}
-	return EFalse;
-	}
-
-inline TBool AssertTrue(const TBool& aCondition)
-/**
- * AssertTrue
- *
- * @prototype
- * @test
- *
- * @param aCondition - Condition
- * @return - True if aCondition is true
- */
-	{
-	if( !aCondition )
-		{
-		return EFalse;
-		}
-	return ETrue;
-	}
-
-// End of File
--- a/homescreensrv_plat/context_utility_api/ui_context_utility_api.metaxml	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" ?>
-<api id="7e268187c80d6b7d592393c2e770c2c3" dataversion="2.0">
-  <name>UI Context Utility API</name>
-  <description>Utility API for publishing context to the Context Framework</description>
-  <type>c++</type>
-  <collection>contextengine</collection>
-  <libs>
-    <lib name="hgcontextutility.lib" />
-  </libs>
-  <release category="platform" />
-  <attributes>
-     <!-- This indicates whether the api provedes separate html documentation -->
-     <!-- or is the additional documentation generated from headers. -->
-     <!-- If you are unsure then the value is "no" -->
-     <htmldocprovided>no</htmldocprovided>
-     <adaptation>no</adaptation>
-  </attributes>
-</api>
--- a/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h	Wed May 12 13:35:37 2010 +0300
@@ -86,6 +86,15 @@
     virtual TInt ViewListL( CHsContentInfoArray& aArray ) = 0;
 
     /**
+     * Returns the list of available Home screen views included in an
+     * application configuration
+     * @param aInfo Content info defining the application configuration
+     * @param aArray List of views
+     * @return KErrNone on success, any of system wide error codes
+     */
+    virtual TInt ViewListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray ) = 0;
+
+    /**
      * Returns the list of available Home screen application configurations
      * @param aArray List of application configurations
      * @return KErrNone on success, any of system wide error codes
--- a/homescreensrv_plat/hs_content_control_api/inc/hscontentinfo.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/hs_content_control_api/inc/hscontentinfo.h	Wed May 12 13:35:37 2010 +0300
@@ -333,6 +333,23 @@
     IMPORT_C TBool IsWrt() const;
 
     /**
+     * Sets whether an application confguration or a view is full
+     * 
+     * @since S60 5.0
+     * @param aIsFull, ETrue if application configuration or a view is full
+     */    
+    IMPORT_C void SetIsFull( TBool aIsFull );
+    
+    /**
+     * Returns whether an application configuration or a view is full
+     * 
+     * @since S60 5.0
+     * @return ETrue if application configuration or view is full, 
+     *         EFalse otherwise
+     */    
+    IMPORT_C TBool IsFull() const;
+
+    /**
      * Marshals Content Info data to a descriptor
      * 
      * @since S60 5.0
@@ -407,6 +424,11 @@
      * Flag to indicate whether this is a WRT widget
      */
     TBool iIsWrt;
+
+    /**
+     * Flag to indicate wheter an application configuration or a view is full
+     */
+    TBool iIsFull;
     };
 
 #endif // HSCONTENTINFO_H
--- a/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -203,7 +203,8 @@
     /**
      * Method publishes the provided widget. 
      * Widget needs to be published in order for the content 
-     * to be seen by the HS.
+     * to be seen by the HS. For correct behaviour during publishing, events received
+	 * from HS must be handled appropriately.
      *
      * @code
      * HsWidgetPublisher* hsPublisher = new HsWidgetPublisher( dataObserver );
--- a/homescreensrv_plat/idlefw_api/inc/aifwstatehandler.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/idlefw_api/inc/aifwstatehandler.h	Wed May 12 13:35:37 2010 +0300
@@ -67,15 +67,7 @@
      * @param aState State to change
      */
     virtual void ChangePluginState( TAiFwState aState ) = 0;
-    
-    /**
-     * Queries whether online state is in use
-     * by any of the currently loaded plugin.
-     * 
-     * @since S60 5.2
-     * @return ETrue if online/offline state needed, EFalse otherwise
-     */
-    virtual TBool OnlineStateInUse() const = 0;
+
     };
 
 #endif // M_AIFWSTATEHANDLER_H
--- a/homescreensrv_plat/sapi_actionhandler/actionhandlerplugins/group/ahplugins.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_actionhandler/actionhandlerplugins/group/ahplugins.mmp	Wed May 12 13:35:37 2010 +0300
@@ -56,7 +56,6 @@
 LIBRARY         apparc.lib
 LIBRARY         sendui.lib
 LIBRARY         hlplch.lib 
-LIBRARY         ws32.lib  
-
+LIBRARY         ws32.lib
 
 // End of File
--- a/homescreensrv_plat/sapi_actionhandler/actionhandlerplugins/src/ahpapplauncher.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_actionhandler/actionhandlerplugins/src/ahpapplauncher.cpp	Wed May 12 13:35:37 2010 +0300
@@ -106,38 +106,29 @@
 
     if ( !ExtractUidL( aMap, appUid, KApplicationUid ) )
         {
-        TApaTaskList taskList( iEnv->WsSession() );       
-        TApaTask task = taskList.FindApp( appUid );
-        if ( task.Exists( ) )
-            {
-            errCode = KErrNone;
-            task.BringToForeground();
-            }
-        else
+        // app not yet running
+        RApaLsSession appSession;
+        CleanupClosePushL( appSession );
+        User::LeaveIfError( appSession.Connect( ) );
+
+        CApaCommandLine* cmd = CApaCommandLine::NewLC( );
+        cmd->SetCommandL( GetCommandL( aMap ) );
+        RBuf documentNameValue;
+        CleanupClosePushL( documentNameValue );
+        if( !ExtractDesL( aMap, documentNameValue, KDocumentName ) )
             {
-            // app not yet running
-            RApaLsSession appSession;
-            CleanupClosePushL( appSession );
-            User::LeaveIfError( appSession.Connect( ) );
-    
-            CApaCommandLine* cmd = CApaCommandLine::NewLC( );
-            cmd->SetCommandL( GetCommandL( aMap ) );
-            RBuf documentNameValue;
-            CleanupClosePushL( documentNameValue );
-            if( !ExtractDesL( aMap, documentNameValue, KDocumentName ) )
-                {
-                cmd->SetDocumentNameL( documentNameValue );
-                }
-            TApaAppInfo appInfo;
-            appSession.GetAppInfo( appInfo, appUid );
-            cmd->SetExecutableNameL( appInfo.iFullName );
-            errCode = appSession.StartApp( *cmd );
-    
-            CleanupStack::PopAndDestroy( &documentNameValue );
-            CleanupStack::PopAndDestroy( cmd );
-            CleanupStack::PopAndDestroy( &appSession );
+            cmd->SetDocumentNameL( documentNameValue );
             }
+        TApaAppInfo appInfo;
+        appSession.GetAppInfo( appInfo, appUid );
+        cmd->SetExecutableNameL( appInfo.iFullName );
+        errCode = appSession.StartApp( *cmd );
+
+        CleanupStack::PopAndDestroy( &documentNameValue );
+        CleanupStack::PopAndDestroy( cmd );
+        CleanupStack::PopAndDestroy( &appSession );
         }
+
     return errCode;
     }
 
--- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h	Wed May 12 13:35:37 2010 +0300
@@ -114,13 +114,21 @@
      *
      * @since S6CCPActiveNotifierNotifier v 5.CCPActiveNotifierNotifier
      * @param aInParamList input parameter list (filter)
-     * @param aOutParamList output action_map
      * @param aCmdOptions options for the command
      */
     void ExecuteActionL( const CLiwGenericParamList& aInParamList,
             TUint aCmdOptions );
 
     /**
+     * Send command to server to ExecuteMultipleActions
+     *
+     * @param aInParamList input parameter list (filter)
+     * @param aCmdOptions options for the command
+     */
+    void ExecuteMultipleActionsL(
+            const CLiwGenericParamList& aInParamList, TUint aCmdOptions);
+    
+    /**
      * Check second param from IDataSource interface
      *
      * @since S6CCPActiveNotifierNotifier v 5.CCPActiveNotifierNotifier
@@ -129,7 +137,15 @@
      */    
     void CheckMapL( const CLiwGenericParamList& aInParamList, 
             const TDesC8& aKey );
-
+    
+    /**
+     * Check proper data is passed as parameter to ExecuteMultipleActions
+     *
+     * @since S6CCPActiveNotifierNotifier v 5.CCPActiveNotifierNotifier
+     * @param aList generic list containing input parameters 
+     */    
+    void CheckMultiExecuteInputParamsL(const CLiwGenericParamList& aList);
+    
 private:
 
     /**
--- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h	Wed May 12 13:35:37 2010 +0300
@@ -118,6 +118,16 @@
     void ExecuteActionL( const CCPLiwMap& aMap, TUint aOptions = 0 );
 
     /**
+     * Pass ExecuteMultipleActionsL request to the server
+     *
+     * @since S60 v 5.0
+     * @param aList const reference to the input list
+     * @param aOptions Command options.
+     */
+    void ExecuteMultipleActionsL( const CLiwGenericParamList& aList,
+            TUint aOptions = 0 );
+    
+    /**
      * Pass GetChangeInfoData request to server
      * @param aBuf reference to the input list
      * @return error code
--- a/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp	Wed May 12 13:35:37 2010 +0300
@@ -90,12 +90,16 @@
     CP_DEBUG( _L8("CContentPublishingInterface::ProcessCommandL") );
     
     if ( aCmdName.CompareF( KExecuteAction ) == 0 )
-       {
-       iCPClient->ExecuteActionL( aInParamList, aCmdOptions );
-       }
-   else
-       {
-       CDataSourceInterface::ProcessCommandL(aCmdName,
-           aInParamList, aOutParamList, aCmdOptions, aCallback);
-       }
+        {
+        iCPClient->ExecuteActionL( aInParamList, aCmdOptions );
+        }
+    else if ( aCmdName.CompareF( KExecuteMultipleActions ) == 0 )
+        {
+        iCPClient->ExecuteMultipleActionsL( aInParamList, aCmdOptions );
+        }
+    else
+        {
+        CDataSourceInterface::ProcessCommandL(aCmdName,
+            aInParamList, aOutParamList, aCmdOptions, aCallback);
+        }
     }
--- a/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp	Wed May 12 13:35:37 2010 +0300
@@ -96,6 +96,7 @@
     CLiwGenericParamList& aOutParamList )
     {
     CP_DEBUG( _L8("CCPClient::GetListL()") );
+    CP_EXTENDED_DEBUG( "GetListL()" , aInParamList );
     CheckMapL( aInParamList, KFilter );
     CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList );
     inMapForServer->PushL( );
@@ -113,6 +114,7 @@
                       TUint aCmdOptions )
     {
     CP_DEBUG( _L8("CCPClient::AddL()") );
+    CP_EXTENDED_DEBUG( "Add()" , aInParamList );
     CheckMapL( aInParamList, KItem );
     CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList ) ;
     inMapForServer->PushL( );
@@ -128,6 +130,7 @@
 void CCPClient::DeleteL( const CLiwGenericParamList& aInParamList )
     {
     CP_DEBUG( _L8("CCPClient::DeleteL()") );
+    CP_EXTENDED_DEBUG( "Delete()" , aInParamList );
     CheckMapL( aInParamList, KData );
     CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList );
     inMapForServer->PushL( );
@@ -144,6 +147,7 @@
     const CLiwGenericParamList& aInParamList, TInt32 aTransactionId )
     {
     CP_DEBUG( _L8("CCPClient::RegisterObserverL()") );
+    CP_EXTENDED_DEBUG( "RegisterObserver()" , aInParamList );
     CheckMapL( aInParamList, KFilter );
     CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList );
     inMapForServer->PushL( );
@@ -163,6 +167,7 @@
 void CCPClient::UnregisterObserversL( const CLiwGenericParamList& aInParamList )
     {
     CP_DEBUG( _L8("CCPClient::UnregisterObservers()") );
+    CP_EXTENDED_DEBUG( "UnregisterObservers()" , aInParamList );
     if ( !iActiveNotifier )
         {
         User::Leave( KErrNotFound );
@@ -198,7 +203,8 @@
 void CCPClient::ExecuteActionL( const CLiwGenericParamList& aInParamList,
         TUint aCmdOptions)
     {
-    CP_DEBUG( _L8("CCPClient::RegisterObserverL()") );
+    CP_DEBUG( _L8("CCPClient::ExecuteActionL()") );
+    CP_EXTENDED_DEBUG( "ExecuteAction()" , aInParamList );
     CheckMapL( aInParamList, KFilter );
     CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList );
     inMapForServer->PushL( );
@@ -211,6 +217,19 @@
 // 
 // -----------------------------------------------------------------------------
 //    
+void CCPClient::ExecuteMultipleActionsL(
+        const CLiwGenericParamList& aInParamList, TUint aCmdOptions)
+    {
+    CP_DEBUG( _L8("CCPClient::ExecuteMultipleActionsL()") );
+    CP_EXTENDED_DEBUG( "ExecuteMultipleActionsL()" , aInParamList );
+    CheckMultiExecuteInputParamsL(aInParamList);
+    iServerClient.ExecuteMultipleActionsL( aInParamList, aCmdOptions );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//    
 void CCPClient::CheckMapL( const CLiwGenericParamList& aInParamList, 
         const TDesC8& aKey )
     {
@@ -225,3 +244,20 @@
             }
         }
     }
+
+// -----------------------------------------------------------------------------
+//
+// --------------- --------------------------------------------------------------
+//
+void CCPClient::CheckMultiExecuteInputParamsL(
+        const CLiwGenericParamList& aList)
+    {
+    const TLiwGenericParam* param = NULL;
+    TInt pos(0);
+    param = aList.FindFirst(pos, KFilters);
+    User::LeaveIfError(pos); //leaves if not found
+    if (param->Value().TypeId() != LIW::EVariantTypeList)
+        {
+        User::Leave(KErrBadName);
+        }
+    }
--- a/homescreensrv_plat/sapi_contentpublishing/src/cpclientactivenotifier.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclientactivenotifier.cpp	Wed May 12 13:35:37 2010 +0300
@@ -204,8 +204,10 @@
         iSizeDes = NULL;
         CleanupStack::PopAndDestroy(&outbuf);
         }
-    RegisterAgainL();
-
+    if (KErrNoMemory!=iStatus.Int())
+        {
+        RegisterAgainL();
+        }
     NotifyObserversL(error, eventParamList);
     CleanupStack::PopAndDestroy(eventParamList);
     }
@@ -292,9 +294,12 @@
 //
 // ----------------------------------------------------------------------------
 //
-TInt CCPActiveNotifier::RunError( TInt /*aError*/)
+TInt CCPActiveNotifier::RunError( TInt aError )
     {
-    TRAP_IGNORE( RegisterAgainL( ) );
+    if (KErrNoMemory!=aError)
+        {
+        TRAP_IGNORE( RegisterAgainL( ) );
+        }
     return KErrNone;
     }
 // ----------------------------------------------------------------------------
--- a/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp	Wed May 12 13:35:37 2010 +0300
@@ -161,6 +161,29 @@
 //
 // -----------------------------------------------------------------------------
 //
+void RCPServerClient::ExecuteMultipleActionsL(
+        const CLiwGenericParamList& aList, TUint aOptions)
+    {
+    CP_DEBUG( _L8("RCPServerClient::ExecuteMultipleActionsL()") );
+    TIpcArgs args;
+    TInt size = aList.Size();
+    HBufC8* datadesc = HBufC8::NewLC( size );
+    TPtr8 ptr = datadesc->Des();
+    RDesWriteStream datastrm( ptr );
+    CleanupClosePushL(datastrm);
+    aList.ExternalizeL(datastrm);
+    datastrm.CommitL();
+    args.Set( KDescriptorPosition, &*datadesc );
+    args.Set( KOptionsPosition, static_cast<TInt>( aOptions ) );
+    User::LeaveIfError(SendReceive(ECpServerExecuteMultipleActions, args));
+    CleanupStack::PopAndDestroy(&datastrm);
+    CleanupStack::PopAndDestroy(datadesc);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void RCPServerClient::DeleteL( const CCPLiwMap& aMap )
     {
     CP_DEBUG( _L8("RCPServerClient::DeleteL()") );
--- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/bwins/hspsserviceu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/bwins/hspsserviceu.def	Wed May 12 13:35:37 2010 +0300
@@ -1,25 +1,25 @@
 EXPORTS
-	?GetPluginListL@CHspsPersonalisationService@@QAEXAAVTDesC8@@0KAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 1 NONAME ; void CHspsPersonalisationService::GetPluginListL(class TDesC8 &, class TDesC8 &, unsigned long, class CArrayPtrFlat<class ChspsODT> &)
+	?RestoreConfigurationsL@CHspsPersonalisationService@@QAEXHH@Z @ 1 NONAME ; void CHspsPersonalisationService::RestoreConfigurationsL(int, int)
 	?GetODTL@CHspsConfigurationService@@QAEXH@Z @ 2 NONAME ; void CHspsConfigurationService::GetODTL(int)
 	?GetAppConfListL@CHspsPersonalisationService@@QAEXHKAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 3 NONAME ; void CHspsPersonalisationService::GetAppConfListL(int, unsigned long, class CArrayPtrFlat<class ChspsODT> &)
 	?SetConfStateL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@00@Z @ 4 NONAME ; void CHspsPersonalisationService::SetConfStateL(int, class TDesC8 &, class TDesC8 &, class TDesC8 &)
 	?InvalidateODT@CHspsConfigurationService@@QAEXXZ @ 5 NONAME ; void CHspsConfigurationService::InvalidateODT(void)
 	?RemovePluginL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 6 NONAME ; void CHspsPersonalisationService::RemovePluginL(int, class TDesC8 &)
 	?SetActiveAppConfL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 7 NONAME ; void CHspsPersonalisationService::SetActiveAppConfL(int, class TDesC8 &)
-	?RestoreActiveAppConfL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 8 NONAME ; void CHspsPersonalisationService::RestoreActiveAppConfL(int, class TDesC8 &)
-	?AddPluginL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@00AAH@Z @ 9 NONAME ; void CHspsPersonalisationService::AddPluginL(int, class TDesC8 &, class TDesC8 &, class TDesC8 &, int &)
-	?SetLogBus@CHspsConfigurationService@@QAEXPAVChspsLogBus@@@Z @ 10 NONAME ; void CHspsConfigurationService::SetLogBus(class ChspsLogBus *)
-	?GetAppUidL@CHspsConfigurationService@@QAEXAAH@Z @ 11 NONAME ; void CHspsConfigurationService::GetAppUidL(int &)
-	?MovePluginsL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@AAV?$CArrayFixFlat@H@@@Z @ 12 NONAME ; void CHspsPersonalisationService::MovePluginsL(int, class TDesC8 &, class CArrayFixFlat<int> &)
-	?RegisterObserverL@CHspsConfigurationService@@QAEHPAVCHspsReqNotifCallback@@@Z @ 13 NONAME ; int CHspsConfigurationService::RegisterObserverL(class CHspsReqNotifCallback *)
-	?GetDOML@CHspsConfigurationService@@QAEAAVChspsDomDocument@@XZ @ 14 NONAME ; class ChspsDomDocument & CHspsConfigurationService::GetDOML(void)
-	?NewL@CHspsConfigurationService@@SAPAV1@XZ @ 15 NONAME ; class CHspsConfigurationService * CHspsConfigurationService::NewL(void)
-	?NewL@CHspsPersonalisationService@@SAPAV1@XZ @ 16 NONAME ; class CHspsPersonalisationService * CHspsPersonalisationService::NewL(void)
-	?SetPluginSettingsL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@AAVChspsDomDocument@@H@Z @ 17 NONAME ; void CHspsPersonalisationService::SetPluginSettingsL(int, class TDesC8 &, class ChspsDomDocument &, int)
-	?GetFamilyL@CHspsConfigurationService@@QAEXAAK@Z @ 18 NONAME ; void CHspsConfigurationService::GetFamilyL(unsigned long &)
-	?ReplacePluginL@CHspsPersonalisationService@@QAEXHABVTDesC8@@0@Z @ 19 NONAME ; void CHspsPersonalisationService::ReplacePluginL(int, class TDesC8 const &, class TDesC8 const &)
-	?GetPluginOdtL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@PAVChspsODT@@@Z @ 20 NONAME ; void CHspsPersonalisationService::GetPluginOdtL(int, class TDesC8 &, class ChspsODT *)
-	?SetActivePluginL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 21 NONAME ; void CHspsPersonalisationService::SetActivePluginL(int, class TDesC8 &)
-	?UnRegisterObserverL@CHspsConfigurationService@@QAEXXZ @ 22 NONAME ; void CHspsConfigurationService::UnRegisterObserverL(void)
-	?RestoreConfigurationsL@CHspsPersonalisationService@@QAEXHH@Z @ 23 NONAME ; void CHspsPersonalisationService::RestoreConfigurationsL(int, int)
+	?GetPluginListL@CHspsPersonalisationService@@QAEXAAVTDesC8@@0KHAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 8 NONAME ; void CHspsPersonalisationService::GetPluginListL(class TDesC8 &, class TDesC8 &, unsigned long, int, class CArrayPtrFlat<class ChspsODT> &)
+	?RestoreActiveAppConfL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 9 NONAME ; void CHspsPersonalisationService::RestoreActiveAppConfL(int, class TDesC8 &)
+	?AddPluginL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@00AAH@Z @ 10 NONAME ; void CHspsPersonalisationService::AddPluginL(int, class TDesC8 &, class TDesC8 &, class TDesC8 &, int &)
+	?SetLogBus@CHspsConfigurationService@@QAEXPAVChspsLogBus@@@Z @ 11 NONAME ; void CHspsConfigurationService::SetLogBus(class ChspsLogBus *)
+	?GetAppUidL@CHspsConfigurationService@@QAEXAAH@Z @ 12 NONAME ; void CHspsConfigurationService::GetAppUidL(int &)
+	?MovePluginsL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@AAV?$CArrayFixFlat@H@@@Z @ 13 NONAME ; void CHspsPersonalisationService::MovePluginsL(int, class TDesC8 &, class CArrayFixFlat<int> &)
+	?RegisterObserverL@CHspsConfigurationService@@QAEHPAVCHspsReqNotifCallback@@@Z @ 14 NONAME ; int CHspsConfigurationService::RegisterObserverL(class CHspsReqNotifCallback *)
+	?GetDOML@CHspsConfigurationService@@QAEAAVChspsDomDocument@@XZ @ 15 NONAME ; class ChspsDomDocument & CHspsConfigurationService::GetDOML(void)
+	?NewL@CHspsConfigurationService@@SAPAV1@XZ @ 16 NONAME ; class CHspsConfigurationService * CHspsConfigurationService::NewL(void)
+	?NewL@CHspsPersonalisationService@@SAPAV1@XZ @ 17 NONAME ; class CHspsPersonalisationService * CHspsPersonalisationService::NewL(void)
+	?SetPluginSettingsL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@AAVChspsDomDocument@@H@Z @ 18 NONAME ; void CHspsPersonalisationService::SetPluginSettingsL(int, class TDesC8 &, class ChspsDomDocument &, int)
+	?GetFamilyL@CHspsConfigurationService@@QAEXAAK@Z @ 19 NONAME ; void CHspsConfigurationService::GetFamilyL(unsigned long &)
+	?ReplacePluginL@CHspsPersonalisationService@@QAEXHABVTDesC8@@0@Z @ 20 NONAME ; void CHspsPersonalisationService::ReplacePluginL(int, class TDesC8 const &, class TDesC8 const &)
+	?GetPluginOdtL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@PAVChspsODT@@@Z @ 21 NONAME ; void CHspsPersonalisationService::GetPluginOdtL(int, class TDesC8 &, class ChspsODT *)
+	?SetActivePluginL@CHspsPersonalisationService@@QAEXHAAVTDesC8@@@Z @ 22 NONAME ; void CHspsPersonalisationService::SetActivePluginL(int, class TDesC8 &)
+	?UnRegisterObserverL@CHspsConfigurationService@@QAEXXZ @ 23 NONAME ; void CHspsConfigurationService::UnRegisterObserverL(void)
 
--- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/eabi/hspsserviceu.def	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/eabi/hspsserviceu.def	Wed May 12 13:35:37 2010 +0300
@@ -13,17 +13,17 @@
 	_ZN27CHspsPersonalisationService13GetPluginOdtLEiR6TDesC8P8ChspsODT @ 12 NONAME
 	_ZN27CHspsPersonalisationService13RemovePluginLEiR6TDesC8 @ 13 NONAME
 	_ZN27CHspsPersonalisationService13SetConfStateLEiR6TDesC8S1_S1_ @ 14 NONAME
-	_ZN27CHspsPersonalisationService14GetPluginListLER6TDesC8S1_mR13CArrayPtrFlatI8ChspsODTE @ 15 NONAME
+	_ZN27CHspsPersonalisationService14GetPluginListLER6TDesC8S1_miR13CArrayPtrFlatI8ChspsODTE @ 15 NONAME
 	_ZN27CHspsPersonalisationService14ReplacePluginLEiRK6TDesC8S2_ @ 16 NONAME
 	_ZN27CHspsPersonalisationService15GetAppConfListLEimR13CArrayPtrFlatI8ChspsODTE @ 17 NONAME
 	_ZN27CHspsPersonalisationService16SetActivePluginLEiR6TDesC8 @ 18 NONAME
 	_ZN27CHspsPersonalisationService17SetActiveAppConfLEiR6TDesC8 @ 19 NONAME
 	_ZN27CHspsPersonalisationService18SetPluginSettingsLEiR6TDesC8R16ChspsDomDocumenti @ 20 NONAME
 	_ZN27CHspsPersonalisationService21RestoreActiveAppConfLEiR6TDesC8 @ 21 NONAME
-	_ZN27CHspsPersonalisationService4NewLEv @ 22 NONAME
-	_ZTI25CHspsConfigurationService @ 23 NONAME
-	_ZTI27CHspsPersonalisationService @ 24 NONAME
-	_ZTV25CHspsConfigurationService @ 25 NONAME
-	_ZTV27CHspsPersonalisationService @ 26 NONAME
-	_ZN27CHspsPersonalisationService22RestoreConfigurationsLEii @ 27 NONAME
+	_ZN27CHspsPersonalisationService22RestoreConfigurationsLEii @ 22 NONAME
+	_ZN27CHspsPersonalisationService4NewLEv @ 23 NONAME
+	_ZTI25CHspsConfigurationService @ 24 NONAME
+	_ZTI27CHspsPersonalisationService @ 25 NONAME
+	_ZTV25CHspsConfigurationService @ 26 NONAME
+	_ZTV27CHspsPersonalisationService @ 27 NONAME
 
--- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/inc/hspspersonalisationservice.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/inc/hspspersonalisationservice.h	Wed May 12 13:35:37 2010 +0300
@@ -87,12 +87,14 @@
          * @param aInterface Interface of the requested plugins.
          * @param aType Type of the requested plugins.
          * @param aFamily Requested plugin configuration family
+         * @param aCopyLogos Controls whether to copy logos to client's private folder
          * @param aList List of plugins ODT headers.
          */
         IMPORT_C void GetPluginListL( 
             TDesC8& aInterface,
             TDesC8& aType,
             TUint32 aFamily,
+            const TBool aCopyLogos,
             CArrayPtrFlat<ChspsODT>& aList
             );
 
--- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/src/hspspersonalisationservice.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/src/hspspersonalisationservice.cpp	Wed May 12 13:35:37 2010 +0300
@@ -76,6 +76,7 @@
     TDesC8& aInterface,
     TDesC8& aType,
     TUint32 aFamily,
+    const TBool aCopyLogos,
     CArrayPtrFlat<ChspsODT>& aList )
     {
     // Setup a mask for finding plugins with defined interface 
@@ -96,6 +97,7 @@
     
     TInt err = iHspsClient->hspsGetHeaders( 
         *searchMask, 
+        aCopyLogos,
         aList );
     
     CleanupStack::PopAndDestroy( searchMask );
@@ -270,6 +272,7 @@
     // Get application configurations
     User::LeaveIfError( iHspsClient->hspsGetHeaders( 
         *searchMask, 
+        EFalse,
         aList ) );
 
     CleanupStack::PopAndDestroy( searchMask );
--- a/homescreensrv_plat/sapi_homescreenplugin/inc/hspsliwvocabulary.hrh	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/inc/hspsliwvocabulary.hrh	Wed May 12 13:35:37 2010 +0300
@@ -87,6 +87,7 @@
 _LIT8( KHspsLiwNotification, "notification" );
 _LIT8( KHspsLiwId, "id" );
 _LIT8( KHspsLiwType, "type" );
+_LIT8( KHspsLiwCopyLogos, "copylogos" );
 _LIT8( KHspsLiwInterface, "interface" );
 _LIT8( KHspsLiwUid, "uid" );
 _LIT8( KHspsLiwName, "name" );
--- a/homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp	Wed May 12 13:35:37 2010 +0300
@@ -424,8 +424,9 @@
     TInt pos;
     TPtrC8 interface;
     TPtrC8 type;
+    TBool copyLogos = EFalse;
     const TLiwGenericParam* inParam;
-    TLiwVariant inParamVariant;
+    TLiwVariant inParamVariant;    
     
     // Get interface parameter (mandatory)
     pos = 0;
@@ -433,43 +434,58 @@
         pos, 
         KHspsLiwInterface );
     
-    if( inParam )
-        {
-        inParamVariant = inParam->Value();
-        interface.Set( inParamVariant.AsData() );    
-
-        // Get type parameter (optional)
-        pos = 0;
-        inParam = aInParamList.FindFirst( 
-            pos, 
-            KHspsLiwType );
-        if ( inParam )
-            {
-            inParamVariant = inParam->Value();
-            type.Set( inParamVariant.AsData() );
-            }
-        
-        // Get headers list of defined interface
-        TUint32 family;
-        iHspsConfigurationService->GetFamilyL( family );
-        CArrayPtrFlat<ChspsODT>* list = 
-            new ( ELeave )CArrayPtrFlat<ChspsODT>( KHeaderListGranularity );
-        CleanupStack::PushL( TCleanupItem( DeleteArrayItems, list ) );
-        iHspsPersonalisationService->GetPluginListL( 
-            interface, 
-            type,
-            family,
-            *list );
-        
-        // Create GetPlugins output parameters
-        CHspsLiwUtilities::GetPluginsOutputL( *list, aOutParamList );
-        CleanupStack::PopAndDestroy( list );
-        }
-    else
+    if( !inParam )        
         {
         // Invalid method call
         User::Leave( KErrArgument );
         }
+            
+    inParamVariant = inParam->Value();
+    interface.Set( inParamVariant.AsData() );    
+
+    // Get type parameter (optional)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwType );
+    if ( inParam )
+        {
+        inParamVariant = inParam->Value();
+        type.Set( inParamVariant.AsData() );
+        }        
+    
+    // Get copylogos parameter (optional)
+    pos = 0;
+    inParam = aInParamList.FindFirst( 
+        pos, 
+        KHspsLiwCopyLogos );
+    if ( inParam )
+        {
+        inParamVariant = inParam->Value();
+        copyLogos = inParamVariant.AsTBool();            
+        }        
+        
+    // Get headers list of defined interface
+    TUint32 family;
+    iHspsConfigurationService->GetFamilyL( family );
+    
+    CArrayPtrFlat<ChspsODT>* list = 
+        new ( ELeave )CArrayPtrFlat<ChspsODT>( KHeaderListGranularity );
+    CleanupStack::PushL( TCleanupItem( DeleteArrayItems, list ) );
+    
+    // Get headers list of defined interface
+    iHspsPersonalisationService->GetPluginListL( 
+        interface, 
+        type,
+        family,
+        copyLogos,
+        *list );
+    
+    // Create GetPlugins output parameters
+    CHspsLiwUtilities::GetPluginsOutputL( *list, aOutParamList );
+    
+    CleanupStack::PopAndDestroy( list );
+            
     }
 
 // -----------------------------------------------------------------------------
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp	Wed May 12 13:35:37 2010 +0300
@@ -555,9 +555,9 @@
     TInt err = testThread.Create( 
         _L( "TestStep" ),
         HSPSTestStepThread,
-        0x5000, // 20kB
-        KDefaultHeapSize,
-        KDefaultHeapSize,
+        0xA000, // 40kB
+        KDefaultHeapSize * 2, // 2 times of base size
+        KDefaultHeapSize * 8, // 8 times of base size - needed by Eunit
         ( TAny* )&data,
         EOwnerProcess );
         
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_armv5.pkg	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_armv5.pkg	Wed May 12 13:35:37 2010 +0300
@@ -108,6 +108,7 @@
 "../testthemes/finnish_widget/manifest.dat"-"c:/data/mt_hsps/finnish_widget/manifest.dat"
 "../testthemes/finnish_widget/widgetconfiguration.xml"-"c:/data/mt_hsps/finnish_widget/widgetconfiguration.xml"
 "../testthemes/finnish_widget/common.jpg"-"c:/data/mt_hsps/finnish_widget/common.jpg"
+"../testthemes/finnish_widget/dummy.mif"-"c:/data/mt_hsps/finnish_widget/dummy.mif"
 "../testthemes/finnish_widget/0/locale.dtd"-"c:/data/mt_hsps/finnish_widget/0/locale.dtd"
 "../testthemes/finnish_widget/9/locale.dtd"-"c:/data/mt_hsps/finnish_widget/9/locale.dtd"
 "../testthemes/finnish_widget/0/localizedbg.jpg"-"c:/data/mt_hsps/finnish_widget/0/localizedbg.jpg"
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_winscw.pkg	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_winscw.pkg	Wed May 12 13:35:37 2010 +0300
@@ -108,6 +108,7 @@
 "../testthemes/finnish_widget/manifest.dat"-"c:/data/mt_hsps/finnish_widget/manifest.dat"
 "../testthemes/finnish_widget/widgetconfiguration.xml"-"c:/data/mt_hsps/finnish_widget/widgetconfiguration.xml"
 "../testthemes/finnish_widget/common.jpg"-"c:/data/mt_hsps/finnish_widget/common.jpg"
+"../testthemes/finnish_widget/dummy.mif"-"c:/data/mt_hsps/finnish_widget/dummy.mif"
 "../testthemes/finnish_widget/0/locale.dtd"-"c:/data/mt_hsps/finnish_widget/0/locale.dtd"
 "../testthemes/finnish_widget/9/locale.dtd"-"c:/data/mt_hsps/finnish_widget/9/locale.dtd"
 "../testthemes/finnish_widget/0/localizedbg.jpg"-"c:/data/mt_hsps/finnish_widget/0/localizedbg.jpg"
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_addplugin_9.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_addplugin_9.h	Wed May 12 13:35:37 2010 +0300
@@ -510,7 +510,117 @@
 //   - Version 1.0
 //   - Item count (LE)
 10,
-2,0,0,0,
+3,0,0,0,
+// - pluginConf::resources
+//   - Version 1.0
+//   - List item starts
+10,
+0,0,0,0,
+// - object[0]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - object[0] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+4,0,0,0,
+// - object[0]::name
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'n','a','m','e',
+// - object[0]::name
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+9,0,0,0,
+38,
+'d','u','m','m','y','.','m','i','f',
+// - object[0]::path
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'p','a','t','h',
+// - object[0]::path
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+37,0,0,0,
+150,
+'2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','4','\\','1','.','0','\\','s','o','u','r','c','e','s','\\',
+// - object[0]::mediatype
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'m','e','d','i','a','t','y','p','e',
+// - object[0]::mediatype
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+0,0,0,0,
+2,
+// - Object[0]::tag
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'t','a','g',
+// - Object[0]::tag
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+4,0,0,0,
+18,
+'l','o','g','o',
 // - pluginConf::resources
 //   - Version 1.0
 //   - List item starts
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_1.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_1.h	Wed May 12 13:35:37 2010 +0300
@@ -128,7 +128,7 @@
 //   - Version 1.0
 //   - Item count (LE)
 10,
-6,0,0,0,
+7,0,0,0,
 // - plugins[0]::uid
 //   - Variant name
 //     - Version 1.0
@@ -272,6 +272,30 @@
 5,
 0,0,0,0,
 2,
+// - plugins[0]::logo
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'l','o','g','o',
+// - plugins[0]::logo
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+55,0,0,0,
+222,
+'m','i','f','(','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','4','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
 // GetPlugins(Output)::plugins
 // - Version 1.0
 // - List item starts
@@ -452,10 +476,9 @@
 //     - Variant value
 10,
 5,
-75,0,0,0,
-93,
-2,
-'m','i','f','(','c',':','\\','p','r','i','v','a','t','e','\\','2','0','0','0','0','F','B','1','\\','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','3','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
+55,0,0,0,
+222,
+'m','i','f','(','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','3','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
 // GetPlugins(Output)::plugins
 // - Version 1.0
 // - List item starts
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_3.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_3.h	Wed May 12 13:35:37 2010 +0300
@@ -321,10 +321,9 @@
 //     - Variant value
 10,
 5,
-75,0,0,0,
-93,
-2,
-'m','i','f','(','c',':','\\','p','r','i','v','a','t','e','\\','2','0','0','0','0','F','B','1','\\','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','3','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
+55,0,0,0,
+222,
+'m','i','f','(','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','3','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
 // GetPlugins(Output)::plugins
 // - Version 1.0
 // - List item starts
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_4.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_4.h	Wed May 12 13:35:37 2010 +0300
@@ -150,7 +150,7 @@
 //   - Version 1.0
 //   - Item count (LE)
 10,
-6,0,0,0,
+7,0,0,0,
 // - plugins[0]::uid
 //   - Variant name
 //     - Version 1.0
@@ -294,6 +294,30 @@
 5,
 0,0,0,0,
 2,
+// - object[0]::path
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'l','o','g','o',
+// - object[0]::path
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+55,0,0,0,
+222,
+'m','i','f','(','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','4','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
 // GetPlugins(Output)::plugins
 // - Version 1.0
 // - List item starts
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_8.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,658 @@
+/*
+* Copyright (c) 2008 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:  Test case GetPlugins(8) test data
+*
+*/
+
+
+#ifndef C_MT_HSPS_GETPLUGINS_8_H
+#define C_MT_HSPS_GETPLUGINS_8_H
+
+/* 
+GetPlugins(8)
+----------------
+ 
+Test purpose
+Verify that logo files are copied to client’s private folder.
+
+Pre-conditions
+There must be installed test themes for Active Idle application and Operator configuration must be set as active 
+
+Test steps
+Test step 1:
+•   Input:
+    GetPlugins(“0x0998”, “widget”,“True” )
+•   Expected output
+    Plugin list holding the widget configurations, logo files should exist in the target directory
+*/
+
+// Test step 1 method:
+
+const TUint8 getplugins_8_ts_1_method[] = "GetPlugins";
+
+// Test step 1 input:
+
+const TUint8 getplugins_8_ts_1_input[] = {
+// GetPlugins(Input)
+// - Version 1.0
+// - Item count (LE)
+10,
+3,0,0,0,
+// - GetPlugins(Input)::interface
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'i','n','t','e','r','f','a','c','e',
+// - GetPlugins(Input)::interface
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+5,0,0,0,
+22,
+'0','x','9','9','8',
+// - GetPlugins(Input)::type
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'t','y','p','e',
+// - GetPlugins(Input)::type
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+6,0,0,0,
+26,
+'w','i','d','g','e','t',
+// - GetPlugins(Input)::copylogos
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'c','o','p','y','l','o','g','o','s',
+// - GetPlugins(Input)::copylogos
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeTBool
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+11,
+1,0,0,0,
+6,
+'1'
+};
+
+// Test step 1 output:
+
+const TUint8 getplugins_8_ts_1_output[] = {
+// GetPluginConf(Output)
+// - Version 1.0
+// - Item count (LE)
+10,
+1,0,0,0,
+// GetPlugins(Output)::plugins
+// - Variant name
+//   - Version 1.0
+//   - Semantic ID (LE)    
+//   - Variant name length (LE)
+//   - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//   - Variant name
+10,
+12,0,0,0,
+7,0,0,0,
+30,
+'p','l','u','g','i','n','s',
+// GetPlugins(Output)::plugins
+// - Variant value
+//   - Version 1.0
+//   - Variant value type, EVariantTypeList
+10,
+7,
+// GetPlugins(Output)::plugins
+// - Version 1.0
+// - Item count (LE)
+10,
+3,0,0,0,
+// GetPlugins(Output)::plugins
+// - Version 1.0
+// - List item starts
+10,
+0,0,0,0,
+// - plugins[0]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[0] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+7,0,0,0,
+// - plugins[0]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[0]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','b','1','3','2',
+// - plugins[0]::interface
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'i','n','t','e','r','f','a','c','e',
+// - plugins[0]::interface
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+5,0,0,0,
+22,
+'0','x','9','9','8',
+// - plugins[0]::type
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'t','y','p','e',
+// - plugins[0]::type
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+6,0,0,0,
+26,
+'w','i','d','g','e','t',
+// - plugins[0]::name
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'n','a','m','e',
+// - plugins[0]::name
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+16,0,0,0,
+66,
+'F','i','n','n','i','s','h',' ','-',' ','W','i','d','g','e','t',
+// - plugins[0]::multiinstance
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+13,0,0,0,
+54,
+'m','u','l','t','i','i','n','s','t','a','n','c','e',
+// - plugins[0]::multiinstance
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'1',
+// - plugins[0]::description
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'d','e','s','c',
+// - plugins[0]::description
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+0,0,0,0,
+2,
+// - plugins[0]::logo
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'l','o','g','o',
+// - plugins[0]::logo
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+75,0,0,0,
+93,
+2,
+'m','i','f','(','c',':','\\','p','r','i','v','a','t','e','\\','2','0','0','0','0','F','B','1','\\','2','4','5','6','\\','2','7','0','5','1','3','7','5','1','\\','5','3','6','9','1','6','2','7','4','\\','1','.','0','\\','s','o','u','r','c','e','s','\\','d','u','m','m','y','.','m','i','f',' ','1',' ','2',')',
+// GetPlugins(Output)::plugins
+// - Version 1.0
+// - List item starts
+10,
+0,0,0,0,
+// - plugins[1]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[1] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+6,0,0,0,
+// - plugins[1]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[1]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','b','1','2','0',
+// - plugins[1]::interface
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'i','n','t','e','r','f','a','c','e',
+// - plugins[1]::interface
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+5,0,0,0,
+22,
+'0','x','9','9','8',
+// - plugins[1]::type
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'t','y','p','e',
+// - plugins[1]::type
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+6,0,0,0,
+26,
+'w','i','d','g','e','t',
+// - plugins[1]::name
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'n','a','m','e',
+// - plugins[1]::name
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+16,0,0,0,
+66,
+'T','y','p','i','c','a','l',' ','-',' ','W','i','d','g','e','t',
+// - plugins[1]::multiinstance
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+13,0,0,0,
+54,
+'m','u','l','t','i','i','n','s','t','a','n','c','e',
+// - plugins[1]::multiinstance
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'1',
+// - plugins[1]::description
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'d','e','s','c',
+// - plugins[1]::description
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+0,0,0,0,
+2,
+// GetPlugins(Output)::plugins
+// - Version 1.0
+// - List item starts
+10,
+0,0,0,0,
+// - plugins[2]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[2] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+6,0,0,0,
+// - plugins[2]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[2]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','b','1','0','2',
+// - plugins[2]::interface
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+9,0,0,0,
+38,
+'i','n','t','e','r','f','a','c','e',
+// - plugins[2]::interface
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+5,0,0,0,
+22,
+'0','x','9','9','8',
+// - plugins[2]::type
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'t','y','p','e',
+// - plugins[2]::type
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+6,0,0,0,
+26,
+'w','i','d','g','e','t',
+// - plugins[2]::name
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'n','a','m','e',
+// - plugins[2]::name
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+14,0,0,0,
+58,
+'W','i','d','g','e','t',' ','C','o','n','f',' ','#','1',
+// - plugins[2]::multiinstance
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+13,0,0,0,
+54,
+'m','u','l','t','i','i','n','s','t','a','n','c','e',
+// - plugins[2]::multiinstance
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'1',
+// - plugins[2]::description
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+4,0,0,0,
+18,
+'d','e','s','c',
+// - plugins[2]::description
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+0,0,0,0,
+2
+};
+
+#endif // C_MT_HSPS_GETPLUGINS_8_H
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_restoreconfigurations_1.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_restoreconfigurations_1.h	Wed May 12 13:35:37 2010 +0300
@@ -25,10 +25,7 @@
  
 Test purpose
 
-Verify that HSPS removes all plugin configurations from the active view
-or that all but one view are removed from the application configuration.
-Activity should be maintained. First locked view should remain or if not found,
-first unlocked view. 
+Verify that "restore active" and "restore all" functionality works as specified. 
 
 Pre-conditions
 •   There must be installed test themes for Active Idle application and Typical 
@@ -46,14 +43,13 @@
 •   Input:
     GetActiveAppConf    
 •   Expected output:
-    There are still two views of which the first view remains active     
+    ROM configuration is restored and returned.
 
 Test step 3:
 •   Input:
     GetPluginConf(“Typical - View1”)    
 •   Expected output:
-    There are no plugins (widgets) in the first view     
-
+    ROM view configuration is returned.     
  
 Test step 4:
 •   Input:
@@ -71,8 +67,7 @@
 •   Input:
     GetPluginConf(“Typical - View1”)    
 •   Expected output:
-    There are no plugins (widgets) in the remaining view
-    
+    There are no plugins (widgets) in the remaining view    
 */
 
 // Test step 1 method:
@@ -1104,7 +1099,340 @@
 //   - Version 1.0
 //   - Item count (LE)
 10,
+3,0,0,0,
+// - appConf::plugins
+//   - Version 1.0
+//   - List item starts
+10,
 0,0,0,0,
+// - appConf::plugins[0]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[0] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+4,0,0,0,
+// - plugins[0]::id
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+2,0,0,0,
+10,
+'i','d',
+// - plugins[0]::id
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'2',
+// - plugins[0]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[0]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','B','1','2','0',
+// - plugins[0]::activationstate
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+15,0,0,0,
+62,
+'a','c','t','i','v','a','t','i','o','n','s','t','a','t','e',
+// - plugins[0]::activationstate
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'1',
+// - plugins[0]::locking_status
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+14,0,0,0,
+58,
+'l','o','c','k','i','n','g','_','s','t','a','t','u','s',
+// - plugins[0]::locking_status
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+4,0,0,0,
+18,
+'n','o','n','e',
+// - appConf::plugins
+//   - Version 1.0
+//   - List item starts
+10,
+0,0,0,0,
+// - appConf::plugins[1]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[1] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+4,0,0,0,
+// - plugins[1]::id
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+2,0,0,0,
+10,
+'i','d',
+// - plugins[1]::id
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'3',
+// - plugins[1]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[1]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','B','1','2','0',
+// - plugins[1]::activationstate
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+15,0,0,0,
+62,
+'a','c','t','i','v','a','t','i','o','n','s','t','a','t','e',
+// - plugins[1]::activationstate
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'0',
+// - plugins[1]::locking_status
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+14,0,0,0,
+58,
+'l','o','c','k','i','n','g','_','s','t','a','t','u','s',
+// - plugins[1]::locking_status
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+4,0,0,0,
+18,
+'n','o','n','e',
+// - appConf::plugins
+//   - Version 1.0
+//   - List item starts
+10,
+0,0,0,0,
+// - appConf::plugins[2]
+//   - Version 1.0
+//   - Variant value type, EVariantTypeMap
+10,
+8,
+// - plugins[2] map
+//   - Version 1.0
+//   - Item count (LE)
+10,
+4,0,0,0,
+// - plugins[2]::id
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+2,0,0,0,
+10,
+'i','d',
+// - plugins[2]::id
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'4',
+// - plugins[2]::uid
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+3,0,0,0,
+14,
+'u','i','d',
+// - plugins[2]::uid
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+10,0,0,0,
+42,
+'0','x','2','0','0','0','B','1','2','0',
+// - plugins[2]::activationstate
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+15,0,0,0,
+62,
+'a','c','t','i','v','a','t','i','o','n','s','t','a','t','e',
+// - plugins[2]::activationstate
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+1,0,0,0,
+6,
+'0',
+// - plugins[2]::locking_status
+//   - Variant name
+//     - Version 1.0
+//     - Semantic ID (LE)    
+//     - Variant name length (LE)
+//     - Variant name descriptor maximum length ( ( variant name length * 4 ) + 2 )
+//     - Variant name
+10,
+12,0,0,0,
+14,0,0,0,
+58,
+'l','o','c','k','i','n','g','_','s','t','a','t','u','s',
+// - plugins[2]::locking_status
+//   - Variant value
+//     - Version 1.0
+//     - Variant value type, EVariantTypeDesC
+//     - Variant value length (LE)
+//     - Variant value descriptor maximum length ( ( variant value length * 4 ) + 2 )
+//     - Variant value
+10,
+5,
+4,0,0,0,
+18,
+'n','o','n','e',
 // - pluginConf::settings
 //   - Variant name
 //     - Version 1.0
@@ -1133,7 +1461,6 @@
 //   - List item starts
 10,
 0,0,0,0,
-
 // - items[0]
 //   - Version 1.0
 //   - Variant value type, EVariantTypeMap
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hspsconfigurationif.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hspsconfigurationif.h	Wed May 12 13:35:37 2010 +0300
@@ -154,6 +154,11 @@
          */
         void GetPlugins_7_L();
         /**
+         * Test case function for test case GetPlugins(8)
+         * See HSPS module test specification
+         */
+        void GetPlugins_8_L();        
+        /**
          * Test case function for test case GetPluginList(1)
          * See HSPS module test specification
          */
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsconfigurationif.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsconfigurationif.cpp	Wed May 12 13:35:37 2010 +0300
@@ -47,6 +47,7 @@
 #include "mt_hsps_getplugins_5.h"
 #include "mt_hsps_getplugins_6.h"
 #include "mt_hsps_getplugins_7.h"
+#include "mt_hsps_getplugins_8.h"
 // get plugin list
 #include "mt_hsps_getpluginlist_1.h"
 #include "mt_hsps_getpluginlist_2.h"
@@ -129,6 +130,7 @@
 _LIT( KMinimalResourceFile2, "c:\\private\\20000fb1\\2456\\270513751\\536916225\\1.0\\sources\\viewnavigationrules.xml"  );
 _LIT( KMinimalResourceFile3, "c:\\private\\20000fb1\\2456\\270513751\\536916225\\1.0\\sources\\resource.file"  );
 _LIT( KMinimalResourceFile4, "c:\\private\\20000fb1\\2456\\270513751\\536916225\\1.0\\sources\\picture.jpeg"  );
+_LIT( KFinnishMifLogo, "c:\\private\\20000fb1\\2456\\270513751\\536916274\\1.0\\sources\\dummy.mif"  );
 
 // ======== LOCAL FUNCTIONS ====================================================
 
@@ -816,8 +818,38 @@
         ( TUint8* )getplugins_7_ts_1_input,
         ( TUint8* )getplugins_7_ts_1_output );
     EUNIT_PRINT( _L8( "Test step passed" ) );    
-    }
-
+    }    
+    
+//------------------------------------------------------------------------------
+// Test case: GetPlugins(8)
+//------------------------------------------------------------------------------
+void MT_CHSPSConfigurationIf::GetPlugins_8_L()
+    {
+    // Pre conditions
+    // Set active configuration to Minimal configuration
+    EUNIT_PRINT( _L8( "Pre conditions: Set Active configuration Operator" ) );
+    SetActiveConfigurationL( KHSPSTestAppUid, KHSPSActiveConfOperator );
+    // Attach to HSPS 
+    EUNIT_PRINT( _L8( "Pre conditions: Attach to HSPS service IConfiguration interface" ) );
+    AttachServiceL( KHSPS, KHSPSConfigurationIf, KHSPSTestAppUid );
+    
+    // Test step 1: fetch widget plugins and copy logos files 
+    EUNIT_PRINT( _L8( "Test step 1" ) );
+    RunTestStepSyncL(
+        ( TUint8* )getplugins_8_ts_1_method,
+        ( TUint8* )getplugins_8_ts_1_input,
+        ( TUint8* )getplugins_8_ts_1_output );
+            
+    EUNIT_PRINT( _L8( "post condition check for resource file copy" ) );
+    ResetResources();
+    // Check that the logo file was copied
+    AddResourceL( KFinnishMifLogo, 4608 );
+    CheckResourcesL();             
+    EUNIT_PRINT( _L8( "post condition check for resource copy passed" ) );        
+    
+    EUNIT_PRINT( _L8( "Test step passed" ) );    
+    }        
+    
 //------------------------------------------------------------------------------
 // Test case: GetPluginList(1)
 //------------------------------------------------------------------------------
@@ -2651,11 +2683,20 @@
         CFileMan::EOverWrite ) );
             
     // Wait until configuration is installed
-    User::After( 5000000 );
+    User::After( 8000000 );
     
     // Make sure "InstalledWidget" is installed
     if ( !BaflUtils::FileExists( iFileserver, _L( "c:\\private\\200159c0\\themes\\2456\\270513751\\536916275\\1.0\\InstallWidgetConf.o0000" ) ) )
         {
+        // Installation failed - remove imports to be able to re-run the test again
+        // The ChspsThemeServer::HandleConfigurationImportsL does handle newly
+        // added files only
+        User::LeaveIfError( fileManager->RmDir( _L( "c:\\private\\200159c0\\import\\0998\\" ) ) );
+        fileManager->Attribs( _L( "c:\\private\\200159c0\\import\\plugin_0998_101FB657_2000B133.dat" ),
+            0, KEntryAttReadOnly, TTime( 0 ) ); // TTime(0) = preserve original time stamp.
+        User::LeaveIfError( fileManager->Delete( _L( "c:\\private\\200159c0\\import\\plugin_0998_101FB657_2000B133_1.0.dat" ) ) );     
+        
+        // Leave - the test was not successfull
         User::Leave( KErrGeneral );
         }
     
@@ -2673,7 +2714,7 @@
     User::LeaveIfError( fileManager->Delete( _L( "c:\\private\\200159c0\\import\\plugin_0998_101FB657_2000B133_1.0.dat" ) ) );     
     // Removing of *.dat file causes configuration uninstallation
     // Wait until configuration is uninstalled
-    User::After( 5000000 );
+    User::After( 8000000 );
 
     // Make sure "InstalledWidget" is uninstalled
     if ( BaflUtils::FileExists( iFileserver, _L( "c:\\private\\200159c0\\themes\\2456\\270513751\\536916275\\1.0\\InstallWidgetConf.o0000" ) ) )
@@ -3172,6 +3213,13 @@
         SetupL, GetPlugins_7_L, Teardown )
 
     EUNIT_TEST(
+        "GetPlugins(8)",
+        "IConfiguration",
+        "GetPlugins",
+        "FUNCTIONALITY",
+        SetupL, GetPlugins_8_L, Teardown )
+        
+    EUNIT_TEST(
         "GetPluginList(1)",
         "IConfiguration",
         "GetPluginList",
Binary file homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/dummy.mif has changed
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+  
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <!-- application|view|widget|template -->
   <type>widget</type>
@@ -20,6 +24,8 @@
 	<shortname>FinnishWidget</shortname>
 	<version>1.0</version>
 	
+	<filelogo>mif(dummy.mif 1 2)</filelogo>
+	
 	<!-- Configuration -->
 	<filexml>widgetconfiguration.xml</filexml>	
 	
@@ -34,4 +40,4 @@
 	  <fileresource>localizedbg.jpg</fileresource>
 	</localization>
   
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,6 +1,10 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
   
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
+
   <!-- application|view|widget|template -->
   <type>widget</type>
   
@@ -32,4 +36,4 @@
 	    <fileresource>widget.bmp</fileresource>
 	</localization>
   
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget_v2/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget_v2/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,6 +1,10 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
   
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
+
   <!-- application|view|widget|template -->
   <type>widget</type>
   
@@ -32,4 +36,4 @@
 	    <fileresource>widget.bmp</fileresource>
 	</localization>
   
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/root/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/root/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <!-- application|view|widget|template -->
   <type>application</type>
@@ -31,4 +35,4 @@
 	
 	<!-- Locale specific resources -->  
 	  
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/view/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/view/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,6 +1,10 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
   
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
+
   <type>view</type>
   
   <!-- Interface UID -->
@@ -31,4 +35,4 @@
 	<fileresource mediatype="mime_type">resource.file</fileresource>
 	<fileresource mediatype="mime_type">picture.jpeg</fileresource>
 	  
-</package>  	
\ No newline at end of file
+</package>  	
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/widget/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/widget/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <type>widget</type>
   
@@ -27,4 +31,4 @@
 	
 	<!-- Locale independent/common resources -->		
 	  
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/root/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/root/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <!-- application|view|widget|template -->
   <type>application</type>
@@ -32,4 +36,4 @@
 	
 	<!-- Locale specific resources -->  
 	  
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/view/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/view/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <type>view</type>
   
@@ -27,4 +31,4 @@
 	<!-- Name of the localization files -->
 	<filedtd>locale.dtd</filedtd>
 	  
-</package>  	
\ No newline at end of file
+</package>  	
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/root/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/root/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
 
   <!-- application|view|widget|template -->
   <type>application</type>
@@ -33,4 +37,4 @@
 	<!-- Locale specific resources -->
 	<localization/>
 	
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view1/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view1/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <!-- application|view|widget|template -->
   <type>view</type>
@@ -34,4 +38,4 @@
 		<fileresource mediatype="mime_type">hs_logoz.jpg</fileresource>
 	</localization> 
   
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view2/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view2/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
     
   <!-- application|view|widget|template -->
   <type>view</type>
@@ -30,4 +34,4 @@
 	<fileresource mediatype="mime_type">view2.bmp</fileresource>
 		
     
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/widget/manifest.dat	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/widget/manifest.dat	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,9 @@
 <?xml version="1.0"?>
-<package version="0.3">
+<package version="2.0">
+
+  <!-- Set both two families for unit tests -->
+  <family>qhd_tch</family>
+  <family>vga_tch</family>
   
   <!-- application|view|widget|template -->
   <type>widget</type>
@@ -32,4 +36,4 @@
 	
 	<!-- Locale specific resources -->
   
-</package>
\ No newline at end of file
+</package>
--- a/homescreensrv_plat/sapi_menucontent/mcsservice/src/mcsiconutility.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/homescreensrv_plat/sapi_menucontent/mcsservice/src/mcsiconutility.cpp	Wed May 12 13:35:37 2010 +0300
@@ -22,7 +22,7 @@
 #include <mcsmenu.h>
 #include <mcsmenuitem.h>
 #include <mcsmenuutils.h>
-#include <SATDomainPSKeys.h>
+#include <satdomainpskeys.h>
 #include <e32property.h>
 #include <apgcli.h>
 #include <AknInternalIconUtils.h>
--- a/idlefw/group/aifw.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/group/aifw.mmp	Wed May 12 13:35:37 2010 +0300
@@ -34,6 +34,8 @@
 SOURCE          aistatemanager.cpp
 SOURCE          aistateprovider.cpp
 SOURCE          aiecomobserver.cpp
+SOURCE          aicpscommandbuffer.cpp
+SOURCE          aicpsexecuteparam.cpp
 
 // Active Idle Framework shared sources
 SOURCEPATH      ../src/common
@@ -53,6 +55,8 @@
 LIBRARY         apparc.lib apgrfx.lib
 LIBRARY         ws32.lib cone.lib commonengine.lib
 LIBRARY         cenrepnotifhandler.lib
+LIBRARY      	liwServiceHandler.lib
+LIBRARY         swiutils.lib
 
 // S60 Dependencies
 LIBRARY         avkon.lib
@@ -70,3 +74,4 @@
 LIBRARY         flogger.lib
 
 DEFFILE         aifwu.def
+
--- a/idlefw/group/aiutils.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/group/aiutils.mmp	Wed May 12 13:35:37 2010 +0300
@@ -17,7 +17,6 @@
 
 #include        <platform_paths.hrh>
 #include        <data_caging_paths.hrh>
-//#include        <platform/mw/aisystemuids.hrh>
 
 TARGET          aiutils.dll
 TARGETTYPE      dll
@@ -26,11 +25,11 @@
 CAPABILITY      CAP_GENERAL_DLL
 
 SOURCEPATH      ../src/utility
-SOURCE			aiutility.cpp
-SOURCE			caipspropertyobserver.cpp
-SOURCE			caistrparser.cpp
-SOURCE			caiplugintool.cpp
-SOURCE			caicontentitemarrayiterator.cpp
+SOURCE		aiutility.cpp
+SOURCE		caipspropertyobserver.cpp
+SOURCE		caistrparser.cpp
+SOURCE		caiplugintool.cpp
+SOURCE		caicontentitemarrayiterator.cpp
 SOURCE          contentprioritymap.cpp
 SOURCE          aipluginsettingsimpl.cpp
 
@@ -40,5 +39,5 @@
 MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib
-LIBRARY			charconv.lib
+LIBRARY		charconv.lib
 
--- a/idlefw/hslaunch/src/hslaunch.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/hslaunch/src/hslaunch.cpp	Wed May 12 13:35:37 2010 +0300
@@ -16,6 +16,7 @@
  */
 
 #include <e32property.h>
+#include <e32debug.h>
 #include "hslaunch.h"
 
 // ========================= DECLARATIONS ==================================
@@ -260,36 +261,36 @@
 // -----------------------------------------------------------------------------
 //
 void CHsLaunch::ProcessEnded( const TExitType& aExitType,
-                              const TInt /*aExitReason*/,
+                              const TInt aExitReason,
                               const TExitCategoryName& /*aExitCategory*/ )
     {    
-    // Only respond to panic. EExitTerminate and EExitKill are ignored.
-    if( aExitType != EExitPanic )
-        {
-        return;
-        }
-    
     TInt crashCount = 0;
     TInt error = RProperty::Get( KPSCategoryUid,
                                  KPSCrashCountKey,
                                  crashCount );
     
-    if( error == KErrNone )
+    // increment crash count in cenrep if the process has panic'd or killed with
+    // an error code
+    if( aExitType == EExitPanic ||
+        ( aExitType == EExitKill && aExitReason != KErrNone ) )
         {
-        crashCount++;
-        error = RProperty::Set( KPSCategoryUid,
-                                KPSCrashCountKey,
-                                crashCount );
-        }
-    
-    if( error == KErrNone )
-        {
-        User::After( KSleepOnRetry ); 
-        Activate();
-        }
-    else
-        {    
-        ShutdownApp( error );
+        if( error == KErrNone )
+            {
+            crashCount++;
+            error = RProperty::Set( KPSCategoryUid,
+                                    KPSCrashCountKey,
+                                    crashCount );                          
+            }
+        
+        if( error == KErrNone )
+            {      
+            User::After( KSleepOnRetry ); 
+            Activate();
+            }
+        else
+            {           
+            ShutdownApp( error );
+            }
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/inc/framework/aicpsexecuteparam.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2010 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: CPS Execute parameter 
+ *
+*/
+
+
+#ifndef AICPSEXECUTEPARAM_H
+#define AICPSEXECUTEPARAM_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+
+// Forward declarations
+class CLiwGenericParamList;
+// Constants
+
+/**
+ * CPS Execute Command Parameter 
+ *
+ * @since S60 5.2
+ */
+
+/**
+ * Holds parameters to execute the CPS excute command 
+ * 
+ * @since S60 5.2
+ */
+NONSHARABLE_CLASS( CAiCpsExecuteParam ) : public CBase
+    {
+public:
+    // constructors and destructor
+
+    /**
+    * Two-phased constructors.
+    */
+    static CAiCpsExecuteParam* NewL( );
+    static CAiCpsExecuteParam* NewLC();
+
+    /**
+    * Destructor.
+    */
+    ~CAiCpsExecuteParam();
+
+private:
+    // constructors
+    
+    /**
+     * C++ default constructor
+     */
+    CAiCpsExecuteParam();
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL( );    
+
+public:
+    // new functions
+        
+    /**
+    * Gets plugin id
+    * 
+    * @since S60 5.2
+    * @return plugin id
+    */
+    const TDesC& PluginId() const;
+    
+    /**
+    * Returns the input parameter map for Execute command
+    * it will leave the CLiwDefaultMap object in the stack
+    * 
+    * @since S60 5.2
+    * @return in param map 
+    */    
+    CLiwDefaultMap* InParamMapLC();
+   
+    /**
+    * Adds a actions to the action list  
+    * 
+    * @since S60 5.2
+    * @param aAction actions to add
+    */        
+    void AddActionL(const TDesC8& aAction);   
+    
+    /**
+    * Sets the filter values
+    * This method always over write the previous filters vlaues.  
+    * 
+    * @since S60 5.2
+    * @param aMap filter map
+    */
+    void SetFilterL(CLiwDefaultMap* aMap);
+    
+    /**
+    * Sets Registry type
+    * This method always over write the previous retgistry type.  
+    * 
+    * @since S60 5.2
+    * @param aRegistryType type of cps registry
+    */
+    void SetRegistryTypeL(const TDesC& aRegistryType);
+    
+    /**
+    * Sets the plugin id  
+    * This method always over write the previous plugin id.
+    *  
+    * @since S60 5.2
+    * @param aPluginId actions to add
+    */
+    void SetPluginIdL(const TDesC& aPluginId);
+
+private:
+    // data
+    /** Plugin Id, owned.*/
+    HBufC* iPluginId;
+    /** Registry type, owned. */
+    HBufC* iRegistryType;
+    /** Filters, owned.*/
+    HBufC* iPublisher;
+    HBufC* iContentType;
+    HBufC* iContentId;
+    
+    /** action trigger list, owned.  */
+    RPointerArray<HBufC8> iActions;
+    };
+
+#endif /* AICPSEXECUTEPARAM_H */
--- a/idlefw/inc/framework/aifw.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aifw.h	Wed May 12 13:35:37 2010 +0300
@@ -33,7 +33,6 @@
 class CAiPluginFactory;
 class CAiEventHandler;
 class CAiWsPluginManager;
-class MAiPSPropertyObserver;
 class THsPublisherInfo;
 
 // Class declaration
@@ -174,8 +173,7 @@
     
 private: 
     // new functions        
-                     
-    static TInt HandleRestartEvent( TAny* aSelf );
+
     void SwapUiControllerL( TBool aToExtHS );
 
 private: 
@@ -199,8 +197,6 @@
     CCenRepNotifyHandler* iNotifyHandlerESS;
     /** Idle repository, Owned. */
     CRepository* iRepository;    
-    /** Idle restart PS observer, Owned. */
-    MAiPSPropertyObserver* iIdleRestartObserver;
     
     TBool iLibrariesLoaded;
     
--- a/idlefw/inc/framework/aipluginfactory.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aipluginfactory.h	Wed May 12 13:35:37 2010 +0300
@@ -29,6 +29,7 @@
 // Forward declarations
 class CAiUiControllerManager;
 class CAiStateManager;
+class CAiCpsCommandBuffer;
 class CHsContentPublisher;
 class THsPublisherInfo;
 
@@ -77,7 +78,16 @@
      */
     void DestroyPlugin( 
         const THsPublisherInfo& aPublisherInfo );		    
-                         
+
+    /**
+     * Destroy plugin
+     *
+     * @since S60 5.2
+     * @param aUid Implementation UID of a plugin to destroy.
+     */
+    void DestroyPlugin( 
+        const TUid& aUid );           
+
     /**
      * Finds plugin by publisher info.
      *
@@ -105,7 +115,15 @@
      * @return Pointer to plugin, NULL if not found. Factory keeps plugin's ownership.
      */                
     CHsContentPublisher* PluginByName( const TDesC& aName ) const;
-            
+      
+    /**
+     * Sets cps command buffer
+     * 
+     * @since S60 5.2
+     * @param aCommanddBuffer Command buffer
+     */
+    void SetCommandBuffer( CAiCpsCommandBuffer* aCommanddBuffer );
+    
 private:	
     // private constructors
 
@@ -134,15 +152,14 @@
         const THsPublisherInfo& aPublisherInfo );		                           
     
     RPointerArray< CHsContentPublisher >& Publishers() const;
-    
-    void ResolvePluginsToUpgradeL( 
-        RArray< THsPublisherInfo >& aArray );
-    
+        
 private:     
     // data	
 
     /** UI Controller Manager, Not owned */
     CAiUiControllerManager& iUiControllerManager;
+    /** Cps command buffer, Not owned */
+    CAiCpsCommandBuffer* iCommandBuffer;
     /** Array of loaded data plugins, Owned */
     mutable RPointerArray< CHsContentPublisher > iPublishers;
     /** Ecom implementation info, Owned */
--- a/idlefw/inc/framework/aistatemanager.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aistatemanager.h	Wed May 12 13:35:37 2010 +0300
@@ -29,6 +29,7 @@
 
 // Forward declarations
 class CAiPluginFactory;
+class CAiCpsCommandBuffer;
 class CHsContentPublisher;
 class THsPublisherInfo;
 
@@ -113,13 +114,14 @@
     /**
      * @see MAiStateObserver
      */        
-    void NotifyUpdatePlugins();
+    void NotifyReloadPlugins();
     
+
     /**
      * @see MAiStateObserver
      */            
-    TBool OnlineStateInUse() const;
-            
+    void NotifyReleasePlugins( const RArray<TUid>& aUidList );
+
 private:
     // new functions
         
@@ -187,19 +189,30 @@
      * @since S60 5.2
      */
     void DestroyPlugins();
-                           
+                         
+    /**
+     * Flushes cps command buffer
+     * 
+     * @since S60 5.2
+     */
+    void FlushCommandBuffer();
+    
 private:
     // data
     
     /** Plugin Factory, Not owned */
     CAiPluginFactory& iFactory;
+    /** CPS Command buffer, Owned */
+    CAiCpsCommandBuffer* iCommandBuffer;
     /** Current state */
     TState iCurrentState;    
     /** Flags */
     TBitFlags32 iFlags;
     /** Halted flag */
-    TBool iHalt;
-    
+    TBool iHalt;   
+    /** List of plugins which should be reloaded */
+    RArray<THsPublisherInfo> iReloadPlugins;
+
 private:
     // friend classes
     
--- a/idlefw/inc/framework/aistateobserver.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aistateobserver.h	Wed May 12 13:35:37 2010 +0300
@@ -67,20 +67,20 @@
         TAiFwDestroyReason aReason ) = 0;
     
     /**
-     * Notifies to update content publishers after Ecom registry change.
+     * Notifies to reload previously released plugins
      * 
      * @since S60 5.2
      */    
-    virtual void NotifyUpdatePlugins() = 0;
+    virtual void NotifyReloadPlugins() = 0;
     
     /**
-     * Queries whether online state is in use
-     * by any of the currently loaded plugin.
+     * Notifies that defined ECom plugins should be released to enable
+     * plugin upgrade
      * 
      * @since S60 5.2
-     * @return ETrue if online/offline state needed, EFalse otherwise
      */
-    virtual TBool OnlineStateInUse() const = 0;    
+    virtual void NotifyReleasePlugins( const RArray<TUid>& aUidList ) = 0;
+    
     };
     
 #endif // _AISTATEOBSERVER_H
--- a/idlefw/inc/framework/aistateprovider.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aistateprovider.h	Wed May 12 13:35:37 2010 +0300
@@ -164,16 +164,13 @@
      */
     void ChangePluginState( TAiFwState aState );
 
-    /**
-     * @see MAiFwStateHandler
-     */    
-    TBool OnlineStateInUse() const;
-
 private:
     // new functions
     
     static TInt BackupRestoreEvent( TAny* aAny );
-    
+
+    static TInt SwiUidListEvent( TAny* aAny );
+
 private:
     // data
 
@@ -190,8 +187,10 @@
     /** Backup Restore observer, Owned */
     MAiPSPropertyObserver* iBackupRestoreObserver;
     /** Flag to indicate whether state providing is started */
-    TBool iStarted;    
-    
+    TBool iStarted;
+    /** SWI UID list observer, owned */
+    MAiPSPropertyObserver* iSwiUidListObserver;
+
 private:
     // friend classes
     
--- a/idlefw/inc/framework/aiuicontrollermanager.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/inc/framework/aiuicontrollermanager.h	Wed May 12 13:35:37 2010 +0300
@@ -26,7 +26,6 @@
 
 // Forward declarations
 class CAiUiController;
-class CAiContentPublisher;
 class MAiMainUiController;
 class CRepository;
 class CCoeEnv;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/inc/framework/caicpscommandbuffer.h	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2010 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:  Cps command buffer
+*
+*/
+
+
+#ifndef C_CAICPSCOMMANDBUFFER_H
+#define C_CAICPSCOMMANDBUFFER_H
+
+// System includes
+#include <e32base.h>
+ 
+// User includes
+#include <aicpscommandbuffer.h>
+
+// Forward declarations
+class CLiwGenericParamList;
+class CLiwServiceHandler;
+class CLiwCriteriaItem;
+class CAiCpsExecuteParam;
+class MLiwInterface;
+
+/**
+ * AI Cps command buffer
+ *
+ * @ingroup group_aifw
+ * @lib aifw  
+ * @since S60 v5.2
+ */
+NONSHARABLE_CLASS( CAiCpsCommandBuffer ) : public CBase,
+    public MAiCpsCommandBuffer
+    {
+public:
+    // constructors and destructor
+
+    /**
+    * Two-phased constructors.
+    */
+    static CAiCpsCommandBuffer* NewL();
+    static CAiCpsCommandBuffer* NewLC();
+
+    /**
+    * Destructor.
+    */
+    ~CAiCpsCommandBuffer();
+
+private:
+    // constructors
+    
+    /**
+     * C++ default constructor
+     */
+    CAiCpsCommandBuffer();
+
+    /**
+     * 2nd phase constructor
+     */
+    void ConstructL();
+
+public:
+    // new function
+    
+    /**
+     * Flushes command buffer
+     * 
+     * @since S60 v5.2
+     */
+    void Flush();
+    
+    /**
+    * Gets the CPS interface 
+    *
+    * @since S60 5.2
+    */
+    void GetCPSInterfaceL();
+    
+private:
+    // from MAiCpsCommandBuffer
+
+    /**
+     * @see MAiCpsCommandBuffer
+     */    
+    void AddCommand( const TDesC& aPluginId, const TDesC& aType, 
+        CLiwDefaultMap* aFilter, const TDesC8& aAction);
+
+    /**
+     * @see MAiCpsCommandBuffer
+     */        
+    CLiwServiceHandler* ServiceHandler() const;            
+    
+    /**
+     * @see MAiCpsCommandBuffer
+     */        
+    MLiwInterface* CpsInterface() const;
+    
+private:
+    // new functions
+    
+    /**
+    * Detach the CPS interface 
+    *
+    * @since S60 5.2
+    */    
+    void DetachL();
+    
+    /**
+    * Adds a CPS command execute commnad for a spcific Plugin
+    * Note: aType and Filter will overwrite the previous value
+    *
+    * @since S60 5.2
+    * @param aPluginId plugin id.
+    * @param aType type of the cps registry.
+    * @param aFilter filter values.
+    * @param aAction action trigger.
+    */
+    void DoAddCommandL(const TDesC& aPluginId,const TDesC& aType, 
+            CLiwDefaultMap* aFilter, const TDesC8& aAction );
+    
+    /**
+    * Flush all the CPS execute commands..
+    *
+    * @since S60 5.2
+    */
+    void DoFlushL();
+    
+private: 
+    // data
+    /**
+    * SAPI service handler.
+    * Owned.
+    */
+    CLiwServiceHandler* iServiceHandler;
+    
+    /**
+    * CPS SAPI service.
+    * Owned.
+    */
+    CLiwCriteriaItem* iCpsService;
+    
+    /**
+    * Provides hsps services.
+    * Owned.
+    */
+    MLiwInterface* iCpsInterface;
+
+    /**
+    * Plugins execute parameter array 
+    * Owned.
+    */
+    RPointerArray<CAiCpsExecuteParam> iPlugins;
+    };
+
+#endif // C_CAICPSCOMMANDBUFFER_H
+
+// End of file
+
--- a/idlefw/plugins/devicestatus/group/aidevstaplg.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/group/aidevstaplg.mmp	Wed May 12 13:35:37 2010 +0300
@@ -84,6 +84,7 @@
 LIBRARY         aiutils.lib
 LIBRARY         flogger.lib
 LIBRARY         bafl.lib
+LIBRARY         profileengine.lib
 
 // End of file
 
--- a/idlefw/plugins/devicestatus/inc/aibtsappublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aibtsappublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -23,13 +23,13 @@
 // System includes
 #include <e32base.h>
 #include <coemain.h>
+#include <aidevicestatuscontentmodel.h>
 #include <RSSSettings.h>
 #include <MSSSettingsObserver.h>
 #include <MProfileChangeObserver.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 
 // Forward declarations
 class MAiDeviceStatusContentObserver;
--- a/idlefw/plugins/devicestatus/inc/aicugmcnpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aicugmcnpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,12 +21,12 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 #include <RSSSettings.h>
 #include <MSSSettingsObserver.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
--- a/idlefw/plugins/devicestatus/inc/aicugpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aicugpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,12 +21,12 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 #include <RSSSettings.h>
 #include <MSSSettingsObserver.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 
 // Forward declarations
 class MAiDeviceStatusContentObserver;
--- a/idlefw/plugins/devicestatus/inc/aidatepublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aidatepublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -22,10 +22,10 @@
 // System includes
 #include <e32base.h>
 #include <coemain.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 
 // Forward declarations
 class MAiDeviceStatusContentObserver;
--- a/idlefw/plugins/devicestatus/inc/aidevicestatuscontentmodel.h	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Device Status plug-in content model
-*
-*/
-
-
-#ifndef AIDEVICESTATUSCONTENTMODEL_H
-#define AIDEVICESTATUSCONTENTMODEL_H
-
-#include <aicontentmodel.h>
-
-/**
- * Content model for Device Status plug-in.
- * This header defines which information Device Status publishes
- */
-
-// ================================= CONTENT ===================================
-
-//content item id's
-enum TAiDeviceStatusContentIds
-    {
-    EAiDeviceStatusContentNetworkIdentity,
-    EAiDeviceStatusContentProfileName,
-    EAiDeviceStatusContentGeneralProfileName,
-    EAiDeviceStatusContentDate,
-    EAiDeviceStatusContentSilentIndicator,
-    EAiDeviceStatusContentTimedProfileIndicator,
-    EAiDeviceStatusContentSIMRegStatus,
-    EAiDeviceStatusContentNWStatus,
-    EAiDeviceStatusContentMCNIndicator,
-    EAiDeviceStatusContentVHZIndicator,
-    EAiDeviceStatusContentCUGIndicator,
-    EAiDeviceStatusContentGeneralIndicator,
-    EAiDeviceStatusContentVHZText,
-    EAiDeviceStatusContentCUGMCNIndicator
-    };
-
-
-//content item textual id's
-const wchar_t KAiDeviceStatusContentNetworkIdentity_Cid[]	  	= L"NetworkIdentity";
-const wchar_t KAiDeviceStatusContentProfileName_Cid[]	  		= L"ProfileName";
-const wchar_t KAiDeviceStatusContentGeneralProfileName_Cid[]	= L"GeneralProfileName";
-const wchar_t KAiDeviceStatusContentDate_Cid[]			  		= L"Date";
-const wchar_t KAiDeviceStatusContentSilentIndicator_Cid[] 		= L"SilentIndicator";
-const wchar_t KAiDeviceStatusContentTimedProfileIndicator_Cid[] = L"TimedProfileIndicator";
-const wchar_t KAiDeviceStatusContentSIMRegStatus_Cid[]	  		= L"SIMRegStatus";
-const wchar_t KAiDeviceStatusContentNWStatus_Cid[]	  		    = L"NWStatus";
-const wchar_t KAiDeviceStatusContentMCNIndicator_Cid[]	  		= L"MCNIndicator";
-const wchar_t KAiDeviceStatusContentVHZIndicator_Cid[]	  		= L"VHZIndicator";
-const wchar_t KAiDeviceStatusContentCUGIndicator_Cid[]	  		= L"CUGIndicator";
-const wchar_t KAiDeviceStatusContentGeneralIndicator_Cid[]	  	= L"GeneralIndicator";
-const wchar_t KAiDeviceStatusContentVHZText_Cid[]       	  	= L"VHZText";
-const wchar_t KAiDeviceStatusContentCUGMCNIndicator_Cid[]	  	= L"CUGMCNIndicator";
-
-
-const char KAiDeviceStatusMimeTypeTextPlain[]			= "text/plain";
-
-/**
-*  Content what device status plugin publishes
-*/
-
-const TAiContentItem KAiDeviceStatusContent[] =
-    {
-    //Published data can be service provider name, offline profile,
-    //operator logo or anything related to network status
-    { EAiDeviceStatusContentNetworkIdentity, KAiDeviceStatusContentNetworkIdentity_Cid,
-    	 KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is name of the profile from profiles engine
-    { EAiDeviceStatusContentProfileName, KAiDeviceStatusContentProfileName_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is name of the general profile from profiles engine
-    { EAiDeviceStatusContentGeneralProfileName, KAiDeviceStatusContentGeneralProfileName_Cid,
-    	 KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is current date as a text. Formatted according to current locale
-    { EAiDeviceStatusContentDate, KAiDeviceStatusContentDate_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data silent indicator as a text
-    { EAiDeviceStatusContentSilentIndicator, KAiDeviceStatusContentSilentIndicator_Cid,
-    	 KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data timed profile indicator as a text
-    { EAiDeviceStatusContentTimedProfileIndicator, KAiDeviceStatusContentTimedProfileIndicator_Cid,
-    	 KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is resource id
-    { EAiDeviceStatusContentSIMRegStatus, KAiDeviceStatusContentSIMRegStatus_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is resource id
-    { EAiDeviceStatusContentNWStatus, KAiDeviceStatusContentNWStatus_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is MCN message
-    { EAiDeviceStatusContentMCNIndicator, KAiDeviceStatusContentMCNIndicator_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is VHZ name
-    { EAiDeviceStatusContentVHZIndicator, KAiDeviceStatusContentVHZIndicator_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data is localized text, for example "Group 1"
-    { EAiDeviceStatusContentCUGIndicator, KAiDeviceStatusContentCUGIndicator_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data general indicator as a text
-    { EAiDeviceStatusContentGeneralIndicator, KAiDeviceStatusContentGeneralIndicator_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-
-    //Published data VHZ text
-    { EAiDeviceStatusContentVHZText, KAiDeviceStatusContentVHZText_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-    	
-    //Published data is localized text, for example "Group 1" or MCN message
-    { EAiDeviceStatusContentCUGMCNIndicator, KAiDeviceStatusContentCUGMCNIndicator_Cid,
-        KAiDeviceStatusMimeTypeTextPlain }
-    };
-
-const TInt KAiDeviceStatusContentCount = sizeof( KAiDeviceStatusContent ) /
-                                            sizeof( KAiDeviceStatusContent[0] );
-
-
-
-//content item id's
-enum TAiDeviceStatusResourceIds
-    {
-    EAiDeviceStatusResourceSIMRegFail,
-    EAiDeviceStatusResourceNWOk,
-    EAiDeviceStatusResourceNWLost
-    };
-
-const wchar_t KAiDeviceStatusResourceSIMRegFail_Cid[] = L"SIMRegFail";
-const wchar_t KAiDeviceStatusResourceShowNWLost_Cid[] = L"NWLost";
-
-
-const TAiContentItem KAiDeviceStatusResources[] =
-{
-    //Published data is resource id
-    { EAiDeviceStatusResourceSIMRegFail, KAiDeviceStatusResourceSIMRegFail_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-    { EAiDeviceStatusResourceNWLost, KAiDeviceStatusResourceShowNWLost_Cid,
-    	KAiDeviceStatusMimeTypeTextPlain },
-};
-
-const TInt KAiDeviceStatusResourceCount = sizeof( KAiDeviceStatusResources ) /
-                                            sizeof( KAiDeviceStatusResources[0] );
-
-
-#endif // AIDEVICESTATUSCONTENTMODEL_H
--- a/idlefw/plugins/devicestatus/inc/aimcnpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aimcnpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,10 +21,10 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
--- a/idlefw/plugins/devicestatus/inc/ainwspublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/ainwspublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,10 +21,10 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
--- a/idlefw/plugins/devicestatus/inc/aioperatornamepublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aioperatornamepublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -22,12 +22,15 @@
 // System includes
 #include <e32base.h>
 #include <AknUtils.h>
+#include <MProEngProfileActivationObserver.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
+class MProfileEngine;
+class MProEngNotifyHandler;
 class CAiNetworkInfoListener;
 class MAiDeviceStatusContentObserver;
 class CHsContentPublisher;
@@ -45,7 +48,8 @@
  */
 NONSHARABLE_CLASS( CAiOperatorNamePublisher ) : public CBase, 
     public MAiDeviceStatusPublisher,
-    public MAiNetworkInfoObserver
+    public MAiNetworkInfoObserver,
+    public MProEngProfileActivationObserver
     {
 public:
 
@@ -78,6 +82,13 @@
     							  const TNWInfo& aInfo, 
     							  const TBool aShowOpInd );
 
+private:
+    // from MProEngProfileActivationObserver
+    
+    /**
+     * @see MProEngProfileActivationObserver    
+     */    
+    void HandleProfileActivatedL( TInt aProfileId );
 
 private:
 
@@ -167,6 +178,10 @@
     TPtrC iNetworkIdentityName;    
     /** Flag to indicate if the content is suspended */ 
     TBool iSuspended;
+    /** Profile engine, owned */
+    MProfileEngine* iProfileEngine;
+    /** Profile change notifier, owned */
+    MProEngNotifyHandler* iProfileNotifier;
     };
 
 #endif // C_AIOPERATORPROVIDERNAMEPUBLISHER_H
--- a/idlefw/plugins/devicestatus/inc/aiprofilepublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aiprofilepublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -20,11 +20,11 @@
 #define C_AIPROFILEPUBLISHER_H
 
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 #include <RSSSettings.h>
 #include <MSSSettingsObserver.h>
 #include <MProfileChangeObserver.h>
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 
 class MProfileEngine;
 class MAiDeviceStatusContentObserver;
--- a/idlefw/plugins/devicestatus/inc/aisimregpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aisimregpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,10 +21,10 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
--- a/idlefw/plugins/devicestatus/inc/aivhzpublisher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/inc/aivhzpublisher.h	Wed May 12 13:35:37 2010 +0300
@@ -21,10 +21,10 @@
 
 // System includes
 #include <e32base.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatuspublisher.h"
-#include "aidevicestatuscontentmodel.h"
 #include "ainetworkinfoobserver.h"
 
 // Forward declarations
--- a/idlefw/plugins/devicestatus/src/aidevicestatusplugin.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/src/aidevicestatusplugin.cpp	Wed May 12 13:35:37 2010 +0300
@@ -23,12 +23,12 @@
 #include <bautils.h>
 #include <aiutility.h>
 #include <featmgr.h>
+#include <aidevicestatuscontentmodel.h>
 
 // User includes
 #include "aidevicestatusplugin.h"
 #include "aidevicestatuspluginengine.h"
 #include "aipublishprioritizer.h"
-#include "aidevicestatuscontentmodel.h"
 #include "aimulticontentobserver.h"
 #include "aipluginsettings.h"
 #include "ainetworkinfolistener.h"
--- a/idlefw/plugins/devicestatus/src/aioperatorlogopublisher.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/src/aioperatorlogopublisher.cpp	Wed May 12 13:35:37 2010 +0300
@@ -35,9 +35,9 @@
 #include <AknStatuspaneUtils.h>
 #include <AknUtils.h>
 #include <aipspropertyobserver.h>
+#include <aidevicestatuscontentmodel.h>
 #include "aioperatorlogopublisher.h"
 #include "ainetworkinfolistener.h"
-#include "aidevicestatuscontentmodel.h"
 #include "aiprioritizer.h"
 #include "ainwidpriorities.h"
 #include "debug.h"
--- a/idlefw/plugins/devicestatus/src/aioperatornamepublisher.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/src/aioperatornamepublisher.cpp	Wed May 12 13:35:37 2010 +0300
@@ -20,11 +20,16 @@
 #include <centralrepository.h>
 #include <avkondomainpskeys.h>
 #include <e32property.h>
+#include <aidevicestatuscontentmodel.h>
+#include <ProEngFactory.h>
+#include <MProfileEngine.h>
+#include <MProfile.h>
+#include <MProfileName.h>
+#include <MProEngNotifyHandler.h>
 
 #include <aidevstaplgres.rsg>
 #include "aioperatornamepublisher.h"
 #include "ainetworkinfolistener.h"
-#include "aidevicestatuscontentmodel.h"
 #include "aiprioritizer.h"
 #include "ainwidpriorities.h"
 #include "activeidle2domaincrkeys.h"
@@ -36,6 +41,7 @@
 const TInt KBitShiftByFour = 4;
 const TInt KIsDigitLowLimit = 0;
 const TInt KIsDigitHighLimit = 10;
+const TInt KOfflineProfileId =  5;
 
 LOCAL_C void AppendDigit( TDes& aCode, TInt aValue )
     {
@@ -75,6 +81,9 @@
     {
     iListener = CAiNetworkInfoListener::InstanceL();
     iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+    iProfileEngine = CreateProfileEngineL();
+    iProfileNotifier = ProEngFactory::NewNotifyHandlerL();
+    iProfileNotifier->RequestProfileActivationNotificationsL( *this );
     }
 
 
@@ -100,6 +109,15 @@
         iPeriodic->Cancel();
         delete iPeriodic;
         }
+    if ( iProfileNotifier )
+        {
+        iProfileNotifier->CancelAll();
+        delete iProfileNotifier;
+        }
+    if( iProfileEngine )
+        {
+        iProfileEngine->Release();
+        }
     }
 
 
@@ -125,10 +143,13 @@
         }
     else
         {
-        TRAP_IGNORE (
-            iPrioritizer->TryToCleanL( *iBroadcaster,
-                                    EAiDeviceStatusContentNetworkIdentity,
-                                    iPriority ));
+        if ( iProfileEngine->ActiveProfileId() != KOfflineProfileId )
+            {
+            TRAP_IGNORE (
+                iPrioritizer->TryToCleanL( *iBroadcaster,
+                                        EAiDeviceStatusContentNetworkIdentity,
+                                        iPriority ));
+            }
         }    
     }
 
@@ -153,6 +174,19 @@
         return;
         }
     
+    if ( iProfileEngine->ActiveProfileId() == KOfflineProfileId )
+        {
+        MProfile* profile = iProfileEngine->ActiveProfileLC();
+        const MProfileName& name = profile->ProfileName();
+        iPrioritizer->TryToPublishL( *iBroadcaster,
+                                      EAiDeviceStatusContentNetworkIdentity,
+                                      name.Name(),
+                                      iPriority );
+        iSuccess = ETrue;
+        CleanupStack::PopAndDestroy();//profile
+        return;
+        }
+    
     if( aClean )
         {
         iPrioritizer->TryToCleanL( *iBroadcaster,
@@ -732,3 +766,8 @@
        	}
   	}
 
+void CAiOperatorNamePublisher::HandleProfileActivatedL( TInt /*aProfileId*/ )
+    {
+    RefreshL( EFalse );
+    }
+
--- a/idlefw/plugins/devicestatus/src/aipublishprioritizer.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/devicestatus/src/aipublishprioritizer.cpp	Wed May 12 13:35:37 2010 +0300
@@ -18,7 +18,7 @@
 
 #include "aipublishprioritizer.h"
 #include "ainwidpriorities.h"
-#include "aidevicestatuscontentmodel.h"
+#include <aidevicestatuscontentmodel.h>
 #include <aicontentrequest.h>
 
 #include "aipublisherbroadcaster.h"
--- a/idlefw/plugins/mcsplugin/commoninc/mcspluginwatcher.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/commoninc/mcspluginwatcher.h	Wed May 12 13:35:37 2010 +0300
@@ -86,15 +86,6 @@
         void WatchNotify( MMCSPluginWatcherObserver* aObserver );
         
         /**
-         * StopAndWatch
-         * 
-         * @param aOperation
-         * @param aWaitScheduler
-         */
-        void StopAndWatch( CMenuOperation* aOperation, 
-                           CActiveSchedulerWait* aWaitScheduler );
-        
-        /**
          * GetStatus 
          */
         TInt GetStatus();
@@ -130,12 +121,6 @@
          * Owned
          */
         CMenuOperation* iOperation; 
-        
-        /**
-         * Wait scheduler
-         * Not owned
-         */
-        CActiveSchedulerWait* iWaitScheduler;
 
         /** 
          * Observer reference
--- a/idlefw/plugins/mcsplugin/commonsrc/mcspluginwatcher.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/commonsrc/mcspluginwatcher.cpp	Wed May 12 13:35:37 2010 +0300
@@ -79,15 +79,6 @@
     SetActive();
     }
 
-void CMCSPluginWatcher::StopAndWatch( CMenuOperation* aOperation, 
-                                      CActiveSchedulerWait* aWaitScheduler )
-    {
-    __ASSERT_DEBUG( KRequestPending == iStatus.Int(), User::Invariant() );
-    iWaitScheduler = aWaitScheduler;
-    iOperation = aOperation;
-    SetActive();
-    }
-
 // ---------------------------------------------------------------------------
 // Inherited from CActive class 
 // ---------------------------------------------------------------------------
@@ -100,11 +91,7 @@
         {
         iObserver->HandleNotifyL();
         }
-    if ( iWaitScheduler && iWaitScheduler->IsStarted() )
-        {
-        Cancel();
-        iWaitScheduler->AsyncStop();
-        }
+    
     //CActiveScheduler::Stop();
     }
 
--- a/idlefw/plugins/mcsplugin/group/mcsplugin.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/group/mcsplugin.mmp	Wed May 12 13:35:37 2010 +0300
@@ -78,7 +78,7 @@
 LIBRARY         eikdlg.lib
 LIBRARY         commonengine.lib 
 LIBRARY         favouritesengine.lib
-
+LIBRARY         viewcli.lib
 LIBRARY         gfxtrans.lib 
 
 // End of File
--- a/idlefw/plugins/mcsplugin/group/mcspluginsettings.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/group/mcspluginsettings.mmp	Wed May 12 13:35:37 2010 +0300
@@ -58,36 +58,27 @@
 APP_LAYER_SYSTEMINCLUDE
 MW_LAYER_SYSTEMINCLUDE
 
-LIBRARY                 euser.lib
-LIBRARY                 ecom.lib
-LIBRARY                 avkon.lib
-LIBRARY                 bafl.lib
-LIBRARY                 cone.lib
-LIBRARY                 efsrv.lib
-LIBRARY                 eikcoctl.lib
-LIBRARY                 eikcore.lib
-LIBRARY                 cdlengine.lib
-//LIBRARY                 centralrepository.lib
-LIBRARY                 cenrepnotifhandler.lib  // CCenRepNotifyHandler
-LIBRARY                 gsframework.lib         // For base classes
-LIBRARY                 gslistbox.lib           // For CGSListBoxItemTextArray
-LIBRARY                 gsecomplugin.lib
-LIBRARY                 commonengine.lib        // For RConeResourceLoader
-LIBRARY                 inetprotutil.lib        // For TUriParser
-//LIBRARY                 apgrfx.lib              // For RApaLsSession
-//LIBRARY                 apparc.lib              // For TApaAppInfo
-LIBRARY                 msgs.lib                // For Message Server
-LIBRARY                 platformenv.lib         // For PathInfo
-LIBRARY                 hlplch.lib              // for HlpLauncher
-LIBRARY                 featmgr.lib             // For feature manager
-LIBRARY                 favouritesengine.lib
-//LIBRARY                 javaregistryclient.lib  // For JavaRegistry
-#ifdef __WEB_WIDGETS
-//LIBRARY                 widgetregistryclient.lib
-#endif
+LIBRARY         euser.lib
+LIBRARY         ecom.lib
+LIBRARY         avkon.lib
+LIBRARY         bafl.lib
+LIBRARY         cone.lib
+LIBRARY         efsrv.lib
+LIBRARY         eikcoctl.lib
+LIBRARY         eikcore.lib
+LIBRARY         cdlengine.lib
+LIBRARY         cenrepnotifhandler.lib  // CCenRepNotifyHandler
+LIBRARY         gsframework.lib         // For base classes
+LIBRARY         gslistbox.lib           // For CGSListBoxItemTextArray
+LIBRARY         gsecomplugin.lib
+LIBRARY         commonengine.lib        // For RConeResourceLoader
+LIBRARY         inetprotutil.lib        // For TUriParser
+LIBRARY         msgs.lib                // For Message Server
+LIBRARY         platformenv.lib         // For PathInfo
+LIBRARY         hlplch.lib              // for HlpLauncher
+LIBRARY         featmgr.lib             // For feature manager
+LIBRARY         favouritesengine.lib
 
-// Debugging dependencies
-//LIBRARY           flogger.lib
 LIBRARY         mcsmenu.lib
 LIBRARY         hspluginsettings.lib
 LIBRARY         aiutils.lib
--- a/idlefw/plugins/mcsplugin/handler/src/mcspluginhandler.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/handler/src/mcspluginhandler.cpp	Wed May 12 13:35:37 2010 +0300
@@ -231,19 +231,14 @@
         }
     else if ( param.Find( KParamValueMailbox ) != KErrNotFound ) // Mailbox
         {
-        TBool attrExists = ETrue;
         TInt pos = param.Locate( TChar( ':' ) ) + 1;
         TPtrC mailboxId = param.Mid( pos );
-
-        if ( attrExists )
-            {
-            TInt number;
-            TLex16 lextmp( mailboxId );
-            lextmp.Val( number );
-            TUid uId = TUid::Uid( number );
-            const TVwsViewId viewId( TUid::Uid( KMCSCmailUidValue ), TUid::Uid( KMCSCmailMailboxViewIdValue ) );
-            iVwsSession->CreateActivateViewEvent( viewId, uId, KNullDesC8() );
-            }
+        TInt number;
+        TLex16 lextmp( mailboxId );
+        lextmp.Val( number );
+        TUid uId = TUid::Uid( number );
+        const TVwsViewId viewId( TUid::Uid( KMCSCmailUidValue ), TUid::Uid( KMCSCmailMailboxViewIdValue ) );
+        iVwsSession->CreateActivateViewEvent( viewId, uId, KNullDesC8() );
         }
     else if ( param.Find( KMenuAttrParamLogs ) != KErrNotFound )
         {
Binary file idlefw/plugins/mcsplugin/help/data/xhtml.zip has changed
--- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -29,7 +29,8 @@
 class MAiContentObserver;
 class MAiContentItemIterator;
 class CMCSPluginEngine;
-class TMCSData;
+class CMCSData;
+
 
 /**
  * @ingroup group_mcsplugin
@@ -123,7 +124,7 @@
     /**
      * Publishes content for one menu item
      */
-    void PublishLItemL( MAiContentObserver& aObserver, TMCSData& aDataItem, TInt aIndex );
+    void PublishLItemL( MAiContentObserver& aObserver, CMCSData& aDataItem, TInt aIndex );
         
     /**
     * Delete content model
--- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -26,23 +26,25 @@
 #include <hspluginsettings.h>
 #include <propertymap.h>
 #include <mcsmenu.h>
-#include <msvapi.h>     // For MMsvSessionObserver
 
 class TMenuItem;
 class CMCSPluginEngine;
-class CMCSPluginWatcher;
-
 
 /**
  *  @ingroup group_mcsplugin
  *
- *  TMCData class
+ *  Stores the MCS Menu Items and keeps track whether
+ *  item needs to be published or not.
  *
  *  @since S60 v9.1
  */
-class TMCSData
+NONSHARABLE_CLASS( CMCSData ) : public CBase
     {
 public:
+    CMCSData();
+    
+    ~CMCSData();
+    
     /**
      * SetMenuItem
      * 
@@ -56,8 +58,28 @@
      * @return TMenuItem
      */
     TMenuItem& MenuItem();
+    
+    /**
+     * Name of the item.
+     */
+    TDesC& Name();
+    
+    /**
+     * Set name of the item,
+     */
+    void SetNameL( const TDesC& aName );
 
     /**
+     * Value of the item. Used for bookmark url.
+     */
+    TDesC& Value();
+    
+    /*
+     * Set value of the item.
+     */   
+    void SetValueL( const TDesC& aValue );
+    
+    /**
      * SetDirty
      * 
      * @param aDirty
@@ -77,6 +99,16 @@
      * iMenuItem
      */
     TMenuItem iMenuItem;
+    
+    /**
+     * Item name, own
+     */
+    HBufC* iName;
+    
+    /**
+     * Item value, own
+     */
+    HBufC* iValue;
 
     /**
      * iDirty
@@ -91,9 +123,8 @@
  *
  *  @since
  */
-class CMCSPluginData : public CBase,
-    public HSPluginSettingsIf::MHomeScreenSettingsObserver,
-    public MMsvSessionObserver
+NONSHARABLE_CLASS( CMCSPluginData ) : public CBase,
+    public HSPluginSettingsIf::MHomeScreenSettingsObserver
     {
 
 public:
@@ -131,23 +162,15 @@
      * @param aIndex
      * @return TMCSData&
      */
-    TMCSData& DataItemL( TInt aIndex );
+    CMCSData& DataItemL( TInt aIndex );
 
     /**
-     * ReplaceMenuItemL
+     * Saves 'Undefined' menu item into settings when mailbox is deleted
      * 
      * @param aIndex
      * @param aMenuItem
      */
-    void ReplaceMenuItemL( const TInt& aIndex, TMenuItem& aMenuItem );
-
-    /**
-     * SaveSettingsL
-     * 
-     * @param aIndex
-     * @param aMenuItem
-     */
-    void SaveSettingsL( const TInt& aIndex, CMenuItem& aMenuItem );
+    void SaveUndefinedItemL( const TInt& aIndex );
 
     /**
      * DataCount
@@ -157,10 +180,15 @@
     TInt DataCount(){ return iData.Count();};
 
     /**
-     * UpdateDataL
+     * Gets the instance specific settings from HSPS and creates data items
      */
     void UpdateDataL();
 
+    /**
+     * Removes data item from data list and saves new setting into HSPS
+     */
+    void RemoveDataL( TInt aId );
+    
     // From MHomeScreenSettingsObserver
     /**
      * SettingsChangedL
@@ -173,28 +201,6 @@
     void SettingsChangedL( const TDesC8& aEvent,  const TDesC8& aPluginName,
                            const TDesC8& aPluginUid, const TDesC8& aPluginId );
 
-    /**
-     * CreateRunTimeMenuItemsL
-     * @param void
-     * @return void
-     */
-    void CreateRuntimeMenuItemsL();
-    
-    // from base class MMsvSessionObserver
-
-    /**
-     * Handles an event from the message server.
-     * Not used, but must be defined to be able to use the messaging server.
-     *
-     * @since S60 v3.2
-     * @param aEvent Indicates the event type.
-     * @param aArg1 Event type-specific argument value
-     * @param aArg2 Event type-specific argument value
-     * @param aArg3 Event type-specific argument value
-     */
-    void HandleSessionEventL( TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, 
-        TAny* aArg3 );
-    
 private:
 
     /**
@@ -206,24 +212,49 @@
     void ConstructL();
 
     /**
-     * CreateMenuItemL
+     * GetMenuDataL
      * @param aProperties
      * @return TMenuItem
      */
-    TMenuItem CreateMenuItemL(
+    CMCSData* GetMenuDataL(
         RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties );
+    
+    /**
+     * Get bookmark data item
+     * @param aView, used for bookmark url
+     * @param aParam, used for bookmark name
+     * @param aData, is filled with appropriate values
+     */
+    void GetBkmDataL( const TDesC8& aView, const TDesC8& aParam, CMCSData& aData );
 
     /**
-     * GetMCSPluginFolderIdL
-     * 
-     * @return TInt
+     * Get folder data item
+     * @param aParam, is used for folder id (in MCS)
+     * @param aData, is filled with appropriate values
+     */    
+    void GetFolderData( const TDesC8& aParam, CMCSData& aData );
+
+    /**
+     * Get mailbox data item
+     * @param aUid, uid of the mailbox in messaging application
+     * @param aParam, name of the mailbox
+     * @param aData, is filled with appropriate values
      */
-    TInt GetMCSPluginFolderIdL();
+    void GetMailboxDataL( const TDesC8& aUid, const TDesC8& aParam,  CMCSData& aData );
+    
+    /**
+     * Get MCS data item
+     * @param aProperties, Properties are used to filter correct item from MCS.
+     * @param aData, is filled with appropriate values
+     */
+    void GetMCSDataL(
+        RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties,  CMCSData& aData );
+
 private: // data
 
     // Menu items, which are defined in settings
     // Own
-    RArray<TMCSData> iData;
+    RPointerArray<CMCSData> iData;
 
     // Plugin settings. NOT OWNED!
     HSPluginSettingsIf::CHomescreenSettings* iPluginSettings;
@@ -234,17 +265,9 @@
     // Reference to instance uid of HSPS widget
     const TDesC8& iInstanceUid;
 
-    // MCS asynchronous operation watcher, owned 
-    CMCSPluginWatcher* iSaveWatcher; 
-
     // MCS resource handle, owned 
     RMenu iMenu;
-    
-    /**
-     * Message server session
-     * Own.
-     */
-    CMsvSession* iMsvSession;
+
     };
 
 #endif // CMCSPLUGINDATA_H
--- a/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -22,8 +22,8 @@
 // System includes
 #include <e32base.h>
 #include <mcsmenu.h>
+#include <mcsmenuitem.h>
 #include <mcsmenunotifier.h>
-#include <mcsmenuitem.h>
 #include <msvapi.h>
 
 // User includes
@@ -32,9 +32,10 @@
 // Forward declarations
 class CGulIcon;
 class CMCSPluginData;
-class TMCSData;
+class CMCSData;
 class CMCSPlugin;
 
+
 /**
  * @ingroup group_mcsplugin
  *
@@ -84,19 +85,12 @@
     // new functions
     
     /**
-    * Called during plugin desctruction
-    * Decrements reference counters of all run-time generated items
-    * and deletes those which have reference counter == 0
-    */
-    void CleanMCSItemsL();
-    
-    /**
      * Gets the menu data.
      * 
      * @param aIndex
      * @return TMCSData&
      */
-    TMCSData& MenuDataL( const TInt& aIndex );
+    CMCSData& MenuDataL( const TInt& aIndex );
 
     /** Gets the menu item count
      * 
@@ -118,8 +112,8 @@
      * @param aMenuItem
      * @return CMenuItem*
      */
-    CMenuItem* FetchMenuItemL( const TMenuItem& aMenuItem );
-
+    CMenuItem* FetchMenuItemL( CMCSData& aData);
+    
     /**
      * Returns icon for given menu item and given attribute
      * 
@@ -156,23 +150,6 @@
      * ShowSettingsL
      */
     void ShowSettingsL();
-    
-    /**
-    * Helper method. Adds a given constant to a value of reference counter
-    *
-    * @param aItem A Menu Item to update
-    * @param aValueToAdd A constant to add 
-    * @return The actual value of updated reference count
-    */
-    TInt UpdateMenuItemsRefCountL( 
-        CMenuItem* aItem, const TInt aValueToAdd );
-
-    /**
-     * CreateRuntimeMenuItemsL
-     * @param void
-     * @return void
-     */
-    void CreateRuntimeMenuItemsL();
 
 private:
     // from MMCSPluginWatcherObserver
@@ -221,6 +198,24 @@
     TBool ConstructMenuItemForIconL( 
         const TDesC& aPath, CMenuItem& aMenuItem );
 
+    /**
+     * Creates bookmark specific MCS menu item.
+     */
+    CMenuItem* CreateBkmItemL( CMCSData& aData );
+    
+    /**
+     * Creates mailbox specific MCS menu item.
+     */
+    CMenuItem* CreateMailboxItemL( CMCSData& aData );
+    
+    void LaunchFolderItemL( CMCSData& aData );
+    
+    void LaunchBookmarkItemL( CMCSData& aData );
+    
+    void LaunchMailboxItemL( CMCSData& aData );
+    
+    void LaunchMCSItemL( CMCSData& aData );
+
 private:
     // data
     
@@ -253,4 +248,3 @@
 #endif // CMCSPLUGINENGINE_H
 
 // End of file
-
--- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -23,8 +23,8 @@
 
 // User includes
 #include <aicontentobserver.h>
+#include <aistrcnv.h>
 #include <aiutility.h>
-#include <aistrcnv.h>
 #include "mcspluginuids.hrh"
 #include "mcsplugin.h"
 #include "mcsplugindata.h"
@@ -150,16 +150,14 @@
 // ----------------------------------------------------------------------------
 //
 void CMCSPlugin::PublishLItemL( MAiContentObserver& aObserver, 
-    TMCSData& aData, TInt aIndex )
+    CMCSData& aData, TInt aIndex )
     {
     if( !aData.IsDirty() )
         {
         return;
         }
 
-    CMenuItem* item = NULL;
-    TRAP_IGNORE ( item = iEngine->FetchMenuItemL( aData.MenuItem() ) );
-    
+    CMenuItem* item = iEngine->FetchMenuItemL( aData );    
     CleanupStack::PushL( item );
     
     // One widget item has iDataCount number of elements
@@ -197,12 +195,9 @@
 // 
 // ----------------------------------------------------------------------------
 //
-void CMCSPlugin::Start( TStartReason aReason )
+void CMCSPlugin::Start( TStartReason /*aReason*/ )
     {
-    if ( aReason == EPluginStartup )
-        {
-        TRAP_IGNORE( iEngine->CreateRuntimeMenuItemsL() );
-        }    
+ 
     }
 
 // ----------------------------------------------------------------------------
@@ -210,12 +205,9 @@
 // 
 // ----------------------------------------------------------------------------
 //
-void CMCSPlugin::Stop( TStopReason aReason )
+void CMCSPlugin::Stop( TStopReason /*aReason*/ )
     {
-    if( aReason == EPluginShutdown )
-        {
-        TRAP_IGNORE( iEngine->CleanMCSItemsL() );
-        }
+
     }
 
 // ----------------------------------------------------------------------------
--- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -18,12 +18,6 @@
 #include <mcsmenufilter.h>
 #include <itemmap.h>
 #include <aistrcnv.h>
-#include <favouritesdbobserver.h>
-#include <favouritesdb.h>        
-#include <msvuids.h>        // For KMsvRootIndexEntryIdValue
-
-#include <mcsmenuitem.h>
-#include <mcsmenufilter.h>
 
 #include "mcsplugindata.h"
 #include "mcspluginengine.h"
@@ -36,58 +30,141 @@
 _LIT8( KProperNameParam, "param" );
 _LIT8( KProperNameUid, "uid" );
 _LIT8( KProperNameView, "view" );
+_LIT8( KProperNameLocked, "locked" );
 _LIT8( KProperValueFolder, "folder" );
 _LIT8( KProperValueBookmark, "bookmark" );
 _LIT8( KProperValueAppl, "application" );
-
-_LIT( KMailboxUid, "0x100058c5" );
-_LIT8( KMailboxUid8, "0x100058c5" );
-_LIT( KMenuMailboxIconId, "16388" );
-_LIT( KMenuMailboxMaskId, "16389" );
+_LIT8( KProperValueMailbox, "mailbox" );
+_LIT8( KMenuAttrUndefUid, "0x99999991" );
 
-_LIT( KUrl, "url" );
-_LIT( KMenuIconFile, "aimcsplugin.mif" );
-_LIT( KMenuBookmarkIconId, "16386" );
-_LIT( KMenuBookmarkMaskId, "16387" );
-_LIT( KInitialRefCount, "1" );
-_LIT( KMenuAttrRefcount, "ref_count" );
 _LIT( KMyMenuData, "matrixmenudata" );
-_LIT( KMenuTypeShortcut, "menu:shortcut" );
-_LIT( KMenuAttrParameter, "param" );
+_LIT( KMenuTypeMailbox, "menu:mailbox" );
+
 
 #define KMCSCmailMtmUidValue 0x2001F406
 
 // ======== LOCAL FUNCTIONS ========
 
-static void ItemMapArrayCleanupFunc( TAny* aPointerArray )
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroy()
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroy( TAny* aObj )
     {
-    RPointerArray<CItemMap>* p = static_cast<RPointerArray<CItemMap>*>( aPointerArray ); 
-    p->ResetAndDestroy();
-    p->Close();
+    if( aObj )
+        {
+        static_cast<T*>( aObj )->ResetAndDestroy();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroyPushL
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroyPushL(T& aArray)
+    {
+    CleanupStack::PushL( TCleanupItem( &CleanupResetAndDestroy<T>, &aArray ) );
     }
 
 // ======== MEMBER FUNCTIONS ========
 
-void TMCSData::SetMenuItem( TMenuItem& aMenuItem )
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CMCSData::CMCSData()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CMCSData::~CMCSData()
+    {
+    delete iName;
+    delete iValue;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSData::SetMenuItem( TMenuItem& aMenuItem )
     {
     iMenuItem = aMenuItem;
     }
 
-TMenuItem& TMCSData::MenuItem()
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TMenuItem& CMCSData::MenuItem()
     {
     return iMenuItem;
     }
 
-void TMCSData::SetDirty( TBool aDirty )
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TDesC& CMCSData::Name()
+    {
+    return *iName;
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSData::SetNameL( const TDesC& aName )
+    {
+	delete iName;
+	iName = NULL;
+    iName = aName.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TDesC& CMCSData::Value()
+    {
+    return *iValue;
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSData::SetValueL( const TDesC& aValue )
+    {
+	delete iValue;
+	iValue = NULL;
+    iValue = aValue.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSData::SetDirty( TBool aDirty )
     {
     iDirty = aDirty;
     }
 
-TBool TMCSData::IsDirty() const
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CMCSData::IsDirty() const
     {
     return iDirty;
     }
     
+
 // ---------------------------------------------------------------------------
 // Symbian 2nd phase constructor can leave
 // ---------------------------------------------------------------------------
@@ -117,7 +194,6 @@
 //
 void CMCSPluginData::ConstructL()
     {
-    iMsvSession = CMsvSession::OpenAsObserverL( *this );
     iPluginSettings = CHomescreenSettings::Instance();
     if( iPluginSettings == NULL )
         {
@@ -125,8 +201,6 @@
         }
     iPluginSettings->AddObserverL( this );
 
-    iSaveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-
     iMenu.OpenL( KMyMenuData );
 
     UpdateDataL();
@@ -142,12 +216,8 @@
         {
         iPluginSettings->RemoveObserver( this );
         }
-
-    iData.Close();
+    iData.ResetAndDestroy();
     iMenu.Close();
-
-    delete iSaveWatcher;
-    delete iMsvSession;
     }
 
 // ---------------------------------------------------------------------------
@@ -157,8 +227,8 @@
 void CMCSPluginData::UpdateDataL()
     {
     RPointerArray<CItemMap> settings;
-    TCleanupItem settingsCleanupItem( ItemMapArrayCleanupFunc, &settings );
-    CleanupStack::PushL( settingsCleanupItem );
+    CleanupResetAndDestroyPushL( settings );
+
     iPluginSettings->GetSettingsL( iInstanceUid, settings );
     TInt count = settings.Count();
     TBool wasEmpty = !iData.Count();
@@ -168,15 +238,13 @@
         CItemMap* itemMap = settings[ i ];
         RPointerArray<HSPluginSettingsIf::CPropertyMap>& properties
             = itemMap->Properties();
-        TMenuItem item = CreateMenuItemL( properties );
-        TMCSData data;
+        CMCSData* data = GetMenuDataL( properties );
 
         if ( wasEmpty )
             {
             // list of shortcut slot was empty
             // we append the shortcut data slots one-by-one to the list
-            data.SetMenuItem( item );
-            data.SetDirty( ETrue );
+            data->SetDirty( ETrue );
             iData.AppendL( data );
             }
         else 
@@ -185,24 +253,46 @@
             // if menuitem id has changed, replace the item and 
             // set as dirty
             TInt id = -1;
-            id = iData[ i ].MenuItem().Id();
+            id = iData[ i ]->MenuItem().Id();
             
-            if ( item.Id() != id )
+            if ( data->MenuItem().Id() != id )
                 {
-                data.SetMenuItem( item );
-                data.SetDirty( ETrue );
+                data->SetDirty( ETrue );
+                CMCSData* oldData = iData[i];
                 iData.Remove( i );
+                delete oldData;
                 iData.InsertL( data, i );
                 }
             }
         }
-    
-        CleanupStack::PopAndDestroy(); // settingsCleanupItem 
+
+    // Cleanup.
+    CleanupStack::PopAndDestroy(); // settings
     }
 
+// ---------------------------------------------------------------------------
+// Removes obsolete data and saves 'Undefined' item to HSPS
+// Used when active mailbox is deleted from system.
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginData::RemoveDataL( TInt aId )
+    {
+    TInt count = iData.Count();
+    for( TInt i = 0; i < count; i++ )
+        {
+        CMCSData* data = iData[i];
+        if( data->MenuItem().Type() == KMenuTypeMailbox &&
+            data->MenuItem().Id() == aId )
+            {
+            iData[i]->MenuItem().SetId( KErrNotFound );
+            iData[i]->SetDirty( ETrue );
+            SaveUndefinedItemL( i );
+            }
+        }
+    }
 
 // ---------------------------------------------------------------------------
-// 
+// Call back from Homescreen settings
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginData::SettingsChangedL( const TDesC8& /*aEvent*/,  const TDesC8& /*aPluginName*/,
@@ -218,7 +308,127 @@
 // Gets the menu item from engine using the setting properties as filter
 // ---------------------------------------------------------------------------
 //
-TMenuItem CMCSPluginData::CreateMenuItemL( RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties )
+CMCSData* CMCSPluginData::GetMenuDataL( RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties )
+    {
+    TPtrC8 type;
+    TPtrC8 uid;
+    TPtrC8 view;
+    TPtrC8 param;
+    
+    // first we need to check the item type
+    for ( TInt i = 0; i < aProperties.Count(); i++ )
+        {
+        if ( aProperties[i]->Name() == KProperNameType )
+            {
+            type.Set( aProperties[i]->Value());
+            }
+        else if( aProperties[i]->Name() == KProperNameUid)
+            {
+            uid.Set( aProperties[i]->Value());
+            }
+        else if( aProperties[i]->Name() == KProperNameView)
+            {
+            view.Set( aProperties[i]->Value());
+            }
+        else if( aProperties[i]->Name() == KProperNameParam )
+            {
+            param.Set( aProperties[i]->Value());
+            }
+        }
+    CMCSData* data = new ( ELeave ) CMCSData();
+    CleanupStack::PushL( data );
+    if( type == KProperValueBookmark )
+        {
+        GetBkmDataL( view, param, *data );
+        }
+    else if( type == KProperValueFolder )
+        {
+        GetFolderData( param, *data );
+        }
+    else if( type == KProperValueMailbox )
+        {
+        GetMailboxDataL( uid, param, *data );
+        }
+    else
+        {
+        GetMCSDataL( aProperties, *data );
+        }
+    CleanupStack::Pop( data );
+    return data;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates bookmark data item.
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginData::GetBkmDataL( const TDesC8& aView, const TDesC8& aParam, CMCSData& aData )
+    {
+    TMenuItem item;
+    item.SetType( KMenuTypeUrl );
+    aData.SetMenuItem( item );
+
+    HBufC* view( NULL );
+    view = AiUtility::CopyToBufferL( view, aView );
+    CleanupStack::PushL( view );
+    aData.SetValueL( *view );
+    CleanupStack::PopAndDestroy( view );
+    
+    HBufC* param( NULL );
+    param = AiUtility::CopyToBufferL( param, aParam );
+    CleanupStack::PushL( param );
+    aData.SetNameL( *param );
+    CleanupStack::PopAndDestroy( param );
+    }
+    
+// ---------------------------------------------------------------------------
+// Creates folder data item.
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginData::GetFolderData( const TDesC8& aParam, CMCSData& aData )
+    {
+    // In folder case, we have to extract id from 
+    // param attribute and return item with this id
+    // convert id to integer
+    TInt id;
+    TLex8 lextmp( aParam);
+    lextmp.Val( id );
+    
+    TMenuItem item;
+    item.SetType( KMenuTypeFolder );
+    item.SetId( id );
+    aData.SetMenuItem( item );
+    }
+
+// ---------------------------------------------------------------------------
+// Creates mailbox data item.
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginData::GetMailboxDataL( const TDesC8& aUid, const TDesC8& aParam, CMCSData& aData )
+    {
+    TInt id( KErrNotFound );
+    TLex8 lextmp( aUid);
+    lextmp.Val( id );
+    
+    TMenuItem item;
+    item.SetType( KMenuTypeMailbox );
+    item.SetId( id );
+    aData.SetMenuItem( item );
+    
+    HBufC* param( NULL );
+    param = AiUtility::CopyToBufferL( param, aParam );
+    CleanupStack::PushL( param );
+    
+    aData.SetNameL( *param );
+    
+    CleanupStack::PopAndDestroy( param );
+    }
+    
+// ---------------------------------------------------------------------------
+// Gets data item from MCS
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginData::GetMCSDataL( RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties,
+        CMCSData& aData)
     {
     CMenuFilter* filter = CMenuFilter::NewLC();
 
@@ -226,25 +436,10 @@
     // Criterias will be added to filter if setting defines them
     filter->DoNotHaveAttributeL( KMenuAttrView );
     filter->DoNotHaveAttributeL( KMenuAttrParam );
-    TBool isFolder = EFalse;
     
-    // first, we need to check if the item is folder
-    for ( TInt i = 0; i < aProperties.Count(); i++ )
-        {
-        if ( aProperties[i]->Name() == KProperNameType )
-            {
-            if ( aProperties[i]->Value() == KProperValueFolder )
-                {
-                isFolder = ETrue;
-                }
-            break;
-            }
-        }
-
     // then add all property/value pairs to the filter
     for ( TInt i = 0; i < aProperties.Count(); i++ )
         {
-
         // skip the type property
         if( aProperties[i]->Name() == KProperNameType )
             {
@@ -260,29 +455,7 @@
 
         if ( value->Length() != 0 )
             {
-            // in case of folder, we just have to extract 
-            // id from param attribute and return item with this id
-            if ( aProperties[i]->Name() ==  KProperNameParam && isFolder )
-                {
-                TMenuItem item;
-                // convert id to integer
-                TInt id;
-                TLex16 lextmp( value->Ptr() );
-                lextmp.Val( id );
-                item.SetType( KMenuTypeFolder );
-                item.SetId( id );
-
-                CleanupStack::PopAndDestroy( value );
-                CleanupStack::PopAndDestroy( name );
-                CleanupStack::PopAndDestroy( filter );
-
-                return item;
-                }
-            else
-                {
-                // otherwise, we just add name/value into filter
-                filter->HaveAttributeL( *name, *value );
-                }
+            filter->HaveAttributeL( *name, *value );  
             }
         CleanupStack::PopAndDestroy( value );
         CleanupStack::PopAndDestroy( name );
@@ -293,407 +466,64 @@
     
     TMenuItem item = iEngine.FindMenuItemL( *filter );
     CleanupStack::PopAndDestroy( filter );
-    return item;
+    aData.SetMenuItem( item );
     }
 
 // ---------------------------------------------------------------------------
 // Returns menu item for given index
 // ---------------------------------------------------------------------------
 //
-TMCSData& CMCSPluginData::DataItemL( TInt aIndex )
+CMCSData& CMCSPluginData::DataItemL( TInt aIndex )
     {
     if( aIndex < 0 || aIndex >= iData.Count())
         {
         User::Leave( KErrArgument ); 
         }
-    return iData[aIndex];
-    }
-
-// ---------------------------------------------------------------------------
-// Replaces menuitem in data instance
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginData::ReplaceMenuItemL( const TInt& aIndex, TMenuItem& aMenuItem )
-    {
-    TMCSData& data = iData[aIndex];
-    data.SetMenuItem( aMenuItem );
-    data.SetDirty( ETrue );
-    }
-
-// ---------------------------------------------------------------------------
-// Save the setting persistently to HSPS
-// TODO HSPS setting api should be changed so that items and properties can 
-// be added/removed dynamically. Now widgetconfiguration.xml must have all the
-// properties for every item even though property is not used.
-// It makes this function more compolicated.
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginData::SaveSettingsL( const TInt& aIndex, CMenuItem& aMenuItem )
-    {
-    RPointerArray<CItemMap> settingItems;
-    CleanupClosePushL( settingItems );
-    iPluginSettings->GetSettingsL( iInstanceUid, settingItems );
-    if ( aIndex >= 0 && aIndex < settingItems.Count() )
-        {
-        TBool exists( EFalse );
-        CItemMap* itemMap = settingItems[aIndex];
-        RPointerArray<HSPluginSettingsIf::CPropertyMap> properties;
-        properties = itemMap->Properties();
-        for ( TInt i= 0; i < properties.Count(); i++ )
-            {
-            if ( properties[i]->Name() == KProperNameType )
-                {
-                TPtrC type = aMenuItem.Type();
-                if ( type == KMenuTypeUrl )
-                    {
-                    properties[i]->SetValueL( KProperValueBookmark );
-                    }
-                else
-                    {
-                    properties[i]->SetValueL( KProperValueAppl );
-                    }
-                }
-            else if ( properties[i]->Name() == KProperNameUid )
-                {
-                TPtrC uid = aMenuItem.GetAttributeL( KMenuAttrUid, exists );
-                if ( exists )
-                    {
-                    HBufC8* uid8( NULL );
-                    uid8 = AiUtility::CopyToBufferL( uid8, uid );
-                    CleanupStack::PushL( uid8 );
-                    properties[i]->SetValueL( *uid8 );
-                    CleanupStack::PopAndDestroy( uid8 );
-                    }
-                else
-                    {
-                    properties[i]->SetValueL( KNullDesC8 );
-                    }
-                }
-            else if ( properties[i]->Name() == KProperNameView )
-                {
-                TPtrC view = aMenuItem.GetAttributeL( KMenuAttrView, exists );
-                if ( exists )
-                    {
-                    HBufC8* view8( NULL );
-                    view8 = AiUtility::CopyToBufferL( view8, view );
-                    CleanupStack::PushL( view8 );
-                    properties[i]->SetValueL( *view8 );
-                    CleanupStack::PopAndDestroy( view8 );
-                    }
-                else
-                    {
-                    properties[i]->SetValueL( KNullDesC8 );
-                    }
-                }
-            else if ( properties[i]->Name() == KProperNameParam )
-                {
-                TPtrC param = aMenuItem.GetAttributeL( KMenuAttrParam, exists );
-                if ( exists )
-                    {
-                    HBufC8* param8( NULL );
-                    param8 = AiUtility::CopyToBufferL( param8, param );
-                    CleanupStack::PushL( param8 );
-                    properties[i]->SetValueL( *param8 );
-                    CleanupStack::PopAndDestroy( param8 );
-                    }
-                else
-                    {
-                    properties[i]->SetValueL( KNullDesC8 );
-                    }
-                }
-            }
-        }
-    // ETrue tells that changes are stored also to plugin reference 
-    iPluginSettings->SetSettingsL( iInstanceUid, settingItems, ETrue );
-    CleanupStack::PopAndDestroy( &settingItems );
-    }
-
-// ---------------------------------------------------------------------------
-// Gets MCS Plugin folder ID. This hidden folder in matrixmenudata.xml is used 
-// for storing run-time generated menuitems
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginData::GetMCSPluginFolderIdL()
-    {
-    TInt folderId;
-    
-    _LIT( KMCSFolder, "mcsplugin_folder" );
-
-    CMenuItem* item( NULL );
-    CMenuFilter* filter = CMenuFilter::NewL();
-    CleanupStack::PushL( filter );
-    filter->SetType( KMenuTypeFolder );
-    filter->HaveAttributeL( KMenuAttrLongName, KMCSFolder );
-
-    const TInt rootId = iMenu.RootFolderL();
-    RArray<TMenuItem> itemArray;
-    CleanupClosePushL( itemArray );
-    iMenu.GetItemsL( itemArray, rootId, filter, ETrue );
-    if ( itemArray.Count() > 0 )
-        {
-        item = CMenuItem::OpenL( iMenu, itemArray[0] );
-        folderId = item->Id();
-        }
-    else 
-        {
-        folderId = iMenu.RootFolderL();
-        }
-    CleanupStack::PopAndDestroy( &itemArray );
-    CleanupStack::PopAndDestroy( filter ); 
-
-    delete item; 
-
-    return folderId;
+    return *iData[aIndex];
     }
 
 // ---------------------------------------------------------------------------
-// Creates runtime generated menuitems (bookmarks/mailboxes if they 
-// it does not exist yet in MCS. If they do, their ref_count is incremented.
-// Called during Plugin startup.
+// Save the undefined item.
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginData::CreateRuntimeMenuItemsL()
+void CMCSPluginData::SaveUndefinedItemL( const TInt& aIndex )
     {
-    
-    // start mailboxes observing and get the number of
-    // mailboxes defined in the device
-
-    TMsvId entryID = KMsvRootIndexEntryIdValue;
-    CMsvEntry* rootEntry = iMsvSession->GetEntryL( entryID );
-    TInt mailboxCount = rootEntry->Count();
-    CleanupStack::PushL( rootEntry );
+    RPointerArray<CItemMap> settingItems;
+    CleanupResetAndDestroyPushL( settingItems );
     
-    RPointerArray<CItemMap> settings;
-    TCleanupItem settingsCleanupItem( ItemMapArrayCleanupFunc, &settings );
-    CleanupStack::PushL( settingsCleanupItem );
-    iPluginSettings->GetSettingsL( iInstanceUid, settings );
-
-    RFavouritesSession bookmarkSess;
-    RFavouritesDb bookmarkDb;
-
-    User::LeaveIfError( bookmarkSess.Connect() );
-    User::LeaveIfError( bookmarkDb.Open( bookmarkSess, KBrowserBookmarks ));
-
-    TInt count = settings.Count();
-    for( TInt i = 0; i < count; i++ )
-       {
-        CItemMap* itemMap = settings[i];
-        RPointerArray<HSPluginSettingsIf::CPropertyMap>& properties
-            = itemMap->Properties();
-
-        TPtrC8 uid8, type, param8;
-
-        for( TInt j = 0; j < properties.Count(); j++ )
+    iPluginSettings->GetSettingsL( iInstanceUid, settingItems );
+    if ( aIndex >= 0 && aIndex < settingItems.Count() )
+        {
+        CItemMap* itemMap = settingItems[ aIndex ];
+        RPointerArray<HSPluginSettingsIf::CPropertyMap> properties;
+        properties = itemMap->Properties();
+        for ( TInt i = 0; i < properties.Count(); i++ )
             {
-
-            if( properties[j]->Name() == KProperNameType )
+            if ( properties[ i ]->Name() == KProperNameType )
                 {
-                type.Set( properties[j]->Value() );
+                properties[ i ]->SetValueL( KProperValueAppl );
+                }
+            else if ( properties[ i ]->Name() == KProperNameUid )
+                {
+                properties[ i ]->SetValueL( KMenuAttrUndefUid );
                 }
-            else if ( properties[j]->Name() == KProperNameUid )
+            else if ( properties[ i ]->Name() == KProperNameView )
                 {
-                uid8.Set( properties[j]->Value() );
+                properties[ i ]->SetValueL( KNullDesC8 );
                 }
-            else if ( properties[j]->Name() ==  KProperNameParam )
+            else if ( properties[ i ]->Name() == KProperNameParam )
                 {
-                param8.Set( properties[j]->Value() );
+                properties[ i ]->SetValueL( KNullDesC8 );
+                }
+            else if ( properties[ i ]->Name() == KProperNameLocked )
+                {
+                properties[i]->SetValueL( KNullDesC8 );
                 }
             }
-
-        if( type == KProperValueBookmark )
-            {
-            
-            // The shortcut is a bookmark
-            TMenuItem menuItem = CreateMenuItemL( properties );
-
-            CActiveSchedulerWait* wait = 
-                            new ( ELeave ) CActiveSchedulerWait;
-            CleanupStack::PushL( wait );
-            
-            if( menuItem.Id() == 0 )
-                {
-                TLex8 uidLex( uid8.Mid( 1, uid8.Length() - 2 ) );
-                TUint32 id;
-                uidLex.Val(id, EHex);
-
-                CFavouritesItem* bkmItem = CFavouritesItem::NewLC();
-                TInt bcount = bookmarkDb.Get( TInt32( id ), *bkmItem );
-
-                HBufC *uid( NULL );
-                uid = AiUtility::CopyToBufferL( uid, uid8 );
-                CleanupStack::PushL( uid );
-
-                CMenuItem* newItem = CMenuItem::CreateL( iMenu, 
-                                                         KMenuTypeUrl, 
-                                                         GetMCSPluginFolderIdL(),
-                                                         0 );
-                CleanupStack::PushL( newItem );
-
-                newItem->SetAttributeL( KMenuAttrUid, *uid );
-                newItem->SetAttributeL( KMenuAttrLongName, bkmItem->Name() );
-                newItem->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-                newItem->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
-                newItem->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
-                newItem->SetAttributeL( KMenuAttrRefcount, KInitialRefCount );
-                newItem->SetAttributeL( KUrl , bkmItem->Url() );
-
-                CMenuOperation* op = newItem->SaveL( iSaveWatcher->iStatus );
-
-                iSaveWatcher->StopAndWatch( op, wait );
-
-                // Start the nested scheduler loop.
-                wait->Start();
-
-                SaveSettingsL( i, *newItem );
-
-                CleanupStack::PopAndDestroy( newItem );
-                CleanupStack::PopAndDestroy( uid );
-                CleanupStack::PopAndDestroy( bkmItem );
-                }
-            else
-                {
-                CMenuItem* item = CMenuItem::OpenL( iMenu, menuItem );
-                CleanupStack::PushL( item );
-                if ( iEngine.UpdateMenuItemsRefCountL( item, 1 ) > 0 )
-                    {
-                    CMenuOperation* op = item->SaveL( iSaveWatcher->iStatus );
-                    iSaveWatcher->StopAndWatch( op, wait );
-                    // Start the nested scheduler loop.
-                    wait->Start();
-                    SaveSettingsL( i, *item );
-                    }
-                CleanupStack::PopAndDestroy( item );
-                }
-
-            CleanupStack::PopAndDestroy( wait );
-            wait = NULL;
-            }
-
-        else if ( uid8 == KMailboxUid8 && mailboxCount > 0 )
-             {
-             // The shortcut is a Mailbox
-             
-             TMenuItem menuItem = CreateMenuItemL( properties );
-
-             CActiveSchedulerWait* wait = 
-                             new ( ELeave ) CActiveSchedulerWait;
-             CleanupStack::PushL( wait );
-
-             if ( menuItem.Id() == 0 )
-                {
-                // mailbox menuitem does not exist yet. We have to create it
-                // first, we try to find its ID among existing mailboxes:bì 
-
-                // extract Mailbox ID from HSPS
-                TInt pos = param8.Locate( TChar( ':' ) ) + 1;
-                TPtrC8 mailboxId8 = param8.Mid( pos );
-                
-                HBufC *mailboxId( NULL );
-                mailboxId = AiUtility::CopyToBufferL( mailboxId, mailboxId8 );
-                CleanupStack::PushL( mailboxId );
-                
-                // compare ID with existing mailboxes
-                rootEntry->SetSortTypeL( TMsvSelectionOrdering( 
-                            KMsvGroupByType | KMsvGroupByStandardFolders, 
-                            EMsvSortByDetailsReverse, ETrue ) );
-                
-                TBuf<255> boxId;
-                TBool found = EFalse;
-                TInt index = rootEntry->Count();
-
-                while ( !found && --index >= 0 )
-                    {
-                    const TMsvEntry& tentry = ( *rootEntry )[ index ];
-                    if ( tentry.iMtm.iUid == KMCSCmailMtmUidValue )
-                        {
-                        boxId.Num( tentry.Id() );
-                        if ( boxId == *mailboxId )
-                            {
-                            found = ETrue;
-                            }
-                        }
-                    }
-
-                CleanupStack::PopAndDestroy( mailboxId );
-                
-                // mailbox still exists in Mail application
-                // we have to create a new menuitem
-                if ( found )
-                    {
-
-                    // get the mailbox name
-                    const TMsvEntry& tentry = ( *rootEntry )[ index ];
-                    TPtrC name = tentry.iDetails;
-
-                    HBufC *param( NULL );
-                    param = AiUtility::CopyToBufferL( param, param8 );
-                    CleanupStack::PushL( param );
-
-                    // create a new menuitem with ref_count 1
-                    CMenuItem* newItem = CMenuItem::CreateL( iMenu, 
-                                                         KMenuTypeShortcut, 
-                                                         GetMCSPluginFolderIdL(), 
-                                                         0 );
-                    CleanupStack::PushL( newItem );
-
-                    // mailbox is a shortcut item with "mailbox:mailboxID" parameter
-                    newItem->SetAttributeL( KMenuAttrUid, KMailboxUid );
-                    newItem->SetAttributeL( KMenuAttrLongName, name );
-                    newItem->SetAttributeL( KMenuAttrParameter, *param );
-                    newItem->SetAttributeL( KMenuAttrRefcount, KInitialRefCount );
-
-                    // setting icon for the shortcut
-                    newItem->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-                    newItem->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
-                    newItem->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
-
-                    CMenuOperation* op = newItem->SaveL( iSaveWatcher->iStatus );
-                    iSaveWatcher->StopAndWatch( op, wait );
-
-                    // Start the nested scheduler loop.
-                    wait->Start();
-
-                    SaveSettingsL( i, *newItem );
-
-                    CleanupStack::PopAndDestroy( newItem );
-                    CleanupStack::PopAndDestroy( param );
-                    }
-                }
-             else 
-                {
-                // mailbox menu item already exists -> increment ref_count by 1
-                CMenuItem* item = CMenuItem::OpenL( iMenu, menuItem );
-                CleanupStack::PushL( item );
-                if ( iEngine.UpdateMenuItemsRefCountL( item, 1 ) > 0 )
-                    {
-                    CMenuOperation* op = item->SaveL( iSaveWatcher->iStatus );
-                    iSaveWatcher->StopAndWatch( op, wait );
-
-                    // Start the nested scheduler loop.
-                    wait->Start();
-                    SaveSettingsL( i, *item );
-                    }
-                 CleanupStack::PopAndDestroy( item );
-                }
-             CleanupStack::PopAndDestroy( wait );
-             wait = NULL;
-             
-             }
         }
-    CleanupStack::PopAndDestroy(); // settingsCleanupItem
-    CleanupStack::PopAndDestroy( rootEntry );
+    // ETrue tells that modified settings are stored also to plugin reference
+    iPluginSettings->SetSettingsL( iInstanceUid, settingItems, ETrue );
+    CleanupStack::PopAndDestroy(); // settingItems
     }
 
-// ---------------------------------------------------------------------------
-// From class MMsvSessionObserver.
-// Handles an event from the message server.
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginData::HandleSessionEventL(
-                                     TMsvSessionEvent /*aEvent*/, 
-                                     TAny* /*aArg1*/, 
-                                     TAny* /*aArg2*/,
-                                     TAny* /*aArg3*/ )
-    {
-
-    }
+// End of file
--- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -15,31 +15,28 @@
 *
 */
 
-
 // System includes
 #include <gulicon.h>
-#include <AknsItemID.h>
 #include <gslauncher.h>
-#include <mcsmenuitem.h>
 #include <mcsmenufilter.h>
 #include <mcsmenuoperation.h>
 #include <mcsmenuiconutility.h>
-#include <activefavouritesdbnotifier.h>
-#include <favouritesitemlist.h>
 #include <bautils.h>
 #include <StringLoader.h>
 #include <aknnotedialog.h>
-#include <AknsConstants.h>
-#include <avkon.rsg>
 #include <mcspluginres.rsg>
-#include <apgtask.h>
 #include <apgcli.h> 
 #include <apacmdln.h>
 #include <gfxtranseffect/gfxtranseffect.h>      
 #include <akntranseffect.h>
+#include <schemehandler.h>
+#include <viewcli.h>                // For CVwsSessionWrapper
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <viewclipartner.h>
+#endif
+#include <aisystemuids.hrh>
 
 // User includes
-#include <aisystemuids.hrh>
 #include "mcspluginengine.h"
 #include "mcsplugin.h"
 #include "mcsplugindata.h"
@@ -52,21 +49,29 @@
 _LIT( KResourceDrive, "Z:" );
 _LIT( KResourceFile, "mcspluginres.rsc" );
 _LIT( KResPath, "\\resource\\" );
-_LIT( KMenuAttrRefcount, "ref_count" );
 _LIT( KMMApplication, "mm://" );
 _LIT( KHideExit2, "&exit=hide" );
 _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
 _LIT( KApplicationGroupName, "applicationgroup_name" );
 _LIT( KIcon, "icon" );
 _LIT( KMenuAttrUndefUid, "0x99999991" );
+_LIT( KMenuIconFile, "aimcsplugin.mif" );
+_LIT( KMenuBookmarkIconId, "16386" );
+_LIT( KMenuBookmarkMaskId, "16387" );
+_LIT( KMenuMailboxIconId, "16388" );
+_LIT( KMenuMailboxMaskId, "16389" );
+_LIT( KMenuTypeMailbox, "menu:mailbox" );
+_LIT( KPrefix, "0x" );
 
 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
 const TUid KMMUid = { 0x101F4CD2 };
+const TUid KMCSCmailUidValue = { 0x2001E277 };
+const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
+const TUid KBrowserUid = { 0x10008D39 };
 
 // ======== LOCAL FUNCTIONS ========
 // ----------------------------------------------------------------------------
 // NextIdToken
-//
 // ----------------------------------------------------------------------------
 //
 static TPtrC NextIdToken( TLex& aLexer )
@@ -82,6 +87,65 @@
    return aLexer.MarkedToken();
    }
 
+// ----------------------------------------------------------------------------
+// Shows note dailog, with the given resource.
+// ----------------------------------------------------------------------------
+//
+static void ShowNoteDlgL( TInt aResource )
+    {
+    HBufC* temp = StringLoader::LoadLC( aResource );
+    
+    CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
+    CAknNoteDialog::EConfirmationTone,
+    CAknNoteDialog::ENoTimeout );
+    CleanupStack::PushL( dialog );
+    dialog->SetTextL( temp->Des() );
+    dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
+    CleanupStack::Pop( dialog );
+    CleanupStack::PopAndDestroy( temp );
+    }
+
+// ----------------------------------------------------------------------------
+// Parses uid in Hexadecimal format from the given string.
+// ----------------------------------------------------------------------------
+//
+TUid ParseHexUidFromString(const TDesC& aUidString )
+    {
+    TUid uid( KNullUid ); 
+    const TInt pos( aUidString.FindF( KPrefix ) );
+    
+    if ( pos != KErrNotFound )
+        {
+        TLex lex( aUidString.Mid( pos + KPrefix().Length() ) );
+        
+        // Hex parsing needs unsigned int
+        TUint32 value( 0 );
+        const TInt parseResult( lex.Val( value, EHex ) );
+        
+        if ( parseResult == KErrNone )
+            {
+            TInt32 value32( value );
+            uid.iUid = value32;   
+            }
+        }
+    return uid;
+    }
+
+// ----------------------------------------------------------------------------
+// Start transition effect. User has launched the application with the given uid.
+// ----------------------------------------------------------------------------
+//
+void StartEffect( TUid aUid )
+    {
+    //start a full screen effect
+    GfxTransEffect::BeginFullScreen( 
+        AknTransEffect::EApplicationStart,
+        TRect(), 
+        AknTransEffect::EParameterType, 
+        AknTransEffect::GfxTransParam( aUid,
+        AknTransEffect::TParameter::EActivateExplicitContinue ));
+    }
+
 // ============================ MEMBER FUNCTIONS ===============================
 // ----------------------------------------------------------------------------
 // CMCSPluginEngine::CMCSPluginEngine
@@ -136,7 +200,6 @@
     filter->HaveAttributeL( KMenuAttrUid, KMenuAttrUndefUid );
     iUndefinedItemHeader = FindMenuItemL( *filter );
     CleanupStack::PopAndDestroy( filter );
-    filter = NULL;
     iUndefinedItem = CMenuItem::OpenL( iMenu, iUndefinedItemHeader );    
     }
 
@@ -152,17 +215,11 @@
     delete iPluginData;
     
     iMenu.Close();
-    //iWatcher->Cancel();
     delete iWatcher;
-    
 
     CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
 
-    if ( iUndefinedItem )
-        {
-        delete iUndefinedItem;
-        iUndefinedItem = NULL;
-        }
+    delete iUndefinedItem;
     }
 
 // ---------------------------------------------------------------------------
@@ -183,9 +240,7 @@
         iNotifyWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::ENotify );
         
         iNotifier.Notify( 0,
-            RMenuNotifier::EItemsAddedRemoved |
-            RMenuNotifier::EItemsReordered |
-            RMenuNotifier::EItemAttributeChanged,
+            RMenuNotifier::EItemsAddedRemoved,
             iNotifyWatcher->iStatus );
         iNotifyWatcher->WatchNotify( this );
         }
@@ -218,7 +273,7 @@
 //
 // ---------------------------------------------------------------------------
 //
-TMCSData& CMCSPluginEngine::MenuDataL( const TInt& aIndex )
+CMCSData& CMCSPluginEngine::MenuDataL( const TInt& aIndex )
     {
     return iPluginData->DataItemL( aIndex );
     }
@@ -263,9 +318,62 @@
 // Returns the actual menu item for the given header.
 // ---------------------------------------------------------------------------
 //
-CMenuItem* CMCSPluginEngine::FetchMenuItemL( const TMenuItem& aMenuItem )
+CMenuItem* CMCSPluginEngine::FetchMenuItemL( CMCSData& aData )
+    {
+    if( aData.MenuItem().Type() == KMenuTypeUrl )
+        {
+        return CreateBkmItemL( aData );
+        }
+    else if( aData.MenuItem().Type() == KMenuTypeMailbox )
+        {
+        return CreateMailboxItemL( aData);
+        }
+    else
+        {
+        CMenuItem* item = NULL;
+        TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
+        return item;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CMenuItem* CMCSPluginEngine::CreateBkmItemL( CMCSData& aData )
     {
-    return CMenuItem::OpenL( iMenu, aMenuItem );
+    CMenuItem* item( NULL );
+    if( aData.MenuItem().Id() != KErrNotFound )
+        {        
+        item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
+        CleanupStack::PushL( item );
+        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
+        item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
+        item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
+        item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
+        CleanupStack::Pop( item );
+        }
+    return item;
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CMenuItem* CMCSPluginEngine::CreateMailboxItemL( CMCSData& aData )
+    {
+    CMenuItem* item( NULL );
+    if( aData.MenuItem().Id() != KErrNotFound )
+        {   
+        item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
+        CleanupStack::PushL( item );
+        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
+        item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
+        item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
+        item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
+        CleanupStack::Pop( item );
+        }
+    return item;
     }
 
 // ---------------------------------------------------------------------------
@@ -279,18 +387,11 @@
     {
     
     CMenuItem* menuItem;
-
+  
     // check if item exists in MCS
     if ( aMenuItem )
         { 
-        TInt id = aMenuItem->Id();
-
-        // because the flags might have changed, we have
-        // to get a fresh copy of menu item from Menu Server
-        CMenuItem* mi = CMenuItem::OpenL( iMenu, id );
-        TUint32 flags = mi->Flags();
-        delete mi;
-
+        TUint32 flags = aMenuItem->Flags();
         TUint32 isHidden = flags & TMenuItem::EHidden;
         TUint32 isMissing = flags & TMenuItem::EMissing;
 
@@ -358,14 +459,7 @@
     // check if item exists in MCS
     if ( aMenuItem )
         {
-        TInt id = aMenuItem->Id();
-
-        // because the flags might have changed, we have
-        // to get a fresh copy of the menu item from Menu Server
-        CMenuItem* mi = CMenuItem::OpenL( iMenu, id );
-        TUint32 flags = mi->Flags();
-        delete mi;
-
+        TUint32 flags = aMenuItem->Flags();
         TUint32 isHidden = flags & TMenuItem::EHidden;
         TUint32 isMissing = flags & TMenuItem::EMissing;
 
@@ -407,51 +501,172 @@
     {
     if ( iBackupRestore )
         {
-        HBufC* temp = StringLoader::LoadLC( R_MCS_DISABLE_OPEN_ITEM );
+        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM ); 
+        return;
+        }
+
+    CMCSData& dataItem( iPluginData->DataItemL( aIndex ) );
+    // run item based on its type
+    TPtrC type( dataItem.MenuItem().Type());
+
+    // run folder
+    if ( type == KMenuTypeFolder )
+        {
+        LaunchFolderItemL( dataItem );
+        }
+    else if( type == KMenuTypeUrl )
+        {
+        LaunchBookmarkItemL( dataItem );
+        }
+    else if( type == KMenuTypeMailbox )
+        {
+        LaunchMailboxItemL( dataItem );
+        }
+    else
+        {
+        LaunchMCSItemL( dataItem );
+        }
+    }
 
-        CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
-            CAknNoteDialog::EConfirmationTone,
-            CAknNoteDialog::ENoTimeout );
-        CleanupStack::PushL( dialog );
-        dialog->SetTextL( temp->Des() );
-        dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
-        CleanupStack::Pop( dialog );
-        CleanupStack::PopAndDestroy( temp );        
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginEngine::LaunchFolderItemL( CMCSData& aData )
+    {
+    CMenuItem* item = NULL;
+    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
+    
+    // item does not exist at all in MCS
+    if ( item == NULL )
+        {
+        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
+        return;
+        }
+    
+    CleanupStack::PushL( item );
+    
+    StartEffect( KMMUid );
+    
+    // message for MM application
+    HBufC8* message; 
+
+    // prepare message for launching folder
+    TBool hasApplicationGroupName( EFalse );
+    
+    TPtrC applicationGroupName( item->GetAttributeL(
+        KApplicationGroupName, hasApplicationGroupName ) );
+                                                      
+    if ( !hasApplicationGroupName )
+        {
         return;
         }
     
+    message = HBufC8::NewLC( KMMApplication().Length() + 
+                             KSetFocusString().Length() +
+                             applicationGroupName.Length() + 
+                             KHideExit2().Length() );
+
+    message->Des().Copy( KMMApplication );
+    message->Des().Append( KSetFocusString );
+    message->Des().Append( applicationGroupName );
+    message->Des().Append( KHideExit2 );
+
+    // find MM application
+    TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
+    TApaTask task( taskList.FindApp( KMMUid ) );
+
+    if ( task.Exists() )
+        {
+        // MM is already running in background - send APA Message
+        task.SendMessage( 
+            TUid::Uid( KUidApaMessageSwitchOpenFileValue ), *message );
+        }
+    else
+        { 
+        // MM not running yet - use Command Line Tail
+        RApaLsSession appArcSession;
+        CleanupClosePushL( appArcSession );
+        
+        User::LeaveIfError( appArcSession.Connect() );
+        
+        TApaAppInfo appInfo;
+        TInt err( appArcSession.GetAppInfo( appInfo, KMMUid ) );
+        
+        if ( err == KErrNone )
+            {
+            CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+            cmdLine->SetExecutableNameL( appInfo.iFullName );
+            cmdLine->SetCommandL( EApaCommandRun );
+            cmdLine->SetTailEndL( *message );
+            appArcSession.StartApp( *cmdLine );
+            CleanupStack::PopAndDestroy( cmdLine );
+            }
+        CleanupStack::PopAndDestroy( &appArcSession ); 
+        }
+    CleanupStack::PopAndDestroy( message );
+    CleanupStack::PopAndDestroy( item );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginEngine::LaunchBookmarkItemL( CMCSData& aData )
+    {
+    StartEffect( KBrowserUid );
+    
+    CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value());    
+    CleanupStack::PushL( urlHandler );
+    urlHandler->HandleUrlStandaloneL();
+    CleanupStack::PopAndDestroy( urlHandler );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginEngine::LaunchMailboxItemL( CMCSData& aData )
+    {
+    TInt id( aData.MenuItem().Id());
+    if ( id == KErrNotFound )
+        {
+        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
+        return;
+        }
+    
+    StartEffect( KMCSCmailUidValue );
+    
+    TUid uId = TUid::Uid( id );
+    const TVwsViewId viewId( KMCSCmailUidValue, KMCSCmailMailboxViewIdValue );
+    CVwsSessionWrapper* vwsSession = CVwsSessionWrapper::NewL();
+    vwsSession->CreateActivateViewEvent( viewId, uId, KNullDesC8() );
+    delete vwsSession;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CMCSPluginEngine::LaunchMCSItemL( CMCSData& aData )
+    {
     if( iWatcher->IsActive())
         {
         return;
         }
-
-    TMCSData& dataItem( iPluginData->DataItemL( aIndex ) );
-    
     CMenuItem* item = NULL;
-    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, dataItem.MenuItem().Id() ) );
+    TRAP_IGNORE( item = CMenuItem::OpenL( iMenu, aData.MenuItem().Id() ) );
 
     // item does not exist at all in MCS
     if ( item == NULL )
         {
-        HBufC* temp = StringLoader::LoadLC( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-
-        CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
-            CAknNoteDialog::EConfirmationTone,
-            CAknNoteDialog::ENoTimeout );
-        CleanupStack::PushL( dialog );
-        dialog->SetTextL( temp->Des() );
-        dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
-        CleanupStack::Pop( dialog );
-        CleanupStack::PopAndDestroy( temp );
-        temp = NULL;
-
+        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
         return;
         }
 
     CleanupStack::PushL( item );
-
+    
     TBool attrExists = ETrue;
-
     TPtrC uid = item->GetAttributeL( KMenuAttrUid, attrExists );
 
     // trying to run hidden or missing application (e.g. unistalled app 
@@ -463,136 +678,19 @@
     if ( ( attrExists && uid == KMenuAttrUndefUid ) || isHidden || isMissing )
         {
         CleanupStack::PopAndDestroy( item );
-
-        HBufC* temp = StringLoader::LoadLC( R_MCS_DISABLE_OPEN_ITEM_MISSING );
-
-        CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
-            CAknNoteDialog::EConfirmationTone,
-            CAknNoteDialog::ENoTimeout );
-        CleanupStack::PushL( dialog );
-        dialog->SetTextL( temp->Des() );
-        dialog->ExecuteDlgLD( R_MCS_DISABLE_OPEN_ITEM_DLG );
-        CleanupStack::Pop( dialog );
-        CleanupStack::PopAndDestroy( temp );
-        temp = NULL;
-
+        ShowNoteDlgL( R_MCS_DISABLE_OPEN_ITEM_MISSING );
         return;
         }
-
-    // run item based on its type
-    TPtrC type( item->Type() );
-
-    // run folder
-    if ( type == KMenuTypeFolder )
-        {
-        // message for MM application
-        HBufC8* message; 
-
-        // prepare message for launching folder
-        TBool hasApplicationGroupName( EFalse );
-        
-        TPtrC applicationGroupName( item->GetAttributeL(  
-            KApplicationGroupName, hasApplicationGroupName ) );
-                                                          
-        if ( !hasApplicationGroupName )
-            {
-            CleanupStack::PopAndDestroy( item );
-            return;
-            }
-        
-        message = HBufC8::NewLC( KMMApplication().Length() + 
-                                 KSetFocusString().Length() +
-                                 applicationGroupName.Length() + 
-                                 KHideExit2().Length() );
-
-        message->Des().Copy( KMMApplication );
-        message->Des().Append( KSetFocusString );
-        message->Des().Append( applicationGroupName );
-        message->Des().Append( KHideExit2 );
-
-        // find MM application
-        TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
-        TApaTask task( taskList.FindApp( KMMUid ) );
-
-        if ( task.Exists() )
-            {
-            // MM is already running in background - send APA Message
-            task.SendMessage( 
-                TUid::Uid( KUidApaMessageSwitchOpenFileValue ), *message );
-            }
-        else
-            { 
-            // MM not running yet - use Command Line Tail
-            RApaLsSession appArcSession;
-            CleanupClosePushL( appArcSession );
-            
-            User::LeaveIfError( appArcSession.Connect() );
-            
-            TApaAppInfo appInfo;
-            TInt err( appArcSession.GetAppInfo( appInfo, KMMUid ) );
-            
-            if ( err == KErrNone )
-                {
-                CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
-                cmdLine->SetExecutableNameL( appInfo.iFullName );
-                cmdLine->SetCommandL( EApaCommandRun );
-                cmdLine->SetTailEndL( *message );
-                appArcSession.StartApp( *cmdLine );
-                CleanupStack::PopAndDestroy( cmdLine );
-                }
-            
-            CleanupStack::PopAndDestroy( &appArcSession ); 
-            }
-        
-        CleanupStack::PopAndDestroy( message );
-        }
-    else
-        {
-        TBool exists( EFalse );
-        
-        TPtrC desc( item->GetAttributeL( KMenuAttrUid, exists ) );
-        
-        if ( exists )
-            {      
-            _LIT( KPrefix, "0x" );
-            
-            const TInt pos( desc.FindF( KPrefix ) );
-            
-            if ( pos != KErrNotFound )
-                {
-                TLex lex( desc.Mid( pos + KPrefix().Length() ) );
-                
-                // Hex parsing needs unsigned int
-                TUint32 value( 0 );
-                const TInt parseResult( lex.Val( value, EHex ) );
-                
-                if ( parseResult == KErrNone )
-                    {
-                    TUid uid( KNullUid );  
-                    TInt32 value32( value );
-                    uid.iUid = value32;   
-                    
-                    if ( uid != KNullUid )
-                        {
-                        //start a full screen effect
-                        GfxTransEffect::BeginFullScreen( 
-                            AknTransEffect::EApplicationStart,
-                            TRect(), 
-                            AknTransEffect::EParameterType, 
-                            AknTransEffect::GfxTransParam( uid,
-                            AknTransEffect::TParameter::EActivateExplicitContinue ) );
-                        }
-                    }
-                }
-            }
-
-        // run application/shortcut/bookmark
-        CMenuOperation* operation( item->HandleCommandL(
-            KMenuCmdOpen, KNullDesC8, iWatcher->iStatus ) );
-        
-        iWatcher->Watch( operation );  
+    
+    if ( attrExists )
+        {      
+        StartEffect( ParseHexUidFromString( uid ));
         }
     
+    // run application/shortcut
+    CMenuOperation* operation( item->HandleCommandL(
+        KMenuCmdOpen, KNullDesC8, iWatcher->iStatus ) );
+    iWatcher->Watch( operation );
     CleanupStack::PopAndDestroy( item );
     }
 
@@ -607,23 +705,19 @@
     
     for ( TInt i = 0; i < count; i++ )
         {
-        TMCSData& data( iPluginData->DataItemL( i ) );
+        CMCSData& data( iPluginData->DataItemL( i ) );
         data.SetDirty( ETrue );
         }
-
+    
+    iPlugin.PublishL();
+    
     // Notification must be activated again
     iNotifyWatcher->Cancel();
-    
     iNotifier.Notify( 0,
-        RMenuNotifier::EItemsAddedRemoved |
-        RMenuNotifier::EItemsReordered |
-        RMenuNotifier::EItemAttributeChanged,
+        RMenuNotifier::EItemsAddedRemoved,
         iNotifyWatcher->iStatus );
 
     iNotifyWatcher->WatchNotify( this );
-    
-    // Publish changed data
-    iPlugin.PublishL();
     }
 
 // ---------------------------------------------------------------------------
@@ -632,14 +726,18 @@
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginEngine::HandleSessionEventL( TMsvSessionEvent aEvent, 
-    TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+    TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/)
     {
     switch ( aEvent )
         {
         case EMsvEntriesDeleted:
-        // fall-through intended here
-        case EMsvEntriesChanged:
             {
+            CMsvEntrySelection* sel = static_cast<CMsvEntrySelection*>( aArg1 );
+            TInt count( sel->Count());
+            for( TInt i = 0; i < count; i++ )
+                {
+                iPluginData->RemoveDataL( sel->At( i ) );
+                }
             }
             break;
         default:
@@ -667,9 +765,7 @@
     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
     
     CGSLauncher* launcher = CGSLauncher::NewLC();
-    
     launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
-                                                        
     CleanupStack::PopAndDestroy( launcher );
     }
 
@@ -682,12 +778,10 @@
     CMenuItem& aMenuItem )
    {
    TInt pos( aPath.Locate( ':' ) );
-   
    if ( pos == KErrNotFound )
        {
        pos = aPath.Length();
        }
-   
    TPtrC skin( aPath.Left( pos ) );
    TInt sf( skin.FindF( KSkin ) );
    
@@ -697,7 +791,6 @@
        }
    
    TPtrC temp( skin.Mid( sf + KSkin().Length() ) );
-   
    TLex input( temp );   
    input.SkipSpace();
    
@@ -705,15 +798,11 @@
        {
        input.Inc();
        }
-   
    TPtrC majorId( NextIdToken( input ) );
    TPtrC minorId( NextIdToken( input ) );
    
    aMenuItem.SetAttributeL( KMenuAttrIconSkinMajorId, majorId );
    aMenuItem.SetAttributeL( KMenuAttrIconSkinMinorId, minorId );
-      
-   //TPtrC mif = aPath.Mid( pos + 1 );
-   //TInt mf = mif.FindF( KMif );
    
    if ( aPath.Length() > pos && 
       ( aPath.Mid( pos + 1 ).FindF( KMif ) != KErrNotFound ) )
@@ -721,8 +810,6 @@
        TPtrC mif( aPath.Mid( pos + 1 ) );
        TInt mf( mif.FindF( KMif ) );
        
-       //TPtrC temp1 = mif.Mid( mf+ KMif().Length());
-       
        TLex input1( mif.Mid( mf + KMif().Length() ) );
        input1.SkipSpace();
        
@@ -743,124 +830,4 @@
    return ETrue;
    }
 
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::CleanMCSItemsL
-// Called during plugin desctruction
-// Decrements reference counters of all run-time generated items
-// and deletes those which have reference counter == 0
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginEngine::CleanMCSItemsL()
-    {
-    iNotifier.Close();
-    delete iNotifyWatcher;
-    iNotifyWatcher = NULL;
-
-    const TInt count( iPluginData->DataCount() );
-    
-    for( TInt i = 0; i < count; i++ )
-        {
-        TMCSData& data( iPluginData->DataItemL(i) );
-        
-        CMenuItem* menuItem = CMenuItem::OpenL( iMenu, data.MenuItem().Id() );        
-        
-        if ( !menuItem )
-            {
-            continue;
-            }
-        
-        CleanupStack::PushL( menuItem );
-        
-        // check if ref_count attribute exists
-        TBool exists( EFalse );
-        
-        TPtrC param( menuItem->GetAttributeL( KMenuAttrRefcount, exists ) );
-        
-        if( exists )
-            {                
-            const TInt references( UpdateMenuItemsRefCountL( menuItem, -1 ) );
-            
-            // Create a nested loop inside CActiveScheduler.
-            CActiveSchedulerWait* wait = 
-                new ( ELeave ) CActiveSchedulerWait;
-            CleanupStack::PushL( wait );
-            
-            if( references > 0 )
-                {
-                // if counter is still > 0, update its value in MCS 
-                CMenuOperation* op = menuItem->SaveL( iWatcher->iStatus );
-                iWatcher->StopAndWatch( op, wait );
-                
-                // Start the nested scheduler loop.
-                wait->Start();
-                }
-            else
-                {                     
-                 // counter reached 0 -> item is not referenced by any shortcut
-                 // so remove it from MCS
-                 if( !iWatcher->IsActive() )
-                     {
-                     CMenuOperation* op = 
-                         iMenu.RemoveL( menuItem->Id(), iWatcher->iStatus );
-                     iWatcher->StopAndWatch( op, wait );
-                     
-                      // Start the nested scheduler loop.
-                     wait->Start();
-                     }
-                }
-            
-            CleanupStack::PopAndDestroy( wait );
-            wait = NULL;
-            }
-        
-        CleanupStack::PopAndDestroy( menuItem );
-        menuItem = NULL;
-        }
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMCSPluginEngine::UpdateMenuItemsRefCountL
-// Adds a given constant to a value of reference counter  
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginEngine::UpdateMenuItemsRefCountL( CMenuItem* aItem, 
-    const TInt aValueToAdd )
-    {
-    TBool exists( EFalse );
-    CleanupStack::PushL( aItem ); 
-    TPtrC param( aItem->GetAttributeL( KMenuAttrRefcount, exists ) );
-    CleanupStack::Pop( aItem );
-    
-    if ( exists )
-        {
-        TInt references;
-        TLex16 lextmp( param );
-        lextmp.Val( references );
-        references += aValueToAdd;
-        TBuf<128> buf;
-        buf.NumUC( references );
-
-        // set new ref_count
-        CleanupStack::PushL( aItem ); 
-        aItem->SetAttributeL( KMenuAttrRefcount, buf);
-        CleanupStack::Pop( aItem );
-    
-        // return new ref_count
-        return references;
-        }
-    
-    return -1;
-    }
-
-// ---------------------------------------------------------------------------
-// Creates bookmark menu item if it does not exist
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginEngine::CreateRuntimeMenuItemsL()
-    {
-    iPluginData->CreateRuntimeMenuItemsL();
-    }
-
 // End of file
-
--- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettings.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettings.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -122,15 +122,6 @@
      */
     CMCSPluginSettingsContainer* Container();
 
-    /**
-    * Check if view is activate
-    * @since S60 5.1
-    * @return ETrue if activated, EFalse otherwise
-    */
-    TBool Activated() const;
-
-protected:
-
 private: // From MEikMenuObserver
 
     /**
@@ -168,15 +159,6 @@
      */
     void HandleListBoxSelectionL();
 
-    /**
-     * DoHandleListBoxSelectionL
-     * 
-     * @param aAny
-     * @return TInt
-     */
-    static TInt DoHandleListBoxSelectionL( TAny* aAny );
-
-
 private:  // data
 
     /**
--- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsapplist.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsapplist.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -21,55 +21,12 @@
 
 #include <e32base.h>
 #include <bamdesca.h>   // For MDesCArray
-#include <apgcli.h>     // For RApaLsSession
 #include <msvapi.h>     // For MMsvSessionObserver
-#include <apgnotif.h>   // For MApaAppListServObserver
 #include <mcsmenu.h>    // For MenuContentService
 #include <propertymap.h>// For HSPS settings property map
 
-/**
- *  @ingroup group_mcsplugin
- *
- * Observer interface for application list events
- *
- * @since S60 v3.2
- */
-class MMCSPluginListObserver
-{
-public:
-
-    /**
-     * AppList event codes
-     */
-    enum TScutListEvent
-    {
-        EAppListReady,
-        EAppListUpdated,
-        EBkmListUpdated
-    };
-
-    /**
-     * Callback for application list events
-     *
-     * @since S60 v3.2
-     * @param aEvent AppList event code
-     * @param aAdded ETrue if applications were added, EFalse if removed
-     */
-    virtual void HandleScutListEventL( 
-        TScutListEvent aEvent, TBool aAdded ) = 0;
-
-   // virtual TBool IsHidden(const TUid& aAppUid) const = 0;
-
-};
-
 struct TSettingItem;
-/**
- * Application list for settings listbox
- *
- * @since S60 v3.2
- */
-
-class CMCSPluginWatcher;
+class CMenuItem;
 
 /**
  *  @ingroup group_mcsplugin
@@ -78,7 +35,7 @@
  *
  * @since S60 v9.1
  */
-class CMCSPluginSettingsAppList : public CBase, //public CActive
+class CMCSPluginSettingsAppList : public CBase,
     public MDesCArray, public MMsvSessionObserver
 {
 
@@ -143,14 +100,14 @@
         TAny* aArg3 );
 
     /**
-     * Starts the asynchronous appliation list initialization
+     * Starts the asynchronous application list initialization
      *
      * @since S60 v3.2
      */
     void StartL();
 
     /**
-     * FindItemL
+     * Finds item from item array based on property values.
      *
      * @since S60 
      * @param aProperties
@@ -160,21 +117,18 @@
         aProperties );
 
     /**
-     * 
+     * Returns menu item from list, based on given index
      *
      * @since S60 
-     * @param 
+     * @param aIndex List index
      * @return
      */
-    CMenuItem& ItemL(const TInt& aIndex );
+    CMenuItem* ItemL(const TInt& aIndex );
+    
     /**
-     * RemoveMenuItemL
-     * 
-     * @param aIndex
+     * Returns title for undefined item
      */
-    void RemoveMenuItemL( TInt aIndex );
-
-protected:
+    TPtrC UndefinedText() { return *iUndefinedText; };
 
 private:
     /**
@@ -215,20 +169,6 @@
      */
     void AddMailboxL( const TDesC& aMailbox, const TDesC& aMailboxId );
 
-    /**
-     * GetID of MCS Plugin Folder
-     * 
-     * @return TInt
-     */
-    TInt GetMCSPluginFolderIdL();
-
-    /**
-     * Update menu items
-     * 
-     * @return TInt
-     */
-    TInt UpdateMenuItemsRefCountL( CMenuItem* aItem, TInt aValueToAdd );
-
 private:  // data
 
     /**
@@ -242,47 +182,20 @@
      * Own.
      */
     CMsvSession* iMsvSession;
-
-    /**
-     * Registered observer for application list events
-     */
-    //MMCSPluginListObserver& iObserver;
-
-    /**
-     * A flag indicating if the app list should observe changes
-     */
-    TBool iObserving;
-
     /**
      * iMenu
      */
     RMenu iMenu;
 
     /**
-     * iSaveWatcher
-     */
-    CMCSPluginWatcher* iSaveWatcher;
-
-    /**
-     * iUpdateWatcher
-     */
-    CMCSPluginWatcher* iUpdateWatcher;
-
-    /**
-     * iRemoveWatcher
-     */
-    CMCSPluginWatcher* iRemoveWatcher;
-
-    /**
-     * iMCSPluginFolderId
-     */
-    TInt iMCSPluginFolderId;
-
-public:
-    /**
-     * Name of "Undefined" application
+     * Name of "Undefined" application, own
      */
     HBufC* iUndefinedText;
+    
+    /*
+     * Undefined MCS item, own
+     */
+    CMenuItem* iUndefinedItem;
 };
 
 #endif // CMCSPLUGINSETTINGSAPPLIST_H
--- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsbkmlist.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsbkmlist.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -21,15 +21,10 @@
 
 #include <e32base.h>
 #include <bamdesca.h>               // For MDesCArray
-#include <favouritesdbobserver.h>   // For MFavouritesDbObserver
 #include <favouritesdb.h>           // For RFavouritesDb
-#include <favouritesitemlist.h>     // For CFavouritesItemList
 #include <mcsmenu.h>                // For MenuContentService
+#include <propertymap.h>
 
-class CActiveFavouritesDbNotifier;
-class CAiScutSettingsItem;
-class CMCSPluginSettingsModel;
-class CMCSPluginWatcher;
 struct TSettingItem;
 /**
  *  @ingroup group_mcsplugin
@@ -100,7 +95,7 @@
      * @param aIndex Setting item to find
      * @return MCS menu item
      */
-    CMenuItem& ItemL( TInt aIndex );
+    CMenuItem* ItemL( TInt aIndex );
 
     /**
      * Returns target bookmark data from the given index
@@ -110,18 +105,10 @@
      * @param aParams On return, the bookmark parameters
      * @param aCaption On return, the bookmark caption
      * @return KErrNotFound if the bookmark cannot be found, KErrNone otherwise
-     */
-    //TInt GetDataByIndex(TInt aIndex, TPtrC& aParams, TPtrC& aCaption) const;
-    
+     */    
     TSettingItem FindItemL( 
         RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties );
-    
-    /**
-     * Remove menu item
-     * 
-     * @param aIndex 
-     */
-    void RemoveMenuItemL( TInt aIndex );
+
 
 protected:
 
@@ -147,13 +134,6 @@
         const TDesC& aUrl, TBookmarkType aType );
 
     /**
-     * Updates the bookmark list
-     *
-     * @since S60 v3.2
-     */
-    void UpdateBkmListL();
-
-    /**
      * Get bookmarks from favourites
      */
     void GetBookmarksFromFavouritesL();
@@ -185,23 +165,6 @@
     CMenuItem* MCSMenuItemL( const TDesC& aUid,const TDesC& aName,
         const TDesC& aUrl );
 
-    /**
-     * GetMCSPluginFolderIdL
-     * 
-     * @return TInt
-     */
-    TInt GetMCSPluginFolderIdL();
-
-    /**
-     * UpdateMenuItemsRefCountL
-     * 
-     * @param aItem
-     * @param aValueToAdd
-     * @return TInt
-     */
-    TInt UpdateMenuItemsRefCountL( CMenuItem* aItem, TInt aValueToAdd );
-
-
 private:
 
     /**
@@ -289,9 +252,6 @@
          */
         void ConstructL( const TDesC&  aUid, const TDesC& aCaption);
 
-    private:  // data
-
-
     };
 
 private:  // data
@@ -302,15 +262,13 @@
      */
     RPointerArray<CBkmListItem> iListItems;
 
-    // Runtime created CMenuItems must be stored, because those are refered 
+    /**
+     * Runtime created CMenuItems must be stored,
+     * because those are refered later, own.  
+     */
     RPointerArray<CMenuItem> iMenuItems;
 
     /**
-     * A flag indicating if the bookmark list should observe changes
-     */
-    TBool iObserving;
-
-    /**
      * Bookmark database session.
      * Own.
      */
@@ -324,30 +282,9 @@
 
     /**
      * iMenu
+     * Own.
      */
     RMenu iMenu;
-
-    /**
-     * Save watcher
-     */
-
-    CMCSPluginWatcher* iSaveWatcher;
-
-    /**
-     * Update watcher
-     */
-    CMCSPluginWatcher* iUpdateWatcher;
-
-    /**
-     * Remove watcher
-     */
-    CMCSPluginWatcher* iRemoveWatcher;
-
-    /**
-     * MCS plugin folder ID
-     */
-    TInt iMCSPluginFolderId;
-
 };
 
 #endif // CMCSPLUGINSETTINGSBKMLIST_H
--- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingscontainer.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingscontainer.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -83,13 +83,6 @@
     void HandleHelpCommandL();
 
     /**
-     * Dialog showing changed
-     *
-     * @since S60 v3.2
-      */
-    TBool IsChangeDialogShowing();
-
-    /**
      * Close change dialog
      *
      * @since S60 v3.2
@@ -199,7 +192,7 @@
     /**
      * Checks if there is a need to update the middle softkey label.
      */
-    void CheckMiddleSoftkeyLabelL();
+    void CheckMiddleSoftkeyLabel();
 
     // From MFavouritesDbObserver
     /**
--- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -22,18 +22,16 @@
 // External includes
 #include <e32base.h>
 #include <bamdesca.h>               // For MDesCArray
-#include <badesca.h>
 #include <hspluginsettings.h>
 #include <propertymap.h>
 
-// Internal includes
-#include "mcspluginsettingsapplist.h"
-#include "mcspluginsettingsbkmlist.h"
-
 // Forward declaration
 class CCoeEnv;
+class CMenuItem;
+class CMCSPluginSettingsAppList;
+class CMCSPluginSettingsBkmList;
+class CMCSPluginSettings;
 class CMCSPluginSettingsContainer;
-class CMCSPluginSettings;
 class HSPluginSettingsIf::CItemMap;
 
 /**
@@ -42,7 +40,8 @@
 enum TSettingType
     {
     EApplication,
-    EBookmark
+    EBookmark,
+    EMailbox
     };
 
 /**
@@ -153,26 +152,24 @@
     /**
      * Update application list
      */
-    void UpdateAppListL();
+    void UpdateAppListL( TBool aUpdateSettings = ETrue );
 
     /**
      * Update bookmark list
      */
-    void UpdateBkmListL();
+    void UpdateBkmListL( TBool aUpdateSettings = ETrue );
 
     /**
      * Update settings container
      * 
      * @param aPluginId
      */
-    void UpdateSettingsContainerL( const TDesC8& aPluginId );
-
+    void SetPluginIdL( const TDesC8& aPluginId );
+    
     /**
-       * Update settings model
-       * 
-       * @param aPluginId
-       */
-    void UpdateSettingModelL( const TDesC8& aPluginId );
+     * Read settings from HSPS and update settings list
+     */
+    void UpdateSettingsL();
 
 private:
 
@@ -190,7 +187,7 @@
     void ConstructL();
 
     /**
-     * ListBoxLineL
+     * ListBoxLine for list
      * 
      * @param aCaption
      * @param aIndex
@@ -199,7 +196,7 @@
     TPtrC ListBoxLineL( const TDesC& aCaption, TInt aIndex ) const;
 
     /**
-     * ItemL
+     * Returns setting item based on properties.
      * 
      * @param aProperties
      * @return TSettingItem
@@ -225,15 +222,10 @@
     TBool SettingLockedL( 
         RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties );
 
-    /**
-     * Update settings
-     * 
-     * @param aPluginId
-     */
-    void UpdateSettingsL( const TDesC8& aPluginId );
+    
 
     /**
-     * Save settings
+     * Save settings into HSPS
      * 
      * @param aIndex
      * @param aMenuItem
@@ -248,13 +240,20 @@
      */
     RArray<TSettingItem> iSettings;
 
-    // Homescreen settings API. NOT OWNED!
+    /**
+    * Homescreen settings API. Not owned.
+    */
     HSPluginSettingsIf::CHomescreenSettings* iPluginSettings;
 
+    /**
+     * HSPS settings id.
+     */
     HBufC8* iPluginId;
 
-    // Stores the text which is drawn by listbox
-    // Listbox takes only reference
+    /**
+     * Stores the text which is drawn by listbox
+     * Listbox takes only reference, own.
+     */
     mutable HBufC* iListBoxLine;
 
     /**
--- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -16,19 +16,13 @@
 */
 
 #include <ecom/implementationproxy.h>
-#include <e32std.h>
 #include <eikmenup.h>
 #include <eikbtgpc.h>
-#include <StringLoader.h>
 #include <gsfwviewuids.h>
 #include <gsprivatepluginproviderids.h>
-#include <bautils.h>
 #include <pathinfo.h>
 #include <featmgr.h>
-#include <e32property.h>                // For RProperty
-#include <activeidle2domainpskeys.h>    // For KPSUidActiveIdle2
 
-#include <avkon.rsg>
 #include <mcspluginsettingsres.rsg>
 #include <aisystemuids.hrh>
 
@@ -156,8 +150,8 @@
     case EAknSoftkeyBack:
         if (iAppUi->View(KGSMainViewUid))
         {
-            // if we are in GS activate parent plugin view (standby view)...
-            iAppUi->ActivateLocalViewL(KGSPrslnPluginUid);
+        // if we are in GS activate parent plugin view (standby view)...
+        iAppUi->ActivateLocalViewL(KGSPrslnPluginUid);
         }
         else
         {
@@ -181,7 +175,7 @@
 // ----------------------------------------------------------------------------
 //
 void CMCSPluginSettings::DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage)
-{
+    {
     CEikButtonGroupContainer* cba = Cba();
 
     if (cba)
@@ -196,11 +190,13 @@
         }
         cba->DrawDeferred();
     }
-    iModel->UpdateSettingModelL( aCustomMessage);
-    CGSBaseView::DoActivateL(aPrevViewId, aCustomMessageId, aCustomMessage);
-    
-    iModel->UpdateSettingsContainerL( aCustomMessage );
-}
+
+    iModel->SetPluginIdL( aCustomMessage );
+    iModel->UpdateAppListL( EFalse );
+    iModel->UpdateBkmListL( EFalse );
+    iModel->UpdateSettingsL();
+    CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+    }
 
 // ----------------------------------------------------------------------------
 // From CAknView
@@ -208,11 +204,9 @@
 // ----------------------------------------------------------------------------
 //
 void CMCSPluginSettings::DoDeactivate()
-{
+    {
     CGSBaseView::DoDeactivate();
-
-    iModel->SetContainer(Container());
-}
+    }
 
 // ----------------------------------------------------------------------------
 // From MEikMenuObserver
@@ -236,7 +230,7 @@
 }
 
 // ---------------------------------------------------------------------------
-// From CGSPluginInterface. 256
+// From CGSPluginInterface
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginSettings::GetCaptionL(TDes& aCaption) const
@@ -295,13 +289,4 @@
     Container()->HandleChangeCommandL();
 }
 
-// ---------------------------------------------------------------------------
-// Returns if container exists or not
-// ---------------------------------------------------------------------------
-//
-TBool CMCSPluginSettings::Activated() const
-    {
-    return iContainer ? ETrue : EFalse;
-    }
-
 // End of File.
--- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsapplist.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsapplist.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -15,32 +15,18 @@
 *
 */
 
-
-#include <e32cmn.h>
-#include <msvuids.h>        // For KMsvRootIndexEntryIdValue
-#include <SenduiMtmUids.h>
-#include <StringLoader.h>
 #include <aistrcnv.h>
-#include <featmgr.h>
 #include <mcsmenuitem.h>
 #include <mcsmenufilter.h>
 
 #include "mcspluginsettingsapplist.h"
-#include "mcspluginsettingsmodel.h"
-#include "mcspluginwatcher.h"
+#include "mcspluginsettingsmodel.h" // For TSettingItem
 
 _LIT( KMyMenuData, "matrixmenudata" );
 _LIT( KMenuTypeShortcut, "menu:shortcut" );
-_LIT( KMenuAttrRefcount, "ref_count" );
-_LIT( KMenuParamMailbox, "mailbox:" );
+_LIT( KMenuTypeMailbox, "menu:mailbox" );
 _LIT( KMenuAttrParameter, "param" );
 _LIT( KMenuAttrLocked, "locked" );
-_LIT( KMenuIconFile, "aimcsplugin.mif" );
-_LIT( KMenuIconId, "16388" );
-_LIT( KMenuMaskId, "16389" );
-_LIT( KMailboxUid, "0x100058c5" );
-_LIT( KInitialRefCount, "1" );
-_LIT( KMCSFolder, "mcsplugin_folder" );
 _LIT8( KItemLocked, "locked");
 _LIT8( KProperValueFolder, "folder" );
 _LIT( KMenuAttrUndefUid, "0x99999991" );
@@ -56,7 +42,6 @@
 //
 CMCSPluginSettingsAppList::CMCSPluginSettingsAppList()
     {
-    iMCSPluginFolderId = 0;
     }
 
 // ---------------------------------------------------------------------------
@@ -68,9 +53,6 @@
     iMsvSession = CMsvSession::OpenAsObserverL(*this);
 
     iMenu.OpenL( KMyMenuData );
-    iSaveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-    iUpdateWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-    iRemoveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
     
     // Get "Undefined" icon and text
     CMenuFilter* filter = CMenuFilter::NewL();
@@ -84,19 +66,16 @@
     RArray<TMenuItem> items;
     CleanupClosePushL( items );
     iMenu.GetItemsL( items, root, filter, ETrue );
-    TMenuItem undefItem;
 
     if ( items.Count() > 0 )
         {
-        undefItem = items[ 0 ];
-        CMenuItem* undefinedItem = CMenuItem::OpenL( iMenu, undefItem );
+        iUndefinedItem = CMenuItem::OpenL( iMenu, items[ 0 ] );
         iUndefinedText = NULL;
 
-        if ( undefinedItem )
+        if ( iUndefinedItem )
             {
-            TBool exists( KErrNotFound );
-            CleanupStack::PushL( undefinedItem );
-            TPtrC undefined = undefinedItem->GetAttributeL( KMenuItemLongName, exists );
+            TBool exists( KErrNotFound );//CleanupStack::PushL( undefinedItem );
+            TPtrC undefined = iUndefinedItem->GetAttributeL( KMenuItemLongName, exists );
 
             if ( exists )
                 {
@@ -107,7 +86,6 @@
                 {
                 iUndefinedText = KNullDesC().Alloc();
                 }
-            CleanupStack::PopAndDestroy( undefinedItem );
             }
         }
 
@@ -138,15 +116,9 @@
 
     iListItems.ResetAndDestroy();
     iMenu.Close();
-    delete iSaveWatcher;
-    delete iUpdateWatcher;
-    delete iRemoveWatcher;
     
-    if ( iUndefinedText )
-        {
-        delete iUndefinedText;
-        iUndefinedText = NULL;
-        }
+    delete iUndefinedText;
+    delete iUndefinedItem;
     }
 
 // ---------------------------------------------------------------------------
@@ -174,10 +146,11 @@
     CMenuItem* item = iListItems[ aIndex ];
 
     TBool attrExists;
-    TPtrC itm;
+    TPtrC itm( KNullDesC );
     TRAP_IGNORE( 
         itm.Set( item->GetAttributeL( KMenuAttrLongName, attrExists ) );
         )
+
     return itm;
     }
 
@@ -223,14 +196,13 @@
         {
         if( aProperties[j]->Name() == KType )
             {
-
             if ( aProperties[j]->Value() == KProperValueFolder )
                 {
                 isFolder = ETrue;
                 }
             break;
             }
-        }   
+        }
 
     TBool itemFound( EFalse );
     
@@ -239,7 +211,6 @@
         {
         TBool match( ETrue );
         CMenuItem* item = iListItems[ i ];
-
         for ( TInt j = 0; j < aProperties.Count() && match; j++ )
             {
             // type and locked properties skipped
@@ -296,82 +267,19 @@
     return settingItem;
     }
 
-
 // ---------------------------------------------------------------------------
-// Returns menuitems at given index. Since this method is called during
-// adding the item to the Desktop widget, we also have to increment
-// ref_count attribute if the item is run-time generated (i.e. Mailbox)
+// Returns menuitems at given index.
 // ---------------------------------------------------------------------------
 //
-CMenuItem& CMCSPluginSettingsAppList::ItemL( const TInt& aIndex )
+CMenuItem* CMCSPluginSettingsAppList::ItemL( const TInt& aIndex )
     {
-
     CMenuItem* menuItem( NULL );
-    
-    // check if index in within the list boundaries
+    // check if index is within the list boundaries
     if ( aIndex >= 0 && aIndex < iListItems.Count() )
         {
-
         menuItem = iListItems[ aIndex ];
-
-        TBool hasParam = EFalse;
-        CleanupStack::PushL( menuItem );
-        TPtrC param = menuItem->GetAttributeL( KMenuAttrParameter, hasParam ); 
-        CleanupStack::Pop( menuItem );
-
-        // if item is a mailbox, add it to MCS
-        // (if it is not already there)
-        if ( hasParam && param.Find( KMenuParamMailbox ) != KErrNotFound )
-            {
-
-            // set up a filter for finding the mailbox
-            // with given ID in MCS
-            CMenuFilter* filter = CMenuFilter::NewL();
-            CleanupStack::PushL( filter );
-
-            filter->SetType( KMenuTypeShortcut );
-            filter->HaveAttributeL( KMenuAttrParameter, param );
-
-            // search menu from the Root folder with the filter
-            const TInt rootId = iMenu.RootFolderL();
-            RArray<TMenuItem> itemArray;
-            CleanupClosePushL( itemArray );
-            iMenu.GetItemsL( itemArray, rootId, filter, ETrue );
-                
-            // save the number of findings
-            TInt count( itemArray.Count() );
-
-            // if MenuItem does not exist in MCS
-            if ( count == 0 )
-                {
-                // save the item into Matrixmenudata.xml
-                // the "op" variable is cleaned up by iSaveWatcher when asynchronous 
-                // operation finishes
-                CleanupStack::PushL( menuItem );
-                CMenuOperation* op = menuItem->SaveL( iSaveWatcher->iStatus );
-                CleanupStack::Pop( menuItem );
-                iSaveWatcher->Watch( op ); 
-                }
-            else
-                {
-                // Item already exists in MCS
-                // If it has reference counter, increment it before returning.
-                CMenuItem* itm = CMenuItem::OpenL( iMenu, itemArray[ 0 ] );
-
-                TInt newRefCount = UpdateMenuItemsRefCountL( itm, 1 );
-                if ( newRefCount > -1 )
-                    {
-                    CleanupStack::PushL( itm );
-                    CMenuOperation* op = itm->SaveL( iSaveWatcher->iStatus );
-                    CleanupStack::PopAndDestroy( itm );
-                    iSaveWatcher->Watch( op );
-                    }
-                }
-            CleanupStack::PopAndDestroy( &itemArray );
-            CleanupStack::PopAndDestroy( filter );
-            }
         }
-    return *menuItem;
+    return menuItem;
     }
 
 // ---------------------------------------------------------------------------
@@ -403,8 +311,7 @@
     CMenuFilter* filter = CMenuFilter::NewL();
     CleanupStack::PushL( filter );
 
-    // skip run-time generated items
-    filter->DoNotHaveAttributeL( KMenuAttrRefcount );
+    // skip locked items
     filter->DoNotHaveAttributeL( KMenuAttrLocked );
     const TInt rootId = iMenu.RootFolderL();
     RArray<TMenuItem> itemArray;
@@ -460,8 +367,6 @@
 //
 void CMCSPluginSettingsAppList::AddMailboxesL()
     {
-    
-    iListItems.ResetAndDestroy();
     CMsvEntry* rootEntry = GetRootEntryL();
     CleanupStack::PushL(rootEntry);
     TBuf<255> mailboxId;
@@ -494,175 +399,19 @@
 void CMCSPluginSettingsAppList::AddMailboxL( const TDesC& aMailbox,
                                              const TDesC& aMailboxId )
     {
-        // prepare param value
-        HBufC* params = HBufC::NewLC( KMenuParamMailbox().Length() + aMailboxId.Length() );
-        params->Des().Copy( KMenuParamMailbox );
-        params->Des().Append( aMailboxId );
-        TPtrC paramValue( params->Des() );
-
-        TLinearOrder<CMenuItem> sortMethod( CMCSPluginSettingsAppList::CompareNameL );
-        CMenuItem* newItem = CMenuItem::CreateL( iMenu, 
-                                                 KMenuTypeShortcut, 
-                                                 GetMCSPluginFolderIdL(), 
-                                                 0 );
-        CleanupStack::PushL( newItem );
+    TLinearOrder<CMenuItem> sortMethod( CMCSPluginSettingsAppList::CompareNameL );
+    CMenuItem* newItem = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
+    CleanupStack::PushL( newItem );
 
-        // mailbox is a shortcut item with "mailbox:mailboxID" parameter
-        newItem->SetAttributeL( KMenuAttrUid, KMailboxUid );
-        newItem->SetAttributeL( KMenuAttrLongName, aMailbox );
-        newItem->SetAttributeL( KMenuAttrParameter, paramValue );
-        newItem->SetAttributeL( KMenuAttrRefcount, KInitialRefCount );
+    // mailbox is a shortcut item with "mailbox:mailboxID" parameter
+    newItem->SetAttributeL( KMenuAttrUid, aMailboxId );
+    newItem->SetAttributeL( KMenuAttrLongName, aMailbox );
+    // Mailbox name is saved to settings into param field.
+    newItem->SetAttributeL( KMenuAttrParameter, aMailbox );
 
-        // setting icon for the shortcut
-        newItem->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-        newItem->SetAttributeL( KMenuAttrIconId, KMenuIconId );
-        newItem->SetAttributeL( KMenuAttrMaskId, KMenuMaskId );
-
-        // append the item into iListItems lists
-        User::LeaveIfError( iListItems.InsertInOrderAllowRepeats( newItem, sortMethod ) );
-        CleanupStack::Pop( newItem );
-        CleanupStack::PopAndDestroy( params );
+    // append the item into iListItems lists
+    User::LeaveIfError( iListItems.InsertInOrderAllowRepeats( newItem, sortMethod ) );
+    CleanupStack::Pop( newItem );
     }
 
-// ---------------------------------------------------------------------------
-// Removes run-time generated menuitem (i.e. Mailbox) from MCS
-// If the item at given index is not run-time generated, return
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginSettingsAppList::RemoveMenuItemL( TInt aIndex )
-    {
-
-    if ( aIndex < 0 || aIndex > iListItems.Count() - 1 )
-        {
-        return;
-        }
-
-    CMenuItem* menuItem = iListItems[ aIndex ];
-    
-    TBool hasParam = ETrue;
-    TPtrC param = menuItem->GetAttributeL( KMenuAttrParameter, hasParam );
-
-    if ( !hasParam )
-        {
-        // nothing to do
-        return;
-        }
-
-    // set up a filter for finding the mailbox
-    // with given ID in MCS
-    CMenuFilter* filter = CMenuFilter::NewL();
-    CleanupStack::PushL( filter );
-
-    filter->SetType( KMenuTypeShortcut );
-    filter->HaveAttributeL( KMenuAttrParameter, param );
-
-    // search menu from the Root folder with the filter
-    const TInt rootId = iMenu.RootFolderL();
-    RArray<TMenuItem> itemArray;
-    CleanupClosePushL( itemArray );
-    iMenu.GetItemsL( itemArray, rootId, filter, ETrue );
-
-    // save the number of findings
-    TInt count( itemArray.Count() );
-    
-    if ( count > 0 )
-        {
-        // Item already exists in MCS
-        // If it has reference counter, increment it before returning.
-        CMenuItem* itm = CMenuItem::OpenL( iMenu, itemArray[ 0 ] );
-        
-        // decrement ref_count attribute 
-        TInt newRefCount = UpdateMenuItemsRefCountL( itm, -1 );
-        if ( newRefCount > 0 )
-            {
-            CleanupStack::PushL( itm ); 
-            CMenuOperation* op = itm->SaveL( iUpdateWatcher->iStatus );
-            CleanupStack::Pop( itm );
-            iUpdateWatcher->Watch( op );
-            }
-        else if ( newRefCount == 0 )
-            {
-            // counter reached 0 -> item is not referenced by any shortcut
-            // so remove it from MCS
-            if ( iRemoveWatcher->IsActive() )
-               {
-               return;
-               }
-            CMenuOperation* op = iMenu.RemoveL( itm->Id(), iRemoveWatcher->iStatus );
-            iRemoveWatcher->Watch( op );
-            }
-            delete itm;
-        }
-    CleanupStack::PopAndDestroy( &itemArray );
-    CleanupStack::PopAndDestroy( filter );
-    }
-
-// ---------------------------------------------------------------------------
-// Gets MCS Plugin folder ID. This hidden folder in matrixmenudata.xml is used 
-// for storing run-time generated menuitems
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginSettingsAppList::GetMCSPluginFolderIdL()
-    {
-    
-    if ( iMCSPluginFolderId == 0 )
-        {
-        CMenuItem* item( NULL );
-        CMenuFilter* filter = CMenuFilter::NewL();
-        CleanupStack::PushL( filter );
-        filter->SetType( KMenuTypeFolder );
-        filter->HaveAttributeL( KMenuAttrLongName, KMCSFolder );
-        const TInt rootId = iMenu.RootFolderL();
-        RArray<TMenuItem> itemArray;
-        CleanupClosePushL( itemArray );
-        iMenu.GetItemsL( itemArray, rootId, filter, ETrue );
-        if ( itemArray.Count() > 0 )
-            {
-            item = CMenuItem::OpenL( iMenu, itemArray[ 0 ] );
-            iMCSPluginFolderId = item->Id();
-            }
-        else 
-            {
-            iMCSPluginFolderId = iMenu.RootFolderL();
-            }
-        CleanupStack::PopAndDestroy( &itemArray );
-        CleanupStack::PopAndDestroy( filter ); 
-        delete item; 
-        }
-    return iMCSPluginFolderId;
-    
-    }
-
-// ---------------------------------------------------------------------------
-// Helper method for updating ref_count attribute of run-time generated 
-// menuitems
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginSettingsAppList::UpdateMenuItemsRefCountL( CMenuItem* aItem, 
-                                                          TInt aValueToAdd )
-    {
-    
-    TBool exists = EFalse;
-    CleanupStack::PushL( aItem ); 
-    TPtrC param = aItem->GetAttributeL( KMenuAttrRefcount, exists );
-    CleanupStack::Pop( aItem );
-    if ( exists )
-        {
-        TInt references;
-        TLex16 lextmp( param );
-        lextmp.Val( references );
-        references += aValueToAdd;
-        TBuf<128> buf;
-        buf.NumUC( references );
-        // set new ref_count
-        CleanupStack::PushL( aItem ); 
-        aItem->SetAttributeL( KMenuAttrRefcount, buf );
-        CleanupStack::Pop( aItem );
-        // return new ref_count
-        return references;
-        }
-    return -1;
-    }
-
-
 // End of File.
--- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsbkmlist.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsbkmlist.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -15,32 +15,19 @@
 *
 */
 
-
-#include <StringLoader.h>
-#include <activefavouritesdbnotifier.h> // For CActiveFavouritesDbNotifier
+#include <favouritesitemlist.h>
 #include <aistrcnv.h>
 #include <mcsmenufilter.h>
 #include <mcsmenuitem.h>
-#include <mcsmenuoperation.h>
-#include <mcspluginsettingsres.rsg>
 
 #include "mcspluginsettingsmodel.h"
-#include "mcspluginsettingsapplist.h"
 #include "mcspluginsettingsbkmlist.h"
-#include "mcspluginwatcher.h"
-#include "debug.h"
 
 _LIT( KMyMenuData, "matrixmenudata" );
 _LIT( KMenuUrl, "menu:url" );
-_LIT( KMenuIconFile, "aimcsplugin.mif" );
-_LIT( KMenuIconId, "16386" );
-_LIT( KMenuMaskId, "16387" );
 _LIT( KUrl, "url" );
 _LIT8( KUid, "uid" );
-_LIT( KMenuAttrRefcount, "ref_count" );
-_LIT( KInitialRefCount, "1" );
-_LIT( KMCSFolder, "mcsplugin_folder" );
-
+_LIT( KMenuAttrParameter, "param" );
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -51,7 +38,6 @@
 //
 CMCSPluginSettingsBkmList::CMCSPluginSettingsBkmList()
     {
-    iMCSPluginFolderId = 0;
     }
 
 // ---------------------------------------------------------------------------
@@ -64,10 +50,6 @@
     User::LeaveIfError(iBookmarkDb.Open(iBookmarkSess, KBrowserBookmarks));
     iMenu.OpenL( KMyMenuData );
     GetBookmarkListL();
-
-    iSaveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-    iUpdateWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
-    iRemoveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation );
     }
 
 // ---------------------------------------------------------------------------
@@ -94,9 +76,6 @@
     iBookmarkDb.Close();
     iBookmarkSess.Close();
     iMenu.Close();
-    delete iSaveWatcher;
-    delete iUpdateWatcher;
-    delete iRemoveWatcher;
     }
 
 // ---------------------------------------------------------------------------
@@ -132,7 +111,7 @@
 TSettingItem CMCSPluginSettingsBkmList::FindItemL( RPointerArray<HSPluginSettingsIf::CPropertyMap>& aProperties )
     {
     TInt index( KErrNotFound );
-    TSettingItem settingItem = { KErrNotFound, EBookmark };
+    TSettingItem settingItem = { KErrNotFound, EBookmark, EFalse };
     for( TInt i= 0; i < aProperties.Count(); i++ )
         {
         if( aProperties[i]->Name() == KUid )
@@ -202,7 +181,6 @@
 //
 void CMCSPluginSettingsBkmList::GetBookmarksFromMCSL()
     {
-    TBool exists( EFalse );
     CMenuFilter* filter = CMenuFilter::NewL();
     CleanupStack::PushL( filter );
     filter->SetType( KMenuUrl );
@@ -213,26 +191,20 @@
     TInt count( itemArray.Count() );
     for ( TInt i = 0; i < count; i++ )
         {
+        TBool uidExists( EFalse );
+        TBool nameExists( EFalse );
+        TBool urlExists( EFalse );
         CMenuItem* menuItem = CMenuItem::OpenL( iMenu, itemArray[i] );
         CleanupStack::PushL( menuItem );
-        TPtrC uid = menuItem->GetAttributeL( KMenuAttrUid, exists );
-        TPtrC name = menuItem->GetAttributeL( KMenuAttrLongName, exists );
-        TPtrC url = menuItem->GetAttributeL( KUrl, exists );
-
-        // Check if bookmark is already present in Bookmark list.
-        // This may happen in case of Favourite Bookmarks that were
-        // previously added to MCS.
-        // If it is, do not add it to Bookmark list anymore.
-        
-        TBool isRuntimeGenerated = EFalse;
-        menuItem->GetAttributeL( KMenuAttrRefcount, isRuntimeGenerated );
-
-        // if is not runtime generated and url exists, add it
-        if ( !isRuntimeGenerated && exists )
+        TPtrC uid = menuItem->GetAttributeL( KMenuAttrUid, uidExists );
+        TPtrC name = menuItem->GetAttributeL( KMenuAttrLongName, nameExists );
+        TPtrC url = menuItem->GetAttributeL( KUrl, urlExists );
+        // if all attrib exists, add it ( url ignored )
+        if ( uidExists && uid.Length() > 0 && 
+            nameExists && name.Length() > 0 )
             {
             AddBookmarkL( uid, name, url, EMCSBookmark );
             }
-
         CleanupStack::PopAndDestroy( menuItem );
         }
 
@@ -246,68 +218,19 @@
 // If predefined bookmark was selected, MCS menu item is retrieved
 // ---------------------------------------------------------------------------
 //
-CMenuItem& CMCSPluginSettingsBkmList::ItemL( TInt aIndex )
+CMenuItem* CMCSPluginSettingsBkmList::ItemL( TInt aIndex )
     {
     CMenuItem* menuItem( NULL );
     CBkmListItem* listItem = iListItems[aIndex];
     if ( listItem->iType == EFavBookmark )
-        {    
-        TPtrC uid = *listItem->iUid;
-        TPtrC name = *listItem->iCaption;
-        TPtrC  url = *listItem->iUrl;
-        menuItem = CreateMenuItemL( uid, name, url );
+        {
+        menuItem = CreateMenuItemL( *listItem->iUid, *listItem->iCaption, *listItem->iUrl );
         }
     else
         {
         menuItem = MCSMenuItemL( *listItem->iUid, *listItem->iCaption, *listItem->iUrl );
         }
-    return *menuItem;
-    }
-
-// ---------------------------------------------------------------------------
-// Removes the menu item from MCS if it was created in runtime i.e. type is EFavBookmark.
-// Favourite bookmarks have ref_count attribute, which is decremented everytime
-// the bookmark is removed from some shortcut. When this counter reaches 0,
-// its MenuItem is removed from MCS.
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginSettingsBkmList::RemoveMenuItemL( TInt aIndex )
-    {
-
-    if ( aIndex < 0 || aIndex > iListItems.Count() - 1 )
-        {
-        return;
-        }
-
-    CBkmListItem* listItem = iListItems[aIndex];
-    if( listItem->iType == EFavBookmark )
-        {
-        CMenuItem* menuItem = MCSMenuItemL( *listItem->iUid, *listItem->iCaption, *listItem->iUrl );
-        if ( !menuItem )
-            {
-            return;
-            }
-        // decrement ref_count attribute 
-        TInt newRefCount = UpdateMenuItemsRefCountL( menuItem, -1 );
-        if ( newRefCount > 0 )
-            {
-            CleanupStack::PushL( menuItem ); 
-            CMenuOperation* op = menuItem->SaveL( iUpdateWatcher->iStatus );
-            CleanupStack::Pop( menuItem );
-            iUpdateWatcher->Watch( op );
-            }
-        else if ( newRefCount == 0 )
-            {
-            // counter reached 0 -> item is not referenced by any shortcut
-            // so remove it from MCS
-            if ( iRemoveWatcher->IsActive() )
-                {
-                return;
-                }
-            CMenuOperation* op = iMenu.RemoveL( menuItem->Id(), iRemoveWatcher->iStatus );
-            iRemoveWatcher->Watch( op );
-            }
-        }
+    return menuItem;
     }
 
 // ---------------------------------------------------------------------------
@@ -320,46 +243,15 @@
                                                        const TDesC& aName,
                                                        const TDesC& aUrl )
     {
-    // try to search item in MCS
-    CMenuItem* item = MCSMenuItemL( aUid, aName, aUrl );
-    
-    if ( item == NULL )
-        {
-        // Item does not exist in MCS yet. 
-        // We will add a new one with reference counter set to 1.
-        CMenuItem* newItem = CMenuItem::CreateL( iMenu, 
-                                                 KMenuTypeUrl, 
-                                                 GetMCSPluginFolderIdL(), 0 );
-        CleanupStack::PushL( newItem );
-
-        newItem->SetAttributeL( KMenuAttrUid, aUid );
-        newItem->SetAttributeL( KMenuAttrLongName, aName );
-        newItem->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
-        newItem->SetAttributeL( KMenuAttrIconId, KMenuIconId );
-        newItem->SetAttributeL( KMenuAttrMaskId, KMenuMaskId );
-        newItem->SetAttributeL( KMenuAttrRefcount, KInitialRefCount );
-        newItem->SetAttributeL( KUrl , aUrl );
-        
-        CMenuOperation* op = newItem->SaveL( iSaveWatcher->iStatus );
-        iSaveWatcher->Watch( op );
-        iMenuItems.AppendL( newItem );
-        CleanupStack::Pop( newItem );
-        return newItem;
-        }
-    else
-        {
-        // Item already exists in MCS
-        // If it has reference counter, increment it before returning.
-        TInt newRefCount = UpdateMenuItemsRefCountL( item, 1 );
-        if ( newRefCount > -1 )
-            {
-            CleanupStack::PushL( item );
-            CMenuOperation* op = item->SaveL( iSaveWatcher->iStatus );
-            CleanupStack::Pop( item );
-            iSaveWatcher->Watch( op );
-            }
-        }
-    return item;
+    CMenuItem* newItem = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
+    CleanupStack::PushL( newItem );
+    newItem->SetAttributeL( KMenuAttrUid, aUid );
+    newItem->SetAttributeL( KMenuAttrLongName, aName );
+    newItem->SetAttributeL( KMenuAttrView, aUrl );
+    newItem->SetAttributeL( KMenuAttrParameter, aName );
+    iMenuItems.AppendL( newItem );
+    CleanupStack::Pop( newItem );
+    return newItem;
     }
 
 // ---------------------------------------------------------------------------
@@ -385,9 +277,12 @@
     if( itemArray.Count() > 0 )
         {
         item = CMenuItem::OpenL( iMenu, itemArray[0] );
-        CleanupStack::PushL( item );
-        iMenuItems.AppendL( item );
-        CleanupStack::Pop( item );
+        if ( item )
+            {
+            CleanupStack::PushL( item );
+            iMenuItems.AppendL( item );
+            CleanupStack::Pop( item );
+            }
         }
     CleanupStack::PopAndDestroy( &itemArray );
     CleanupStack::PopAndDestroy( filter );
@@ -410,21 +305,17 @@
         {
         listItem->iUrl = aUrl.AllocL();
         }
+    else
+        {
+        listItem->iUrl = KNullDesC().AllocL();
+        }
+
     TLinearOrder<CBkmListItem> sortMethod(CBkmListItem::CompareCaption);
     User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
     CleanupStack::Pop(listItem);
     }
 
 // ---------------------------------------------------------------------------
-// Updates the bookmark list.
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginSettingsBkmList::UpdateBkmListL()
-    {
-    GetBookmarkListL();
-    }
-
-// ---------------------------------------------------------------------------
 //Nested class to store individual bookmark list items
 // ---------------------------------------------------------------------------
 //
@@ -486,70 +377,5 @@
     return TPtrC(*iCaption);
 }
 
-// ---------------------------------------------------------------------------
-// Gets MCS Plugin folder ID. This hidden folder in matrixmenudata.xml is used 
-// for storing run-time generated menuitems
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginSettingsBkmList::GetMCSPluginFolderIdL()
-    {
-    if ( iMCSPluginFolderId == 0 )
-        {
-        CMenuItem* item( NULL );
-        CMenuFilter* filter = CMenuFilter::NewL();
-        CleanupStack::PushL( filter );
-        filter->SetType( KMenuTypeFolder );
-        filter->HaveAttributeL( KMenuAttrLongName, KMCSFolder );
-        const TInt rootId = iMenu.RootFolderL();
-        RArray<TMenuItem> itemArray;
-        CleanupClosePushL( itemArray );
-        iMenu.GetItemsL( itemArray, rootId, filter, ETrue );
-        if ( itemArray.Count() > 0 )
-            {
-            item = CMenuItem::OpenL( iMenu, itemArray[0] );
-            iMCSPluginFolderId = item->Id();
-            }
-        else 
-            {
-            iMCSPluginFolderId = iMenu.RootFolderL();
-            }
-        CleanupStack::PopAndDestroy( &itemArray );
-        CleanupStack::PopAndDestroy( filter ); 
-        delete item; 
-        }
-    return iMCSPluginFolderId;
-    }
-
-// ---------------------------------------------------------------------------
-// Helper method for updating ref_count attribute of run-time generated 
-// menuitems
-// ---------------------------------------------------------------------------
-//
-TInt CMCSPluginSettingsBkmList::UpdateMenuItemsRefCountL( CMenuItem* aItem, 
-                                                          TInt aValueToAdd )
-    {
-    
-    TBool exists = EFalse;
-    CleanupStack::PushL( aItem ); 
-    TPtrC param = aItem->GetAttributeL( KMenuAttrRefcount, exists );
-    CleanupStack::Pop( aItem );
-    if ( exists )
-        {
-        TInt references;
-        TLex16 lextmp( param );
-        lextmp.Val( references );
-        references += aValueToAdd;
-        TBuf<128> buf;
-        buf.NumUC( references );
-
-        // set new ref_count
-        CleanupStack::PushL( aItem ); 
-        aItem->SetAttributeL( KMenuAttrRefcount, buf );
-        CleanupStack::Pop( aItem );
-        // return new ref_count
-        return references;
-        }
-    return -1;
-    }
 
 // End of File.
--- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -15,27 +15,19 @@
 *
 */
 
-
-#include <aknlists.h>
-#include <AknWaitDialog.h>
 #include <aknnotewrappers.h>
-#include <eikbtgpc.h>
-#include <gslistbox.h>
-#include <gsfwviewuids.h>
+#include <aknlistquerydialog.h>
+#include <e32cmn.h>
 #include <aknradiobuttonsettingpage.h>
-#include <akntextsettingpage.h>
-#include <centralrepository.h>
 #include <StringLoader.h>
-
 #include <csxhelp/ai.hlp.hrh>
 #include <hlplch.h>
-
-// For CActiveFavouritesDbNotifier
-#include <activefavouritesdbnotifier.h> 
+#include <activefavouritesdbnotifier.h>
 #include <mcspluginsettingsres.rsg>
 
 #include "mcspluginsettingscontainer.h"
 #include "mcspluginsettingsmodel.h"
+#include "mcspluginsettingsapplist.h"
 #include "mcspluginsettingsbkmlist.h"
 #include "mcspluginsettings.hrh"
 #include "mcspluginuids.hrh"
@@ -61,7 +53,7 @@
     iListBox = new (ELeave) CAknSettingStyleListBox;
     BaseConstructL(aRect, R_AI_MCS_SETTINGS_VIEW_TITLE, NULL);
     StartObservingL();
-    CheckMiddleSoftkeyLabelL();
+    CheckMiddleSoftkeyLabel();
     }
 
 // ---------------------------------------------------------------------------
@@ -88,9 +80,7 @@
         {
         iNotifyWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::ENotify );
         iNotifier.Notify( 0,
-            RMenuNotifier::EItemsAddedRemoved | 
-            RMenuNotifier::EItemsReordered |
-            RMenuNotifier::EItemAttributeChanged,
+            RMenuNotifier::EItemsAddedRemoved,
         iNotifyWatcher->iStatus );
         iNotifyWatcher->WatchNotify( this );
         }
@@ -238,15 +228,6 @@
 }
 
 // ---------------------------------------------------------------------------
-// Helper method which indicates if the Applist or Bkmlist is showing
-// ---------------------------------------------------------------------------
-//
-TBool CMCSPluginSettingsContainer::IsChangeDialogShowing()
-{
-    return ( iAppListDialog || iBkmListDialog );
-}
-
-// ---------------------------------------------------------------------------
 // Method for closing change dialog (app or bkm) if it is beeing shown
 // ---------------------------------------------------------------------------
 //
@@ -292,7 +273,7 @@
     }
 
     iListBox->SetCurrentItemIndex( aIndex );
-    CheckMiddleSoftkeyLabelL();
+    CheckMiddleSoftkeyLabel();
 }
 
 // ---------------------------------------------------------------------------
@@ -314,10 +295,6 @@
         // fall-through intended here
     case EMsvEntriesChanged:
         {
-        if ( IsChangeDialogShowing() )
-            {
-            CloseChangeDialog();
-            }
         iModel->UpdateAppListL();
         }
         break;
@@ -335,22 +312,13 @@
 {
 	iListBox->ConstructL(this, EAknListBoxSelectionList);
     // Set empty listbox's text.
-	if (iModel->MdcaCount() == 0)
-		{
-		HBufC* text = iCoeEnv->AllocReadResourceLC(R_AI_MCS_SETTINGS_TXT_ALL_FIXED);
-		iListBox->View()->SetListEmptyTextL(*text);
-		CleanupStack::PopAndDestroy(text);
-		}
-	else
-		{
-		 iListBox->View()->SetListEmptyTextL(KNullDesC);  
-		}
+    iListBox->View()->SetListEmptyTextL(KNullDesC);
     iListBox->Model()->SetItemTextArray(iModel);
     iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
 }
 
 // ---------------------------------------------------------------------------
-// Chandles a setting change command to select application from a list.
+// Handles a setting change command to select application from a list.
 // ---------------------------------------------------------------------------
 //
 TBool CMCSPluginSettingsContainer::HandleAppListChangeCommandL( const TInt& aIndex,
@@ -372,7 +340,7 @@
     if (iAppListDialog->ExecuteLD(CAknSettingPage::EUpdateWhenChanged) &&
         index != oldIndex)
         {
-        changed = iModel->ReplaceItemL( iListBox->CurrentItemIndex(), index , EApplication );
+        changed = iModel->ReplaceItemL( aSettingIndex, index , EApplication );
         }
 
     CleanupStack::PopAndDestroy( title );
@@ -403,7 +371,7 @@
     if (iBkmListDialog->ExecuteLD(CAknSettingPage::EUpdateWhenChanged) &&
         index != oldIndex)
         {
-        changed = iModel->ReplaceItemL( iListBox->CurrentItemIndex(), index , EBookmark );
+        changed = iModel->ReplaceItemL( aSettingIndex, index , EBookmark );
         }
 
     CleanupStack::PopAndDestroy( title );
@@ -451,7 +419,7 @@
 // Checks if there is a need to update the middle softkey label.
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginSettingsContainer::CheckMiddleSoftkeyLabelL()
+void CMCSPluginSettingsContainer::CheckMiddleSoftkeyLabel()
 {
     CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
     if (cba)
@@ -475,10 +443,7 @@
             // fall-through intended here
         case RDbNotifier::ERollback :
             {
-            if ( IsChangeDialogShowing() )
-                {
-                CloseChangeDialog();
-                }
+            CloseChangeDialog();
             iModel->UpdateBkmListL();
             }
             break;
@@ -494,18 +459,15 @@
 //
 void CMCSPluginSettingsContainer::HandleNotifyL()
     {
-    if ( IsChangeDialogShowing() )
-        {
-        CloseChangeDialog();
-        }
+    CloseChangeDialog();
+
     iModel->UpdateAppListL();
+    ResetCurrentListL(0);
     
     // Notification must be activated again
     iNotifyWatcher->Cancel();
     iNotifier.Notify( 0,
-        RMenuNotifier::EItemsAddedRemoved | 
-        RMenuNotifier::EItemsReordered |
-        RMenuNotifier::EItemAttributeChanged,
+        RMenuNotifier::EItemsAddedRemoved,
         iNotifyWatcher->iStatus );
     iNotifyWatcher->WatchNotify( this );
     }
--- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp	Wed May 12 13:35:37 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 - 2010 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"
@@ -18,22 +18,18 @@
 #include <eikenv.h>
 #include <itemmap.h>
 #include <mhomescreensettingsif.h>
-
 #include <aistrcnv.h>
 #include <StringLoader.h>
 #include <uri16.h>
 #include <mcspluginsettingsres.rsg>
-
+#include <mcsmenuitem.h>
 
-#include "mcspluginsettings.h"
 #include "mcspluginsettingsmodel.h"
+#include "mcspluginsettingsapplist.h"
+#include "mcspluginsettingsbkmlist.h"
 #include "mcspluginsettingscontainer.h"
 
 
-#include "debug.h"
-
-#include <mcsmenuitem.h>
-
 /**
  * Line format for the settings list box
  */
@@ -51,9 +47,38 @@
 _LIT8( KProperValueSuite, "suite" );
 _LIT8( KProperValueBookmark, "bookmark" );
 _LIT8( KProperValueAppl, "application" );
+_LIT8( KProperValueMailbox, "mailbox" );
+_LIT( KMenuTypeMailbox, "menu:mailbox" );
 
 using namespace HSPluginSettingsIf;
 
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroy()
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroy( TAny* aObj )
+    {
+    if( aObj )
+        {
+        static_cast<T*>( aObj )->ResetAndDestroy();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroyPushL
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroyPushL(T& aArray)
+    {
+    CleanupStack::PushL( TCleanupItem( &CleanupResetAndDestroy<T>, &aArray ) );
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
 // -----------------------------------------------------------------------------
 // Creates a formatted listbox line.
 // -----------------------------------------------------------------------------
@@ -147,7 +172,7 @@
 // ---------------------------------------------------------------------------
 //
 void CMCSPluginSettingsModel::ConstructL()
-{
+    {
     CHomescreenSettings::InitializeL( KAppUid );
     
     iPluginSettings = CHomescreenSettings::Instance();
@@ -155,39 +180,31 @@
         {
         User::Leave( KErrUnknown );
         }
-    
-    iAppList = CMCSPluginSettingsAppList::NewL();
-    iAppList->StartL();
-    iBkmList = CMCSPluginSettingsBkmList::NewL();
-}
-
+    }
 
 // ---------------------------------------------------------------------------
 // Gets the latest settings from HSPS and updates
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginSettingsModel::UpdateSettingsL( const TDesC8& aPluginId )
+void CMCSPluginSettingsModel::UpdateSettingsL()
     {
-    if( !iPlugin.Activated() )
+    iSettings.Reset();
+    if( !iPluginId )
         {
         return;
         }
     
-    if( iPluginId )
+    if (iContainer)
         {
-        delete iPluginId;
-        iPluginId = NULL;
+        iContainer->CloseChangeDialog();
         }
-    iPluginId = aPluginId.AllocL();    
     
-    iSettings.Reset();
     RPointerArray<CItemMap> settingItems;
-    CleanupClosePushL( settingItems );
+    CleanupResetAndDestroyPushL( settingItems );
 
     iPluginSettings->GetSettingsL( *iPluginId, settingItems );
 
-    TInt count = settingItems.Count();
-    for ( TInt i = 0; i < count; i++ )
+    for ( TInt i = 0; i < settingItems.Count(); i++ )
         {
         CItemMap* itemMap = settingItems[i];
         RPointerArray<HSPluginSettingsIf::CPropertyMap> properties;
@@ -195,40 +212,13 @@
         TSettingItem item = ItemL( properties );
         iSettings.AppendL( item );
         }
-    CleanupStack::Pop( &settingItems );
-    settingItems.ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------------------------
-// Gets the latest settings from HSPS and updates
-// ---------------------------------------------------------------------------
-//
-void CMCSPluginSettingsModel::UpdateSettingModelL( const TDesC8& aPluginId )
-    {
-    if( iPluginId )
-        {
-        delete iPluginId;
-        iPluginId = NULL;
-        }
-    iPluginId = aPluginId.AllocL();
+    
+    CleanupStack::PopAndDestroy(); // settingItems
     
-    iSettings.Reset();
-    RPointerArray<CItemMap> settingItems;
-    CleanupClosePushL( settingItems );
-
-    iPluginSettings->GetSettingsL( *iPluginId, settingItems );
-
-    TInt count = settingItems.Count();
-    for ( TInt i = 0; i < count; i++ )
+    if (iContainer)
         {
-        CItemMap* itemMap = settingItems[i];
-        RPointerArray<HSPluginSettingsIf::CPropertyMap> properties;
-        properties = itemMap->Properties();
-        TSettingItem item = ItemL( properties );
-        iSettings.AppendL( item );
+        iContainer->ResetCurrentListL(0);
         }
-    CleanupStack::Pop( &settingItems );
-    settingItems.ResetAndDestroy();
     }
 
 // ---------------------------------------------------------------------------
@@ -241,7 +231,7 @@
     TSettingItem setting = { KErrNotFound, EApplication , EFalse };
 
     TSettingType type = SettingTypeL( aProperties );
-    if ( type == EApplication )
+    if ( type == EApplication || type == EMailbox )
         {
         setting = iAppList->FindItemL( aProperties );
         }
@@ -308,7 +298,6 @@
     return EFalse;
     }
 
-
 // ---------------------------------------------------------------------------
 // Saves menuitem to HSPS to the given shortcut index
 // ---------------------------------------------------------------------------
@@ -320,16 +309,51 @@
         {
         return;
         }
-    
-    RPointerArray<CItemMap> settingItems;
-    CleanupClosePushL( settingItems );
+
+    RPointerArray<CItemMap> settingItems;    
+    CleanupResetAndDestroyPushL( settingItems );
     iPluginSettings->GetSettingsL( *iPluginId, settingItems );
+
     if ( aIndex >= 0 && aIndex < settingItems.Count() )
         {
         TBool exists( EFalse );
         CItemMap* itemMap = settingItems[ aIndex ];
         RPointerArray<HSPluginSettingsIf::CPropertyMap> properties;
         properties = itemMap->Properties();
+        
+        const TInt KGranularity = 6;
+        CDesC8Array* propertiesList = new ( ELeave ) CDesC8ArrayFlat( KGranularity );
+        CleanupStack::PushL( propertiesList );
+        propertiesList->AppendL( KProperNameType );
+        propertiesList->AppendL( KProperNameParam );
+        propertiesList->AppendL( KProperNameUid );
+        propertiesList->AppendL( KProperNameView );
+        // skip KProperNameLocked property, attribute may be missing. results into
+		// leave with -1 when saving settings 
+        
+        // add missing properties
+        for ( TInt i=0; i<propertiesList->Count(); i++ )
+            {
+            TBool found( EFalse );
+            const TPtrC8 namePtr = propertiesList->MdcaPoint( i );
+            for ( TInt j=0; j<properties.Count() && !found; j++ )
+                {
+                found = ( (namePtr == properties[ j ]->Name() ) ? ETrue : EFalse );
+                }
+            if ( !found )
+                {
+                CPropertyMap* property = CPropertyMap::NewLC();
+                property->SetNameL( namePtr );
+                property->SetValueL( KNullDesC8 );
+                itemMap->AddPropertyMapL( property );
+                CleanupStack::Pop( property );
+                
+                // get updated list
+                properties = itemMap->Properties();
+                }
+            }
+        CleanupStack::PopAndDestroy( propertiesList );
+
         for ( TInt i = 0; i < properties.Count(); i++ )
             {
             if ( properties[ i ]->Name() == KProperNameType )
@@ -347,6 +371,10 @@
                     {
                     properties[ i ]->SetValueL( KProperValueSuite );
                     }
+                else if( type == KMenuTypeMailbox )
+                    {
+                    properties[ i ]->SetValueL( KProperValueMailbox );
+                    }
                 else
                     {
                     properties[ i ]->SetValueL( KProperValueAppl );
@@ -355,7 +383,7 @@
             else if ( properties[ i ]->Name() == KProperNameUid )
                 {
                 TPtrC uid = aMenuItem.GetAttributeL( KMenuAttrUid, exists );
-                if ( exists )
+                if ( exists && uid.Length() > 0 )
                     {
                     HBufC8* uid8( NULL );
                     uid8 = AiUtility::CopyToBufferL( uid8, uid );
@@ -371,7 +399,7 @@
             else if ( properties[ i ]->Name() == KProperNameView )
                 {
                 TPtrC view = aMenuItem.GetAttributeL( KMenuAttrView, exists );
-                if( exists )
+                if( exists && view.Length() > 0 )
                     {
                     HBufC8* view8( NULL );
                     view8 = AiUtility::CopyToBufferL( view8, view );
@@ -397,7 +425,7 @@
                     isFolder = ETrue;
                     }
 
-                if ( exists || isFolder )
+                if ( (exists && param.Length() > 0) || (isFolder) )
                     {
                     // the folder id is stored 
                     // in param attribute in HSPS
@@ -422,7 +450,7 @@
             else if ( properties[ i ]->Name() == KProperNameLocked )
                 {
                 TPtrC locked = aMenuItem.GetAttributeL( KMenuAttrLocked, exists );
-                if ( exists )
+                if ( exists && locked.Length() > 0 )
                     {
                     HBufC8* locked8( NULL );
                     locked8 = AiUtility::CopyToBufferL( locked8, locked );
@@ -437,35 +465,23 @@
                 }
             }
         }
+
     // ETrue tells that modified settings are stored also to plugin reference
-    iPluginSettings->SetSettingsL( *iPluginId, settingItems, ETrue );
-    CleanupStack::Pop( &settingItems );
-    settingItems.ResetAndDestroy();
-
+    User::LeaveIfError( iPluginSettings->SetSettingsL( *iPluginId, settingItems, ETrue ) );
+    CleanupStack::PopAndDestroy(); // settingItems
     }
 
 // ---------------------------------------------------------------------------
 // Updates settings container.
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginSettingsModel::UpdateSettingsContainerL( const TDesC8& aPluginId )
-{
-    if (iContainer)
+void CMCSPluginSettingsModel::SetPluginIdL( const TDesC8& aPluginId )
     {
-        if (iContainer->IsChangeDialogShowing())
-        {
-            iContainer->CloseChangeDialog();
-        }
+    delete iPluginId;
+    iPluginId = NULL;
+    iPluginId = aPluginId.AllocL();    
     }
 
-    UpdateSettingsL( aPluginId );
-
-    if (iContainer)
-    {
-        iContainer->ResetCurrentListL(0);
-    }
-}
-
 // ---------------------------------------------------------------------------
 // From MDesCArray
 // Returns the number of descriptor elements in a descriptor array.
@@ -482,40 +498,38 @@
 // ---------------------------------------------------------------------------
 //
 TPtrC CMCSPluginSettingsModel::MdcaPoint( TInt aIndex ) const
-{
+    {
     if (aIndex < 0 || aIndex >= iSettings.Count())
-    {
+        {
         TPtrC ret(KNullDesC);
         return ret;
-    }
+        }
+    
+    TPtrC line( KNullDesC ); 
     if ( iSettings[aIndex].type == EApplication )
         {
         // first, we need to check if the item is missing 
-        // (application unistaled or mmc card removed)
+        // (application uninstalled or mmc card removed)
         // If it is, we return "Undefined" application name instead
         if ( iSettings[ aIndex ].id == KErrNotFound )
             {
-            const TDesC& caption = iAppList->iUndefinedText->Des();
-            TPtrC line; 
+            const TDesC& caption = iAppList->UndefinedText();
             TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) )
-            return line; 
             }
         else
             {
             const TDesC& caption = iAppList->MdcaPoint( iSettings[ aIndex ].id );
-            TPtrC line; 
             TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) )
-            return line; 
             }
         }
     else
         {
         const TDesC& caption = iBkmList->MdcaPoint( iSettings[aIndex].id );
-        TPtrC line;
         TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) )
-        return line;
         }
-}
+
+    return line;
+    }
 
 // ---------------------------------------------------------------------------
 // Returns a setting ID for the given index.
@@ -555,40 +569,28 @@
                                              TInt aId,
                                              TSettingType aType )
     {
+    TBool replaced( EFalse );
     if (aSettingIndex >= 0 && aSettingIndex < iSettings.Count())
         {
-        TSettingItem oldItem = iSettings[ aSettingIndex ];
-        iSettings[ aSettingIndex ].id = aId;
-        iSettings[ aSettingIndex ].type = aType;
-
+        CMenuItem* item( NULL );
         if ( aType == EApplication )
             {
-            CMenuItem& item = iAppList->ItemL( aId );
-            SaveSettingsL( aSettingIndex, item );
+            item = iAppList->ItemL( aId );
             }
          else
             {
-            CMenuItem& item = iBkmList->ItemL( aId );
-            SaveSettingsL( aSettingIndex, item );
+            item = iBkmList->ItemL( aId );
             }
         
-        // Old setting type is bookmark. Remove bookmark item from MCS 
-        // if it was created in runtime.
-        if ( oldItem.type == EBookmark )
+        if ( item )
             {
-                iBkmList->RemoveMenuItemL( oldItem.id );
+            SaveSettingsL( aSettingIndex, *item );
+            iSettings[ aSettingIndex ].id = aId;
+            iSettings[ aSettingIndex ].type = aType;
+            replaced = ETrue;
             }
-
-        // Old setting type is application.
-        // Remove app item from MCS if it was created in runtime (mailbox).
-        if ( oldItem.type == EApplication )
-            {
-                iAppList->RemoveMenuItemL( oldItem.id );
-            }
-
-        return ETrue;
         }
-    return EFalse;
+    return replaced;
     }
 
 // ---------------------------------------------------------------------------
@@ -622,20 +624,32 @@
 // Updates application list
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginSettingsModel::UpdateAppListL()
-{
+void CMCSPluginSettingsModel::UpdateAppListL( TBool aUpdateSettings )
+    {
+    if( !iAppList )
+        {
+        iAppList = CMCSPluginSettingsAppList::NewL();
+        }
     iAppList->StartL();
-}
+    if ( aUpdateSettings )
+        {
+        UpdateSettingsL();
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // Updates bookmark list
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginSettingsModel::UpdateBkmListL()
-{
+void CMCSPluginSettingsModel::UpdateBkmListL( TBool aUpdateSettings )
+    {
     delete iBkmList;
     iBkmList = NULL;
     iBkmList = CMCSPluginSettingsBkmList::NewL();
-}
+    if ( aUpdateSettings )
+        {
+        UpdateSettingsL();
+        }
+    }
 
 // End of File.
--- a/idlefw/plugins/profileplugin/src/caiprofileengine.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/profileplugin/src/caiprofileengine.cpp	Wed May 12 13:35:37 2010 +0300
@@ -215,26 +215,35 @@
         TInt generalProfileIndex( 
             profileNamesArray->FindById( KGeneralProfileId ) );
         
-		swapProfileName = 
-            profileNamesArray->MdcaPoint( generalProfileIndex ).AllocLC() ;		        
+        if( generalProfileIndex > KErrNotFound )
+            {
+            swapProfileName = 
+                profileNamesArray->MdcaPoint( generalProfileIndex ).AllocLC() ; 
+            }
     	}
     else
         {
         TInt silentProfileIndex( 
             profileNamesArray->FindById( KSilentProfileId ) );	
 		
-        swapProfileName = 
-            profileNamesArray->MdcaPoint( silentProfileIndex ).AllocLC() ;                
+        if( silentProfileIndex > KErrNotFound )
+            {
+            swapProfileName = 
+                profileNamesArray->MdcaPoint( silentProfileIndex ).AllocLC() ;  
+            }
         }
     
-    TPtrC swapProfileNamePtr( *swapProfileName );
-	   
-	HBufC* activateProfileString( StringLoader::LoadLC( 
-        R_AI_PERS_PROF_TOGGLE, swapProfileNamePtr ) );    	
-    
-    SetSwapProfileNameL( *activateProfileString );
+    if( swapProfileName )
+        { 
+        HBufC* activateProfileString( StringLoader::LoadLC( 
+            R_AI_PERS_PROF_TOGGLE, swapProfileName->Des() ) );      
+        
+        SetSwapProfileNameL( *activateProfileString );
+        
+        CleanupStack::PopAndDestroy( 2 ); // swapProfileName, activateProfileString
+        }
 
-    CleanupStack::PopAndDestroy( 5 ); //profile, profileName, // profileNamesArray, swapProfileName, activateProfileString           
+    CleanupStack::PopAndDestroy( 3 ); //profile, profileName, profileNamesArray,           
 	}
 
 // ----------------------------------------------------------------------------
--- a/idlefw/plugins/sapidataplugin/group/sapidataplugin.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/group/sapidataplugin.mmp	Wed May 12 13:35:37 2010 +0300
@@ -54,9 +54,12 @@
 LIBRARY			charconv.lib 
 LIBRARY			estor.lib
 
-// End of File
+// Debugging dependencies
+LIBRARY         flogger.lib
+
 SOURCEPATH ../src
-
 SOURCE sapidataplugin.cpp
 SOURCE sapidata.cpp 
 SOURCE sapidataobserver.cpp
+
+// End of File
\ No newline at end of file
--- a/idlefw/plugins/sapidataplugin/inc/sapidata.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/inc/sapidata.h	Wed May 12 13:35:37 2010 +0300
@@ -33,6 +33,7 @@
 class CSapiDataObserver;
 class CSapiDataPlugin;
 class MAiContentObserver;
+class MAiCpsCommandBuffer;
 
 /**
  *  @ingroup group_sapidataplugin
@@ -131,16 +132,6 @@
     */
     void ConstructL(CSapiDataPlugin* aPlugin);
 
-    // new functions
-
-    /**
-    * Gets the menu item from the publisher
-    *
-    * @param none
-    * @return void
-    */
-    void GetMenuItemsL();
-    
 public:
     // new functions
     
@@ -150,7 +141,7 @@
     * @param aStatus new status of the publisher
     * @return void
     */
-    void ChangePublisherStatusL(const TDesC& aStatus);
+    void ChangePublisherStatusL(const TDesC8& aStatus);
     
     /**
     * Triggers active event with KNoNotification option.
@@ -183,7 +174,7 @@
      * 
      * @param aStartupReason A reason
      */
-    void SetStartupReasonL(const TDesC& aStartupReason);
+    void SetStartupReasonL(const TDesC8& aStartupReason);
     
     /**
 	* Execute the command to get the data from CPS
@@ -349,31 +340,55 @@
 	*/
     void SetUpdateNeeded(TBool aStatus);
     
+    /**
+    * Sets property value.
+    *
+    * @since S60 5.2
+    * @param aAny - contains pointer to command buffer.
+    */
+    void SetCommandBuffer(TAny* aAny);
+
+private:
+    // new functions
+
+    /**
+    * Gets the menu item from the publisher
+    *
+    * @param none
+    * @return void
+    */
+    void GetMenuItemsL();
+    
+    /**
+    * Change the publisher status with list of actions
+    *
+    * @param aActionsList new list of status for the publisher
+    * @return void
+    */
+    void ChangePublisherStatusL(CLiwDefaultList* aActionsList);
+    
 private:   
     // data
-    
-    /** Subscriber interface, owned */    
-    MLiwInterface* iInterface;      
+    /** CPS Command Buffer Interface, Not Owned */
+    MAiCpsCommandBuffer* iCpsExecute;
+    /** Subscriber interface, Not owned */    
+    MLiwInterface* iInterface;
+    /** Service handler, Not owned */    
+    CLiwServiceHandler* iServiceHandler; 
     /** Data Observer to CPS content registry, owned */    
     CSapiDataObserver* iContentObserver;    
     /** Data Observer to CPS publisher registry, owned */    
     CSapiDataObserver* iPubObserver;
-    /** Service handler, owned */    
-    CLiwServiceHandler* iServiceHandler;    
     /** Array of configurations, owned */    
     RPointerArray<CContentItem> iItemList;
     /** Number of configurations */ 
     TInt iItemCount;    
-    /** Command name in configuration Array, owned */
-    HBufC8* iCommandName;
 	/** publisher id, owned */
 	HBufC* iPublisher;
-	/** content type, owned */
-	HBufC* iContentType;
 	/** content id, owned */
 	HBufC* iContentId;
 	/** Startup reason, owned */
-	HBufC* iStartupReason;
+	HBufC8* iStartupReason;
     /** Reference of the sapi data plugin, not owned */    
     CSapiDataPlugin* iPlugin;    
     /** Menu item names, owned */    
@@ -382,8 +397,11 @@
     RPointerArray<HBufC8> iMenuTriggers;    
     /** Store the status of update needed on resume */
     TBool iUpdateNeeded;
+    // Is Menu item read.
+    TBool iGetMenuItems;
     };
 
 #endif // SAPIDATA_H
 
 // End of file
+
--- a/idlefw/plugins/sapidataplugin/inc/sapidataplugin.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/inc/sapidataplugin.h	Wed May 12 13:35:37 2010 +0300
@@ -148,6 +148,11 @@
     /**
      * @see CHsContentPublisher
      */
+    void SetProperty( TProperty aProperty, TAny* aAny );
+    
+    /**
+     * @see CHsContentPublisher
+     */
     TAny* GetProperty( TProperty aProperty );     
 
     /**
@@ -265,7 +270,6 @@
 	
 private: 
     // data
-
     /** Iterator for plugin content, owned */    
     MAiContentItemIterator* iContent;
     /** Array of content observers, owned */
@@ -291,3 +295,4 @@
 #endif // SAPIDATAPLUGIN_H
 
 // End of file
+
--- a/idlefw/plugins/sapidataplugin/inc/sapidatapluginconst.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/inc/sapidatapluginconst.h	Wed May 12 13:35:37 2010 +0300
@@ -75,22 +75,23 @@
 _LIT( KOperationDelete, "delete" );
 _LIT( KOperationExecute, "execute" );
 _LIT( KAddUpdateDelete, "add:update:delete" );
-_LIT( KUpdate, "update" );
+_LIT( KAddUpdate, "add:update" );
 
 _LIT(KWidget, "hswidget");
-_LIT( KDeActive, "deactive");
-_LIT( KActive, "active");
-_LIT( KSystemStartup, "systemstartup");
-_LIT( KPageStartup, "pagestartup");
-_LIT( KPluginStartup, "pluginstartup");
-_LIT( KSuspend , "suspend");
-_LIT( KResume, "resume");
-_LIT( KSystemShutdown, "systemshutdown");
-_LIT( KPageShutdown, "pageshutdown");
-_LIT( KPluginShutdown, "pluginshutdown");
-_LIT( KOnLine, "online");
-_LIT( KOffLine, "offline");
-_LIT( KInActive, "inactive");
+_LIT8( KDeActive, "deactive");
+_LIT8( KActive, "active");
+_LIT8( KSystemStartup, "systemstartup");
+_LIT8( KPageStartup, "pagestartup");
+_LIT8( KPluginStartup, "pluginstartup");
+_LIT8( KSuspend , "suspend");
+_LIT8( KResume, "resume");
+_LIT8( KSystemShutdown, "systemshutdown");
+_LIT8( KPageShutdown, "pageshutdown");
+_LIT8( KPluginShutdown, "pluginshutdown");
+_LIT8( KOnLine, "online");
+_LIT8( KOffLine, "offline");
+
+
 // reserved extension for retrieving mask handle 
 _LIT8( KMask, "_mask");
 
--- a/idlefw/plugins/sapidataplugin/src/sapidata.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/src/sapidata.cpp	Wed May 12 13:35:37 2010 +0300
@@ -22,6 +22,7 @@
 #include <utf.h>
 
 // User includes
+#include <aicpscommandbuffer.h>
 #include "sapidata.h"
 #include "sapidatapluginconst.h"
 #include "sapidataobserver.h"
@@ -103,10 +104,8 @@
 void CSapiData::ConstructL(CSapiDataPlugin* aPlugin)
     { 
      iPlugin = aPlugin;
-     iCommandName = NULL;
-	 iContentId = NULL;
-	 iContentType = NULL;
 	 iUpdateNeeded = EFalse;
+	 iGetMenuItems = ETrue;
     }
     
 // ---------------------------------------------------------------------------
@@ -116,40 +115,29 @@
 //
 CSapiData::~CSapiData()
     {
-    delete iCommandName;
 	delete iPublisher;
-	delete iContentType;
 	delete iContentId;
 	delete iStartupReason;
 	
 	if(iPubObserver)
 		{
-		TRAP_IGNORE(iPubObserver->ReleaseL() );
 		delete iPubObserver;
 		iPubObserver = NULL;
 		}
     if(iContentObserver)
         {
-        TRAP_IGNORE(iContentObserver->ReleaseL() );
         delete iContentObserver;
         iContentObserver = NULL;
         }
-    if( iInterface )
-         {
-         iInterface->Close();
-         iInterface = NULL;
-         }
-    if( iServiceHandler )
-         {
-         iServiceHandler->Reset();
-         delete iServiceHandler;
-         iServiceHandler = NULL;
-         }
     iMenuItems.ResetAndDestroy();
     iMenuTriggers.ResetAndDestroy();
     iItemList.ResetAndDestroy();
     // not owned
     iPlugin = NULL;
+    iInterface = NULL;
+    iServiceHandler = NULL;
+    iCpsExecute = NULL;
+    
     }
 
 // ---------------------------------------------------------------------------
@@ -158,30 +146,13 @@
 //
 void CSapiData::ConfigureL(RAiSettingsItemArray& aConfigurations )
     {
-    HBufC8* serviceName = NULL;
-    HBufC8* interfaceName = NULL;
-
     TInt count = aConfigurations.Count();
-    
     for(TInt i = 0;i<count;i++)
        {
        MAiPluginConfigurationItem& confItem = ( aConfigurations[i] )->AiPluginConfigurationItem();
-       // if owner is plugin then it (key,value) is for plugin configurations items
        if(confItem.Owner() == KPlugin())
            {
-           if(confItem.Name() ==  KService())
-               {
-               serviceName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value());
-               }
-           else if( confItem.Name() == KInterface() )
-                 {
-                 interfaceName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value());
-                 }
-           else if( confItem.Name() == KCommand() )
-                 {
-                 iCommandName  = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value());
-                 }
-           else if( confItem.Name()  == KPublisher16() ) 
+           if( confItem.Name()  == KPublisher16() ) 
 				  {
 				  iPublisher = confItem.Value().AllocL();
 				  }
@@ -201,54 +172,12 @@
            CleanupStack::PopAndDestroy(objectId);
            }
        }
-    
     iItemCount = iItemList.Count();  
-    
-    if( !serviceName || !interfaceName || !iCommandName  
-    		|| !iContentId || !iPublisher || !iItemCount )
+    if( iPublisher->Des().Length() == 0 ) 
         {
         // No service to offer without plugin configurations 
         User::Leave( KErrNotSupported );
         }
-    iServiceHandler = CLiwServiceHandler::NewL(); 
-
-    // for convenience keep pointers to Service Handler param lists 
-    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
-    CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
-
-    CLiwCriteriaItem* criteriaItem = CLiwCriteriaItem::NewLC( KLiwCmdAsStr, *interfaceName , *serviceName );
-    criteriaItem->SetServiceClass( TUid::Uid( KLiwClassBase ) );
-    // Interface name 
-    RCriteriaArray criteriaArray;
-    criteriaArray.AppendL( criteriaItem );
-    // attach Liw criteria
-    iServiceHandler->AttachL( criteriaArray );
-    iServiceHandler->ExecuteServiceCmdL( *criteriaItem, *inParamList, *outParamList );
-
-    CleanupStack::PopAndDestroy(criteriaItem);
-    criteriaArray.Reset();
-
-    // extract CPS interface from output params
-    TInt pos( 0 );
-    outParamList->FindFirst( pos, *interfaceName );
-    if( pos != KErrNotFound )
-        {
-        //iInterface is MLiwInterface*
-        iInterface = (*outParamList)[pos].Value().AsInterface(); 
-        User::LeaveIfNull( iInterface );
-        }
-    else
-        {
-        User::Leave( KErrNotFound );
-        }
-    inParamList->Reset();
-    outParamList->Reset();
-    delete interfaceName;
-    delete serviceName;
-
-	//Gets the menu items from the publisher registry    
-    GetMenuItemsL();
- 
     iContentObserver = CSapiDataObserver::NewL( iInterface, this );   
     iPubObserver = CSapiDataObserver::NewL( iInterface, this );
     }
@@ -266,7 +195,7 @@
 // SetStartupReasonL
 // ---------------------------------------------------------------------------
 //
-void CSapiData::SetStartupReasonL(const TDesC& aStartupReason)
+void CSapiData::SetStartupReasonL(const TDesC8& aStartupReason)
     {
     delete iStartupReason;
     iStartupReason = NULL;
@@ -442,6 +371,13 @@
 //
 TBool CSapiData::HasMenuItem(const TDesC& aMenuItem )
 	{
+    if ( iGetMenuItems )
+        {
+        //Gets the menu items from the publisher registry
+        TRAP_IGNORE( GetMenuItemsL() );
+        iGetMenuItems = EFalse;
+        }
+    
 	TBool found = EFalse;
 	for (TInt i = 0; i < iMenuItems.Count(); i++ )
 		{
@@ -570,27 +506,24 @@
 void CSapiData::ExecuteCommandL(const TDesC& aRegistry, CLiwDefaultMap* aInFilter, 
 		CLiwGenericParamList* aOutParamList)
 	{
-	CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
-	
-	TLiwGenericParam type( KType, TLiwVariant( aRegistry ) );
-	inParamList->AppendL( type );
-	
-	//append filter to input param
-	 TLiwGenericParam item( KFilter, TLiwVariant( aInFilter ));
-	 inParamList->AppendL( item );
-	 
-	// execute service.It is assumed that iInterface is already initiated
-	if(iInterface)
-		{
-		iInterface->ExecuteCmdL( *iCommandName, *inParamList, *aOutParamList);
-		}
-	else
-		{
-		User::Leave( KErrNotSupported );
-		}
-	type.Reset();
-	item.Reset();
-	inParamList->Reset();
+    if( iInterface == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
+    
+    TLiwGenericParam type( KType, TLiwVariant( aRegistry ) );
+    inParamList->AppendL( type );
+    
+    //append filter to input param
+    TLiwGenericParam item( KFilter, TLiwVariant( aInFilter ));
+    inParamList->AppendL( item );
+    
+    // execute service.It is assumed that iInterface is already initiated
+    iInterface->ExecuteCmdL( KGetList, *inParamList, *aOutParamList);
+    type.Reset();
+    item.Reset();
+    inParamList->Reset();
 	}
 
 // ---------------------------------------------------------------------------
@@ -599,6 +532,10 @@
 //
 void CSapiData::ExecuteActionL(const TDesC& aObjectId, const TDesC& aTrigger )
    {
+    if( iInterface == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
    HBufC8* triggerName = HBufC8::NewLC( KSAPIContentNameMaxLength );
   
    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
@@ -674,7 +611,7 @@
     if ( iItemCount > 0)
     	{
 		CLiwDefaultMap* pubRegFilter = CreateFilterLC( KAll(), KAll() );
-		pubRegFilter->InsertL( KOperation, TLiwVariant( KUpdate ) );
+		pubRegFilter->InsertL( KOperation, TLiwVariant( KAddUpdate ) );
 		iPubObserver->RegisterL( pubRegFilter, KPubData() );
 		CleanupStack::PopAndDestroy( pubRegFilter );
 		}
@@ -721,45 +658,58 @@
     }
 
 // ---------------------------------------------------------------------------
-// PublisherStatusL
+// ChangePublisherStatusL
 // ---------------------------------------------------------------------------
 //
-void CSapiData::ChangePublisherStatusL(const TDesC& aStatus)
+void CSapiData::ChangePublisherStatusL(const TDesC8& aStatus)
     {
+    if( iCpsExecute == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
     if ( aStatus == KResume && iUpdateNeeded )
         {
         iPlugin->PublishL();
         iUpdateNeeded = EFalse;
         }
+    CLiwDefaultMap* filter = CreateFilterLC( KWidget() );
+    // Add execute command triggers. Idle framework will execute 
+    iCpsExecute->AddCommand( *iContentId, KPubData, filter, aStatus );
+    CleanupStack::PopAndDestroy( filter );
+    
+    }
+
+// ---------------------------------------------------------------------------
+// ChangePublisherStatusL
+// ---------------------------------------------------------------------------
+//
+void CSapiData::ChangePublisherStatusL(CLiwDefaultList* aActionsList)
+    {
+    if( iInterface == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
     
     CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
     CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
-    HBufC8* triggerName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(aStatus);
-    CleanupStack::PushL( triggerName );
-
+    
     TLiwGenericParam type( KType, TLiwVariant( KPubData ) );
     inParamList->AppendL( type );
-			  
+     
     CLiwDefaultMap* filter = CreateFilterLC( KWidget() );
-    filter->InsertL(KActionTrigger, TLiwVariant(triggerName->Des()) );
-   
+    // add list of action triggers to execute
+    filter->InsertL(KActionTrigger, TLiwVariant(aActionsList) );
+    
     TLiwGenericParam item( KFilter, TLiwVariant( filter ));
     inParamList->AppendL( item );
-           
-    if(iInterface)
-	   {
-	   iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList);
-	   }
-    else
-	   {
-	   User::Leave( KErrNotSupported );
-	   }
-    
+
+    iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList);
     CleanupStack::PopAndDestroy( filter );
-    CleanupStack::PopAndDestroy( triggerName );
+    outParamList->Reset();
     inParamList->Reset();
-    outParamList->Reset();
-   }
+
+    }
 
 // ---------------------------------------------------------------------------
 // TriggerActiveL
@@ -767,29 +717,29 @@
 //
 void CSapiData::TriggerActiveL()
     {
-    
-    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
-    CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
- 
-    TLiwGenericParam type( KType, TLiwVariant( KPubData ) );
-    inParamList->AppendL( type );
-
-    CLiwDefaultMap* filter = CreateFilterLC( KAll(), KAll() );
-    filter->InsertL(KActionTrigger, TLiwVariant( KActive() ));
-   
-    TLiwGenericParam item( KFilter, TLiwVariant( filter ));
-    inParamList->AppendL( item );
     if(iInterface)
-       {
-       iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList, KDisableNotification );
+        {
+        CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
+        CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
+        
+        TLiwGenericParam type( KType, TLiwVariant( KPubData ) );
+        inParamList->AppendL( type );
+        
+        CLiwDefaultMap* filter = CreateFilterLC( KAll(), KAll() );
+        filter->InsertL(KActionTrigger, TLiwVariant( KActive() ));
+        
+        TLiwGenericParam item( KFilter, TLiwVariant( filter ));
+        inParamList->AppendL( item );
+        iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList, KDisableNotification );
+        
+        CleanupStack::PopAndDestroy( filter );
+        inParamList->Reset();
+        outParamList->Reset();
        }
     else
        {
        User::Leave( KErrNotSupported );
        }
-    CleanupStack::PopAndDestroy( filter );
-    inParamList->Reset();
-    outParamList->Reset();
    }
 // ---------------------------------------------------------------------------
 // UpdatePublisherStatusL
@@ -798,31 +748,34 @@
 void CSapiData::UpdatePublisherStatusL( TDesC& aPublisher )
 	{
 	 if ( aPublisher == iPublisher )
-		 {
-		 // Resend the plugin status to publisher
-         ChangePublisherStatusL( KActive );
+        {
+       // Resend the plugin status to publisher
+        CLiwDefaultList* actionsToLaunch = CLiwDefaultList::NewLC();
+        actionsToLaunch->AppendL( TLiwVariant( KActive ));
          if( iStartupReason->Length() != 0 )
              {
-             ChangePublisherStatusL( *iStartupReason );
+             actionsToLaunch->AppendL( TLiwVariant( *iStartupReason ));
              }
-         
 		 if ( iPlugin->IsActive() )
 			 {
-             ChangePublisherStatusL( KResume );
+		     actionsToLaunch->AppendL( TLiwVariant( KResume ));
 			 }
 		 else
 			 {
-             ChangePublisherStatusL( KSuspend );
+		     actionsToLaunch->AppendL(TLiwVariant( KSuspend ));
 			 }
 		  // forward the network status if it uses.
 		if ( iPlugin->NetworkStatus() == CSapiDataPlugin::EOnline )
 			{
-            ChangePublisherStatusL( KOnLine );
+		    actionsToLaunch->AppendL(TLiwVariant( KOnLine ));
 			}
 		else if ( iPlugin->NetworkStatus() == CSapiDataPlugin::EOffline )
 			{
-            ChangePublisherStatusL( KOffLine );
+		    actionsToLaunch->AppendL(TLiwVariant( KOffLine ));
 			}
+	 
+	     ChangePublisherStatusL( actionsToLaunch );
+	     CleanupStack::PopAndDestroy( actionsToLaunch );
 		 }
 	}
 
@@ -912,3 +865,19 @@
 	{
 	iUpdateNeeded = aStatus;
 	}
+
+// ---------------------------------------------------------------------------
+// SetCommandBuffer
+// ---------------------------------------------------------------------------
+//
+void CSapiData::SetCommandBuffer(TAny* aAny)
+    {
+    iCpsExecute = reinterpret_cast <MAiCpsCommandBuffer* > ( aAny );
+    if ( iCpsExecute )
+        {
+        iInterface = iCpsExecute->CpsInterface();
+        iServiceHandler = iCpsExecute->ServiceHandler();
+        }
+    }
+
+// End of file
--- a/idlefw/plugins/sapidataplugin/src/sapidataobserver.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/src/sapidataobserver.cpp	Wed May 12 13:35:37 2010 +0300
@@ -19,7 +19,7 @@
 #include <liwservicehandler.h>
 #include <liwvariant.h>
 #include <liwgenericparam.h>
-#include <S32MEM.H>
+#include <s32mem.h>
 #include "sapidata.h"
 #include "sapidataobserver.h"
 #include "sapidatapluginconst.h"
@@ -38,6 +38,7 @@
 //
 CSapiDataObserver ::~CSapiDataObserver ()
     {
+    TRAP_IGNORE( ReleaseL() );
     iInterface = NULL;
     iData = NULL;
     }
@@ -71,7 +72,7 @@
 // Sing off to notification
 // ---------------------------------------------------------------------------
 //
-void CSapiDataObserver ::ReleaseL()
+void CSapiDataObserver::ReleaseL()
     {
     if( iInterface )
         {
--- a/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp	Wed May 12 13:35:37 2010 +0300
@@ -34,6 +34,7 @@
 #include <aipspropertyobserver.h>
 #include <aipluginsettings.h>
 #include <activeidle2domainpskeys.h>
+#include <debug.h>
 
 #include "sapidatapluginconst.h"
 #include "sapidatapluginuids.hrh"
@@ -78,7 +79,7 @@
 // ---------------------------------------------------------------------------
 //
 CSapiDataPlugin::CSapiDataPlugin()
-    : iNetworkStatus( EUnknown ), iPluginState( ENone ) 
+    : iNetworkStatus( EUnknown ), iPluginState( ENone )
     {
     }
     
@@ -101,16 +102,9 @@
 CSapiDataPlugin::~CSapiDataPlugin()
     {
     // deactivate the publishers
-    if ( iData )
-        {
-        TRAP_IGNORE( iData->ChangePublisherStatusL( KDeActive ));
-        
-        delete iData;
-        }
-    
+    delete iData;
     iObservers.Close();
     Release( iContent );
-
     iDataArray.ResetAndDestroy();
 
     if ( iContentModel )
@@ -124,7 +118,6 @@
         }
     
     iIconArray.Reset();
-    
     iRfs.Close();
     }
 
@@ -152,9 +145,8 @@
 		// Release memory of the published text
         iDataArray.ResetAndDestroy();
         // Release memory of the published icons
-        iIconArray.Reset();
-        
-        }    
+        iIconArray.Reset();        
+        }        
     }
 
 // ---------------------------------------------------------------------------
@@ -359,13 +351,18 @@
 	}
 
 // ---------------------------------------------------------------------------
-//Refresh a specific image of text in the widget
+//Refresh a specific image or text in the widget
 // ---------------------------------------------------------------------------
 //
 void CSapiDataPlugin::RefreshL( TDesC& aContentType,
                                 TDesC& aOperation,
                                 CLiwDefaultMap* aDataMap )
-    {    
+    {
+    __PRINTS("*** CSapiDataPlugin::RefreshL ***");
+    
+    __PRINT( __DBG_FORMAT( "* Publisher name: %S, uid: 0x%x, content type: %S, operation: %S" ),          
+        &PublisherInfo().Name(), PublisherInfo().Uid().iUid, &aContentType, &aOperation ); 
+        
     const TInt observerCount( iObservers.Count() );    
     const TInt transactionId = reinterpret_cast<TInt>( this );
     
@@ -398,6 +395,8 @@
         iDataArray.ResetAndDestroy();
         iIconArray.Reset();
         }
+    
+    __PRINTS("*** CSapiDataPlugin::RefreshL - done ***");
     }
 
 // ---------------------------------------------------------------------------
@@ -434,6 +433,9 @@
         TRAP_IGNORE( PublishL() );
         TRAP_IGNORE( iData->SetStartupReasonL( KPluginStartup));
         }
+
+    // Listen for publisher registration to resend the events 
+    TRAP_IGNORE( iData->RegisterPublisherObserverL() );
     }
 
 // ----------------------------------------------------------------------------
@@ -455,6 +457,11 @@
         {
         TRAP_IGNORE( iData->ChangePublisherStatusL( KPluginShutdown ));
         }
+
+    if ( iData )
+        {
+        TRAP_IGNORE( iData->ChangePublisherStatusL( KDeActive ));
+        }
     }
 
 // ----------------------------------------------------------------------------
@@ -612,17 +619,15 @@
         iData->ConfigureL( configurationItemsArr );
         
         iPluginState = ESuspend;
+
+        // Listen the publisher content update
+        iData->RegisterContentObserverL();
         
         // Activate the publisher
         iData->ChangePublisherStatusL( KActive );
-        // Register for notifications
-        iData->RegisterPublisherObserverL();
         // Execute the active trigger 
         iData->TriggerActiveL();
-        // There must be at least 1 milli second delay 
-        // to register the second observer as both are using the 
-        // same MLiwInterface object
-        iData->RegisterContentObserverL();
+        
         }
     
     contentItemsArr.Reset();
@@ -633,6 +638,18 @@
     }
 
 // ----------------------------------------------------------------------------
+// CSapiDataPlugin::SetProperty
+//
+// ----------------------------------------------------------------------------
+//
+void CSapiDataPlugin::SetProperty( TProperty aProperty, TAny* aAny )
+    {
+    if (aProperty == ECpsCmdBuffer )
+        {
+        iData->SetCommandBuffer( aAny );
+        }
+    }
+// ----------------------------------------------------------------------------
 // CSapiDataPlugin::GetProperty
 //
 // ----------------------------------------------------------------------------
--- a/idlefw/plugins/wrtdataplugin/group/wrtdataplugin.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/group/wrtdataplugin.mmp	Wed May 12 13:35:37 2010 +0300
@@ -53,9 +53,13 @@
 LIBRARY         estor.lib
 LIBRARY         apgrfx.lib 
 
-// End of File
+// Debugging dependencies
+LIBRARY         flogger.lib
+
 SOURCEPATH ../src
-
 SOURCE wrtdataplugin.cpp
 SOURCE wrtdata.cpp 
 SOURCE wrtdataobserver.cpp
+
+// End of File
+
--- a/idlefw/plugins/wrtdataplugin/inc/wrtdata.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/inc/wrtdata.h	Wed May 12 13:35:37 2010 +0300
@@ -32,6 +32,7 @@
 class CLiwServiceHandler;
 class CWrtDataObserver;
 class CWrtDataPlugin;
+class MAiCpsCommandBuffer;
 
 /**
  *  @ingroup group_wrtdataplugin
@@ -43,237 +44,207 @@
 NONSHARABLE_CLASS( CWrtData ) : public CBase
     {    
 public:
-    // constructor and destructor
-    
-    static CWrtData* NewL( CWrtDataPlugin* aPlugin );
-
-    ~CWrtData();
-    
-   public : 
     
-        /**
-        * Configures the subscriber and data to subscribe.
-        *  
-        * @param aConfigurations  Information about the subscriber 
-        *  and the data to subscribe.
-        * @return void
-        */
-        void ConfigureL(RAiSettingsItemArray& aConfigurations);
-     
-        /**
-        * Checks is this menu item is supported by the publisher
-        * 
-        * @param aMenuItem  menu item name.
-        * @return  boolean (ETrue/EFalse) 
-        */
-        TBool HasMenuItem(const TDesC16& aMenuItem );
+    /**
+    * Part of the two phased constuction
+    *
+    * @param none
+    * @return none
+    */
+    static CWrtData* NewL( CWrtDataPlugin* aPlugin );
+    
+    /*
+    * Destructor  
+    */
+    ~CWrtData();
+
+private :
 
-        /**
-        * Register to CPS for all (add/delete/update/execute) action
-        * 
-        * @param none
-        * @return void
-        */
-        void RegisterL();
-        
-       /**
-        * Update the publisher status 
-        * 
-        * @param None
-        * @return void
-        */
-        void UpdatePublisherStatusL();     
-              
-        /**
-        * Publish updated data for all the items in the widget
-        *     
-        * @param aObserver to publish data
-        * @return void
-        */
-        void PublishDefaultImageL( MAiContentObserver* aObserver );
-                
-        /**
-        * Publish the updated data
-        *   
-        * @param aObserver to publish data
-        * @param aDataMap data map
-        * @return void
-        */
-        void PublishL( MAiContentObserver* aObserver, CLiwDefaultMap* aDataMap );
-        
-        /**
-        * Called by the observer to refresh the changed content
-        *   
-        * @param aContentId content Id.
-        * @param aOperation operation (add/delete/update/execute).
-        * @param aDataMap data map.
-        * @return void
-        */
-        void RefreshL( TDesC& aContentId, TDesC& aOperation, CLiwDefaultMap* aDataMap );
-                
-        /**
-        * Tigger for execution of a action for a specific content id.
-        * 
-        * @param aObjectId object Id.
-        * @param aTrigger name of the trigger.
-        * @return void
-        */
-        void ExecuteActionL(const TDesC& aObjectId, const TDesC& aTrigger);
+    /**
+    * Default Constructor
+    *
+    */
+    CWrtData();
+    
+    /**
+    * Part of the two phased construction
+    *
+    * @param aPlugin reference of the plugin
+    * @return void
+    */
+    void ConstructL(CWrtDataPlugin* aPlugin);
+    
+public : 
+    // new functions 
+    
+    /**
+    * Configures the subscriber and data to subscribe.
+    *  
+    * @param aConfigurations  Information about the subscriber 
+    *  and the data to subscribe.
+    * @return void
+    */
+    void ConfigureL(RAiSettingsItemArray& aConfigurations);
 
-        /**
-        * Is the pugin is active to publish the data.
-        * 
-        * @param None
-        * @return boolean (ETrue/EFalse).
-        */
-        TBool IsPluginActive();
+    /**
+    * Register to CPS for all (add/delete/update/execute) action
+    * 
+    * @param none
+    * @return void
+    */
+    void RegisterL();
+    
+   /**
+    * Update the publisher status 
+    * 
+    * @param None
+    * @return void
+    */
+    void UpdatePublisherStatusL();     
+
+    /**
+    * Publish initial data for all the items in the widget
+    *     
+    * @param aObserver to publish data
+    * @return void
+    */
+    void PublishInitialDataL( MAiContentObserver* aObserver );
 
-        /**
-        * Activate the publisher
-        * 
-        * @param None
-        * @return void
-        */
-        void ActivateL();
-                 
-        /**
-        * Resume the publisher
-        * 
-        * @param None
-        * @return void
-        */
-        void ResumeL();
-        
-        /**
-        * Suspend the publisher
-        * 
-        * @param None
-        * @return void
-        */
-        void SuspendL();
-        
-        /**
-        * Deactivate the publisher
-        * 
-        * @param None
-        * @return void
-        */
-        void DeActivateL();      
-        
-        /**
-        * OnLineL 
-        * 
-        * @param None
-        * @return void
-        */
-        void OnLineL();
-        
-        /**
-        * OffLineL 
-        * 
-        * @param None
-        * @return void
-        */
-        void OffLineL();
+    /**
+    * Publish updated data for all the items in the widget
+    *     
+    * @param aObserver to publish data
+    * @return void
+    */
+    void PublishDefaultImageL( MAiContentObserver* aObserver );
+            
+    /**
+    * Publish the updated data
+    *   
+    * @param aObserver to publish data
+    * @param aDataMap data map
+    * @return void
+    */
+    void PublishL( MAiContentObserver* aObserver, CLiwDefaultMap* aDataMap );
+    
+    /**
+    * Called by the observer to refresh the changed content
+    *   
+    * @param aContentId content Id.
+    * @param aOperation operation (add/delete/update/execute).
+    * @param aDataMap data map.
+    * @return void
+    */
+    void RefreshL( TDesC& aContentId, TDesC& aOperation, CLiwDefaultMap* aDataMap );
+            
+    /**
+    * Tigger for execution of a action for a specific content id.
+    * 
+    * @param aObjectId object Id.
+    * @param aTrigger name of the trigger.
+    * @return void
+    */
+    void ExecuteActionL(const TDesC& aObjectId, const TDesC& aTrigger);
 
-   private :
+    /**
+    * Is the pugin is active to publish the data.
+    * 
+    * @param None
+    * @return boolean (ETrue/EFalse).
+    */
+    TBool IsPluginActive();
+
+    /**
+    * Notify the status to the publisher
+    *
+    * @param aStatus new status of the publisher
+    * @return void
+    */
+    void NotifyPublisherL(const TDesC8& aStatus);
+    
+    /**
+    * Sets property value.
+    *
+    * @since S60 5.2
+    * @param aAny - contains pointer to command buffer.
+    * @param aNameSpace - plugin name space id
+    */
+    void SetCommandBuffer(TAny* aAny, const TDesC8& aNameSpace);
     
-        /**
-        * Default Constructor
-        *
-        */
-        CWrtData();
-        
-        /**
-        * Part of the two phased construction
-        *
-        * @param aPlugin reference of the plugin
-        * @return void
-        */
-        void ConstructL(CWrtDataPlugin* aPlugin);
-         
-        /**
-        * Createts the filter map
-        * 
-        * @return filter map
-        */
-        CLiwDefaultMap* CreateFilterLC( );
-          
-        /**
-        * Execute the command to get the data from CPS
-        * 
-        * @param aInFilter input filter for the command
-        * @param aOutDataMap output data map 
-        * @param aRegistry type of registry (publisher/cp_data)
-        * @return void 
-        */
-        void ExecuteCommandL(CLiwDefaultMap* aInFilter, 
-                CLiwDefaultMap* aOutDataMap, const TDesC16& aRegistry );
-       
+private: 
+    // new functions
+     
+    /**
+    * Createts the filter map
+    * 
+    * @return filter map
+    */
+    CLiwDefaultMap* CreateFilterLC( );
+      
+    /**
+    * Execute the command to get the data from CPS
+    * 
+    * @param aInFilter input filter for the command
+    * @param aOutDataMap output data map 
+    * @param aRegistry type of registry (publisher/cp_data)
+    * @return void 
+    */
+    void ExecuteCommandL(CLiwDefaultMap* aInFilter, 
+            CLiwDefaultMap* aOutDataMap, const TDesC16& aRegistry );
+   
+    /**
+    * Gets the widgent name and uid 
+    *
+    * @param aName  - widget name
+    * @param aAppUID - widget uid
+    * @return void
+    */
+    void GetWidgetNameAndUidL(TDes& aName, TDes& aAppUID );
+    
+    /**
+    * Resolves the Uid from the string  
+    *
+    * @param aUidDes  - uid in string
+    * @param aUid - uid
+    * @return ETure/EFalse
+    */ 
+    TBool ResolveUid(const TDesC& aUidDes, TUid& aUid );
+    
+    /**
+    * Creates icon from the uid
+    *
+    * @param aHandle  - icon handle
+    * @param aMaskHandle - mask handle
+    * @param aAppUid - application uid
+    * @return ETure/EFalse
+    */   
+    void CreateIconFromUidL(TInt& aHandle, TInt& aMaskHandle, const TUid& aAppUid );
 
-        /**
-        * Change the publisher status
-        *
-        * @param aStatus new status of the publisher
-        * @return void
-        */
-        void ChangePublisherStatusL(const TDesC& aStatus);
-        
-        /**
-        * Gets the menu item from the publisher
-        *
-        * @param none
-        * @return void
-        */
-        void GetMenuItemsL();
-        
-        /**
-        * Gets the widgent name and uid 
-        *
-        * @param aName  - widget name
-        * @param aAppUID - widget uid
-        * @return void
-        */
-        void GetWidgetNameAndUidL(TDes& aName, TDes& aAppUID );
-        
-        /**
-        * Resolves the Uid from the string  
-        *
-        * @param aUidDes  - uid in string
-        * @param aUid - uid
-        * @return ETure/EFalse
-        */ 
-        TBool ResolveUid(const TDesC& aUidDes, TUid& aUid );
-        
-        /**
-        * Creates icon from the uid
-        *
-        * @param aHandle  - icon handle
-        * @param aMaskHandle - mask handle
-        * @param aAppUid - application uid
-        * @return ETure/EFalse
-        */   
-        void CreateIconFromUidL(TInt& aHandle, TInt& aMaskHandle, const TUid& aAppUid );
-
-    private :   
+    /**
+    * Resend the the current plugin status to publisher 
+    *
+    * @param aActionsList new list of status for the publisher
+    * @return void
+    */
+    void ReSendNotificationL(CLiwDefaultList* aActionsList);
+            
+private :   
     // data
-    
-    /** Subscriber interface, owned */    
-    MLiwInterface* iInterface;     
+    TBuf<KHsPublisherNamespaceMaxLength> iPluginId;
+    /** CPS Command Buffer Interface, Not Owned */
+    MAiCpsCommandBuffer* iCpsExecute;
+    /** Subscriber interface, Not owned */    
+    MLiwInterface* iInterface;  
+    /** Service handler, Not owned */    
+    CLiwServiceHandler* iServiceHandler;    
     /** Data Observer to CPS, owned */
     CWrtDataObserver* iObserver;   
-    /** Service handler, owned */    
-    CLiwServiceHandler* iServiceHandler;
-    /** Command name in configuration Array, owned */
-    HBufC8* iCommandName;      
     /** Reference of the wrt data plugin, not owned */    
     CWrtDataPlugin* iPlugin;    
-    /** Menu item names, owned */    
-    RPointerArray<HBufC16> iMenuItems;     
-    /** Trigger names for the menu items, owned */    
-    RPointerArray<HBufC8> iMenuTriggers;    
     /** Content id, owned */
     HBufC* iContentId;
+    /** Widget's UID */
+    TUid iAppUid;
     };
 
 #endif /*WRTDATA_H*/
--- a/idlefw/plugins/wrtdataplugin/inc/wrtdataplugin.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/inc/wrtdataplugin.h	Wed May 12 13:35:37 2010 +0300
@@ -139,6 +139,11 @@
     
     /**
      * @see CHsContentPublisher
+     */
+    void SetProperty( TProperty aProperty, TAny* aAny );
+    
+    /**
+     * @see CHsContentPublisher
      */    
     TAny* GetProperty( TProperty aProperty );
     
@@ -146,12 +151,7 @@
      * @see CHsContentPublisher
      */    
     void HandleEvent( const TDesC& aEventName, const TDesC& aParam );
-    
-    /**
-     * @see CHsContentPublisher
-     */    
-    TBool HasMenuItem( const TDesC& aMenuItem );
-         
+
 public:
 
     /**
@@ -260,16 +260,21 @@
      */
     TPluginNetworkStatus NetworkStatus() const;
     
+    /**
+    * Creates initial data republishing timer if needed and starts it
+    */
+    void StartTimer();
+
 private:
     // new functions
     
     /**
-    * Publishes widget's texts and images
+    * Publishes widget's initial texts and images
     *
     * @param void
     * @return void
     */
-    void PublishL();
+    void PublishInitialDataL();
         
 	/**
 	* Resolves skin item id and Mif id from pattern 
@@ -285,7 +290,32 @@
 	*/
 	TBool ResolveSkinIdAndMifId( const TDesC& aPath, TAknsItemID& aItemId,
 	        TInt& aMifId, TInt& aMaskId, TDes& aFilename );
-        
+
+    /**
+    * Cancels transaction in case of leave
+    *
+    * @param aObserver Transaction target
+    */
+    static void CancelTransaction( TAny* aObserver );
+  
+    /**
+    * Cancels initial data republishing timer
+    */
+    void CancelTimer();
+
+    /**
+    * Stops and deletes initial data republishing timer. 
+    */
+    void StopTimer();
+
+    /**
+    * Timeout callback from timer. Used if publishing of initial data has failed.
+    *
+    * @param aPtr Contains pointer to instance of this class 
+    */
+    static TInt Timeout( TAny* aPtr );
+
+
 private: 
     // data
 
@@ -309,6 +339,8 @@
     TPluginStates iPluginState;
     /** File server session handle, owned */
     RFs iRfs;
+    /** Timer for initial data republishing, owned */
+    CPeriodic* iTimer;
     };
 
 #endif // WRTDATAPLUGIN_H
--- a/idlefw/plugins/wrtdataplugin/inc/wrtdatapluginconst.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/inc/wrtdatapluginconst.h	Wed May 12 13:35:37 2010 +0300
@@ -61,8 +61,6 @@
 _LIT8( KContentType, "content_type" );
 _LIT8( KContentId,   "content_id" );
 _LIT8( KResults,      "results");
-_LIT8( KMenuItems,     "menuitems");
-_LIT( KMenuItem16,     "menuitem");
 _LIT( KAll, "all");
 _LIT8( KOperation, "operation" );
 _LIT8( KFLAG,      "flag");
@@ -73,13 +71,12 @@
 _LIT( KOperationExecute, "execute" );
 _LIT( KAddUpdateDelete, "add:update:delete" );
 
-_LIT( KDeActive, "deactive");
-_LIT( KActive, "active");
-_LIT( KSuspend , "suspend");
-_LIT( KResume, "resume");
-_LIT( KOnLine, "online");
-_LIT( KOffLine, "offline");
-_LIT( KInActive, "inactive");
+_LIT8( KDeActive, "deactive");
+_LIT8( KActive, "active");
+_LIT8( KSuspend , "suspend");
+_LIT8( KResume, "resume");
+_LIT8( KOnLine, "online");
+_LIT8( KOffLine, "offline");
 
 // reserved extension for retrieving mask handle 
 _LIT8( KImageMask, "image1_mask");
--- a/idlefw/plugins/wrtdataplugin/src/wrtdata.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/src/wrtdata.cpp	Wed May 12 13:35:37 2010 +0300
@@ -24,6 +24,7 @@
 #include <apgcli.h>
 #include <apgicnfl.h> 
 #include <bautils.h> 
+#include <aicpscommandbuffer.h>
 
 #include "wrtdata.h"
 #include "wrtdatapluginconst.h"
@@ -50,6 +51,7 @@
 // ---------------------------------------------------------------------------
 //
 CWrtData::CWrtData()
+    : iAppUid( KNullUid )
     {
     }
     
@@ -60,7 +62,6 @@
 void CWrtData::ConstructL(CWrtDataPlugin* aPlugin)
     { 
      iPlugin = aPlugin;
-     iCommandName = HBufC8::NewL( KWRTContentValueMaxLength );
     }
     
 // ---------------------------------------------------------------------------
@@ -70,36 +71,20 @@
 //
 CWrtData::~CWrtData()
     {
-    if( iCommandName )
-    	{
-    	delete iCommandName;
-    	iCommandName = NULL;
-    	}
     if(iObserver)
-        {
-        TRAP_IGNORE(iObserver->ReleaseL() );
+        {      
         delete iObserver;
         iObserver = NULL;
         }
-    if( iInterface )
-         {
-         iInterface->Close();
-         iInterface = NULL;
-         }
-    if( iServiceHandler )
-         {
-         iServiceHandler->Reset();
-         delete iServiceHandler;
-         iServiceHandler = NULL;
-         }
     if ( iContentId )
     	{
     	delete iContentId;
     	iContentId = NULL;
     	}
-    iMenuItems.ResetAndDestroy();
-    iMenuTriggers.ResetAndDestroy();
     // not owned
+    iInterface = NULL;
+    iServiceHandler = NULL;
+    iCpsExecute = NULL;
     iPlugin = NULL;
     }
 
@@ -109,111 +94,25 @@
 //
 void CWrtData::ConfigureL(RAiSettingsItemArray& aConfigurations )
     {
-    HBufC8* serviceName = HBufC8::NewLC( KWRTContentValueMaxLength );
-    HBufC8* interfaceName = HBufC8::NewLC( KWRTContentValueMaxLength );
-    
-    // Interface name 
-    RCriteriaArray criteriaArray;
-    
     TInt count = aConfigurations.Count();
-   
-    for(TInt i = 0;i<count;i++)
+    for(TInt i = 0; i<count; i++ )
        {
        MAiPluginConfigurationItem& confItem = ( aConfigurations[i] )->AiPluginConfigurationItem();
        // if owner is plugin then it (key,value) is for plugin configurations items
-       if(confItem.Owner() == KPlugin())
+       if(confItem.Owner() == KPlugin() && confItem.Name() == KPubData())
            {
-           if(confItem.Name() ==  KService())
-               {
-               serviceName->Des().Copy(confItem.Value());
-               }
-           else if( confItem.Name() == KInterface() )
-                 {
-                 interfaceName->Des().Copy(confItem.Value());
-                 }
-           else if( confItem.Name() == KCommand() )
-                 {
-                 iCommandName->Des().Copy(confItem.Value());
-                 }
-           else if( confItem.Name() == KMenuItem16() )
-                 {
-                 iMenuItems.AppendL( confItem.Value().AllocL() );
-                 }
-           else if( confItem.Name() == KPubData() )
-				  {
-				  iContentId = confItem.Value().AllocL();
-				  }
-           }
+           iContentId = confItem.Value().AllocL();
+		   }
        }
-    
-    if( !( serviceName->Des().Length() >= 0 && interfaceName->Des().Length() >= 0  
-            && iCommandName->Des().Length() >= 0 ) )
+    if( iContentId->Des().Length() == 0 ) 
         {
         // No service to offer without plugin configurations 
         User::Leave( KErrNotSupported );
         }
-    
-    iServiceHandler = CLiwServiceHandler::NewL(); 
-
-    // for convenience keep pointers to Service Handler param lists 
-    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
-    CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
-
-    CLiwCriteriaItem* criteriaItem = CLiwCriteriaItem::NewLC( KLiwCmdAsStr, *interfaceName , *serviceName );
-    criteriaItem->SetServiceClass( TUid::Uid( KLiwClassBase ) );
-    criteriaArray.AppendL( criteriaItem );
-
-
-    // attach Liw criteria
-     iServiceHandler->AttachL( criteriaArray );
-     iServiceHandler->ExecuteServiceCmdL( *criteriaItem, *inParamList, *outParamList );
-
-     CleanupStack::PopAndDestroy(criteriaItem);
-     criteriaArray.Reset();
-
-    // extract CPS interface from output params
-    TInt pos( 0 );
-    outParamList->FindFirst( pos, *interfaceName );
-    if( pos != KErrNotFound )
-        {
-        //iInterface is MLiwInterface*
-        iInterface = (*outParamList)[pos].Value().AsInterface(); 
-        User::LeaveIfNull( iInterface );
-        }
-    else
-        {
-        User::Leave( KErrNotFound );
-        }
-    inParamList->Reset();
-    outParamList->Reset();
-    CleanupStack::PopAndDestroy( interfaceName );
-    CleanupStack::PopAndDestroy( serviceName );
-
-	//Gets the menu items from the publisher registry    
-    GetMenuItemsL();
- 
     iObserver = CWrtDataObserver::NewL( iInterface, this );   
     }
 
 // ---------------------------------------------------------------------------
-// CWrtData::HasMenuItem
-// ---------------------------------------------------------------------------
-//
-TBool CWrtData::HasMenuItem(const TDesC16& aMenuItem )
-    {
-    TBool found = EFalse;
-    for (TInt i = 0; i < iMenuItems.Count(); i++ )
-        {
-        if( aMenuItem == iMenuItems[i] )
-            {
-            found =  ETrue;
-            break;
-            }
-        }
-    return found;
-    }
-
-// ---------------------------------------------------------------------------
 // CWrtData::RegisterL
 // ---------------------------------------------------------------------------
 //
@@ -232,23 +131,58 @@
 void CWrtData::UpdatePublisherStatusL()
     {
      // Resent the plugin status to publisher
-     ActivateL();
+    CLiwDefaultList* actions= CLiwDefaultList::NewLC();
+    actions->AppendL( TLiwVariant( KActive ));
      if ( iPlugin->IsActive() )
          {
-         ResumeL();
+         actions->AppendL( TLiwVariant( KResume ) );
          }
      else
          {
-         SuspendL();
+         actions->AppendL( TLiwVariant( KSuspend ));
          }
       // forward the network status if it uses.
     if ( iPlugin->NetworkStatus() == CWrtDataPlugin::EOnline )
         {
-        OnLineL();
+        actions->AppendL( TLiwVariant( KOnLine ));
         }
     else if ( iPlugin->NetworkStatus() == CWrtDataPlugin::EOffline )
         {
-        OffLineL();
+        actions->AppendL( TLiwVariant(  KOffLine));
+        }
+
+    ReSendNotificationL( actions );
+    CleanupStack::PopAndDestroy( actions );
+    }
+
+// ---------------------------------------------------------------------------
+// CWrtData::PublishInitialDataL
+// ---------------------------------------------------------------------------
+//
+void CWrtData::PublishInitialDataL( MAiContentObserver* aObserver )
+    {
+    // Show loading animation
+    iPlugin->ShowLoadingIcon( aObserver );
+
+    TBuf<KWRTContentValueMaxLength> appName;
+    TBuf<KWRTAppUidLenth> appUidStr;
+    GetWidgetNameAndUidL( appName, appUidStr );
+
+    // Publish widget's name
+    if ( appName.Length() > 0 )
+       {
+       iPlugin->PublishTextL( aObserver, CWrtDataPlugin::EDefaultText, appName );
+       }
+
+    // Publish widget's apparc image. This might fail if there is application
+    // list population ongoing in AppFW and then we have to try again later
+    if ( ResolveUid ( appUidStr, iAppUid ) )
+        {
+        TRAPD( err, PublishDefaultImageL( aObserver ) );
+        if ( KErrNone != err )
+            {
+            iPlugin->StartTimer();
+            }
         }
     }
 
@@ -258,64 +192,18 @@
 //
 void CWrtData::PublishDefaultImageL( MAiContentObserver* aObserver )
     {
-    TBuf<KWRTAppUidLenth> appUidStr;
-    TBuf<KWRTContentValueMaxLength> appName;
-    GetWidgetNameAndUidL( appName, appUidStr );
-    
-    TUid appUid;
-    if ( ResolveUid (appUidStr, appUid ) )
-        {
-#ifdef WRT_PREDEFINED_IMAGE         
-        RFs rfs;
-        User::LeaveIfError( rfs.Connect() );
+    // Publish widget's apparc image
+    TInt handle = KErrNotFound;
+    TInt mask = KErrNotFound;
+    // create icon from application UID
+    CreateIconFromUidL( handle, mask, iAppUid );
+    // Publish apparc image 
+    iPlugin->PublishImageL( aObserver,
+                                CWrtDataPlugin::EDefaultImage,
+                                handle,
+                                mask );
+    }
 
-        TFileName privatePath;
-        rfs.PrivatePath(privatePath);
-        privatePath.Insert(0,KDrive);
-        privatePath.Append( KImgFolder );
-      
-        appUidStr.Copy( appUid.Name());
-        appUidStr.Delete(0,1);
-        appUidStr.Delete( appUidStr.Length() -1, 1);
-        privatePath.Append (appUidStr );
-        privatePath.Append ( KJPEG );
-        if ( BaflUtils::FileExists(rfs,privatePath) )
-            {
-            // Publish predefined jpeg image
-            iPlugin->PublishImageL( aObserver, CWrtDataPlugin::EImage1,privatePath);
-            }
-        else
-            {
-            privatePath.Delete( privatePath.Length() - 4 , 4);
-            privatePath.Append( KPNG );
-            if ( BaflUtils::FileExists(rfs,privatePath) )
-               {
-               // Publish predefined image
-               iPlugin->PublishImageL( aObserver, CWrtDataPlugin::EImage1,privatePath);
-               }
-            else
-                {
-#endif                 
-                TInt handle = KErrNotFound;
-                TInt mask = KErrNotFound;
-                CreateIconFromUidL( handle, mask, appUid );
-                // Publish widget apparc image
-                iPlugin->PublishImageL( aObserver, CWrtDataPlugin::EDefaultImage,handle,mask);
-                if ( appName.Length() > 0)
-                   {
-                   // Publish Widget Name
-                   iPlugin->PublishTextL( aObserver, CWrtDataPlugin::EDefaultText, appName);
-                   }
-#ifdef WRT_PREDEFINED_IMAGE                
-                }
-            }
-        rfs.Close();
-#endif        
-        }
-    
-    // Show loading animation
-    iPlugin->ShowLoadingIcon(aObserver);
-    }
 
 // ---------------------------------------------------------------------------
 // CWrtData::PublishL
@@ -382,7 +270,9 @@
   
    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
    CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
-   CLiwDefaultMap* filter = NULL;
+
+   // use the first item configuration to create the filter
+   CLiwDefaultMap* filter  = CreateFilterLC();
 
    triggerName->Des().Copy(aTrigger);
    if ( aObjectId == KPubData )
@@ -393,37 +283,10 @@
        TLiwGenericParam cptype( KType, TLiwVariant( KPubData ) );
        inParamList->AppendL( cptype );
        cptype.Reset();
-       // use the first item configuration to create the filter
-       filter = CreateFilterLC();
        }
    else
        {
-       if ( aObjectId == KMenuItem16 )
-           {
-           TInt pos = KErrNotFound;
-           for (TInt i = 0; i < iMenuItems.Count(); i++)
-               {
-               if ( aTrigger == iMenuItems[i] )
-                   {
-                   pos = i;
-                   break;
-                   }
-               }
-           if( pos == KErrNotFound )
-               {
-               // No such menu items
-               CleanupStack::PopAndDestroy( triggerName );
-               return; 
-               }
-              triggerName->Des().Copy( iMenuTriggers[pos]->Des() );
-              filter = CreateFilterLC();
-           }
-       else
-           {
-           //Create filter criteria for requested entries in form of LIW map:
-           filter = CreateFilterLC();
-           }
-       //append type to inparam list
+        //append type to inparam list
        TLiwGenericParam cptype( KType, TLiwVariant( KCpData ) );
        inParamList->AppendL( cptype );
        cptype.Reset();
@@ -435,13 +298,11 @@
     inParamList->AppendL( item );
     iInterface->ExecuteCmdL( KExecuteAction,  *inParamList, *outParamList );
     
+    item.Reset();
     CleanupStack::PopAndDestroy( filter );
     CleanupStack::PopAndDestroy( triggerName );
-    item.Reset();
-
+    outParamList->Reset();
     inParamList->Reset();
-    outParamList->Reset();  
-    
     }
 
 // ---------------------------------------------------------------------------
@@ -454,60 +315,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// CWrtData::ActivateL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::ActivateL()
-    {
-    ChangePublisherStatusL( KActive );
-    }
-
-// ---------------------------------------------------------------------------
-// CWrtData::ResumeL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::ResumeL()
-    {
-    ChangePublisherStatusL( KResume );
-    }
-
-// ---------------------------------------------------------------------------
-// CWrtData::SuspendL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::SuspendL()
-    {
-    ChangePublisherStatusL( KSuspend );
-    }
-
-// ---------------------------------------------------------------------------
-// CWrtData::DeActivateL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::DeActivateL()
-    {
-    ChangePublisherStatusL( KDeActive );
-    }
-
-// ---------------------------------------------------------------------------
-// CWrtData::OnLineL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::OnLineL()
-    {
-    ChangePublisherStatusL( KOnLine );
-    }
-
-// ---------------------------------------------------------------------------
-// CWrtData::offLineL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::OffLineL()
-    {
-    ChangePublisherStatusL( KOffLine );
-    }
-
-// ---------------------------------------------------------------------------
 // CWrtData::CreateFilterL
 // ---------------------------------------------------------------------------
 //
@@ -539,7 +346,7 @@
     // execute service.It is assumed that iInterface is already initiatedd
     if(iInterface)
         {
-        iInterface->ExecuteCmdL( *iCommandName, *inParamList, *outParamList);
+        iInterface->ExecuteCmdL( KGetList, *inParamList, *outParamList);
         }
     else
         {
@@ -579,94 +386,21 @@
     }
 
 // ---------------------------------------------------------------------------
-// CWrtData::PublisherStatusL
-// ---------------------------------------------------------------------------
-//
-void CWrtData::ChangePublisherStatusL(const TDesC& aStatus)
-    {
-    if( iContentId == NULL )
-       {
-       return;
-       }
-   HBufC8* triggerName = HBufC8::NewLC(KWRTContentNameMaxLength);
-   triggerName->Des().Copy(aStatus);
-   
-   CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
-   CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
-       
-   TLiwGenericParam type( KType, TLiwVariant( KPubData ) );
-   inParamList->AppendL( type );
-              
-   CLiwDefaultMap* filter = CreateFilterLC();
-   filter->InsertL(KActionTrigger, TLiwVariant(triggerName->Des()) );
-   
-   TLiwGenericParam item( KFilter, TLiwVariant( filter ));
-   inParamList->AppendL( item );
-   
-   if(iInterface)
-       {
-       iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList);
-       }
-   else
-       {
-       User::Leave( KErrNotSupported );
-       }
-   CleanupStack::PopAndDestroy( filter );
-   
-   inParamList->Reset();
-   outParamList->Reset();
-   CleanupStack::PopAndDestroy( triggerName );
-   }
-
-// ---------------------------------------------------------------------------
-// CWrtData::GetMenuItemsL
+// NotifyPublisherL
 // ---------------------------------------------------------------------------
 //
-void CWrtData::GetMenuItemsL()
-	{
-	if(iInterface)
-		{
-		CLiwDefaultMap *outDataMap = CLiwDefaultMap::NewLC();
-		CLiwDefaultMap* filter = CreateFilterLC( );
-		//append filter to input param
-        ExecuteCommandL( filter, outDataMap, KPubData  );
-		CleanupStack::PopAndDestroy( filter );
-		
-		TLiwVariant variant;
-		TInt pos = outDataMap->FindL( KMenuItems, variant ) ;
-		
-		if ( pos  )
-			{
-			CLiwDefaultMap *menuMap = CLiwDefaultMap::NewLC();
-			variant.Get( *menuMap );
-			for ( TInt i = 0; i < menuMap->Count(); i++)
-				{
-				menuMap->FindL(menuMap->AtL(i), variant );
-				HBufC8* value = HBufC8::NewL( KWRTContentValueMaxLength );
-				CleanupStack::PushL( value );
-				TPtr8 valPtr = value->Des();
-				variant.Get( valPtr);
-				if ( valPtr.Length() > 0 )
-					{
-					iMenuTriggers.AppendL( value );
-					CleanupStack::Pop( value );
-					HBufC16* triggerName = HBufC16::NewLC( KWRTContentNameMaxLength );
-				    triggerName->Des().Copy( menuMap->AtL(i) );
-					iMenuItems.AppendL( triggerName );
-					CleanupStack::Pop( triggerName );
-					}
-				else
-					{
-					CleanupStack::PopAndDestroy( value );	
-					}
-				variant.Reset();
-				}
-			CleanupStack::PopAndDestroy( menuMap );
-			}
-		variant.Reset();
-		CleanupStack::PopAndDestroy( outDataMap );
-		}
-	}
+void CWrtData::NotifyPublisherL(const TDesC8& aStatus)
+    {
+    if( iCpsExecute == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    
+    CLiwDefaultMap* filter = CreateFilterLC();
+    // Add execute command triggers. Idle framework will execute 
+    iCpsExecute->AddCommand( iPluginId, KPubData, filter, aStatus );
+    CleanupStack::PopAndDestroy( filter );
+    }
 
 // ---------------------------------------------------------------------------
 // CWrtData::GetWidgetNameAndUidL
@@ -741,14 +475,14 @@
                 }
             }
         }
-    return (error == KErrNone );
+    return ( error == KErrNone );
     }
 
 // ---------------------------------------------------------------------------
 // CWrtData::CreateIconFromUidL
 // ---------------------------------------------------------------------------
 //
-void CWrtData::CreateIconFromUidL(TInt& aHandle, TInt& aMaskHandle, const TUid& aAppUid ) 
+void CWrtData::CreateIconFromUidL( TInt& aHandle, TInt& aMaskHandle, const TUid& aAppUid ) 
     {
     RApaLsSession lsSession;
     User::LeaveIfError( lsSession.Connect() );
@@ -756,33 +490,79 @@
     
     CArrayFixFlat<TSize>* sizeArray = new(ELeave) CArrayFixFlat<TSize>( 5 );
     CleanupStack::PushL( sizeArray );
-    if ( KErrNone == lsSession.GetAppIconSizes(aAppUid, *sizeArray) )
+
+    User::LeaveIfError( lsSession.GetAppIconSizes( aAppUid, *sizeArray ) );
+
+    if ( sizeArray->Count() ) 
         {
-        if ( sizeArray->Count() ) 
+        // There are other icon sizes
+        TInt idx = 0;
+        TInt size( sizeArray->At(idx).iWidth * sizeArray->At(idx).iHeight );
+        for ( TInt i = 1; i < sizeArray->Count(); i++ ) 
             {
-            // There are other icon sizes
-            TInt idx = 0;
-            TInt size( sizeArray->At(idx).iWidth * sizeArray->At(idx).iHeight );
-            for ( TInt i = 1; i < sizeArray->Count(); i++ ) 
+            if ( ( sizeArray->At(i).iWidth * sizeArray->At(i).iHeight ) > size )
                 {
-                if ( ( sizeArray->At(i).iWidth * sizeArray->At(i).iHeight ) > size )
-                    {
-                    idx = i;
-                    size =  sizeArray->At(idx).iWidth * sizeArray->At(idx).iHeight;
-                    }
+                idx = i;
+                size =  sizeArray->At(idx).iWidth * sizeArray->At(idx).iHeight;
                 }
+            }
 
-            CApaMaskedBitmap* appBitMap = CApaMaskedBitmap::NewLC();
-            if ( KErrNone == lsSession.GetAppIcon( aAppUid, sizeArray->At(idx),
-                    *appBitMap ) )
-                {
-                aHandle = appBitMap->Handle();
-                aMaskHandle = appBitMap->Mask()->Handle();
-                }
-            CleanupStack::PopAndDestroy( appBitMap );
-            }
+        CApaMaskedBitmap* appBitMap = CApaMaskedBitmap::NewLC();
+        User::LeaveIfError( lsSession.GetAppIcon( aAppUid, sizeArray->At(idx), *appBitMap ) );
+        aHandle = appBitMap->Handle();
+        aMaskHandle = appBitMap->Mask()->Handle();
+        CleanupStack::PopAndDestroy( appBitMap );
         }
+
     CleanupStack::PopAndDestroy( sizeArray );
     CleanupStack::PopAndDestroy( &lsSession );
     }
 
+
+// ---------------------------------------------------------------------------
+// ReSendNotificationL
+// ---------------------------------------------------------------------------
+//
+void CWrtData::ReSendNotificationL(CLiwDefaultList* aActionsList)
+    {
+    if( iInterface == NULL )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    
+    CLiwGenericParamList* inParamList  = &iServiceHandler->InParamListL();
+    CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL();
+
+    TLiwGenericParam type( KType, TLiwVariant( KPubData ) );
+    inParamList->AppendL( type );
+     
+    CLiwDefaultMap* filter = CreateFilterLC();
+    // add list of action triggers to execute
+    filter->InsertL(KActionTrigger, TLiwVariant(aActionsList) );
+    
+    TLiwGenericParam item( KFilter, TLiwVariant( filter ));
+    inParamList->AppendL( item );
+    iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList);
+    CleanupStack::PopAndDestroy( filter );
+    outParamList->Reset();
+    inParamList->Reset();
+
+    }
+
+// ---------------------------------------------------------------------------
+// SetCommandBuffer
+// ---------------------------------------------------------------------------
+//
+void CWrtData::SetCommandBuffer(TAny* aAny, const TDesC8& aNameSpace )
+    {
+    iPluginId.Copy(aNameSpace);
+    iCpsExecute = reinterpret_cast <MAiCpsCommandBuffer* > ( aAny );
+    if ( iCpsExecute )
+        {
+        iInterface = iCpsExecute->CpsInterface();
+        iServiceHandler = iCpsExecute->ServiceHandler();
+        }
+    }
+
+// End of file
+
--- a/idlefw/plugins/wrtdataplugin/src/wrtdataobserver.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/src/wrtdataobserver.cpp	Wed May 12 13:35:37 2010 +0300
@@ -55,8 +55,7 @@
 // ---------------------------------------------------------------------------
 //
 CWrtDataObserver::CWrtDataObserver ()
-    {
-
+    {    
     }
         
 // ---------------------------------------------------------------------------
@@ -65,7 +64,8 @@
 //
 CWrtDataObserver ::~CWrtDataObserver ()
     {
-    TRAP_IGNORE( ReleaseL());
+    TRAP_IGNORE( ReleaseL() );
+    
     iInterface = NULL;
     iData = NULL;
     }
@@ -191,7 +191,7 @@
 // Sing off to notification
 // ---------------------------------------------------------------------------
 //
-void CWrtDataObserver ::ReleaseL()
+void CWrtDataObserver::ReleaseL()
     {
     if( iInterface )
         {
@@ -212,3 +212,5 @@
         CleanupStack::PopAndDestroy( inParamList );
         }
     }
+
+// End of file
--- a/idlefw/plugins/wrtdataplugin/src/wrtdataplugin.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wrtdataplugin/src/wrtdataplugin.cpp	Wed May 12 13:35:37 2010 +0300
@@ -34,6 +34,7 @@
 #include <aipspropertyobserver.h>
 #include <aipluginsettings.h>
 #include <activeidle2domainpskeys.h>
+#include <debug.h>
 
 #include "wrtdatapluginconst.h"
 #include "wrtdatapluginuids.hrh"
@@ -46,6 +47,8 @@
     IMPLEMENTATION_PROXY_ENTRY( KImplUidDataPlugin, CWrtDataPlugin::NewL ) 
     };
 
+const TInt KTryAgainDelay( 3000000 ); // 3 sec
+
 // ======== MEMBER FUNCTIONS ========
 // ---------------------------------------------------------------------------
 // ImplementationGroupProxy
@@ -104,6 +107,12 @@
 //
 CWrtDataPlugin::~CWrtDataPlugin()
     {
+    if ( iTimer )
+        {
+        iTimer->Cancel();
+        delete iTimer;
+        }
+
     delete iData;
     iObservers.Close();
     Release( iContent );
@@ -132,8 +141,8 @@
     if( aReason == ESystemStartup || 
         aReason == EPluginStartup )
         {
-        // publish the initial data
-        TRAP_IGNORE( PublishL());
+        // Publish the initial data
+        TRAP_IGNORE( PublishInitialDataL() );
         }
     }
 
@@ -147,7 +156,7 @@
     if( aReason == EPluginShutdown ||
         aReason == ESystemShutdown )
         {
-        TRAP_IGNORE(iData->DeActivateL());
+        TRAP_IGNORE(iData->NotifyPublisherL( KDeActive ));
         }
     }
 
@@ -162,7 +171,7 @@
         {
         iPluginState = EResume;
 
-        TRAP_IGNORE( iData->ResumeL() );        
+        TRAP_IGNORE( iData->NotifyPublisherL( KResume ));        
         }    
     }
 
@@ -177,7 +186,7 @@
         {
         iPluginState = ESuspend;
         
-        TRAP_IGNORE ( iData->SuspendL() );        
+        TRAP_IGNORE ( iData->NotifyPublisherL( KSuspend ));        
         }        
     }
 
@@ -188,12 +197,8 @@
 //
 void CWrtDataPlugin::SetOnline()
     {    
-    if ( iNetworkStatus != EOnline )
-        {
-        iNetworkStatus = EOnline;
-        
-        TRAP_IGNORE( iData->OnLineL() );            
-        }    
+    iNetworkStatus = EOnline;
+    TRAP_IGNORE( iData->NotifyPublisherL( KOnLine ));            
     }
 
 // ----------------------------------------------------------------------------
@@ -203,12 +208,8 @@
 //
 void CWrtDataPlugin::SetOffline()
     {
-    if ( iNetworkStatus != EOffline )
-        {
-        iNetworkStatus = EOffline;
-        
-        TRAP_IGNORE( iData->OffLineL() );            
-        }    
+    iNetworkStatus = EOffline;
+    TRAP_IGNORE( iData->NotifyPublisherL( KOffLine ));            
     }
 
 // ----------------------------------------------------------------------------
@@ -237,8 +238,6 @@
     
     RAiSettingsItemArray contentItemsArr;
     RAiSettingsItemArray configurationItemsArr;
-    RAiSettingsItemArray settingItemsArr;
-    
     TInt count( aSettings.Count() );
     
     for ( TInt i = 0; i < count; i++ )
@@ -253,10 +252,6 @@
             {
             configurationItemsArr.Append( setting );
             }
-        else 
-            {
-            settingItemsArr.Append( setting );
-            }
         }
     
     iDataCount = contentItemsArr.Count();
@@ -315,18 +310,29 @@
         iData->RegisterL();
         
         // Activate the publisher 
-        iData->ActivateL();
+        iData->NotifyPublisherL( KActive );
         }
     
-    settingItemsArr.Reset();
     contentItemsArr.Reset();
     configurationItemsArr.Reset();
-    
-       // We own the array so destroy it
+    // We own the array so destroy it
     aSettings.ResetAndDestroy();
     }
 
 // ----------------------------------------------------------------------------
+// CWrtDataPlugin::SetProperty
+//
+// ----------------------------------------------------------------------------
+//
+void CWrtDataPlugin::SetProperty( TProperty aProperty, TAny* aAny )
+    {
+    if (aProperty == ECpsCmdBuffer )
+        {   
+        iData->SetCommandBuffer( aAny, PublisherInfo().Namespace() );
+        }
+    }
+
+// ----------------------------------------------------------------------------
 // CWrtDataPlugin::GetProperty
 //
 // ----------------------------------------------------------------------------
@@ -353,16 +359,6 @@
     }
 
 // ----------------------------------------------------------------------------
-// CWrtDataPlugin::HasMenuItem
-//
-// ----------------------------------------------------------------------------
-//
-TBool CWrtDataPlugin::HasMenuItem( const TDesC& aMenuItem )
-    {
-    return iData->HasMenuItem ( aMenuItem );
-    }
-
-// ----------------------------------------------------------------------------
 // CWrtDataPlugin::IsActive
 //
 // ----------------------------------------------------------------------------
@@ -443,11 +439,16 @@
     }
 
 // ---------------------------------------------------------------------------
-//Refresh a specific image of text in the widget
+//Refresh a specific image or text in the widget
 // ---------------------------------------------------------------------------
 //
 void CWrtDataPlugin::RefreshL( TDesC16& aOperation, CLiwDefaultMap* aDataMap )
     {
+    __PRINTS("*** CWrtDataPlugin::RefreshL ***");
+    
+    __PRINT( __DBG_FORMAT( "* Publisher name: %S, uid: 0x%x, operation: %S" ),          
+        &PublisherInfo().Name(), PublisherInfo().Uid().iUid, &aOperation ); 
+    
     TInt observers( iObservers.Count() );        
     TInt transactionId = reinterpret_cast<TInt>( this );
     
@@ -476,6 +477,8 @@
         // Release memory of the published icons
         iIconArray.Reset();
         }
+    
+    __PRINTS("*** CWrtDataPlugin::RefreshL - done ***");        
     }
 
 // ---------------------------------------------------------------------------
@@ -666,13 +669,16 @@
 void CWrtDataPlugin::HideLoadingIcon(MAiContentObserver* aObserver)
     {
     aObserver->SetProperty( *this, KElement , KDisplay , KHide );
+
+    // Do not try to publish initial data anymore
+    StopTimer();
     }
 
 // ---------------------------------------------------------------------------
 // Publishes widget's texts and images
 // ---------------------------------------------------------------------------
 //
-void CWrtDataPlugin::PublishL()
+void CWrtDataPlugin::PublishInitialDataL()
     {
     TInt observers( iObservers.Count() );        
     TInt transactionId = reinterpret_cast<TInt>( this );
@@ -680,13 +686,17 @@
     for ( int i = 0; i < observers; i++ )
         {
         MAiContentObserver* observer = iObservers[i];
-                
+
+        CleanupStack::PushL( TCleanupItem( CancelTransaction, observer ) );
+
         if ( observer->StartTransaction( transactionId ) == KErrNone )           
             {// Publish default data
-            iData->PublishDefaultImageL(observer);
+            iData->PublishInitialDataL(observer);
             observer->Commit( transactionId );
             }
 
+		CleanupStack::Pop( observer );
+
         // Release memory of the published text
         iDataArray.ResetAndDestroy();
         // Release memory of the published icons
@@ -774,4 +784,119 @@
    return (error == KErrNone );
    }
 
+// ---------------------------------------------------------------------------
+// Cleanup callback for cancelling a transactions in case of leave
+// ---------------------------------------------------------------------------
+//
+void CWrtDataPlugin::CancelTransaction( TAny* aObserver )
+    {
+    if ( aObserver )
+        {
+        MAiContentObserver* obs = reinterpret_cast< MAiContentObserver*>( aObserver );
+        TInt transactionId = reinterpret_cast<TInt>( aObserver );
+        obs->CancelTransaction( transactionId );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Create and start republish timer
+// ---------------------------------------------------------------------------
+//
+void CWrtDataPlugin::StartTimer()
+    {
+    TRAP_IGNORE(
+        if ( !iTimer )
+            {
+            iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+            }
+        
+        if ( !iTimer->IsActive() )
+            {
+            TTimeIntervalMicroSeconds32 delay( KTryAgainDelay );
+            iTimer->Start( delay, delay, TCallBack( Timeout, this ) );
+            }
+        );
+    }
+
+// ---------------------------------------------------------------------------
+// Cancel republish timer
+// ---------------------------------------------------------------------------
+//
+void CWrtDataPlugin::CancelTimer()
+    {
+    if ( iTimer )
+        {
+        iTimer->Cancel();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stop and delete republish timer
+// ---------------------------------------------------------------------------
+//
+void CWrtDataPlugin::StopTimer()
+    {
+    if ( iTimer )
+        {
+        iTimer->Cancel();
+        delete iTimer;
+        iTimer = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Initial data republish callback
+// ---------------------------------------------------------------------------
+//
+TInt CWrtDataPlugin::Timeout( TAny* aPtr )
+    {
+    CWrtDataPlugin* self = static_cast<CWrtDataPlugin*>( aPtr );
+
+    // Cancel timer before publishing
+    self->CancelTimer();
+
+    TInt observers( self->iObservers.Count() );        
+    TInt transactionId = reinterpret_cast<TInt>( self );
+    TBool success( ETrue );
+
+    // Publish for each observer
+    for ( int i = 0; i < observers; i++ )
+        {
+        MAiContentObserver* observer = self->iObservers[i];
+
+        if ( observer->StartTransaction( transactionId ) == KErrNone )           
+            {
+            // Publish default image
+            TRAPD( err, self->iData->PublishDefaultImageL( observer ) );
+            if ( KErrNone != err )
+                {
+                observer->CancelTransaction( transactionId );
+                success = EFalse;
+                }
+            else
+                {
+                // 
+                observer->Commit( transactionId );
+                }
+            }
+        }
+
+    // Start timer again if there is error in publishing
+    if ( !success )
+        {
+        self->StartTimer();
+        }
+    else
+        {
+        self->StopTimer();
+        }
+
+    // Release memory of the published icons
+    self->iIconArray.Reset();
+
+    return KErrNone;
+    }
+
+
+
 // End of file
--- a/idlefw/plugins/wsplugin/group/aiwsplugin.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wsplugin/group/aiwsplugin.mmp	Wed May 12 13:35:37 2010 +0300
@@ -57,4 +57,6 @@
 
 LIBRARY			aiutils.lib
 
+LIBRARY         serviceprovidersettings.lib
+
 // End of File
--- a/idlefw/plugins/wsplugin/inc/numerickeyhandler.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wsplugin/inc/numerickeyhandler.h	Wed May 12 13:35:37 2010 +0300
@@ -84,6 +84,12 @@
     void SetQwertyMode( TInt aValue );
     
     void SetInputLanguage( TInt aValue );
+    
+    TBool AllowAlphaNumericMode() const;
+
+    TBool VoIPSupported() const;
+    
+    TBool EasyDialingEnabled() const;
 
 // from base class MCenRepNotifyHandlerCallback
 
--- a/idlefw/plugins/wsplugin/src/numerickeyhandler.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/plugins/wsplugin/src/numerickeyhandler.cpp	Wed May 12 13:35:37 2010 +0300
@@ -24,6 +24,10 @@
 #include <centralrepository.h>
 #include <w32adll.h>
 
+#include <easydialingcrkeys.h>
+#include <spsettings.h>
+#include <featmgr.h>
+
 #include <PtiEngine.h>
 #include <activeidle2domainpskeys.h>
 #include <AvkonInternalCRKeys.h>
@@ -153,11 +157,11 @@
 TBool CNumericKeyHandler::CheckPostToTarget(const TRawEvent& aRawEvent ) const
     {
     const TInt scanCode = aRawEvent.ScanCode();
+    const TUint modifiers = iUiState->Modifiers();
 
     if ( iQwertyMode ) 
         {
-        // Don't pass the check if shift is pressed.
-		const TUint modifiers = iUiState->Modifiers();
+        // Don't pass the check if shift is pressed.		
         if(( modifiers & EModifierShift ) == 0 )
             {
             TInt numericKeysCount = iNumericKeys.Count();
@@ -190,7 +194,15 @@
                 }
             }
         }
-    return EFalse;
+    
+    // Homescreen should open dialer also with alpha characters, if dialer is in 
+    // mode that accepts alpha characters into number entry (ou1cimx1#299396)    
+    
+    const TInt  KPhoneKeyStart = 33;
+    const TInt  KPhoneKeyEnd   = 127;
+    
+    return ( ( AllowAlphaNumericMode() ) && ( ( scanCode >= KPhoneKeyStart &&
+             scanCode <= KPhoneKeyEnd ) || modifiers & EModifierSpecial ) );
     }
 
 
@@ -296,15 +308,73 @@
     iInputLanguage = aValue;
     }
 
+/**
+ * Check alpha numeric mode.
+ */
+TBool CNumericKeyHandler::AllowAlphaNumericMode() const
+    {
+    return ( EasyDialingEnabled() || VoIPSupported() );
+    }
+
+/**
+ * Check if voip supported.
+ */
+TBool CNumericKeyHandler::VoIPSupported() const
+    {
+    TBool voipSupported( EFalse );
+    CSPSettings* serviceProviderSettings( NULL );
+
+    TRAP_IGNORE( serviceProviderSettings = CSPSettings::NewL() );   
+
+    if ( serviceProviderSettings )
+        {
+        voipSupported = serviceProviderSettings->IsFeatureSupported( 
+                ESupportInternetCallFeature );
+        
+        delete serviceProviderSettings;
+        }
+
+    return voipSupported;
+    }
+
+/**
+ * Check if easy dialing enabled.
+ */
+TBool CNumericKeyHandler::EasyDialingEnabled() const
+    {
+    TBool easyDialingEnabled( EFalse );
+    if ( FeatureManager::FeatureSupported( 
+            KFeatureIdProductIncludesHomeScreenEasyDialing ) )
+        {
+        CRepository* cenrep( NULL );
+        TInt easyDialingSetting;
+
+        TRAP_IGNORE( cenrep = CRepository::NewL( KCRUidEasyDialSettings ) );
+
+        if ( cenrep )
+            {
+            TInt err = cenrep->Get( KEasyDialing, easyDialingSetting );
+            if ( !err && easyDialingSetting )
+                {
+                easyDialingEnabled = ETrue;
+                }
+
+            delete cenrep;        
+            }
+        }
+
+    return easyDialingEnabled;
+    }
+
 void CNumericKeyHandler::HandleNotifyGeneric(TUint32 aKey)
-	{
-	if( aKey == KAknFepInputTxtLang )
-		{
-		TInt newValue = iInputLanguage;
-		iInputLanguageRepository->Get( KAknFepInputTxtLang, newValue );
-		HandleInputLanguageChanged( newValue );
-		}
-	}
+    {
+    if( aKey == KAknFepInputTxtLang )
+        {
+        TInt newValue = iInputLanguage;
+        iInputLanguageRepository->Get( KAknFepInputTxtLang, newValue );
+        HandleInputLanguageChanged( newValue );
+        }
+    }
     
 void CNumericKeyHandler::HandleNotifyError
         (TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/src/framework/aicpscommandbuffer.cpp	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 2010 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:  Cps command buffer
+*
+*/
+
+
+// System includes
+#include <liwservicehandler.h>
+#include <liwvariant.h>
+#include <liwgenericparam.h>
+
+// User includes
+#include "caicpscommandbuffer.h"
+#include "aicpsexecuteparam.h"
+#include <debug.h>
+
+// Constants
+_LIT8( KCPSConfigurationIf, "IContentPublishing" );
+_LIT8( KCPS, "Service.ContentPublishing" );
+_LIT8( KExecuteAction, "ExecuteAction" );
+_LIT8( KExecuteMultipleActions, "ExecuteMultipleActions" );
+_LIT8( KFilters, "filters" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::CAiCpsCommandBuffer
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsCommandBuffer::CAiCpsCommandBuffer()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::ConstructL()
+    {  
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsCommandBuffer* CAiCpsCommandBuffer::NewL()
+    {
+    CAiCpsCommandBuffer* self = CAiCpsCommandBuffer::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::NewLC
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsCommandBuffer* CAiCpsCommandBuffer::NewLC()
+    {
+    CAiCpsCommandBuffer* self = new ( ELeave ) CAiCpsCommandBuffer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::~CAiCpsCommandBuffer
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsCommandBuffer::~CAiCpsCommandBuffer()
+    {
+    // Flush any pending commands
+    Flush();
+    
+    if ( iCpsInterface )
+       {
+       // Close interface
+       iCpsInterface->Close();
+       }
+    
+    TRAP_IGNORE( DetachL() );
+    
+    delete iCpsService;
+    delete iServiceHandler;    
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::DetachL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::DetachL()
+    {
+    if ( iServiceHandler && iCpsService )
+        {                   
+        // Detach services from the handler       
+        RCriteriaArray list;
+        CleanupClosePushL( list );
+     
+        list.AppendL( iCpsService );
+       
+        iServiceHandler->DetachL( list );    
+        
+        CleanupStack::PopAndDestroy( &list );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::GetCPSInterfaceL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::GetCPSInterfaceL()
+    {
+    if ( iCpsInterface )
+        {
+        return;
+        }
+    
+    RCriteriaArray interestList;
+    CleanupClosePushL( interestList );
+    
+    CLiwServiceHandler* serviceHandler = CLiwServiceHandler::NewL();
+    CleanupStack::PushL( serviceHandler );
+          
+    // Attach to CPS:    
+    CLiwCriteriaItem* cpsService = CLiwCriteriaItem::NewL( 1, KCPSConfigurationIf, KCPS );
+    CleanupStack::PushL( cpsService );
+    
+    cpsService->SetServiceClass( TUid::Uid( KLiwClassBase ) );
+    
+    interestList.AppendL( cpsService );
+    serviceHandler->AttachL( interestList );
+
+    CLiwGenericParamList& inParamList( serviceHandler->InParamListL() );
+    CLiwGenericParamList& outParamList( serviceHandler->OutParamListL() );
+    
+    serviceHandler->ExecuteServiceCmdL(
+          *cpsService,
+          inParamList,
+          outParamList );
+    
+    TInt pos( 0 );
+    
+    outParamList.FindFirst( pos, KCPSConfigurationIf );
+    
+    if ( pos != KErrNotFound )
+        {
+        iCpsInterface = (outParamList)[pos].Value().AsInterface();
+        inParamList.Reset();
+        outParamList.Reset();
+        }
+    else
+        {
+        inParamList.Reset();
+        outParamList.Reset();
+        User::Leave( KErrNotFound );
+        }
+    
+    CleanupStack::Pop( cpsService );   
+    iCpsService = cpsService;
+    
+    CleanupStack::Pop( serviceHandler );    
+    iServiceHandler = serviceHandler;
+    
+    CleanupStack::PopAndDestroy( &interestList );
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::AddCommand
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::AddCommand(  const TDesC& aPluginId,
+        const TDesC& aType, CLiwDefaultMap* aFilter,
+        const TDesC8& aAction )
+    {
+    __PRINTS( "CAiCpsCommandBuffer::AddCommand, start" );
+   
+    TRAP_IGNORE( DoAddCommandL( aPluginId, aType, aFilter, aAction ) );
+
+    __PRINTS( "CAiCpsCommandBuffer::AddCommand - done" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::ServiceHandler
+//
+// ---------------------------------------------------------------------------
+//
+CLiwServiceHandler* CAiCpsCommandBuffer::ServiceHandler() const
+    {
+    return iServiceHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::CpsInterface
+//
+// ---------------------------------------------------------------------------
+//
+MLiwInterface* CAiCpsCommandBuffer::CpsInterface() const
+    {
+    return iCpsInterface;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::DoAddCommandL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::DoAddCommandL( const TDesC& aPluginId,
+    const TDesC& aType, CLiwDefaultMap* aFilter,
+    const TDesC8& aAction )
+    {
+    TInt found( KErrNotFound );
+    
+    for ( TInt i = 0; i < iPlugins.Count(); i++ )
+        {
+        if ( aPluginId == iPlugins[i]->PluginId() )
+            {
+            found = i;
+			break;
+            }
+        }
+		
+    if ( found != KErrNotFound )
+        {
+        iPlugins[found]->AddActionL( aAction );
+        }
+    else
+        {
+        CAiCpsExecuteParam* param = CAiCpsExecuteParam::NewLC();
+        param->SetPluginIdL( aPluginId );
+        param->SetRegistryTypeL( aType );
+        param->SetFilterL( aFilter );
+        param->AddActionL( aAction );
+        iPlugins.AppendL( param );
+        CleanupStack::Pop( param );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::Flush
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::Flush()
+    {
+    __PRINTS( "CAiCpsCommandBuffer::Flush, start" );
+
+    if ( iPlugins.Count() > 0 )
+        {
+        TRAP_IGNORE( DoFlushL() );
+        }
+    
+    __PRINTS( "CAiCpsCommandBuffer::Flush - done" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsCommandBuffer::DoFlushL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsCommandBuffer::DoFlushL()
+    {
+    if ( !iCpsInterface )
+       {
+       GetCPSInterfaceL();
+       }
+	   
+    if ( iCpsInterface )
+        {
+		__PRINTS( "CAiCpsCommandBuffer::DoFlush : Execute" );
+        
+        TInt pluginCount( iPlugins.Count() );
+        
+        CLiwDefaultList* pluginCmdList = CLiwDefaultList::NewLC();
+        
+        for ( TInt i = 0; i < pluginCount; i++ )
+            {
+            CLiwDefaultMap* inParamMap = iPlugins[i]->InParamMapLC();
+            pluginCmdList->AppendL( inParamMap );
+            CleanupStack::PopAndDestroy( inParamMap );            
+            }
+        
+        CLiwGenericParamList* inParamList  = CLiwGenericParamList::NewLC();
+        CLiwGenericParamList* outParamList  = CLiwGenericParamList::NewLC();
+        
+        TLiwGenericParam item( KFilters, TLiwVariant ( pluginCmdList ) );
+        inParamList->AppendL( item ); 
+      
+        iCpsInterface->ExecuteCmdL( KExecuteMultipleActions, *inParamList, *outParamList);
+       
+        CleanupStack::PopAndDestroy( 3, pluginCmdList ); // outparamList, inParamList
+        
+        iPlugins.ResetAndDestroy();
+        }    
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/src/framework/aicpsexecuteparam.cpp	Wed May 12 13:35:37 2010 +0300
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2010 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:  CPS Execute parameter object
+*
+*/
+
+
+// System includes
+
+// User includes
+#include <debug.h>
+#include <liwvariant.h>
+#include <liwgenericparam.h>
+#include "aicpsexecuteparam.h"
+
+// Constants
+_LIT8( KPublisherId, "publisher" );
+_LIT8( KContentType,   "content_type" );
+_LIT8( KContentId,   "content_id" );
+_LIT8( KPluginId, "plugin_id");
+_LIT8( KType,          "type");
+_LIT8( KFilter, "filter" );
+_LIT8( KActionTrigger, "action_trigger" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::CAiCpsExecuteParam
+//
+// ---------------------------------------------------------------------------
+//  
+CAiCpsExecuteParam::CAiCpsExecuteParam()
+    {
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsExecuteParam::ConstructL( ) 
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsExecuteParam* CAiCpsExecuteParam::NewL()
+    {
+    CAiCpsExecuteParam* self = CAiCpsExecuteParam::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::NewLC
+//
+// ---------------------------------------------------------------------------
+//
+CAiCpsExecuteParam* CAiCpsExecuteParam::NewLC()
+    {
+    CAiCpsExecuteParam* self = new ( ELeave ) CAiCpsExecuteParam;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::~CAiCpsExecuteParam
+//
+// ---------------------------------------------------------------------------
+//  
+CAiCpsExecuteParam::~CAiCpsExecuteParam()
+    {
+    delete iPluginId;
+    delete iRegistryType;
+    delete iPublisher;
+    delete iContentType;
+    delete iContentId;
+    iActions.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::PluginId
+//
+// ---------------------------------------------------------------------------
+//
+const TDesC& CAiCpsExecuteParam::PluginId() const
+    {
+    return *iPluginId;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::InParamMapLC
+//
+// ---------------------------------------------------------------------------
+//  
+CLiwDefaultMap* CAiCpsExecuteParam::InParamMapLC() 
+    {
+    CLiwDefaultMap* inParamMap = CLiwDefaultMap::NewLC();
+    inParamMap->InsertL( KType, TLiwVariant( *iRegistryType ));
+    
+    CLiwDefaultMap* filter = CLiwDefaultMap::NewLC();
+    filter->InsertL( KPublisherId, TLiwVariant(iPublisher ));
+    filter->InsertL( KContentId, TLiwVariant(iContentId ));
+    filter->InsertL( KContentType, TLiwVariant(iContentType ));
+    
+    CLiwDefaultList* actionsToLaunch = CLiwDefaultList::NewLC();
+    for ( TInt i=0; i< iActions.Count(); i++)
+        {
+        actionsToLaunch->AppendL( TLiwVariant( *iActions[i]));
+        }
+    filter->InsertL(KActionTrigger, TLiwVariant(actionsToLaunch) );
+    inParamMap->InsertL( KFilter, TLiwVariant( filter ));
+
+    CleanupStack::PopAndDestroy( actionsToLaunch );
+    CleanupStack::PopAndDestroy( filter );
+    return inParamMap;
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::SetFilterL
+//
+// ---------------------------------------------------------------------------
+//  
+void CAiCpsExecuteParam::SetFilterL(CLiwDefaultMap* aMap)
+    {
+    delete iPublisher;
+    delete iContentType;
+    delete iContentId;
+    iPublisher = NULL;
+    iContentType = NULL;
+    iContentId = NULL;
+    
+    TLiwVariant variant;
+    variant.PushL();
+
+    if ( aMap->FindL(KPublisherId, variant ))
+        {
+        iPublisher = variant.AsDes().AllocL();
+        }
+    
+    variant.Reset();
+    if ( aMap->FindL(KContentType, variant ))
+        {
+        iContentType= variant.AsDes().AllocL();
+        }
+    
+    variant.Reset();
+    if ( aMap->FindL(KContentId, variant ))
+        {
+        iContentId= variant.AsDes().AllocL();
+        }
+    
+    variant.Reset();
+    CleanupStack::PopAndDestroy( &variant );
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::SetRegistryTypeL
+//
+// ---------------------------------------------------------------------------
+//  
+void CAiCpsExecuteParam::SetRegistryTypeL(const TDesC& aRegistryType)
+    {
+    delete iRegistryType;
+    iRegistryType = NULL;
+    iRegistryType = aRegistryType.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::SetPluginIdL
+//
+// ---------------------------------------------------------------------------
+// 
+void CAiCpsExecuteParam::SetPluginIdL(const TDesC& aPluginId)
+    {
+    delete iPluginId;
+    iPluginId = NULL;
+    iPluginId = aPluginId.AllocL();
+    }
+ 
+// ---------------------------------------------------------------------------
+// CAiCpsExecuteParam::AddActionL
+//
+// ---------------------------------------------------------------------------
+//
+void CAiCpsExecuteParam::AddActionL(const TDesC8& aAction)
+    {
+    iActions.Append(aAction.AllocL());
+    }
+
+// End of file
--- a/idlefw/src/framework/aifw.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/framework/aifw.cpp	Wed May 12 13:35:37 2010 +0300
@@ -32,7 +32,6 @@
 
 #include <activeidle2domaincrkeys.h>
 #include <activeidle2domainpskeys.h>
-#include <activeidle2internalpskeys.h>
 #include <aipspropertyobserver.h>
 #include <aisystemuids.hrh>
 
@@ -155,9 +154,6 @@
 
     delete iNotifyHandlerESS;
     iNotifyHandlerESS = NULL;
-   
-    Release( iIdleRestartObserver );
-    iIdleRestartObserver = NULL;
         
     delete iWsPluginManager;
     iWsPluginManager = NULL;
@@ -243,10 +239,6 @@
          CCenRepNotifyHandler::EIntKey, KAIExternalStatusScreen );
                                                      
     iNotifyHandlerESS->StartListeningL();
-
-    iIdleRestartObserver = AiUtility::CreatePSPropertyObserverL(
-        TCallBack( HandleRestartEvent, this ), 
-        KPSUidAiInformation, KActiveIdleRestartAI2 );
     
     __PRINTS( "*** CAiFw::AppEnvReadyL - done" );
     }
@@ -342,9 +334,6 @@
         delete iWsPluginManager;
         iWsPluginManager = NULL;
         
-        Release( iIdleRestartObserver );
-        iIdleRestartObserver = NULL;
-        
         iStateProvider->Stop();
         }
     }
@@ -498,30 +487,6 @@
     }
 
 // ----------------------------------------------------------------------------
-// CAiFw::HandleRestartEvent()
-//
-// ----------------------------------------------------------------------------
-//
-TInt CAiFw::HandleRestartEvent( TAny* aSelf )
-    {
-    CAiFw* self = static_cast<CAiFw*>( aSelf );
-    
-    TInt value( 0 );
-    
-    if ( self->iIdleRestartObserver )
-        {
-        TInt err( self->iIdleRestartObserver->Get( value ) );
-
-        if ( err == KErrNone && value == KActiveIdleRestartCode )
-            {
-            self->iUiControllerManager->ExitMainController();
-            }
-        }
-    
-    return KErrNone;
-    }
-
-// ----------------------------------------------------------------------------
 // CAiFw::Repository()
 //
 // ----------------------------------------------------------------------------
--- a/idlefw/src/framework/aipluginfactory.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/framework/aipluginfactory.cpp	Wed May 12 13:35:37 2010 +0300
@@ -25,7 +25,7 @@
 #include <hspublisherinfo.h>
 #include <aicontentobserver.h>
 #include <aiuicontroller.h>
-
+#include "caicpscommandbuffer.h"
 #include "aiuicontrollermanager.h"
 #include "aipluginfactory.h"
 #include "debug.h"
@@ -143,34 +143,43 @@
 // ----------------------------------------------------------------------------
 //
 TInt CAiPluginFactory::CreatePlugin( 
-    const THsPublisherInfo& aPublisherInfo )                             
-    {                                            
+    const THsPublisherInfo& aPublisherInfo )
+    {
     __PRINTS( "*** CAiPluginFactory::CreatePlugin: Start ***" );
-                                    
+
     if ( IsRecyclable( aPublisherInfo ) )
         {
         CHsContentPublisher* plugin( PluginByUid( aPublisherInfo.Uid() ) );
-        
+
         if ( plugin )
             {
+            if ( aPublisherInfo.Namespace() == KNullDesC8 )
+                {
+                // No namespace available
+                __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done -\
+                               Failed to Load Plug-in: KErrNotSupported ***" );
+                return KErrNotSupported;
+                }
+
             // Plugin already exists, update its namespace
             THsPublisherInfo& info( 
                 const_cast< THsPublisherInfo& >( plugin->PublisherInfo() ) );
-            
+
             info.iNamespace.Copy( aPublisherInfo.Namespace() );
-            
-            __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - Plugin recycled ***" );
-            
+
+            __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done -\
+                           Plugin recycled ***" );
+
             return KErrNone;
             }
         }
-            
+
     TBool implFound( EFalse );
-    
+
     for( TInt i = 0; i < iEComPlugins.Count(); i++ )
         {
         CImplementationInformation* information( iEComPlugins[i] );
-                                                                 
+
         if( information->ImplementationUid().iUid == aPublisherInfo.Uid().iUid )
             {
             implFound = ETrue;
@@ -181,29 +190,31 @@
     if( aPublisherInfo.Namespace() == KNullDesC8 || !implFound )
         {
         // No namespace available or no ecom implementation available
-        __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - Failed to Load Plug-in: KErrNotSupported ***" );
+        __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done -\
+                       Failed to Load Plug-in: KErrNotSupported ***" );
         
         return KErrNotSupported;
         }
            
     CHsContentPublisher* plugin( PluginByInfo( aPublisherInfo ) );
-    
+
     if( plugin )
-        {                             
-        __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - Failed to Load Plug-in: KErrAlreadyExists ***" );
+        {
+        __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done -\
+                       Failed to Load Plug-in: KErrAlreadyExists ***" );
         
         return KErrAlreadyExists;
         }
-    
+
     TInt err( KErrNone );
-    
+
     TRAP( err, CreatePluginL( aPublisherInfo ) );
     
     __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - Load Plug-in ***" );
-    
-    return err;    
+
+    return err;
     }
-        
+
 // ----------------------------------------------------------------------------
 // CAiPluginFactory::DestroyPlugin()
 //
@@ -233,7 +244,32 @@
     
     __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Done ***" );
     }
+
+// ----------------------------------------------------------------------------
+// CAiPluginFactory::DestroyPlugin()
+//
+// ----------------------------------------------------------------------------
+//
+void CAiPluginFactory::DestroyPlugin( const TUid& aUid )
+    {
+    __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Start ***" );
+    
+    CHsContentPublisher* plugin( PluginByUid( aUid ) );
+    
+    while ( plugin )
+        {
+        iPublishers.Remove( iPublishers.Find( plugin ) );
         
+        __PRINT( __DBG_FORMAT( 
+            "CAiPluginFactory::DestroyPlugin: name: %S" ), &plugin->PublisherInfo().Name() ); 
+
+        delete plugin;
+        plugin = NULL;            
+        }
+    
+    __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Done ***" );
+    }
+
 // ----------------------------------------------------------------------------
 // CAiPluginFactory::CreatePluginL()
 //
@@ -254,6 +290,12 @@
     
     CleanupStack::PushL( plugin );
     
+    // Ensure interface is available
+    iCommandBuffer->GetCPSInterfaceL();
+    
+    plugin->SetProperty( CHsContentPublisher::ECpsCmdBuffer, 
+        static_cast< MAiCpsCommandBuffer* >( iCommandBuffer ) );
+    
     __TIME( "FW: Subscribe content observers",    
     SubscribeContentObserversL( *plugin, aPublisherInfo ) );             
                                                       
@@ -390,58 +432,13 @@
     }
 
 // ----------------------------------------------------------------------------
-// CAiPluginFactory::ResolvePluginsToUpgradeL()
+// CAiPluginFactory::SetCommandBuffer()
 //
 // ----------------------------------------------------------------------------
 //
-void CAiPluginFactory::ResolvePluginsToUpgradeL( 
-    RArray< THsPublisherInfo >& aArray )
+void CAiPluginFactory::SetCommandBuffer( CAiCpsCommandBuffer* aCommandBuffer )
     {
-    RImplInfoPtrArray ecomPlugins;
-    CleanupResetAndDestroyPushL( ecomPlugins );
-        
-    REComSession::ListImplementationsL( 
-        KInterfaceUidHsContentPlugin, ecomPlugins );
-    
-    for ( TInt i = 0; i < ecomPlugins.Count(); i++ )
-        {
-        CImplementationInformation* newInformation( ecomPlugins[i] );
-                 
-        for( TInt j = 0; j < iEComPlugins.Count(); j++ )
-            {            
-            CImplementationInformation* oldInformation( iEComPlugins[j] );
-                                                                 
-            if( newInformation->ImplementationUid() == oldInformation->ImplementationUid() )
-                {
-                if( newInformation->Version() != oldInformation->Version() )
-                    {                        
-                    for ( TInt k = 0; k < iPublishers.Count(); k++ )
-                        {
-                        const THsPublisherInfo& info( 
-                            iPublishers[k]->PublisherInfo() );
-                                                
-                        if ( info.Uid() == newInformation->ImplementationUid() )
-                            {                            
-                            __PRINT( __DBG_FORMAT( "\t[I]\t Plug-in to update uid=%x name=%S namespace=%S, version update %d to %d"), 
-                                info.Uid(), &(info.Name()), &(info.Namespace()), oldInformation->Version(), newInformation->Version()  );
-                            
-                            aArray.Append( info );
-                            }
-                        }
-                                                         
-                    break;
-                    }
-                }                
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( &ecomPlugins );
-           
-    // Update ecom plugin array
-    iEComPlugins.ResetAndDestroy();
-    
-    REComSession::ListImplementationsL( 
-        KInterfaceUidHsContentPlugin, iEComPlugins );
+    iCommandBuffer = aCommandBuffer;
     }
 
 // End of file
--- a/idlefw/src/framework/aistatemanager.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/framework/aistatemanager.cpp	Wed May 12 13:35:37 2010 +0300
@@ -20,16 +20,16 @@
 // User includes
 #include <hscontentpublisher.h>
 #include <aifwdefs.h>
+#include <AknWaitDialog.h> 
+#include <bautils.h>
+#include <ConeResLoader.h>
+#include <debug.h>
 
+#include "caicpscommandbuffer.h"
 #include "aipluginfactory.h"
 
 #include "aistatemanager.h"
 
-#include "debug.h"
-
-// Constants
-_LIT( KOnlineOffline, "online_offline" );
-
 // ======== LOCAL FUNCTIONS ========
 // ----------------------------------------------------------------------------
 // StartReason
@@ -114,6 +114,8 @@
 //
 CAiStateManager::~CAiStateManager()
     {  
+    delete iCommandBuffer;
+	iReloadPlugins.Close();
     }
 
 // ----------------------------------------------------------------------------
@@ -133,6 +135,9 @@
 //
 void CAiStateManager::ConstructL()
     {        
+    iCommandBuffer = CAiCpsCommandBuffer::NewL();
+    
+    iFactory.SetCommandBuffer( iCommandBuffer );
     }
 
 // ----------------------------------------------------------------------------
@@ -246,9 +251,12 @@
     if ( retval == KErrNone )
         {
         CHsContentPublisher* plugin( iFactory.PluginByInfo( aPublisherInfo ) );
-
-        // Do startup state transition    
-        StartPlugin( *plugin, StartReason( aReason ) );            
+        
+        if( plugin )
+            {
+            // Do startup state transition    
+            StartPlugin( *plugin, StartReason( aReason ) );  
+            }    
         }
       
     __TIME_ENDMARK( "CAiStateManager::NotifyLoadPlugin, construction", time );
@@ -286,55 +294,21 @@
     }
 
 // ----------------------------------------------------------------------------
-// CAiStateManager::NotifyUpdatePlugins()
+// CAiStateManager::NotifyReloadPlugins()
 // 
 // ----------------------------------------------------------------------------
 //
-void CAiStateManager::NotifyUpdatePlugins()
+void CAiStateManager::NotifyReloadPlugins()
     {
-    __PRINTS( "CAiStateManager::NotifyUpdatePlugins" );
-    
-    RArray< THsPublisherInfo > publishers;
-        
-    // Get plugins which has upgrade available
-    TRAP_IGNORE( iFactory.ResolvePluginsToUpgradeL( publishers ) );
-    
-    for ( TInt i = 0; i < publishers.Count(); i++ )
-        {        
-        THsPublisherInfo info( publishers[i] );
-        
-        // Update by destroy - load sequence 
-        NotifyDestroyPlugin( info, EAiFwSystemShutdown );
-        NotifyLoadPlugin( info, EAiFwSystemStartup );         
+    __PRINTS( "CAiStateManager::NotifyReloadPlugins" );
+
+    for ( TInt i = 0; i < iReloadPlugins.Count(); i++ )
+        {
+        // Reload plugin
+        NotifyLoadPlugin( iReloadPlugins[ i ], EAiFwSystemStartup );
         }
     
-    publishers.Reset();
-    
-    __PRINTS( "CAiStateManager::NotifyUpdatePlugins, done" );
-    }
-
-// ----------------------------------------------------------------------------
-// CAiStateManager::OnlineStateInUse()
-// 
-// ----------------------------------------------------------------------------
-//
-TBool CAiStateManager::OnlineStateInUse() const
-    {
-    __PRINTS( "CAiStateManager::OnlineStateInUse" );        
-    
-    RPointerArray< CHsContentPublisher >& plugins( iFactory.Publishers() );
-    
-    for( TInt i = 0; i < plugins.Count(); i++ )
-        {
-        CHsContentPublisher* plugin( plugins[i] );
-        
-        if ( plugin->HasMenuItem( KOnlineOffline() ) )
-            {
-            return ETrue;
-            }
-        }
-    
-    return EFalse;
+    __PRINTS( "CAiStateManager::NotifyReloadPlugins, done" );
     }
 
 // ----------------------------------------------------------------------------
@@ -405,6 +379,8 @@
                 plugin->Suspend( CHsContentPublisher::EBackground ) );
                 }            
             }
+        
+        FlushCommandBuffer();
         }
     else
         {
@@ -439,6 +415,8 @@
             }        
         } 
     
+    FlushCommandBuffer();
+    
     __TIME_ENDMARK( "CAiStateManager::ProcessGeneralThemeChange, done", time );
     }
 
@@ -473,6 +451,8 @@
                 }
             }
         }
+    
+    FlushCommandBuffer();
             
     __TIME_ENDMARK( "CAiStateManager::ProcessBackupRestore, done", time );
     }
@@ -501,6 +481,8 @@
             plugin->SetOffline();
             }
         }               
+    
+    FlushCommandBuffer();
     }
 
 // ----------------------------------------------------------------------------
@@ -544,6 +526,8 @@
         aPlugin.SetOffline() );
         }
     
+    FlushCommandBuffer();
+    
     __PRINTS( "CAiStateManager::StartPlugin - done" );
     }
 
@@ -569,6 +553,8 @@
     
     aPlugin.Stop( aReason );   
     
+    FlushCommandBuffer();
+    
     __PRINTS( "CAiStateManager::StopPlugin - done" );
     }
 
@@ -592,10 +578,56 @@
         StopPlugin( *plugin, CHsContentPublisher::ESystemShutdown );        
         }    
     
+    FlushCommandBuffer();
+    
     // Finally get rid of all plugins
     plugins.ResetAndDestroy();
     
     __TIME_ENDMARK( "CAiStateManager::DestroyPlugins, done", time );
     }
 
+// ----------------------------------------------------------------------------
+// CAiStateManager::FlushCommandBuffer();()
+// 
+// ----------------------------------------------------------------------------
+//
+void CAiStateManager::FlushCommandBuffer()
+    {
+    __PRINTS( "CAiStateManager::FlushCommandBuffer, start" );    
+        
+    if ( iCommandBuffer )
+        {
+        __TIME( "CAiStateManager::FlushCommandBuffer, flush",
+                
+        iCommandBuffer->Flush() );
+        }
+    
+    __PRINTS( "CAiStateManager::FlushCommandBuffer - done" );
+    }
+	
+// ----------------------------------------------------------------------------
+// CAiStateManager::NotifyReleasePlugins()
+// 
+// ----------------------------------------------------------------------------
+//
+void CAiStateManager::NotifyReleasePlugins( const RArray<TUid>& aUidList )
+    {
+    __PRINTS( "CAiStateManager::NotifyReleasePlugins" );    
+
+    iReloadPlugins.Reset();
+    
+    for ( TInt i = 0; i < aUidList.Count(); i++ )
+        {
+        CHsContentPublisher* plugin = iFactory.PluginByUid( aUidList[ i ] );
+        if ( plugin )
+            {
+            StopPlugin( *plugin, CHsContentPublisher::ESystemShutdown );
+            THsPublisherInfo info = plugin->PublisherInfo();
+            iReloadPlugins.Append( info );
+            iFactory.DestroyPlugin( aUidList[ i ] );
+            }
+        }        
+    __PRINTS( "CAiStateManager::NotifyReleasePlugins: return void" );    
+    }
+
 // End of file
--- a/idlefw/src/framework/aistateprovider.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/framework/aistateprovider.cpp	Wed May 12 13:35:37 2010 +0300
@@ -19,6 +19,9 @@
 #include <AknDef.h>
 #include <connect/sbdefs.h>
 #include <e32property.h>
+#include <swi/swispubsubdefs.h>
+#include <swi/swiutils.h>
+#include <sacls.h> // KSWIUidsCurrentlyBeingProcessed
 
 // User includes
 #include <aipspropertyobserver.h>
@@ -29,6 +32,8 @@
 
 #include "aistateprovider.h"
 
+#include "debug.h"
+
 // Constants
 
 // ======== LOCAL FUNCTIONS ========
@@ -113,7 +118,11 @@
         iBackupRestoreObserver = AiUtility::CreatePSPropertyObserverL(
             TCallBack( BackupRestoreEvent, this ),
             KUidSystemCategory, conn::KUidBackupRestoreKey );
-        
+
+        iSwiUidListObserver = AiUtility::CreatePSPropertyObserverL(
+                TCallBack( SwiUidListEvent, this ),
+                KUidSystemCategory, KSWIUidsCurrentlyBeingProcessed );
+
         User::LeaveIfError( iSkinSrv.Connect( this ) );
            
         iEcomObserver = CAiEcomObserver::NewL();
@@ -152,7 +161,10 @@
                
         Release( iBackupRestoreObserver );
         iBackupRestoreObserver = NULL;
-        
+
+        Release( iSwiUidListObserver );
+        iSwiUidListObserver = NULL;
+
         delete iLightObserver;      
         iLightObserver = NULL;
         }           
@@ -238,7 +250,9 @@
 //
 void CAiStateProvider::NotifyEcomRegistryChanged()
     {
-    iObserver.NotifyUpdatePlugins();
+    __PRINTS( "CAiStateProvider::NotifyEcomRegistryChanged" );    
+    iObserver.NotifyReloadPlugins();
+    __PRINTS( "CAiStateProvider::NotifyEcomRegistryChanged - return void" );    
     }
 
 // ----------------------------------------------------------------------------
@@ -277,16 +291,6 @@
     }
 
 // ----------------------------------------------------------------------------
-// CAiStateProvider::OnlineStateInUse()
-// 
-// ----------------------------------------------------------------------------
-//
-TBool CAiStateProvider::OnlineStateInUse() const
-    {
-    return iObserver.OnlineStateInUse();
-    }
-
-// ----------------------------------------------------------------------------
 // CAiStateProvider::BackupRestoreEvent()
 // 
 // ----------------------------------------------------------------------------
@@ -315,5 +319,23 @@
     return KErrNone;
     }
 
+// ----------------------------------------------------------------------------
+// CAiStateProvider::SwiUidLIstEvent()
+// 
+// ----------------------------------------------------------------------------
+//
+/* static */ TInt CAiStateProvider::SwiUidListEvent( TAny* aAny )
+    {
+    CAiStateProvider* self = static_cast< CAiStateProvider* >( aAny );
+
+    RArray<TUid> uidList;
+    if ( KErrNone == Swi::GetAllUids( uidList ) )
+        {
+        self->iObserver.NotifyReleasePlugins( uidList );
+        }
+
+    return KErrNone;
+    }
+
 // End of file
 
--- a/idlefw/src/idleint/aiidleappregister.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/idleint/aiidleappregister.cpp	Wed May 12 13:35:37 2010 +0300
@@ -89,33 +89,6 @@
             KTelephonyInformationReadPolicy,
             KTelephonyInformationWritePolicy );
         }
-
-    TInt DefineIdleAI2RestartPS()
-        {
-        return RProperty::Define( 
-        	KPSUidAiInformation,
-            KActiveIdleRestartAI2,
-          	RProperty::EInt,
-            KTelephonyInformationReadPolicy,
-            KTelephonyInformationWritePolicy );
-        }
-	TInt SetIdleAI2RestartPS()
-        {
-        return RProperty::Set( 
-        	KPSUidAiInformation, 
-            KActiveIdleRestartAI2, 
-            0 );
-        }
-        
-      TInt DefineIdleLaunchPS()
-      	{
-      	return RProperty::Define( 
-        	KPSUidAiInformation,
-        	KActiveIdleLaunch,
-        	RProperty::EInt,
-        	ECapabilityReadDeviceData,
-        	ECapabilityWriteDeviceData );
-      	}
       
       TInt DefineIdleSendNumKeysToPhonePS()
           {
@@ -166,8 +139,6 @@
     
     DefineIdleSimRegFailedReceivedPS();
     
-    DefineIdleLaunchPS();
-    
     // Set the default value to 1 so the send key press is reacted
     SetIdleSendKeyPS();
     
@@ -177,10 +148,6 @@
     // Define idle state key
     DefineIdleStatePS();
     
-    DefineIdleAI2RestartPS();
-    
-    SetIdleAI2RestartPS();
-    
     DefineIdleSendNumKeysToPhonePS();
     
     SetIdleSendNumKeysToPhonePS();
--- a/idlefw/src/idleint/aiuiidleintegration.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/idleint/aiuiidleintegration.cpp	Wed May 12 13:35:37 2010 +0300
@@ -17,12 +17,14 @@
 
 
 // System includes
+#include <startupdomainpskeys.h>
 #include <coeaui.h>
 #include <eikenv.h>
 #include <AknIncallBubbleNotify.h>
 #include <aknsoundsystem.h>
 #include <AknDef.h>
 #include <ctsydomainpskeys.h>
+#include <apgtask.h>
 
 // User includes
 #include <aisystemuids.hrh>
@@ -65,7 +67,9 @@
     
     delete iIncallBubble;
     
-    Release( iCallStatusObserver );
+    Release( iCallStatusObserver );       
+    
+    Release( iUiStartupStateObserver );
     }
 
 // ----------------------------------------------------------------------------
@@ -119,8 +123,13 @@
                                        KPSUidCtsyCallInformation, 
                                        KCTsyCallState );  
     
-    ActivateUI();
-           
+    iUiStartupStateObserver = AiUtility::CreatePSPropertyObserverL(                           
+                                TCallBack( HandleUiStartupStateChange, this ),            
+                                           KPSUidStartup, 
+                                           KPSStartupUiPhase );        
+    
+    HandleUiStartupStateChange( this );
+                 
     __TIME_ENDMARK( "CAiUiIdleIntegrationImpl::ConstructL, done", time );
     }
 
@@ -130,11 +139,22 @@
 //
 void CAiUiIdleIntegrationImpl::ActivateUI()
     {   
-    __TICK( "CAiUiIdleIntegrationImpl::ActivateUI - HandleActivateUI" );
+    __TICK( "CAiUiIdleIntegrationImpl::ActivateUI" );
+    
+    Release( iUiStartupStateObserver );
+    iUiStartupStateObserver = NULL;
     
     iAiFwEventHandler->HandleActivateUI();
     
-    __PRINTS( "CAiUiIdleIntegrationImpl::ActivateUI - HandleActivateUI done" );    
+    RWsSession& wsSession( iEikEnv.WsSession() );
+    
+    TApaTaskList taskList( wsSession );
+    
+    TApaTask task( taskList.FindApp( TUid::Uid( AI_UID3_AIFW_EXE ) ) );
+    
+    task.BringToForeground(); 
+        
+    __PRINTS( "*** CAiUiIdleIntegrationImpl::ActivateUI - done" );    
     }
 
 // ----------------------------------------------------------------------------
@@ -148,6 +168,8 @@
     
     if ( type == KAknFullOrPartialForegroundGained )
         {
+        __PRINTS( "*** CAiUiIdleIntegrationImpl::HandleWsEventL - Foreground" );
+        
         if ( !iForeground )
             {
             iForeground = ETrue;
@@ -157,6 +179,8 @@
         }
     else if ( type == KAknFullOrPartialForegroundLost )
         {
+        __PRINTS( "*** CAiUiIdleIntegrationImpl::HandleWsEventL - Background" );
+    
         if ( iForeground )
             {
             iForeground = EFalse;
@@ -243,21 +267,21 @@
 TInt CAiUiIdleIntegrationImpl::HandleCallEvent( TAny* aPtr )
 	{
 	__ASSERT_DEBUG( aPtr, 
-	        AiFwPanic::Panic( AiFwPanic::EAiFwPanic_NullPointerReference ) );
+        AiFwPanic::Panic( AiFwPanic::EAiFwPanic_NullPointerReference ) );
     
 	CAiUiIdleIntegrationImpl* self = 
-        static_cast<CAiUiIdleIntegrationImpl*>( aPtr );
+        static_cast< CAiUiIdleIntegrationImpl* >( aPtr );
         
 	TInt callStatus( EPSCTsyCallStateNone );
 	
 	TInt err( self->iCallStatusObserver->Get( callStatus ) );
 	
-	if( err == KErrNone )
+	if ( err == KErrNone )
 		{
 		// Call ongoing => show bubble if not showing already
 		TBool allowed = EFalse;
 		
-		if( !self->iIncallBubbleAllowed &&
+		if ( !self->iIncallBubbleAllowed &&
 		     self->iForeground &&
 		    ( callStatus > EPSCTsyCallStateNone ) )
 			{
@@ -265,22 +289,21 @@
     		
 			TRAP( err, 
                 self->iIncallBubble->SetIncallBubbleAllowedInIdleL( allowed ) );
-			        
-    		
-			if( err == KErrNone )
+			            		
+			if ( err == KErrNone )
     		    {
     			self->iIncallBubbleAllowed = allowed;
     		    }
 			}
 		// No call ongoing => hide if bubble is visible			
-		else if( self->iIncallBubbleAllowed && callStatus <= EPSCTsyCallStateNone )
+		else if ( self->iIncallBubbleAllowed && callStatus <= EPSCTsyCallStateNone )
 			{
 			allowed = EFalse;
 			
     		TRAP( err, 
                 self->iIncallBubble->SetIncallBubbleAllowedInIdleL( allowed ) );
     		
-    		if( err == KErrNone )
+    		if ( err == KErrNone )
     		    {
     			self->iIncallBubbleAllowed = allowed;
     		    }
@@ -290,5 +313,33 @@
 	return err;
 	}
 
-// End of file.
+// ----------------------------------------------------------------------------
+// CAiUiIdleIntegrationImpl::HandleUiStartupStateChange()
+// ----------------------------------------------------------------------------
+//
+TInt CAiUiIdleIntegrationImpl::HandleUiStartupStateChange( TAny *aPtr )
+    {
+    __ASSERT_DEBUG( aPtr, 
+        AiFwPanic::Panic( AiFwPanic::EAiFwPanic_NullPointerReference ) );
+    
+    CAiUiIdleIntegrationImpl* self = 
+        static_cast< CAiUiIdleIntegrationImpl* >( aPtr );
 
+    if ( !self->iUiStartupPhaseOk )
+        {
+        TInt state( 0 );
+        
+        self->iUiStartupStateObserver->Get( state );
+        
+        if ( state == EStartupUiPhaseAllDone )
+            {
+            self->iUiStartupPhaseOk = ETrue;
+            
+            self->ActivateUI();                        
+            }
+        }
+    
+    return KErrNone;
+    }
+
+// End of file
--- a/idlefw/src/idleint/aiuiidleintegrationimpl.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/idleint/aiuiidleintegrationimpl.h	Wed May 12 13:35:37 2010 +0300
@@ -68,6 +68,8 @@
            
     static TInt HandleCallEvent( TAny *aPtr );
     
+    static TInt HandleUiStartupStateChange( TAny *aPtr );
+    
 private: 
     // data  
 
@@ -94,6 +96,13 @@
     * Owned
     */
     MAiPSPropertyObserver* iCallStatusObserver;
+    
+    /**
+    * Ui startup state
+    * Owned
+    */
+    MAiPSPropertyObserver* iUiStartupStateObserver;
+    
     /**
      * Framework event handler. For notifying critical startup over.
      * Not owned.
@@ -101,7 +110,8 @@
     MAiFwEventHandler* iAiFwEventHandler;
     
     TBool iForeground;
-    TBool iIncallBubbleAllowed;    
+    TBool iIncallBubbleAllowed;  
+    TBool iUiStartupPhaseOk;    
     };
 
 #endif // C_AIUIIDLEINTEGRATION_H
--- a/idlefw/src/utility/caipspropertyobserver.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/idlefw/src/utility/caipspropertyobserver.cpp	Wed May 12 13:35:37 2010 +0300
@@ -38,7 +38,7 @@
 CPSPropertyObserver::CPSPropertyObserver( TCallBack aCallBack,
                                           TUid aCategory,
                                           TInt aKey )
-  : CActive( EPriorityStandard ),
+  : CActive( EPriorityHigh ),
     iCallBack( aCallBack ),
     iCategory( aCategory ),
     iKey( aKey )
Binary file menucontentsrv/conf/s60mcs.confml has changed
--- a/menucontentsrv/extinc/mcssathandler.h	Wed Mar 31 13:30:40 2010 +0300
+++ b/menucontentsrv/extinc/mcssathandler.h	Wed May 12 13:35:37 2010 +0300
@@ -21,7 +21,7 @@
 
 #include <AknIconUtils.h>
 
-#include <RSatSession.h>
+#include <rsatsession.h>
 #include <tsaticoninfo.h>
 #ifdef SIM_ATK_SERVICE_API_V1 
 #include <rsatservice.h>// MCL 
--- a/menucontentsrv/extsrc/mcsmenuiconutility.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/menucontentsrv/extsrc/mcsmenuiconutility.cpp	Wed May 12 13:35:37 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  The API supports requesting raw bitmaps
-*  Version     :  %version: 11 % << Don't touch! Updated by Synergy at check-out.
+*  Version     :  %version: ou1s60ui#12 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -24,7 +24,7 @@
 #include <mcsmenu.h>
 #include <mcsmenuitem.h>
 #include <mcsmenuutils.h>
-#include <SATDomainPSKeys.h>
+#include <satdomainpskeys.h>
 #include <e32property.h>
 #include <apgcli.h>
 #include <AknInternalIconUtils.h>
--- a/menucontentsrv/group/mcsmenusrv.mmp	Wed Mar 31 13:30:40 2010 +0300
+++ b/menucontentsrv/group/mcsmenusrv.mmp	Wed May 12 13:35:37 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  
-*  Version     : %version: ou1s60ui#5.1.8 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: sa1spcx1#5.1.9 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -22,6 +22,8 @@
 #include <data_caging_paths.hrh>
 #include "../inc/menuuid.hrh"
 
+EPOCHEAPSIZE  4000 3000000
+
 TARGET          mcsmenuserver.exe
 TARGETTYPE      exe
 UID             0x1000008c MENU_SRV_UID3
@@ -42,6 +44,5 @@
 LIBRARY         euser.lib
 LIBRARY         mcsmenu.lib
 LIBRARY         mcsmenuutils.lib
-LIBRARY         MemMan.lib
 
 
--- a/menucontentsrv/srvsrc/menusrvengutils.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/menucontentsrv/srvsrc/menusrvengutils.cpp	Wed May 12 13:35:37 2010 +0300
@@ -21,7 +21,7 @@
 #include <javaregistryentry.h>
 #include <drmrightsinfo.h>
 #include <e32property.h>
-#include <SATDomainPSKeys.h>
+#include <satdomainpskeys.h>
 #include <AknTaskList.h> 
 #include <mmf/common/mmfcontrollerpluginresolver.h>
 #include <widgetregistryclient.h>
--- a/menucontentsrv/srvsrc/menusrvmain.cpp	Wed Mar 31 13:30:40 2010 +0300
+++ b/menucontentsrv/srvsrc/menusrvmain.cpp	Wed May 12 13:35:37 2010 +0300
@@ -16,7 +16,6 @@
 */
 
 // INCLUDE FILES
-#include <mw/MemoryManager.h>
 #include "menusrv.h"
 
 // ==================== LOCAL FUNCTIONS ====================
@@ -27,10 +26,5 @@
 */
 GLDEF_C TInt E32Main()
     {
-    RAllocator* iAllocator = MemoryManager::SwitchToFastAllocator();
-    
-    TInt err = RunMenuServer();
-    
-    MemoryManager::CloseFastAllocator(iAllocator);
-    return err;
+    return RunMenuServer();
     }
--- a/package_definition.xml	Wed Mar 31 13:30:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="homescreensrv" name="Home Screen Services" levels="plugin framework server generic specific">
-    <collection id="contentpublishingsrv" name="Content Publishing Service" level="server">
-      <component id="contentpublishingutils" filter="s60" name="Content Publishing Utils">
-        <unit bldFile="contentpublishingsrv/contentpublishingutils/group"/>
-		<!-- should only have one bld.inf, does the below need to be #included in the above ? -->
-        <unit bldFile="contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group"/>
-      </component>
-      <component id="contentpublishingserver" filter="s60" name="Content Publishing Server">
-        <unit bldFile="contentpublishingsrv/contentpublishingserver/group"/>
-      </component>
-      <component id="contentharvester" filter="s60" name="Content Harvester">
-        <unit bldFile="contentpublishingsrv/contentharvester/group"/>
-      </component>
-      <component id="contentpublishingsrv_build" filter="s60" name="Content Publishing Service Build">
-        <unit bldFile="contentpublishingsrv/group"/>
-      </component>
-    </collection>
-    <collection id="backsteppingsrv" name="Back Stepping Service" level="server">
-      <component id="bsengine" name="Back Stepping Engine" filter="s60">
-        <unit bldFile="backsteppingsrv/group"/>
-      </component>
-    </collection>
-    <collection id="xcfw" name="XML Content Framework" level="framework">
-      <component id="xcfw_build" filter="s60" name="XML Content Framework Build">
-        <unit bldFile="xcfw/group"/>
-      </component>
-    </collection>
-    <collection id="homescreenpluginsrv" name="Home Screen Plugin Service" level="plugin">
-      <component id="hspsdefinitionengine" filter="s60" name="HS Plugin Service Definition Engine">
-        <unit bldFile="homescreenpluginsrv/hspsdefinitionengine/group"/>
-      </component>
-      <component id="hspsdom" filter="s60" name="HS Plugin Service DOM">
-        <unit bldFile="homescreenpluginsrv/hspsdom/group"/>
-      </component>
-      <component id="hspspluginregistry" filter="s60" name="HS Plugin Registry">
-        <unit bldFile="homescreenpluginsrv/hspspluginregistry/group"/>
-      </component>
-      <component id="hspsmanager" filter="s60" name="HS Plugin Service Manager">
-        <unit bldFile="homescreenpluginsrv/hspsmanager/group"/>
-      </component>
-      <component id="hspsodt" filter="s60" name="HS Plugin Service Object Description Tree">
-        <unit bldFile="homescreenpluginsrv/hspsodt/group"/>
-      </component>
-      <component id="hspsresource" filter="s60" name="HS Plugin Server Resource">
-        <unit bldFile="homescreenpluginsrv/hspsresource/group"/>
-      </component>
-      <component id="hspsresult" filter="s60" name="HS Plugin Server Result">
-        <unit bldFile="homescreenpluginsrv/hspsresult/group"/>
-      </component>
-      <component id="hspstools" filter="s60" name="HS Server Tools">
-        <unit bldFile="homescreenpluginsrv/hspstools/group"/>
-      </component>
-      <component id="homescreenpluginsrv_build" filter="s60" name="HS Plugin Service Build">
-        <unit bldFile="homescreenpluginsrv/group"/>
-      </component>
-    </collection>
-    <collection id="idlefw" name="Idle Framework" level="framework">
-      <component id="idlefw_plugins" filter="s60" name="Idle Framework Plugins" class="plugin">
-        <unit bldFile="idlefw/plugins/group"/>
-		<!-- does the next need to be #included? -->
-        <!-- <unit bldFile="idlefw/plugins/pslnactiveidleplugin/group"/> -->
-      </component>
-      <component id="idlefw_build" filter="s60" name="Idle Framework Build">
-        <unit bldFile="idlefw/group"/>
-      </component>
-    </collection>
-    <collection id="menucontentsrv" name="Menu Content Service" level="generic">
-      <component id="menusatinterface" filter="s60" name="Menu SAT Interface">
-        <unit bldFile="menucontentsrv/menusatinterface/group"/>
-      </component>
-      <component id="menucontentsrv_build" filter="s60" name="Menu Content Service Build">
-        <unit bldFile="menucontentsrv/group"/>
-      </component>
-    </collection>
-    <collection id="homescreensrv_info" name="Home Screen Services Info" level="specific">
-      <component id="homescreensrv_plat" filter="s60" name="Home Screen Services Platform Interfaces" class="api">
-        <unit bldFile="homescreensrv_plat/group"/>
-			<!-- should the following be #included in the above? -->
-        <!-- <unit bldFile="homescreensrv_plat/action_handler_plugin_api/tsrc/group"/> -->
-        <!-- <unit bldFile="homescreensrv_plat/content_harvester_plugin_api/tsrc/group"/> -->
-        <!-- <unit bldFile="homescreensrv_plat/hs_widget_publisher_api/tsrc/group"/> -->
-        <!-- <unit bldFile="homescreensrv_plat/menu_content_service_api/tsrc/group"/> -->
-        <!-- <unit bldFile="homescreensrv_plat/menu_sat_interface_api/tsrc/group"/> -->
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>