# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1263839533 -7200 # Node ID b7904b40483f2225333d64e9add9b97aebe41ad5 # Parent 844b978f8d5e075ba90aa9bec5229967572c19f5 Revision: 201001 Kit: 201003 diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h --- a/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h Mon Jan 18 20:32:13 2010 +0200 @@ -124,6 +124,16 @@ */ TInt ActivateAppL( CHsContentInfo& aInfo ); + /** + * + */ + TInt ActiveViewL( CHsContentInfo& aInfo ); + + /** + * + */ + TInt ActiveAppL( CHsContentInfo& aInfo ); + private: // Functions /** * diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp --- a/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -713,6 +713,148 @@ } // ----------------------------------------------------------------------------- +// CHsCcApiClient::ActiveViewL +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::ActiveViewL( CHsContentInfo& aInfo ) + { + TInt err( KErrNone ); + + // Create ActiveViewReq API request + CCcSrvMsg* reqMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( reqMsg ); + reqMsg->SetMsgId( EHsCcActiveViewReq ); + reqMsg->SetTrId( 0 ); + reqMsg->SetData( KNullDesC8() ); + + // 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 provider( ECcHomescreen ); + TPckgBuf sender; + TPckgBuf receiver; + err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr ); + + if ( !err ) + { + // Internalize AppListResp API response + CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( respMsg ); + RDesReadStream respStream( msgPtr ); + CleanupClosePushL( respStream ); + respMsg->InternalizeHeaderL( respStream ); + CleanupStack::PopAndDestroy( &respStream ); + err = respMsg->Status(); + if ( !err ) + { + if ( respMsg->DataSize() ) + { + // Get API response data + HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( respMsg->TrId() ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + } + } + CleanupStack::PopAndDestroy( respMsg ); + } + + // Cleanup + CleanupStack::PopAndDestroy( msgBuf ); + CleanupStack::PopAndDestroy( reqMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CHsCcApiClient::ActiveAppL +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::ActiveAppL( CHsContentInfo& aInfo ) + { + TInt err( KErrNone ); + + // Create ActiveViewReq API request + CCcSrvMsg* reqMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( reqMsg ); + reqMsg->SetMsgId( EHsCcActiveAppReq ); + reqMsg->SetTrId( 0 ); + reqMsg->SetData( KNullDesC8() ); + + // 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 provider( ECcHomescreen ); + TPckgBuf sender; + TPckgBuf receiver; + err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr ); + + if ( !err ) + { + // Internalize AppListResp API response + CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( respMsg ); + RDesReadStream respStream( msgPtr ); + CleanupClosePushL( respStream ); + respMsg->InternalizeHeaderL( respStream ); + CleanupStack::PopAndDestroy( &respStream ); + err = respMsg->Status(); + if ( !err ) + { + if ( respMsg->DataSize() ) + { + // Get API response data + HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( respMsg->TrId() ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + } + } + CleanupStack::PopAndDestroy( respMsg ); + } + + // Cleanup + CleanupStack::PopAndDestroy( msgBuf ); + CleanupStack::PopAndDestroy( reqMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- // CHsCcApiClient::WaitForApiNtfL() // ----------------------------------------------------------------------------- // diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h --- a/contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h Mon Jan 18 20:32:13 2010 +0200 @@ -159,6 +159,12 @@ /** * */ + void HandleActiveViewReqL( + CCcSrvMsg& aMessage ); + + /** + * + */ void HandleAppListReqL( CCcSrvMsg& aMessage ); @@ -171,6 +177,12 @@ /** * */ + void HandleActiveAppReqL( + CCcSrvMsg& aMessage ); + + /** + * + */ void HandleNotSupportedReqL( CCcSrvMsg& aMessage ); diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp --- a/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -159,6 +159,12 @@ case EHsCcActivateAppReq: HandleActivateAppReqL( *message ); break; + case EHsCcActiveAppReq: + HandleActiveAppReqL( *message ); + break; + case EHsCcActiveViewReq: + HandleActiveViewReqL( *message ); + break; default: HandleNotSupportedReqL( *message ); break; @@ -553,6 +559,43 @@ } // ----------------------------------------------------------------------------- +// CHsCcProviderClient::HandleActiveViewReqL() +// ----------------------------------------------------------------------------- +// +void CHsCcProviderClient::HandleActiveViewReqL( + CCcSrvMsg& aMessage ) + { + // Get active view + CHsContentInfo* view = CHsContentInfo::NewL(); + CleanupStack::PushL( view ); + TInt err = iController.ActiveViewL( *view ); + + // Create and send ActiveViewResp + CCcSrvMsg* message = CCcSrvMsg::NewL(); + CleanupStack::PushL( message ); + message->SetMsgId( EHsCcActiveViewResp ); + message->SetTrId( aMessage.TrId() ); + message->SetStatus( err ); + + if ( !err ) + { + // Externalize view list + HBufC8* dataBuf = view->MarshalL(); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + message->SetData( dataPtr ); + CleanupStack::PopAndDestroy( dataBuf ); + } + + SendRespL( *message ); + + CleanupStack::PopAndDestroy( message ); + CleanupStack::PopAndDestroy( view ); + + } + +// ----------------------------------------------------------------------------- // CHsCcProviderClient::HandleAppListReqL() // ----------------------------------------------------------------------------- // @@ -630,6 +673,42 @@ } // ----------------------------------------------------------------------------- +// CHsCcProviderClient::HandleActiveAppReqL() +// ----------------------------------------------------------------------------- +// +void CHsCcProviderClient::HandleActiveAppReqL( + CCcSrvMsg& aMessage ) + { + // Get active application info + CHsContentInfo* app = CHsContentInfo::NewL(); + CleanupStack::PushL( app ); + TInt err = iController.ActiveAppL( *app ); + + // Create and send ActiveViewResp + CCcSrvMsg* message = CCcSrvMsg::NewL(); + CleanupStack::PushL( message ); + message->SetMsgId( EHsCcActiveAppResp ); + message->SetTrId( aMessage.TrId() ); + message->SetStatus( err ); + + if ( !err ) + { + // Externalize application info + HBufC8* dataBuf = app->MarshalL(); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + message->SetData( dataPtr ); + CleanupStack::PopAndDestroy( dataBuf ); + } + + SendRespL( *message ); + + CleanupStack::PopAndDestroy( message ); + CleanupStack::PopAndDestroy( app ); + } + +// ----------------------------------------------------------------------------- // CHsCcProviderClient::HandleNotSupportedReqL() // ----------------------------------------------------------------------------- // diff -r 844b978f8d5e -r b7904b40483f contentcontrolsrv/hsccclient/inc/hsccapi.h --- a/contentcontrolsrv/hsccclient/inc/hsccapi.h Thu Jan 07 12:55:39 2010 +0200 +++ b/contentcontrolsrv/hsccclient/inc/hsccapi.h Mon Jan 18 20:32:13 2010 +0200 @@ -229,6 +229,31 @@ // - Message data: None EHsCcActivateViewResp, // ---------------------------------------------------------------------------- +// ActiveViewReq +// ---------------------------------------------------------------------------- +// Purpose: +// This request is used to get active view configuration +// +// Message parameters: +// - Message id: EHsCcActiveViewReq +// - Transaction id: Unique transaction id +// - Message data: None + EHsCcActiveViewReq, +// ---------------------------------------------------------------------------- +// ActiveViewResp +// ---------------------------------------------------------------------------- +// Purpose: +// This response contains the active view configuration +// +// Message parameters: +// - Message id: EHsCcActiveViewResp +// - Transaction id: Transaction id from corresponding ActiveViewReq +// - Status: Operation status (Symbian error code) +// - Message data: Successful operation: CHsContentInfo instance defining the +// active view configuration +// Failed operation: None + EHsCcActiveViewResp, +// ---------------------------------------------------------------------------- // AppListReq // ---------------------------------------------------------------------------- // Purpose: @@ -279,6 +304,31 @@ // - Message data: None EHsCcActivateAppResp, // ---------------------------------------------------------------------------- +// ActiveAppReq +// ---------------------------------------------------------------------------- +// Purpose: +// This request is used to get active application configuration +// +// Message parameters: +// - Message id: EHsCcActivateAppReq +// - Transaction id: Unique transaction id +// - Message data: None + EHsCcActiveAppReq, +// ---------------------------------------------------------------------------- +// ActiveAppResp +// ---------------------------------------------------------------------------- +// Purpose: +// This response contains the active application configuration +// +// Message parameters: +// - Message id: EHsCcActiveAppResp +// - Transaction id: Transaction id from corresponding ActiveAppReq +// - Status: Operation status (Symbian error code) +// - Message data: Successful operation: CHsContentInfo instance defining the +// active application configuration +// Failed operation: None + EHsCcActiveAppResp, +// ---------------------------------------------------------------------------- // NotSupportedResp // ---------------------------------------------------------------------------- // Purpose: diff -r 844b978f8d5e -r b7904b40483f homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -2233,7 +2233,7 @@ #ifdef HSPS_LOG_ACTIVE if( iLogBus ) { - iLogBus->LogText( _L( "ChspsInstallationHandler::AddLocalizedResourcesL(): - DTD file was not found '%S'" ), + iLogBus->LogText( _L( "ChspsInstallationHandler::AddLocalizedResourcesDTDV2L(): - DTD file was not found '%S'" ), &dtdPath ); } #endif @@ -2507,10 +2507,14 @@ resourcePath->Des().Append( resource->FileName() ); TDataType dataType( resource->MimeType() ); + TPtrC8 tagsPtr; - if ( iResourceTag ) + HBufC8* tagBuf8 = NULL; + if ( resource->Tags().Length() ) { - tagsPtr.Set( iResourceTag->Des() ); + tagBuf8 = HBufC8::NewLC( resource->Tags().Length() ); + tagBuf8->Des().Copy( resource->Tags() ); + tagsPtr.Set( tagBuf8->Des() ); } // Add localized files into the resource array @@ -2523,6 +2527,11 @@ tagsPtr ); + if ( tagBuf8 ) + { + CleanupStack::PopAndDestroy( tagBuf8 ); + } + CleanupStack::PopAndDestroy( resourcePath ); } diff -r 844b978f8d5e -r b7904b40483f homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -1646,9 +1646,9 @@ { if ( parent->Name().CompareF( aNodeName ) == 0 ) { - ChspsDomList& attrList = parent->AttributeList(); + ChspsDomList& attrList = parent->AttributeList(); ChspsDomAttribute* attr = static_cast( attrList.FindByName( aAttrName ) ); - if ( attr->Value().CompareF( aAttrValue ) == 0 ) + if ( attr && attr->Value().CompareF( aAttrValue ) == 0 ) { found = ETrue; } diff -r 844b978f8d5e -r b7904b40483f homescreensrv_plat/ai_variation_api/inc/activeidle2domaincrkeys.h --- a/homescreensrv_plat/ai_variation_api/inc/activeidle2domaincrkeys.h Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreensrv_plat/ai_variation_api/inc/activeidle2domaincrkeys.h Mon Jan 18 20:32:13 2010 +0200 @@ -113,5 +113,14 @@ */ const TUint32 KAIWebStatus = 0x0000300F; +/** + * Key id to store wallpaper change type + */ +const TUint32 KAIWallpaperChangeType = 0x00000850; + +/** + * Key id to store wallpaper path that is common for all Homescreen pages. + */ +const TUint32 KAIWallpaperPath = 0x00000851; #endif // __AI2INTERNALCRKEYS_H__ diff -r 844b978f8d5e -r b7904b40483f homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h --- a/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h Mon Jan 18 20:32:13 2010 +0200 @@ -113,6 +113,16 @@ */ virtual TInt ActivateAppL( CHsContentInfo& aInfo ) = 0; + /** + * + */ + virtual TInt ActiveViewL( CHsContentInfo& aInfo ) = 0; + + /** + * + */ + virtual TInt ActiveAppL( CHsContentInfo& aInfo ) = 0; + }; diff -r 844b978f8d5e -r b7904b40483f homescreensrv_plat/sapi_homescreenplugin/tsrc/group/updatetests.cmd --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/updatetests.cmd Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/updatetests.cmd Mon Jan 18 20:32:13 2010 +0200 @@ -1,18 +1,3 @@ -@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 the License "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 @echo off rem rem For testing/debugging in emulator after the SISX package has been installed diff -r 844b978f8d5e -r b7904b40483f homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h Mon Jan 18 20:32:13 2010 +0200 @@ -1,21 +1,21 @@ /* -* 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 the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* ============================================================================== +* Name : mt_hsps_requestnotify_6.h +* Part of : HSPS / SAPI module testing +* Description : Test case RequestNotify(6) test data +* Version : %version: e003sa35#2 % * -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Test case RequestNotify(6) test data -* +* Copyright © 2008 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* ============================================================================== */ - #ifndef C_MT_HSPS_REQUESTNOTIFY_6_H #define C_MT_HSPS_REQUESTNOTIFY_6_H diff -r 844b978f8d5e -r b7904b40483f homescreensrv_plat/sapi_menucontent/mcsservice/src/mcsiconutility.cpp --- a/homescreensrv_plat/sapi_menucontent/mcsservice/src/mcsiconutility.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/homescreensrv_plat/sapi_menucontent/mcsservice/src/mcsiconutility.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -155,7 +155,9 @@ aBitmap = appIcon->Bitmap(); aMask = appIcon->Mask(); - AknInternalIconUtils::SetAppIcon(aBitmap); + // The line below was commented out to improve the appearance of scaled + // icons of java applications. + // AknInternalIconUtils::SetAppIcon(aBitmap); // Detach and delete appIcon->SetBitmap( NULL ); diff -r 844b978f8d5e -r b7904b40483f idlefw/cenrep/keys_activeidle2.xls Binary file idlefw/cenrep/keys_activeidle2.xls has changed diff -r 844b978f8d5e -r b7904b40483f idlefw/conf/activeidle2.confml Binary file idlefw/conf/activeidle2.confml has changed diff -r 844b978f8d5e -r b7904b40483f idlefw/conf/activeidle2_10275102.crml Binary file idlefw/conf/activeidle2_10275102.crml has changed diff -r 844b978f8d5e -r b7904b40483f idlefw/group/ailaunch.mmp --- a/idlefw/group/ailaunch.mmp Thu Jan 07 12:55:39 2010 +0200 +++ b/idlefw/group/ailaunch.mmp Mon Jan 18 20:32:13 2010 +0200 @@ -25,7 +25,7 @@ SECUREID AI_SID_AIFW_EXE VENDORID VID_DEFAULT -CAPABILITY CAP_APPLICATION PowerMgmt NetworkControl +CAPABILITY CAP_APPLICATION PowerMgmt NetworkControl TrustedUI EPOCSTACKSIZE 0x5000 EPOCHEAPSIZE 0x300000 0xC00000 diff -r 844b978f8d5e -r b7904b40483f idlefw/plugins/mcsplugin/group/mcsplugin.mmp --- a/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Thu Jan 07 12:55:39 2010 +0200 +++ b/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Mon Jan 18 20:32:13 2010 +0200 @@ -79,7 +79,8 @@ LIBRARY commonengine.lib LIBRARY favouritesengine.lib -LIBRARY gfxtrans.lib +LIBRARY gfxtrans.lib +LIBRARY centralrepository.lib // End of File diff -r 844b978f8d5e -r b7904b40483f idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h Thu Jan 07 12:55:39 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h Mon Jan 18 20:32:13 2010 +0200 @@ -23,7 +23,8 @@ #include #include #include - +#include +#include "mcspluginwatcher.h" class MAiContentObserver; class MAiContentItemIterator; @@ -42,7 +43,8 @@ */ class CMCSPlugin : public CAiContentPublisher, public MAiPropertyExtension, - public MAiEventHandlerExtension + public MAiEventHandlerExtension, + public MMCSPluginWatcherObserver { @@ -89,6 +91,12 @@ */ void PublishL(); + /** + * From base class MMCSPluginWatcherObserver + * .a method for Skin UID cenrep key change handeling + */ + void HandleNotifyL(); + // from base class CAiContentPublisher /** @@ -276,8 +284,11 @@ // Information about the content publisher (this plug-in) TAiPublisherInfo iInfo; - // Boolean, which expresses whether the content has been updated - //TBool iIsUpdated; + // For accessing central repository keys + CRepository* iRepository; + + // For observing central repository Skin UID key change + CMCSPluginWatcher* iRepositoryWatcher; }; diff -r 844b978f8d5e -r b7904b40483f idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Thu Jan 07 12:55:39 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Mon Jan 18 20:32:13 2010 +0200 @@ -24,6 +24,9 @@ #include #include +#include // For working with settings API +#include // Headers Used for CRepository + #include "mcspluginuids.hrh" #include "mcsplugin.h" #include "mcsplugindata.h" @@ -78,6 +81,39 @@ void CMCSPlugin::ConstructL() { iInfo.iUid.iUid = AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_MCSPLUGIN; + // We need to Query Central Repository + iRepository = CRepository::NewL( KCRUidPersonalisation ); + + // Setting up watcher which calls HandleNotifyL method + // everytime the SkinUID changes in central repository + iRepositoryWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::ENotify ); + iRepository->NotifyRequest( KPslnActiveSkinUid, iRepositoryWatcher->iStatus ); + iRepositoryWatcher->WatchNotify( this ); + } + +// --------------------------------------------------------------------------- +// Handle Skin UID change +// --------------------------------------------------------------------------- +// +void CMCSPlugin::HandleNotifyL() + { + + // Skin ID has changed. Set all MenuItems on Widget dirty + // and re-publish to update icons + if ( iEngine ) + { + TInt dataCount = iEngine->MenuItemCount(); + for ( TInt i = 0; i < dataCount; i++ ) + { + iEngine->MenuDataL( i ).SetDirty( ETrue ); + } + PublishL(); + } + + // Skin ID Notification must be activated again + iRepositoryWatcher->Cancel(); + iRepository->NotifyRequest( KPslnActiveSkinUid, iRepositoryWatcher->iStatus ); + iRepositoryWatcher->WatchNotify( this ); } // --------------------------------------------------------------------------- @@ -98,6 +134,19 @@ iObservers.Close(); DeleteContentModel(); + + if ( iRepository ) + { + delete iRepository; + iRepository = NULL; + } + + if ( iRepositoryWatcher ) + { + iRepositoryWatcher->Cancel(); + delete iRepositoryWatcher; + iRepositoryWatcher = NULL; + } } // --------------------------------------------------------------------------- @@ -154,6 +203,7 @@ // void CMCSPlugin::PublishLItemL( MAiContentObserver& aObserver, TMCSData& aData, TInt aIndex ) { + if( !aData.IsDirty() ) { return; @@ -274,13 +324,13 @@ void CMCSPlugin::ConfigureL( RAiSettingsItemArray& aSettings ) { - TLinearOrder sortMethod(CMCSPlugin::CompareItems); + TLinearOrder sortMethod( CMCSPlugin::CompareItems ); RAiSettingsItemArray contentItemsArr; TInt count = aSettings.Count(); - for(TInt i = 0; i < count; i++ ) + for ( TInt i = 0; i < count; i++ ) { - MAiPluginSettings* pluginSetting = aSettings[i]; + MAiPluginSettings* pluginSetting = aSettings[ i ]; if( pluginSetting->AiPluginItemType() == EAiPluginContentItem ) { MAiPluginContentItem& contItem = pluginSetting->AiPluginContentItem(); @@ -291,15 +341,15 @@ } iDataCount = contentItemsArr.Count(); - if(iDataCount > 0 ) + if ( iDataCount > 0 ) { // Create the dynamic content Model DeleteContentModel(); - iContentModel = new ( ELeave ) TAiContentItem[iDataCount]; - for(TInt i = 0; i < iDataCount; i++) + iContentModel = new ( ELeave ) TAiContentItem[ iDataCount ]; + for ( TInt i = 0; i < iDataCount; i++ ) { iContentModel[i].id = i; - MAiPluginContentItem& contentItem = (contentItemsArr[i])->AiPluginContentItem(); + MAiPluginContentItem& contentItem = ( contentItemsArr[ i ] )->AiPluginContentItem(); if( contentItem.Type() == KContentItemTypeText ) { @@ -313,11 +363,11 @@ } TInt pos = contentItem.Name().Locate( KPluginNameSeprator ); - HBufC* contentId = HBufC::NewL( contentItem.Name().Length()); + HBufC* contentId = HBufC::NewL( contentItem.Name().Length() ); CleanupStack::PushL( contentId ); TPtr ptr = contentId->Des(); ptr = contentItem.Name().Mid( pos + 1 ); - TInt sizeOfContentId = ptr.Size() +sizeof(wchar_t); + TInt sizeOfContentId = ptr.Size() +sizeof( wchar_t ); iContentModel[i].cid = static_cast( User::AllocL( sizeOfContentId ) ); Mem::Copy((TAny*)iContentModel[i].cid, ptr.PtrZ(), sizeOfContentId); CleanupStack::PopAndDestroy( contentId );