# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1270062275 -10800 # Node ID 15e4dd19031c281327899a56afa10ddc02201953 # Parent 502e5d91ad423e502701e809e907b3fa90affa63 Revision: 201011 Kit: 201013 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp --- a/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -32,6 +32,7 @@ SOURCE cpnotificationhandler.cpp SOURCE cpserverburlistener.cpp SOURCE cpactionhandlerthread.cpp +SOURCE cpactiondatacache.cpp USERINCLUDE ../inc USERINCLUDE ../../cpsqlitestorage/inc diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpactiondatacache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpactiondatacache.h Wed Mar 31 22:04:35 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 +#include + +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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h Wed Mar 31 22:04:35 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" ); diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserver.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserver.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserver.h Wed Mar 31 22:04:35 2010 +0300 @@ -110,7 +110,7 @@ /** * Returns notifications array */ - RPointerArray& CCPServer::GetNotifications( ); + RPointerArray& GetNotifications( ); private: // From CActive diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdatamanager.h Wed Mar 31 22:04:35 2010 +0300 @@ -21,6 +21,7 @@ #include #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 iNotificationsArray; + /* + * Action data cache + * Own. + */ + CCPActionDataCache* iActionDataCache; + + #ifdef CONTENT_PUBLISHER_DEBUG CCPDebug* iDebug; #endif diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h Wed Mar 31 22:04:35 2010 +0300 @@ -39,6 +39,7 @@ ECpServerAddObserver = 23, ECpServerRemoveObserver = 24, ECpServerExecuteAction = 30, + ECpServerExecuteMultipleActions = 31, ECpServerInternal = 100 }; diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserversession.h Wed Mar 31 22:04:35 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: /* diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/src/cpactiondatacache.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpactiondatacache.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -0,0 +1,300 @@ +/* +* 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 +#include +#include + +#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() + { + 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); + } diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/src/cpnotificationhandler.cpp --- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpnotificationhandler.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpnotificationhandler.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -312,12 +312,8 @@ { listOfMatchingMaps->AppendL( variant ); } - else - { - variant.Reset(); - } } - CleanupStack::Pop( &variant ); + CleanupStack::PopAndDestroy( &variant ); } if ( listOfMatchingMaps->Count( ) ) { diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/src/cpserverdatamanager.cpp --- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserverdatamanager.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserverdatamanager.cpp Wed Mar 31 22:04:35 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; iAtL( 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 ); } @@ -456,29 +486,38 @@ // ----------------------------------------------------------------------------- // void CCPDataManager::BuildChangeInfoL( const CCPLiwMap* aMap, + const CLiwDefaultList* aActionTriggers, const TLiwGenericParam* aParam, CLiwDefaultList* aChangeInfoList ) { TLiwVariant resultVar = aParam->Value(); 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; iCount(); i++ ) + { + 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 ); + + 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 +527,32 @@ // ----------------------------------------------------------------------------- // void CCPDataManager::BuildDefaultChangeInfoL( const CCPLiwMap* aMap, + const CLiwDefaultList* aActionTriggers, CLiwDefaultList* aChangeInfoList ) { - CLiwDefaultMap* changeInfoMap = CLiwDefaultMap::NewLC(); + for ( TInt i = 0; iCount(); 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 +607,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 ); + } + } + diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp --- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp Wed Mar 31 22:04:35 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( 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 (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 (mapVariant.AsMap()); + ExecuteActionL(map, ETrue, options); + CleanupStack::PopAndDestroy(&mapVariant); + } + + CleanupStack::PopAndDestroy(cpMaps); + CleanupStack::PopAndDestroy(genericList); } // ----------------------------------------------------------------------------- @@ -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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingdebug/bwins/cpdebugu.def --- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/bwins/cpdebugu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/bwins/cpdebugu.def Wed Mar 31 22:04:35 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, ...) + ?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, ...) + ?ExtendedPrint@CCPDebug@@SAXPBDABVCLiwGenericParamList@@@Z @ 6 NONAME ; void CCPDebug::ExtendedPrint(char const *, class CLiwGenericParamList const &) + ?Enable@CCPDebug@@SAHXZ @ 7 NONAME ; int CCPDebug::Enable(void) diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingdebug/eabi/cpdebugu.def --- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/eabi/cpdebugu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/eabi/cpdebugu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group/cpdebug.mmp --- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group/cpdebug.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/group/cpdebug.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -39,5 +39,7 @@ LIBRARY euser.lib LIBRARY estor.lib LIBRARY efsrv.lib +LIBRARY liwservicehandler.lib + //end of file diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingdebug/inc/cpdebug.h --- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/inc/cpdebug.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/inc/cpdebug.h Wed Mar 31 22:04:35 2010 +0300 @@ -23,6 +23,7 @@ #include #ifdef CONTENT_PUBLISHER_DEBUG #include +#include _LIT(KCPDebugDirName, "contentpublisher" ); _LIT(KCPDebugFileName, "c:\\contentpublisher.txt" ); @@ -62,6 +63,14 @@ */ IMPORT_C static void Printf(TRefByValue 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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingdebug/src/cpdebug.cpp --- a/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/src/cpdebug.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingdebug/src/cpdebug.cpp Wed Mar 31 22:04:35 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(Dll::Tls()); diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingmap/bwins/cputilsu.def --- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/bwins/cputilsu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/bwins/cputilsu.def Wed Mar 31 22:04:35 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) diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingmap/eabi/cputilsu.def --- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/eabi/cputilsu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/eabi/cputilsu.def Wed Mar 31 22:04:35 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 ; ## - _ZTV9CCPLiwMap @ 16 NONAME ; ## + _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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h --- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/inc/cpliwmap.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c contentpublishingsrv/contentpublishingutils/contentpublishingmap/src/cpliwmap.cpp --- a/contentpublishingsrv/contentpublishingutils/contentpublishingmap/src/cpliwmap.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/contentpublishingsrv/contentpublishingutils/contentpublishingmap/src/cpliwmap.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -20,7 +20,6 @@ #include #include #include -#include #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,61 @@ 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; + 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 ); + } + } + } + } + return list; + } // --------------------------------------------------------------------------- // @@ -445,49 +515,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 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 +864,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 +1286,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 +1402,7 @@ if ( pos != KErrNotFound ) { found = ETrue; - TInt length; + TInt length(0); if( paramForValue->Value().TypeId() == EVariantTypeDesC ) { length = paramForValue->Value().AsDes().Length(); diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/bwins/hgcontextutilityu.def --- a/contextutility/bwins/hgcontextutilityu.def Mon Mar 15 12:41:53 2010 +0200 +++ /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 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 &) - diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/eabi/hgcontextutilityu.def --- a/contextutility/eabi/hgcontextutilityu.def Mon Mar 15 12:41:53 2010 +0200 +++ /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 - diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/group/bld.inf --- a/contextutility/group/bld.inf Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -PRJ_EXPORTS -../rom/hgcontextutility.iby CORE_MW_LAYER_IBY_EXPORT_PATH(hgcontextutility.iby) - - -PRJ_MMPFILES -hgcontextutility.mmp - -PRJ_TESTMMPFILES - - diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/group/hgcontextutility.mmp --- a/contextutility/group/hgcontextutility.mmp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include - -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 - diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/inc/hgcontexttypes.h --- a/contextutility/inc/hgcontexttypes.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include // 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, "" ); // 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 diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/inc/hgcontextutilityimpl.h --- a/contextutility/inc/hgcontextutilityimpl.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#include -#include -#include -#include - -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 ", "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& 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 iMusicContextInfo; - }; - -#endif /* HGCONTEXTUTILITYIMPL_H */ diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/inc/hgctxutilslogging.h --- a/contextutility/inc/hgctxutilslogging.h Mon Mar 15 12:41:53 2010 +0200 +++ /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" diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/inc/hglogging.h --- a/contextutility/inc/hglogging.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 - * - * #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 -#include - -#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 diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/inc/hglogutils.h --- a/contextutility/inc/hglogutils.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include - -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: -* - _DEBUG -* - With this flag undefined, all traces are disabled -* - __KERNEL_MODE__ -* - if kernel mode flag is defined, kernel macro variants are used (no unicode or shared heap related stuff, faster) -* - DISABLE_SYNTAX_CHECK -* - 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 - #include - #include - #include - -// both of headers defines KLogBufferSize -#ifndef __COMMSDEBUGUTILITY_H__ - #include -#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 diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/rom/hgcontextutility.iby --- a/contextutility/rom/hgcontextutility.iby Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -file=ABI_DIR\BUILD_DIR\hgcontextutility.dll SHARED_LIB_DIR\hgcontextutility.dll - -#endif // HGCONTEXTUTILITY_IBY diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/src/hgcontextutility.cpp --- a/contextutility/src/hgcontextutility.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#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& 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 diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/src/hgcontextutilitybase.cpp --- a/contextutility/src/hgcontextutilitybase.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#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 diff -r 502e5d91ad42 -r 15e4dd19031c contextutility/src/hgcontextutilityimpl.cpp --- a/contextutility/src/hgcontextutilityimpl.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#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& 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 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/conf/hsps.confml Binary file homescreenpluginsrv/conf/hsps.confml has changed diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/conf/hsps_200159c9.crml Binary file homescreenpluginsrv/conf/hsps_200159c9.crml has changed diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/bwins/hspsclientsessionu.def --- a/homescreenpluginsrv/hspsmanager/bwins/hspsclientsessionu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/bwins/hspsclientsessionu.def Wed Mar 31 22:04:35 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 &) diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/bwins/hspsclientu.def --- a/homescreenpluginsrv/hspsmanager/bwins/hspsclientu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/bwins/hspsclientu.def Wed Mar 31 22:04:35 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 &) - ?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 const &) - ?hspsGetListHeaders@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@AAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 28 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders(class ChspsODT const &, class CArrayPtrFlat &) - ?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 &) + ?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 const &) + ?hspsGetHeaders@ChspsClient@@QAEHABVChspsODT@@HAAV?$CArrayPtrFlat@VChspsODT@@@@@Z @ 29 NONAME ; int ChspsClient::hspsGetHeaders(class ChspsODT const &, int, class CArrayPtrFlat &) + ?hspsRemoveThemeL@ChspsClient@@UAE?AW4ThspsServiceCompletedMessage@@ABVChspsODT@@@Z @ 30 NONAME ; enum ThspsServiceCompletedMessage ChspsClient::hspsRemoveThemeL(class ChspsODT const &) diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/client/hspsclient.cpp --- a/homescreenpluginsrv/hspsmanager/client/hspsclient.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/client/hspsclient.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -236,8 +236,10 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -EXPORT_C ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders( const ChspsODT& aSearchMask, - CArrayPtrFlat& aHeaderList ) +EXPORT_C ThspsServiceCompletedMessage ChspsClient::hspsGetListHeaders( + const ChspsODT& aSearchMask, + const TBool aCopyLogos, + CArrayPtrFlat& aHeaderList ) { ThspsServiceCompletedMessage ret = EhspsServiceRequestError; TBuf8 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& aHeaderList ) +EXPORT_C TInt ChspsClient::hspsGetHeaders( + const ChspsODT& aSearchMask, + const TBool aCopyLogos, + CArrayPtrFlat& 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 ) diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/client/hspsclientsession.cpp --- a/homescreenpluginsrv/hspsmanager/client/hspsclientsession.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/client/hspsclientsession.cpp Wed Mar 31 22:04:35 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 intPkg( aCopyLogos ); + return SendReceive( EhspsGetListHeaders, + TIpcArgs(&aResultData, &aSearchMaskData, &aHeaderData, &intPkg) ); } // ----------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/eabi/hspsclientsessionu.def --- a/homescreenpluginsrv/hspsmanager/eabi/hspsclientsessionu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/eabi/hspsclientsessionu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/eabi/hspsclientu.def --- a/homescreenpluginsrv/hspsmanager/eabi/hspsclientu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/eabi/hspsclientu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp --- a/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/inc/hspsfamily.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsfamily.h Wed Mar 31 22:04:35 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 +#include + +#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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/inc/hspsfamilylistener.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsfamilylistener.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsfamilylistener.h Wed Mar 31 22:04:35 2010 +0300 @@ -24,12 +24,9 @@ #ifndef HSPSFAMILYLISTENER_H_ #define HSPSFAMILYLISTENER_H_ -#include -#include +#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; }; diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/inc/hspsmaintenancehandler.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsmaintenancehandler.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsmaintenancehandler.h Wed Mar 31 22:04:35 2010 +0300 @@ -343,6 +343,7 @@ * @return ThspsServiceCompletedMessage expressing the result of the call. */ ThspsServiceCompletedMessage hspsGetListHeaders(const ChspsODT& /*aSearchMask*/ + , const TBool /*aCopyLogos*/ , CArrayPtrFlat& /*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& iHeaderListCache; ChspsThemeServerSession* iServerSession; // Not owned. CFileMan* iFileMan; + TBool iMaintainLogoResources; #ifdef HSPS_LOG_ACTIVE /** * Log bus. diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/inc/hspsserverutil.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsserverutil.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsserverutil.h Wed Mar 31 22:04:35 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 hspsServerUtil::IsLogoFile( const TDesC& aFileDeclaration, TFileName& aFilename ); @@ -542,7 +542,28 @@ 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 hspsServerUtil::PopulateLogoPathsL( + const TDesC& aLogoDeclaration, + const TUint aAppUid, + RBuf& aTargetPath, + RBuf& aSourcePath, + RBuf& aUpdatedDeclaration ); + private: /** * Internal method. Do not call directly! diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h Wed Mar 31 22:04:35 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 /** diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsfamily.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenpluginsrv/hspsmanager/src/hspsfamily.cpp Wed Mar 31 22:04:35 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 + + +_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 familyString; + GetFamilyString( familyString ); + return GetFamilyType( familyString ); + } + + + +// End of File + diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsfamilylistener.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsfamilylistener.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsfamilylistener.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -19,7 +19,6 @@ #include "hspsfamilylistener.h" #include "hsps_builds_cfg.hrh" #include "hspsmanifest.h" -#include _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 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; } diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsinstallationhandler.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -380,7 +380,7 @@ if( iLogBus ) { iLogBus->LogText( _L( "ChspsInstallationHandler::hspsInstallTheme(): - Installation failed with error code %d" ), - errorCode ); + err ); } #endif } @@ -802,13 +802,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 +1686,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 +1769,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 ) { @@ -2580,7 +2593,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; diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsmaintenancehandler.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsmaintenancehandler.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsmaintenancehandler.cpp Wed Mar 31 22:04:35 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 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 @@ -1859,14 +1781,20 @@ { TBool isView = EFalse; - ChspsDomNode* confNode = - (ChspsDomNode*)aPluginNode.ChildNodes().FindByName( KConfigurationElement ); + ChspsDomNode* confNode = static_cast( + aPluginNode.ChildNodes().FindByName( KConfigurationElement )); + if( confNode ) { - ChspsDomAttribute* typeAttr = - (ChspsDomAttribute*)confNode->AttributeList().FindByName( KConfigurationAttrType ); - isView = ( typeAttr->Value().CompareF( KConfTypeView ) == 0 ); + ChspsDomAttribute* typeAttr = static_cast( + confNode->AttributeList().FindByName( KConfigurationAttrType )); + + if( typeAttr ) + { + isView = ( typeAttr->Value().CompareF( KConfTypeView ) == 0 ); + } } + return isView; } @@ -3841,8 +3769,10 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -ThspsServiceCompletedMessage ChspsMaintenanceHandler::hspsGetListHeaders(const ChspsODT& /*aSearchMask*/, - CArrayPtrFlat& /*aHeaderList*/) +ThspsServiceCompletedMessage ChspsMaintenanceHandler::hspsGetListHeaders( + const ChspsODT& /*aSearchMask*/, + const TBool /*aCopyLogos*/, + CArrayPtrFlat& /*aHeaderList*/) { return EhspsServiceNotSupported; } @@ -4052,6 +3982,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 +4257,78 @@ void ChspsMaintenanceHandler::GetHeaderListL( CArrayPtrSeg& 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 ) ) + // Check whether the header matches the search criteria (family etc) + if ( FilterHeader( aSearchMask, *header ) ) { - // Append to the search results - HBufC8* data = header->MarshalHeaderL(); + + // Update file paths into the existing logo declarations + if( header->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( header->LogoFile().Length() + KMaxFileName ); + + // Find location of the logo file and location where it shold be copied + hspsServerUtil::PopulateLogoPathsL( + header->LogoFile(), + iSecureId, + targetFile, + sourceFile, + newDeclaration ); + + if( targetFile.Length() + && sourceFile.Length() + && newDeclaration.Length() ) + { + // Update private path information to the logo declaration + header->SetLogoFileL( newDeclaration ); + + hspsServerUtil::CopyResourceFileL( + iServerSession->FileSystem(), + *iFileMan, + targetFile, + sourceFile ); + } + + CleanupStack::PopAndDestroy( 3, &targetFile ); // targetFile, sourceFile, newDeclaration + } + + // Convert the header to a descriptor + HBufC8* data = header->MarshalHeaderL(); if ( data ) { + // Append to the search results CleanupStack::PushL( data ); aHeaderDataList.AppendL( data ); CleanupStack::Pop( data ); } } - } - - CleanupStack::PopAndDestroy( 2, headerBuf ); // searchOdt, headerBuf + } } // ----------------------------------------------------------------------------- @@ -4555,7 +4538,7 @@ ) && ( - ( aMask.ConfigurationType() && aMask.ConfigurationType() == aHeader.ConfigurationType() ) + ( aMask.ConfigurationType() && ( aHeader.ConfigurationType() == aMask.ConfigurationType() ) ) || ( !aMask.ConfigurationType() ) ) @@ -4723,10 +4706,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 +4721,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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsserverutil.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -1660,10 +1660,10 @@ } // ----------------------------------------------------------------------------- -// hspsServerUtil::IsFile +// hspsServerUtil::IsLogoFile // ----------------------------------------------------------------------------- // -TBool hspsServerUtil::IsFile( +TBool hspsServerUtil::IsLogoFile( const TDesC& aFileDeclaration, TFileName& aFilename ) { @@ -1891,6 +1891,57 @@ 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::hspsServerUtil diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp Wed Mar 31 22:04:35 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); } @@ -3516,7 +3520,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 +3530,8 @@ HandleFamilyChangeL( KDefaultFamily ); } } +#endif // defined(WINSCW) || defined(__WINS__) + // ----------------------------------------------------------------------------- // ChspsThemeServer::HandleFamilyChangeL() @@ -3631,7 +3637,14 @@ return activated; } -#endif // defined(WINSCW) +// ----------------------------------------------------------------------------- +// ChspsThemeServer::Family() +// ----------------------------------------------------------------------------- +// +ChspsFamily* ChspsThemeServer::Family() + { + return iFamily; + } // end of file diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsodt/bwins/hspsodtu.def --- a/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsodt/eabi/hspsodtu.def --- a/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspsodt/src/hspsodt.cpp --- a/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Wed Mar 31 22:04:35 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 ) diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspstools/group/hspstools.mmp --- a/homescreenpluginsrv/hspstools/group/hspstools.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspstools/group/hspstools.mmp Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/hspstools/src/hspslogbusfile.cpp --- a/homescreenpluginsrv/hspstools/src/hspslogbusfile.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/hspstools/src/hspslogbusfile.cpp Wed Mar 31 22:04:35 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 '_'. diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/inc/hspsclient.h --- a/homescreenpluginsrv/inc/hspsclient.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsclient.h Wed Mar 31 22:04:35 2010 +0300 @@ -267,8 +267,10 @@ /** * From MhspsMaintenanceService. */ - IMPORT_C ThspsServiceCompletedMessage hspsGetListHeaders(const ChspsODT& aSearchMask, - CArrayPtrFlat& aHeaderList); + IMPORT_C ThspsServiceCompletedMessage hspsGetListHeaders( + const ChspsODT& aSearchMask, + const TBool aCopyLogos, + CArrayPtrFlat& 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& aHeaderList); + IMPORT_C TInt hspsGetHeaders( + const ChspsODT& aSearchMask, + const TBool aCopyLogos, + CArrayPtrFlat& aHeaderList); /** * From MhspsMaintenanceService diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/inc/hspsclientsession.h --- a/homescreenpluginsrv/inc/hspsclientsession.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsclientsession.h Wed Mar 31 22:04:35 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. diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/inc/hspsodt.h --- a/homescreenpluginsrv/inc/hspsodt.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsodt.h Wed Mar 31 22:04:35 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; diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/inc/hspsthememanagement.h --- a/homescreenpluginsrv/inc/hspsthememanagement.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsthememanagement.h Wed Mar 31 22:04:35 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& aHeaderList) = 0; + virtual ThspsServiceCompletedMessage hspsGetListHeaders( + const ChspsODT& aSearchMask, + const TBool aCopyLogos, + CArrayPtrFlat& aHeaderList) = 0; /** hspsGetListHeaders * diff -r 502e5d91ad42 -r 15e4dd19031c homescreenpluginsrv/rom/hsps.iby --- a/homescreenpluginsrv/rom/hsps.iby Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreenpluginsrv/rom/hsps.iby Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/ai_plugin_management_api/inc/hscontentpublisher.h --- a/homescreensrv_plat/ai_plugin_management_api/inc/hscontentpublisher.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/ai_plugin_management_api/inc/hscontentpublisher.h Wed Mar 31 22:04:35 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: diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/ai_utilities_api/group/bld.inf --- a/homescreensrv_plat/ai_utilities_api/group/bld.inf Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/ai_utilities_api/group/bld.inf Wed Mar 31 22:04:35 2010 +0300 @@ -31,6 +31,7 @@ ../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) +../inc/aicpscommandbuffer.h MW_LAYER_PLATFORM_EXPORT_PATH(aicpscommandbuffer.h) #ifdef __COVER_DISPLAY ../inc/aisecondarydisplayapi.h MW_LAYER_PLATFORM_EXPORT_PATH(secondarydisplay/aisecondarydisplayapi.h) diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/ai_utilities_api/inc/aicpscommandbuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/ai_utilities_api/inc/aicpscommandbuffer.h Wed Mar 31 22:04:35 2010 +0300 @@ -0,0 +1,63 @@ +/* +* 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 + +// User includes + +// Forward declarations +class CLiwDefaultMap; + +/** + * 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; + +protected: + // destructor + + ~MAiCpsCommandBuffer() { } + }; + +#endif // M_CAICPSCOMMANDBUFFER_H + +// End of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/group/bld.inf --- a/homescreensrv_plat/context_utility_api/group/bld.inf Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -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) diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/inc/hgcontextdef.h --- a/homescreensrv_plat/context_utility_api/inc/hgcontextdef.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -// 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, "" ); // special value for PbkContact -_LIT( KHgCFValueUnknownInfo, "" ); // 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/inc/hgcontextutility.h --- a/homescreensrv_plat/context_utility_api/inc/hgcontextutility.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#include -#include -#include - -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 ", "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& 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 '' -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 */ diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/inc/hgcontextutilitybase.h --- a/homescreensrv_plat/context_utility_api/inc/hgcontextutilitybase.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include - -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 */ diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/bwins/t_ui_context_utility_apiu.def --- a/homescreensrv_plat/context_utility_api/tsrc/bwins/t_ui_context_utility_apiu.def Mon Mar 15 12:41:53 2010 +0200 +++ /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 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 &) - diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/eabi/t_ui_context_utility_apiu.def --- a/homescreensrv_plat/context_utility_api/tsrc/eabi/t_ui_context_utility_apiu.def Mon Mar 15 12:41:53 2010 +0200 +++ /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 ; ## - _ZTI21CHgContextUtilityBase @ 31 NONAME ; ## - _ZTV11CHgTestBase @ 32 NONAME ; ## - _ZTV21CHgContextUtilityBase @ 33 NONAME ; ## - _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 - diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/group/bld.inf --- a/homescreensrv_plat/context_utility_api/tsrc/group/bld.inf Mon Mar 15 12:41:53 2010 +0200 +++ /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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/group/context_utility_api.bat --- a/homescreensrv_plat/context_utility_api/tsrc/group/context_utility_api.bat Mon Mar 15 12:41:53 2010 +0200 +++ /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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.mmp --- a/homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.mmp Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.pkg --- a/homescreensrv_plat/context_utility_api/tsrc/group/t_ui_context_utility_api.pkg Mon Mar 15 12:41:53 2010 +0200 +++ /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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/inc/hgctxcontactmatcher.h --- a/homescreensrv_plat/context_utility_api/tsrc/inc/hgctxcontactmatcher.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -// 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 " or "name " 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 ... " 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 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/inc/t_ui_context_utility_api.h --- a/homescreensrv_plat/context_utility_api/tsrc/inc/t_ui_context_utility_api.h Mon Mar 15 12:41:53 2010 +0200 +++ /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& aTestCases, - TTestResult& aResult); - - ~CT_ui_context_utility_api(); - - TInt RunTestL( - CT_ui_context_utility_api::TCallReason aRunReason, - TInt aTestToRun, - RPointerArray& aTestCases, - TTestResult& aResult); - - RPtrHashMap* 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 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/src/hgctxcontactmatcher.cpp --- a/homescreensrv_plat/context_utility_api/tsrc/src/hgctxcontactmatcher.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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( 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 " - // 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api.cpp --- a/homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include -#include -#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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// ============================ 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& 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& aTestCases, - TTestResult& aResult) - { -#define TEST_CASES - #include "..\src\T_ui_context_utility_api_cases.cpp" -#undef TEST_CASES - return KErrNone; - } -// End of File diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api_cases.cpp --- a/homescreensrv_plat/context_utility_api/tsrc/src/t_ui_context_utility_api_cases.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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& 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 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 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& 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* 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* 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 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/src/wait.cpp --- a/homescreensrv_plat/context_utility_api/tsrc/src/wait.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/src/wait.h --- a/homescreensrv_plat/context_utility_api/tsrc/src/wait.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 - -/** -* 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.cpp --- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.cpp Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include "hgtestbase.h" -#include -#include -#include - -// ============================ 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& 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 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& 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.h --- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbase.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 -#include "StifTestModule.h" -#include - -#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(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& 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& 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& 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; -}; diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbasemacros.h --- a/homescreensrv_plat/context_utility_api/tsrc/testbase/hgtestbasemacros.h Mon Mar 15 12:41:53 2010 +0200 +++ /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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/tsrc/testbase/sitfunitutils.inl --- a/homescreensrv_plat/context_utility_api/tsrc/testbase/sitfunitutils.inl Mon Mar 15 12:41:53 2010 +0200 +++ /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 -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 -inline TBool AssertNull(const T* aPtr) -/** - * AssertNull - * - * @prototype - * @test - * - * @param aPtr - Pointer - * @return - True if NULL - */ - { - if( aPtr==NULL ) - { - return ETrue; - } - return EFalse; - } - -template -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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/context_utility_api/ui_context_utility_api.metaxml --- a/homescreensrv_plat/context_utility_api/ui_context_utility_api.metaxml Mon Mar 15 12:41:53 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - - - UI Context Utility API - Utility API for publishing context to the Context Framework - c++ - contextengine - - - - - - - - - no - no - - diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisher.h --- a/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisher.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisher.h Wed Mar 31 22:04:35 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 ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/idlefw_api/inc/aifwstatehandler.h --- a/homescreensrv_plat/idlefw_api/inc/aifwstatehandler.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/idlefw_api/inc/aifwstatehandler.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h --- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h Wed Mar 31 22:04:35 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: /** diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h --- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp Wed Mar 31 22:04:35 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); + } } diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp Wed Mar 31 22:04:35 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); + } + } diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp Wed Mar 31 22:04:35 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( aOptions ) ); + User::LeaveIfError(SendReceive(ECpServerExecuteMultipleActions, args)); + CleanupStack::PopAndDestroy(&datastrm); + CleanupStack::PopAndDestroy(datadesc); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void RCPServerClient::DeleteL( const CCPLiwMap& aMap ) { CP_DEBUG( _L8("RCPServerClient::DeleteL()") ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/hspsservice/bwins/hspsserviceu.def --- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/bwins/hspsserviceu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/bwins/hspsserviceu.def Wed Mar 31 22:04:35 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 &) + ?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 &) ?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 &) - ?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 &) + ?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 &) + ?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) diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/hspsservice/eabi/hspsserviceu.def --- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/eabi/hspsserviceu.def Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/eabi/hspsserviceu.def Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/hspsservice/inc/hspspersonalisationservice.h --- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/inc/hspspersonalisationservice.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/inc/hspspersonalisationservice.h Wed Mar 31 22:04:35 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& aList ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/hspsservice/src/hspspersonalisationservice.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/hspsservice/src/hspspersonalisationservice.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/hspsservice/src/hspspersonalisationservice.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -76,6 +76,7 @@ TDesC8& aInterface, TDesC8& aType, TUint32 aFamily, + const TBool aCopyLogos, CArrayPtrFlat& 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 ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/inc/hspsliwvocabulary.hrh --- a/homescreensrv_plat/sapi_homescreenplugin/inc/hspsliwvocabulary.hrh Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/inc/hspsliwvocabulary.hrh Wed Mar 31 22:04:35 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" ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/src/hspsconfigurationif.cpp Wed Mar 31 22:04:35 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* list = - new ( ELeave )CArrayPtrFlat( 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* list = + new ( ELeave )CArrayPtrFlat( 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 ); + } // ----------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp Wed Mar 31 22:04:35 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 ); diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_armv5.pkg --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_armv5.pkg Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_armv5.pkg Wed Mar 31 22:04:35 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" diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_winscw.pkg --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_winscw.pkg Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/mt_sapi_homescreenplugin_winscw.pkg Wed Mar 31 22:04:35 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" diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_addplugin_9.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_addplugin_9.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_addplugin_9.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_1.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_1.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_1.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_3.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_3.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_3.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_4.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_4.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_4.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_8.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_getplugins_8.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hspsconfigurationif.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hspsconfigurationif.h Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hspsconfigurationif.h Wed Mar 31 22:04:35 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 */ diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsconfigurationif.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsconfigurationif.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/src/mt_hspsconfigurationif.cpp Wed Mar 31 22:04:35 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", diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/dummy.mif Binary file homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/dummy.mif has changed diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/finnish_widget/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch widget @@ -20,6 +24,8 @@ FinnishWidget 1.0 + mif(dummy.mif 1 2) + widgetconfiguration.xml @@ -34,4 +40,4 @@ localizedbg.jpg - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,6 +1,10 @@ - + + + qhd_tch + vga_tch + widget @@ -32,4 +36,4 @@ widget.bmp - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget_v2/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget_v2/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/installed_widget_v2/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,6 +1,10 @@ - + + + qhd_tch + vga_tch + widget @@ -32,4 +36,4 @@ widget.bmp - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/root/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/root/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/root/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch application @@ -31,4 +35,4 @@ - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/view/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/view/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/view/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,6 +1,10 @@ - + + + qhd_tch + vga_tch + view @@ -31,4 +35,4 @@ resource.file picture.jpeg - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/widget/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/widget/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/minimalconf/widget/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch widget @@ -27,4 +31,4 @@ - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/root/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/root/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/root/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch application @@ -32,4 +36,4 @@ - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/view/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/view/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/operatorconf/view/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch view @@ -27,4 +31,4 @@ locale.dtd - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/root/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/root/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/root/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch application @@ -33,4 +37,4 @@ - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view1/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view1/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view1/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch view @@ -34,4 +38,4 @@ hs_logoz.jpg - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view2/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view2/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/view2/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch view @@ -30,4 +34,4 @@ view2.bmp - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/widget/manifest.dat --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/widget/manifest.dat Mon Mar 15 12:41:53 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/testthemes/typicalconf/widget/manifest.dat Wed Mar 31 22:04:35 2010 +0300 @@ -1,5 +1,9 @@ - + + + + qhd_tch + vga_tch widget @@ -32,4 +36,4 @@ - \ No newline at end of file + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/group/aifw.mmp --- a/idlefw/group/aifw.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/group/aifw.mmp Wed Mar 31 22:04:35 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 + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/group/aiutils.mmp --- a/idlefw/group/aiutils.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/group/aiutils.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -17,7 +17,6 @@ #include #include -//#include 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/hslaunch/src/hslaunch.cpp --- a/idlefw/hslaunch/src/hslaunch.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/hslaunch/src/hslaunch.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -16,6 +16,7 @@ */ #include +#include #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 ); + } } } diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/aicpsexecuteparam.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlefw/inc/framework/aicpsexecuteparam.h Wed Mar 31 22:04:35 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 + +// 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 list for Execute command + * it will leave the CLiwGenericParamList object in the stack + * + * @since S60 5.2 + * @return generic parameter list + */ + CLiwGenericParamList* InParamListLC(); + + /** + * 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 iActions; + }; + +#endif /* AICPSEXECUTEPARAM_H */ diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/aipluginfactory.h --- a/idlefw/inc/framework/aipluginfactory.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/inc/framework/aipluginfactory.h Wed Mar 31 22:04:35 2010 +0300 @@ -29,6 +29,7 @@ // Forward declarations class CAiUiControllerManager; class CAiStateManager; +class MAiCpsCommandBuffer; 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( MAiCpsCommandBuffer* 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 */ + MAiCpsCommandBuffer* iCommandBuffer; /** Array of loaded data plugins, Owned */ mutable RPointerArray< CHsContentPublisher > iPublishers; /** Ecom implementation info, Owned */ diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/aistatemanager.h --- a/idlefw/inc/framework/aistatemanager.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/inc/framework/aistatemanager.h Wed Mar 31 22:04:35 2010 +0300 @@ -22,6 +22,7 @@ // System includes #include #include +#include // for MProgressDialogCallback // User includes #include @@ -29,8 +30,10 @@ // Forward declarations class CAiPluginFactory; +class CAiCpsCommandBuffer; class CHsContentPublisher; class THsPublisherInfo; +class CAknWaitDialog; /** * State Manager @@ -40,7 +43,8 @@ * @since S60 5.0 */ NONSHARABLE_CLASS( CAiStateManager ) : public CBase, - public MAiStateObserver + public MAiStateObserver, + public MProgressDialogCallback { private: // Data types @@ -113,13 +117,14 @@ /** * @see MAiStateObserver */ - void NotifyUpdatePlugins(); + void NotifyReloadPlugins(); + /** * @see MAiStateObserver */ - TBool OnlineStateInUse() const; - + void NotifyReleasePlugins( const RArray& aUidList ); + private: // new functions @@ -187,19 +192,53 @@ * @since S60 5.2 */ void DestroyPlugins(); - + + /** + * Starts wait dialog with progress bar. + */ + void StartWaitDialogL(); + + /** + * Stops wait dialog with progress bar. + */ + void StopWaitDialogL(); + + /** + * Callback method from MProgressDialogCallback interface. + * Gets called when a dialog is dismissed. + * @param aButtonId Id of the pushed button. + */ + void DialogDismissedL( TInt aButtonId ); + + /** + * 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; - + /** + * Own. + * Pointer to wait dialog. + */ + CAknWaitDialog* iWaitDialog; + + /** List of plugins which should be reloaded */ + RArray iReloadPlugins; + private: // friend classes diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/aistateobserver.h --- a/idlefw/inc/framework/aistateobserver.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/inc/framework/aistateobserver.h Wed Mar 31 22:04:35 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& aUidList ) = 0; + }; #endif // _AISTATEOBSERVER_H diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/aistateprovider.h --- a/idlefw/inc/framework/aistateprovider.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/inc/framework/aistateprovider.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/inc/framework/caicpscommandbuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlefw/inc/framework/caicpscommandbuffer.h Wed Mar 31 22:04:35 2010 +0300 @@ -0,0 +1,150 @@ +/* +* 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 + +// User includes +#include + +// 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(); + +private: + // from MAiCpsCommandBuffer + + /** + * @see MAiCpsCommandBuffer + */ + void AddCommand( const TDesC& aPluginId, const TDesC& aType, + CLiwDefaultMap* aFilter, const TDesC8& aAction); + +private: + // new functions + /** + * Gets the CPS interface + * + * @since S60 5.2 + */ + void GetCPSInterfaceL(); + + /** + * 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 iPlugins; + }; + +#endif // C_CAICPSCOMMANDBUFFER_H + +// End of file + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/loc/aifw.loc --- a/idlefw/loc/aifw.loc Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/loc/aifw.loc Wed Mar 31 22:04:35 2010 +0300 @@ -39,3 +39,9 @@ // r: 3.2 // #define qtn_idle_theme_error_notloaded "Error in theme." + +// d: Wait/progress note text that is shown when backup or restore process is ongoing. +// l: popup_note_wait_window +// w: +// r: TB9.2 +#define qtn_hs_backup_use_prevented "Home screen is not in use during backup or restore operation. Wait to finish." diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/devicestatus/group/aidevstaplg.mmp --- a/idlefw/plugins/devicestatus/group/aidevstaplg.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/devicestatus/group/aidevstaplg.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -84,6 +84,7 @@ LIBRARY aiutils.lib LIBRARY flogger.lib LIBRARY bafl.lib +LIBRARY profileengine.lib // End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/devicestatus/inc/aioperatornamepublisher.h --- a/idlefw/plugins/devicestatus/inc/aioperatornamepublisher.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/devicestatus/inc/aioperatornamepublisher.h Wed Mar 31 22:04:35 2010 +0300 @@ -22,12 +22,15 @@ // System includes #include #include +#include // 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/devicestatus/src/aioperatornamepublisher.cpp --- a/idlefw/plugins/devicestatus/src/aioperatornamepublisher.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/devicestatus/src/aioperatornamepublisher.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -20,6 +20,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include "aioperatornamepublisher.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 ); + } + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/commoninc/mcspluginwatcher.h --- a/idlefw/plugins/mcsplugin/commoninc/mcspluginwatcher.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/commoninc/mcspluginwatcher.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/commonsrc/mcspluginwatcher.cpp --- a/idlefw/plugins/mcsplugin/commonsrc/mcspluginwatcher.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/commonsrc/mcspluginwatcher.cpp Wed Mar 31 22:04:35 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(); } diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/group/mcsplugin.mmp --- a/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -78,7 +78,7 @@ LIBRARY eikdlg.lib LIBRARY commonengine.lib LIBRARY favouritesengine.lib - +LIBRARY viewcli.lib LIBRARY gfxtrans.lib // End of File diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/group/mcspluginsettings.mmp --- a/idlefw/plugins/mcsplugin/group/mcspluginsettings.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/group/mcspluginsettings.mmp Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/handler/src/mcspluginhandler.cpp --- a/idlefw/plugins/mcsplugin/handler/src/mcspluginhandler.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/handler/src/mcspluginhandler.cpp Wed Mar 31 22:04:35 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 ) { diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugin.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h Wed Mar 31 22:04:35 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 #include #include -#include // 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& 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& aProperties, CMCSData& aData ); + private: // data // Menu items, which are defined in settings // Own - RArray iData; + RPointerArray 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h Wed Mar 31 22:04:35 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 #include +#include #include -#include #include // 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 - diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Wed Mar 31 22:04:35 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 +#include #include -#include #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() ); - } + } // ---------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp Wed Mar 31 22:04:35 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 #include #include -#include -#include -#include // For KMsvRootIndexEntryIdValue - -#include -#include #include "mcsplugindata.h" #include "mcspluginengine.h" @@ -36,24 +30,16 @@ _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 @@ -68,26 +54,101 @@ // ======== 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 +178,6 @@ // void CMCSPluginData::ConstructL() { - iMsvSession = CMsvSession::OpenAsObserverL( *this ); iPluginSettings = CHomescreenSettings::Instance(); if( iPluginSettings == NULL ) { @@ -125,8 +185,6 @@ } iPluginSettings->AddObserverL( this ); - iSaveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation ); - iMenu.OpenL( KMyMenuData ); UpdateDataL(); @@ -142,12 +200,8 @@ { iPluginSettings->RemoveObserver( this ); } - - iData.Close(); + iData.ResetAndDestroy(); iMenu.Close(); - - delete iSaveWatcher; - delete iMsvSession; } // --------------------------------------------------------------------------- @@ -168,15 +222,13 @@ CItemMap* itemMap = settings[ i ]; RPointerArray& 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 +237,44 @@ // 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 + CleanupStack::PopAndDestroy(); // settingsCleanupItem } +// --------------------------------------------------------------------------- +// 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 +290,127 @@ // Gets the menu item from engine using the setting properties as filter // --------------------------------------------------------------------------- // -TMenuItem CMCSPluginData::CreateMenuItemL( RPointerArray& aProperties ) +CMCSData* CMCSPluginData::GetMenuDataL( RPointerArray& 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& aProperties, + CMCSData& aData) { CMenuFilter* filter = CMenuFilter::NewLC(); @@ -226,25 +418,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 +437,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 +448,65 @@ 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]; + return *iData[aIndex]; } // --------------------------------------------------------------------------- -// Replaces menuitem in data instance +// Save the undefined item. // --------------------------------------------------------------------------- // -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 ) +void CMCSPluginData::SaveUndefinedItemL( const TInt& aIndex ) { RPointerArray settingItems; CleanupClosePushL( settingItems ); iPluginSettings->GetSettingsL( iInstanceUid, settingItems ); if ( aIndex >= 0 && aIndex < settingItems.Count() ) { - TBool exists( EFalse ); - CItemMap* itemMap = settingItems[aIndex]; + CItemMap* itemMap = settingItems[ aIndex ]; RPointerArray properties; properties = itemMap->Properties(); - for ( TInt i= 0; i < properties.Count(); i++ ) + for ( TInt i = 0; i < properties.Count(); i++ ) { - if ( properties[i]->Name() == KProperNameType ) + if ( properties[ i ]->Name() == KProperNameType ) { - TPtrC type = aMenuItem.Type(); - if ( type == KMenuTypeUrl ) - { - properties[i]->SetValueL( KProperValueBookmark ); - } - else - { - properties[i]->SetValueL( KProperValueAppl ); - } + properties[ i ]->SetValueL( KProperValueAppl ); } - else if ( properties[i]->Name() == KProperNameUid ) + 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 ); - } + properties[ i ]->SetValueL( KMenuAttrUndefUid ); } - else if ( properties[i]->Name() == KProperNameView ) + 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 ); - } + properties[ i ]->SetValueL( KNullDesC8 ); } - else if ( properties[i]->Name() == KProperNameParam ) + 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 ); - } + properties[ i ]->SetValueL( KNullDesC8 ); + } + else if ( properties[ i ]->Name() == KProperNameLocked ) + { + properties[i]->SetValueL( KNullDesC8 ); } } } - // ETrue tells that changes are stored also to plugin reference + // ETrue tells that modified settings 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" ); + CleanupStack::Pop( &settingItems ); + settingItems.ResetAndDestroy(); - CMenuItem* item( NULL ); - CMenuFilter* filter = CMenuFilter::NewL(); - CleanupStack::PushL( filter ); - filter->SetType( KMenuTypeFolder ); - filter->HaveAttributeL( KMenuAttrLongName, KMCSFolder ); - - const TInt rootId = iMenu.RootFolderL(); - RArray 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; } -// --------------------------------------------------------------------------- -// 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. -// --------------------------------------------------------------------------- -// -void CMCSPluginData::CreateRuntimeMenuItemsL() - { - - // 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 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& properties - = itemMap->Properties(); - - TPtrC8 uid8, type, param8; - - for( TInt j = 0; j < properties.Count(); j++ ) - { - - if( properties[j]->Name() == KProperNameType ) - { - type.Set( properties[j]->Value() ); - } - else if ( properties[j]->Name() == KProperNameUid ) - { - uid8.Set( properties[j]->Value() ); - } - else if ( properties[j]->Name() == KProperNameParam ) - { - param8.Set( properties[j]->Value() ); - } - } - - 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 ); - } - -// --------------------------------------------------------------------------- -// From class MMsvSessionObserver. -// Handles an event from the message server. -// --------------------------------------------------------------------------- -// -void CMCSPluginData::HandleSessionEventL( - TMsvSessionEvent /*aEvent*/, - TAny* /*aArg1*/, - TAny* /*aArg2*/, - TAny* /*aArg3*/ ) - { - - } +// End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Wed Mar 31 22:04:35 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 -#include #include -#include #include #include #include -#include -#include #include #include #include -#include -#include #include -#include #include #include #include #include +#include +#include // For CVwsSessionWrapper +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include // User includes -#include #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; } // --------------------------------------------------------------------------- @@ -283,14 +391,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 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,16 @@ for ( TInt i = 0; i < count; i++ ) { - TMCSData& data( iPluginData->DataItemL( i ) ); + CMCSData& data( iPluginData->DataItemL( i ) ); data.SetDirty( ETrue ); } - // 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 +723,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( aArg1 ); + TInt count( sel->Count()); + for( TInt i = 0; i < count; i++ ) + { + iPluginData->RemoveDataL( sel->At( i ) ); + } } break; default: @@ -667,9 +762,7 @@ TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN}; CGSLauncher* launcher = CGSLauncher::NewLC(); - launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid ); - CleanupStack::PopAndDestroy( launcher ); } @@ -682,12 +775,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 +788,6 @@ } TPtrC temp( skin.Mid( sf + KSkin().Length() ) ); - TLex input( temp ); input.SkipSpace(); @@ -705,15 +795,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 +807,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 +827,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 - diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/inc/mcspluginsettings.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettings.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettings.h Wed Mar 31 22:04:35 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 /** diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsapplist.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsapplist.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsapplist.h Wed Mar 31 22:04:35 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 #include // For MDesCArray -#include // For RApaLsSession #include // For MMsvSessionObserver -#include // For MApaAppListServObserver #include // For MenuContentService #include // 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsbkmlist.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsbkmlist.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsbkmlist.h Wed Mar 31 22:04:35 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 #include // For MDesCArray -#include // For MFavouritesDbObserver #include // For RFavouritesDb -#include // For CFavouritesItemList #include // For MenuContentService +#include -class CActiveFavouritesDbNotifier; -class CAiScutSettingsItem; -class CMCSPluginSettingsModel; -class CMCSPluginWatcher; struct TSettingItem; /** * @ingroup group_mcsplugin @@ -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& 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 iListItems; - // Runtime created CMenuItems must be stored, because those are refered + /** + * Runtime created CMenuItems must be stored, + * because those are refered later, own. + */ RPointerArray 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingscontainer.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingscontainer.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingscontainer.h Wed Mar 31 22:04:35 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 /** diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h Wed Mar 31 22:04:35 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 #include // For MDesCArray -#include #include #include -// 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 }; /** @@ -165,14 +164,12 @@ * * @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& 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 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; /** diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp Wed Mar 31 22:04:35 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 -#include #include #include -#include #include #include -#include #include #include -#include // For RProperty -#include // For KPSUidActiveIdle2 -#include #include #include @@ -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,12 @@ } cba->DrawDeferred(); } - iModel->UpdateSettingModelL( aCustomMessage); - CGSBaseView::DoActivateL(aPrevViewId, aCustomMessageId, aCustomMessage); - - iModel->UpdateSettingsContainerL( aCustomMessage ); -} + iModel->UpdateAppListL(); + iModel->UpdateBkmListL(); + iModel->SetPluginIdL( aCustomMessage ); + iModel->UpdateSettingsL(); + CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); + } // ---------------------------------------------------------------------------- // From CAknView @@ -208,11 +203,9 @@ // ---------------------------------------------------------------------------- // void CMCSPluginSettings::DoDeactivate() -{ + { CGSBaseView::DoDeactivate(); - - iModel->SetContainer(Container()); -} + } // ---------------------------------------------------------------------------- // From MEikMenuObserver @@ -236,7 +229,7 @@ } // --------------------------------------------------------------------------- -// From CGSPluginInterface. 256 +// From CGSPluginInterface // --------------------------------------------------------------------------- // void CMCSPluginSettings::GetCaptionL(TDes& aCaption) const @@ -295,13 +288,4 @@ Container()->HandleChangeCommandL(); } -// --------------------------------------------------------------------------- -// Returns if container exists or not -// --------------------------------------------------------------------------- -// -TBool CMCSPluginSettings::Activated() const - { - return iContainer ? ETrue : EFalse; - } - // End of File. diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsapplist.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsapplist.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsapplist.cpp Wed Mar 31 22:04:35 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 -#include // For KMsvRootIndexEntryIdValue -#include -#include #include -#include #include #include #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 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; } // --------------------------------------------------------------------------- @@ -296,82 +268,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 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 +312,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 itemArray; @@ -460,8 +368,6 @@ // void CMCSPluginSettingsAppList::AddMailboxesL() { - - iListItems.ResetAndDestroy(); CMsvEntry* rootEntry = GetRootEntryL(); CleanupStack::PushL(rootEntry); TBuf<255> mailboxId; @@ -494,175 +400,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 sortMethod( CMCSPluginSettingsAppList::CompareNameL ); - CMenuItem* newItem = CMenuItem::CreateL( iMenu, - KMenuTypeShortcut, - GetMCSPluginFolderIdL(), - 0 ); - CleanupStack::PushL( newItem ); + TLinearOrder 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 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 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. diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsbkmlist.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsbkmlist.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsbkmlist.cpp Wed Mar 31 22:04:35 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 -#include // For CActiveFavouritesDbNotifier +#include #include #include #include -#include -#include #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& 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 ) @@ -218,17 +197,8 @@ 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 ) + // if exists, add it + if ( exists ) { AddBookmarkL( uid, name, url, EMCSBookmark ); } @@ -251,11 +221,8 @@ 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 { @@ -265,52 +232,6 @@ } // --------------------------------------------------------------------------- -// 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 ); - } - } - } - -// --------------------------------------------------------------------------- // Tries to find menuitem with given UID, Name and Url in MCS, // If it does not exist, it is created and saved there. // If it exists already, ref_count attribute is incremented. @@ -320,46 +241,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; } // --------------------------------------------------------------------------- @@ -416,15 +306,6 @@ } // --------------------------------------------------------------------------- -// Updates the bookmark list. -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsBkmList::UpdateBkmListL() - { - GetBookmarkListL(); - } - -// --------------------------------------------------------------------------- //Nested class to store individual bookmark list items // --------------------------------------------------------------------------- // @@ -486,70 +367,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 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. diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp Wed Mar 31 22:04:35 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 -#include #include -#include -#include -#include +#include +#include #include -#include -#include #include - #include #include - -// For CActiveFavouritesDbNotifier -#include +#include #include #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,11 +295,8 @@ // fall-through intended here case EMsvEntriesChanged: { - if ( IsChangeDialogShowing() ) - { - CloseChangeDialog(); - } iModel->UpdateAppListL(); + iModel->UpdateSettingsL(); } break; default: @@ -335,22 +313,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 +341,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 +372,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 +420,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 +444,7 @@ // fall-through intended here case RDbNotifier::ERollback : { - if ( IsChangeDialogShowing() ) - { - CloseChangeDialog(); - } + CloseChangeDialog(); iModel->UpdateBkmListL(); } break; @@ -494,18 +460,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 ); } diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp Wed Mar 31 22:04:35 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 #include #include - #include #include #include #include - +#include -#include "mcspluginsettings.h" #include "mcspluginsettingsmodel.h" +#include "mcspluginsettingsapplist.h" +#include "mcspluginsettingsbkmlist.h" #include "mcspluginsettingscontainer.h" -#include "debug.h" - -#include - /** * Line format for the settings list box */ @@ -51,6 +47,8 @@ _LIT8( KProperValueSuite, "suite" ); _LIT8( KProperValueBookmark, "bookmark" ); _LIT8( KProperValueAppl, "application" ); +_LIT8( KProperValueMailbox, "mailbox" ); +_LIT( KMenuTypeMailbox, "menu:mailbox" ); using namespace HSPluginSettingsIf; @@ -147,7 +145,7 @@ // --------------------------------------------------------------------------- // void CMCSPluginSettingsModel::ConstructL() -{ + { CHomescreenSettings::InitializeL( KAppUid ); iPluginSettings = CHomescreenSettings::Instance(); @@ -155,31 +153,24 @@ { 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() ) + if( !iPluginId ) { return; } - if( iPluginId ) + if (iContainer) { - delete iPluginId; - iPluginId = NULL; + iContainer->CloseChangeDialog(); } - iPluginId = aPluginId.AllocL(); - + iSettings.Reset(); RPointerArray settingItems; CleanupClosePushL( settingItems ); @@ -197,38 +188,11 @@ } CleanupStack::Pop( &settingItems ); settingItems.ResetAndDestroy(); - } - -// --------------------------------------------------------------------------- -// Gets the latest settings from HSPS and updates -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::UpdateSettingModelL( const TDesC8& aPluginId ) - { - if( iPluginId ) + + if (iContainer) { - delete iPluginId; - iPluginId = NULL; + iContainer->ResetCurrentListL(0); } - iPluginId = aPluginId.AllocL(); - - iSettings.Reset(); - RPointerArray settingItems; - CleanupClosePushL( settingItems ); - - iPluginSettings->GetSettingsL( *iPluginId, settingItems ); - - TInt count = settingItems.Count(); - for ( TInt i = 0; i < count; i++ ) - { - CItemMap* itemMap = settingItems[i]; - RPointerArray properties; - properties = itemMap->Properties(); - TSettingItem item = ItemL( properties ); - iSettings.AppendL( item ); - } - CleanupStack::Pop( &settingItems ); - settingItems.ResetAndDestroy(); } // --------------------------------------------------------------------------- @@ -241,7 +205,7 @@ TSettingItem setting = { KErrNotFound, EApplication , EFalse }; TSettingType type = SettingTypeL( aProperties ); - if ( type == EApplication ) + if ( type == EApplication || type == EMailbox ) { setting = iAppList->FindItemL( aProperties ); } @@ -308,7 +272,6 @@ return EFalse; } - // --------------------------------------------------------------------------- // Saves menuitem to HSPS to the given shortcut index // --------------------------------------------------------------------------- @@ -347,6 +310,10 @@ { properties[ i ]->SetValueL( KProperValueSuite ); } + else if( type == KMenuTypeMailbox ) + { + properties[ i ]->SetValueL( KProperValueMailbox ); + } else { properties[ i ]->SetValueL( KProperValueAppl ); @@ -448,24 +415,13 @@ // 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. @@ -491,11 +447,11 @@ 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(); + const TDesC& caption = iAppList->UndefinedText(); TPtrC line; TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) ) return line; @@ -557,35 +513,19 @@ { if (aSettingIndex >= 0 && aSettingIndex < iSettings.Count()) { - TSettingItem oldItem = iSettings[ aSettingIndex ]; iSettings[ aSettingIndex ].id = aId; iSettings[ aSettingIndex ].type = aType; if ( aType == EApplication ) { - CMenuItem& item = iAppList->ItemL( aId ); - SaveSettingsL( aSettingIndex, item ); + CMenuItem* item = iAppList->ItemL( aId ); + SaveSettingsL( aSettingIndex, *item ); } else { CMenuItem& item = iBkmList->ItemL( aId ); SaveSettingsL( aSettingIndex, item ); } - - // Old setting type is bookmark. Remove bookmark item from MCS - // if it was created in runtime. - if ( oldItem.type == EBookmark ) - { - iBkmList->RemoveMenuItemL( oldItem.id ); - } - - // 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; @@ -623,9 +563,13 @@ // --------------------------------------------------------------------------- // void CMCSPluginSettingsModel::UpdateAppListL() -{ + { + if( !iAppList ) + { + iAppList = CMCSPluginSettingsAppList::NewL(); + } iAppList->StartL(); -} + } // --------------------------------------------------------------------------- // Updates bookmark list diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/profileplugin/src/caiprofileengine.cpp --- a/idlefw/plugins/profileplugin/src/caiprofileengine.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/profileplugin/src/caiprofileengine.cpp Wed Mar 31 22:04:35 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, } // ---------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/inc/sapidata.h --- a/idlefw/plugins/sapidataplugin/inc/sapidata.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/inc/sapidata.h Wed Mar 31 22:04:35 2010 +0300 @@ -33,6 +33,7 @@ class CSapiDataObserver; class CSapiDataPlugin; class MAiContentObserver; +class MAiCpsCommandBuffer; /** * @ingroup group_sapidataplugin @@ -150,7 +151,15 @@ * @param aStatus new status of the publisher * @return void */ - void ChangePublisherStatusL(const TDesC& aStatus); + void ChangePublisherStatusL(const TDesC8& aStatus); + + /** + * Change the publisher status with list of actions + * + * @param aActionsList new list of status for the publisher + * @return void + */ + void ChangePublisherStatusL(CLiwDefaultList* aActionsList); /** * Triggers active event with KNoNotification option. @@ -183,7 +192,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,9 +358,18 @@ */ void SetUpdateNeeded(TBool aStatus); + /** + * Sets property value. + * + * @since S60 5.2 + * @param aAny - contains pointer to command buffer. + */ + void SetCommandBuffer(TAny* aAny); + private: // data - + /** CPS Command Buffer Interface, Not Owned */ + MAiCpsCommandBuffer* iCpsExecute; /** Subscriber interface, owned */ MLiwInterface* iInterface; /** Data Observer to CPS content registry, owned */ @@ -373,7 +391,7 @@ /** 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 */ @@ -387,3 +405,4 @@ #endif // SAPIDATA_H // End of file + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/inc/sapidataplugin.h --- a/idlefw/plugins/sapidataplugin/inc/sapidataplugin.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/inc/sapidataplugin.h Wed Mar 31 22:04:35 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 + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/inc/sapidatapluginconst.h --- a/idlefw/plugins/sapidataplugin/inc/sapidatapluginconst.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/inc/sapidatapluginconst.h Wed Mar 31 22:04:35 2010 +0300 @@ -48,6 +48,7 @@ _LIT( KPubData, "publisher" ); _LIT( KCpData_PubData, "cp_data:publisher"); +_LIT8( KPluginId, "plugin_id"); _LIT8( KFilter, "filter" ); _LIT8( KDataMap, "data_map"); _LIT8( KActionTrigger, "action_trigger" ); @@ -78,19 +79,20 @@ _LIT( KUpdate, "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"); +_LIT8( KInActive, "inactive"); + // reserved extension for retrieving mask handle _LIT8( KMask, "_mask"); diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/src/sapidata.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidata.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/src/sapidata.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -22,6 +22,7 @@ #include // User includes +#include #include "sapidata.h" #include "sapidatapluginconst.h" #include "sapidataobserver.h" @@ -103,9 +104,6 @@ void CSapiData::ConstructL(CSapiDataPlugin* aPlugin) { iPlugin = aPlugin; - iCommandName = NULL; - iContentId = NULL; - iContentType = NULL; iUpdateNeeded = EFalse; } @@ -145,6 +143,7 @@ delete iServiceHandler; iServiceHandler = NULL; } + iCpsExecute = NULL; iMenuItems.ResetAndDestroy(); iMenuTriggers.ResetAndDestroy(); iItemList.ResetAndDestroy(); @@ -266,7 +265,7 @@ // SetStartupReasonL // --------------------------------------------------------------------------- // -void CSapiData::SetStartupReasonL(const TDesC& aStartupReason) +void CSapiData::SetStartupReasonL(const TDesC8& aStartupReason) { delete iStartupReason; iStartupReason = NULL; @@ -570,27 +569,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( *iCommandName, *inParamList, *aOutParamList); + type.Reset(); + item.Reset(); + inParamList->Reset(); } // --------------------------------------------------------------------------- @@ -599,6 +595,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(); @@ -721,45 +721,59 @@ } // --------------------------------------------------------------------------- -// 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 pluginId( KPluginId, TLiwVariant( iContentId ) ); + inParamList->AppendL( pluginId ); 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 +781,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 +812,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 +929,14 @@ { iUpdateNeeded = aStatus; } + +// --------------------------------------------------------------------------- +// SetCommandBuffer +// --------------------------------------------------------------------------- +// +void CSapiData::SetCommandBuffer(TAny* aAny) + { + iCpsExecute = reinterpret_cast ( aAny ); + } + +// End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/src/sapidataobserver.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidataobserver.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/src/sapidataobserver.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include "sapidata.h" #include "sapidataobserver.h" #include "sapidatapluginconst.h" diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -34,6 +34,7 @@ #include #include #include +#include #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( this ); @@ -398,6 +395,8 @@ iDataArray.ResetAndDestroy(); iIconArray.Reset(); } + + __PRINTS("*** CSapiDataPlugin::RefreshL - done ***"); } // --------------------------------------------------------------------------- @@ -455,6 +454,11 @@ { TRAP_IGNORE( iData->ChangePublisherStatusL( KPluginShutdown )); } + + if ( iData ) + { + TRAP_IGNORE( iData->ChangePublisherStatusL( KDeActive )); + } } // ---------------------------------------------------------------------------- @@ -633,6 +637,18 @@ } // ---------------------------------------------------------------------------- +// CSapiDataPlugin::SetProperty +// +// ---------------------------------------------------------------------------- +// +void CSapiDataPlugin::SetProperty( TProperty aProperty, TAny* aAny ) + { + if (aProperty == ECpsCmdBuffer ) + { + iData->SetCommandBuffer( aAny ); + } + } +// ---------------------------------------------------------------------------- // CSapiDataPlugin::GetProperty // // ---------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/wrtdataplugin/src/wrtdataplugin.cpp --- a/idlefw/plugins/wrtdataplugin/src/wrtdataplugin.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/wrtdataplugin/src/wrtdataplugin.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -34,6 +34,7 @@ #include #include #include +#include #include "wrtdatapluginconst.h" #include "wrtdatapluginuids.hrh" @@ -443,11 +444,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( this ); @@ -476,6 +482,8 @@ // Release memory of the published icons iIconArray.Reset(); } + + __PRINTS("*** CWrtDataPlugin::RefreshL - done ***"); } // --------------------------------------------------------------------------- diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/wsplugin/group/aiwsplugin.mmp --- a/idlefw/plugins/wsplugin/group/aiwsplugin.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/wsplugin/group/aiwsplugin.mmp Wed Mar 31 22:04:35 2010 +0300 @@ -57,4 +57,6 @@ LIBRARY aiutils.lib +LIBRARY serviceprovidersettings.lib + // End of File diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/wsplugin/inc/numerickeyhandler.h --- a/idlefw/plugins/wsplugin/inc/numerickeyhandler.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/wsplugin/inc/numerickeyhandler.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/plugins/wsplugin/src/numerickeyhandler.cpp --- a/idlefw/plugins/wsplugin/src/numerickeyhandler.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/plugins/wsplugin/src/numerickeyhandler.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -24,6 +24,10 @@ #include #include +#include +#include +#include + #include #include #include @@ -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*/) diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/aicpscommandbuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlefw/src/framework/aicpscommandbuffer.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -0,0 +1,257 @@ +/* +* 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 + +// User includes +#include +#include +#include +#include + +#include "caicpscommandbuffer.h" +#include "aicpsexecuteparam.h" + +// Constants +_LIT8( KCPSConfigurationIf, "IContentPublishing" ); +_LIT8( KCPS, "Service.ContentPublishing" ); +_LIT8( KExecuteAction, "ExecuteAction" ); + +// ======== 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(); + } + + if ( iServiceHandler && iCpsService ) + { + // Detach services from the handler + RCriteriaArray interestList; + + TRAP_IGNORE( interestList.AppendL( iCpsService ); + iServiceHandler->DetachL( interestList ); ); + + interestList.Reset(); + } + + delete iCpsService; + delete iServiceHandler; + + } + +// --------------------------------------------------------------------------- +// CAiCpsCommandBuffer::GetCPSInterfaceL +// +// --------------------------------------------------------------------------- +// +void CAiCpsCommandBuffer::GetCPSInterfaceL() + { + iServiceHandler = CLiwServiceHandler::NewL(); + + RCriteriaArray interestList; + + // Attach to CPS: + iCpsService = CLiwCriteriaItem::NewL( 1, KCPSConfigurationIf, KCPS ); + iCpsService->SetServiceClass( TUid::Uid( KLiwClassBase ) ); + + interestList.AppendL( iCpsService ); + iServiceHandler->AttachL( interestList ); + interestList.Reset(); + + CLiwGenericParamList& inParamList( iServiceHandler->InParamListL() ); + CLiwGenericParamList& outParamList( iServiceHandler->OutParamListL() ); + + iServiceHandler->ExecuteServiceCmdL( + *iCpsService, + 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 ); + } + } + +// --------------------------------------------------------------------------- +// 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::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) + { + TInt pluginCount = iPlugins.Count(); + for (TInt i=0; i < pluginCount; i++ ) + { + CLiwGenericParamList* inParamList = iPlugins[i]->InParamListLC(); + CLiwGenericParamList* outParamList = CLiwGenericParamList::NewLC(); + __PRINTS( "CAiCpsCommandBuffer::DoFlush : Execute" ); + iCpsInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList); + + CleanupStack::PopAndDestroy( outParamList ); + CleanupStack::PopAndDestroy( inParamList ); + } + } + else + { + User::Leave( KErrNotSupported ); + } + iPlugins.ResetAndDestroy(); + } + +// End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/aicpsexecuteparam.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlefw/src/framework/aicpsexecuteparam.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -0,0 +1,203 @@ +/* +* 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 +#include +#include +#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::InParamListLC +// +// --------------------------------------------------------------------------- +// +CLiwGenericParamList* CAiCpsExecuteParam::InParamListLC() + { + CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC(); + + TLiwGenericParam pluginId( KPluginId, TLiwVariant( iPluginId ) ); + paramList->AppendL( pluginId ); + TLiwGenericParam type( KType, TLiwVariant( iRegistryType ) ); + paramList->AppendL( type ); + + 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) ); + + TLiwGenericParam item( KFilter, TLiwVariant( filter )); + paramList->AppendL( item ); + CleanupStack::PopAndDestroy( actionsToLaunch ); + CleanupStack::PopAndDestroy( filter ); + return paramList; + } + +// --------------------------------------------------------------------------- +// CAiCpsExecuteParam::SetFilterL +// +// --------------------------------------------------------------------------- +// +void CAiCpsExecuteParam::SetFilterL(CLiwDefaultMap* aMap) + { + delete iPublisher; + delete iContentType; + delete iContentId; + iPublisher = NULL; + iContentType = NULL; + iContentId = NULL; + + TLiwVariant variant; + if ( aMap->FindL(KPublisherId, variant )) + { + iPublisher = variant.AsDes().AllocL(); + } + if ( aMap->FindL(KContentType, variant )) + { + iContentType= variant.AsDes().AllocL(); + } + if ( aMap->FindL(KContentId, variant )) + { + iContentId= variant.AsDes().AllocL(); + } + } + +// --------------------------------------------------------------------------- +// 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/aipluginfactory.cpp --- a/idlefw/src/framework/aipluginfactory.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/framework/aipluginfactory.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -233,7 +233,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 +279,8 @@ CleanupStack::PushL( plugin ); + plugin->SetProperty( CHsContentPublisher::ECpsCmdBuffer, iCommandBuffer ); + __TIME( "FW: Subscribe content observers", SubscribeContentObserversL( *plugin, aPublisherInfo ) ); @@ -390,58 +417,13 @@ } // ---------------------------------------------------------------------------- -// CAiPluginFactory::ResolvePluginsToUpgradeL() +// CAiPluginFactory::SetCommandBuffer() // // ---------------------------------------------------------------------------- // -void CAiPluginFactory::ResolvePluginsToUpgradeL( - RArray< THsPublisherInfo >& aArray ) +void CAiPluginFactory::SetCommandBuffer( MAiCpsCommandBuffer* 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/aistatemanager.cpp --- a/idlefw/src/framework/aistatemanager.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/framework/aistatemanager.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -20,15 +20,21 @@ // User includes #include #include +#include +#include +#include +#include +#include "caicpscommandbuffer.h" #include "aipluginfactory.h" #include "aistatemanager.h" -#include "debug.h" +#include -// Constants -_LIT( KOnlineOffline, "online_offline" ); +_LIT( KResourceDrive, "Z:" ); +_LIT( KResourceFile, "homescreen.rsc" ); +_LIT( KResourcePath, "\\resource\\apps\\" ); // ======== LOCAL FUNCTIONS ======== // ---------------------------------------------------------------------------- @@ -114,6 +120,12 @@ // CAiStateManager::~CAiStateManager() { + if( iWaitDialog ) + { + delete iWaitDialog; + } + delete iCommandBuffer; + iReloadPlugins.Close(); } // ---------------------------------------------------------------------------- @@ -133,6 +145,9 @@ // void CAiStateManager::ConstructL() { + iCommandBuffer = CAiCpsCommandBuffer::NewL(); + + iFactory.SetCommandBuffer( iCommandBuffer ); } // ---------------------------------------------------------------------------- @@ -246,9 +261,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 +304,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 +389,8 @@ plugin->Suspend( CHsContentPublisher::EBackground ) ); } } + + FlushCommandBuffer(); } else { @@ -439,6 +425,8 @@ } } + FlushCommandBuffer(); + __TIME_ENDMARK( "CAiStateManager::ProcessGeneralThemeChange, done", time ); } @@ -454,6 +442,15 @@ iHalt = aStart; + if ( aStart ) + { + TRAP_IGNORE( StartWaitDialogL() ); + } + else + { + TRAP_IGNORE( StopWaitDialogL() ); + } + RPointerArray< CHsContentPublisher >& plugins( iFactory.Publishers() ); for( TInt i = 0; i < plugins.Count(); i++ ) @@ -473,6 +470,8 @@ } } } + + FlushCommandBuffer(); __TIME_ENDMARK( "CAiStateManager::ProcessBackupRestore, done", time ); } @@ -501,6 +500,8 @@ plugin->SetOffline(); } } + + FlushCommandBuffer(); } // ---------------------------------------------------------------------------- @@ -544,6 +545,8 @@ aPlugin.SetOffline() ); } + FlushCommandBuffer(); + __PRINTS( "CAiStateManager::StartPlugin - done" ); } @@ -569,6 +572,8 @@ aPlugin.Stop( aReason ); + FlushCommandBuffer(); + __PRINTS( "CAiStateManager::StopPlugin - done" ); } @@ -592,10 +597,111 @@ 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& 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" ); + } + +// ---------------------------------------------------------------------------- +// CAiStateManager::StartWaitDialogL() +// +// ---------------------------------------------------------------------------- +// +void CAiStateManager::StartWaitDialogL() + { + RConeResourceLoader resourceLoader( *CCoeEnv::Static() ); + TFullName fileName( KResourceDrive ); + fileName.Append( KResourcePath ); + fileName.Append( KResourceFile ); + + // Get language of resource file. + BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), fileName ); + + // Open resource file. + resourceLoader.OpenL( fileName ); + + if( iWaitDialog ) + { + delete iWaitDialog; + iWaitDialog = NULL; + } + + // For the wait dialog + iWaitDialog = new (ELeave) CAknWaitDialog( + REINTERPRET_CAST( CEikDialog**, &iWaitDialog ) ); + iWaitDialog->SetCallback( this ); + iWaitDialog->ExecuteLD( R_HOMESCREEN_WAIT_DIALOG ); + resourceLoader.Close(); + } + +// ---------------------------------------------------------------------------- +// CAiStateManager::StopWaitDialogL() +// +// ---------------------------------------------------------------------------- +// +void CAiStateManager::StopWaitDialogL() + { + if( iWaitDialog ) + { + iWaitDialog->ProcessFinishedL(); + } + } + +// ---------------------------------------------------------------------------- +// CAiStateManager::DialogDismissedL() +// +// ---------------------------------------------------------------------------- +// +void CAiStateManager::DialogDismissedL(TInt /*aButtonId*/) + { + // No implementation required. + } + // End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/aistateprovider.cpp --- a/idlefw/src/framework/aistateprovider.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/framework/aistateprovider.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -19,6 +19,9 @@ #include #include #include +#include +#include +#include // KSWIUidsCurrentlyBeingProcessed // User includes #include @@ -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 uidList; + if ( KErrNone == Swi::GetAllUids( uidList ) ) + { + self->iObserver.NotifyReleasePlugins( uidList ); + } + + return KErrNone; + } + // End of file diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/framework/homescreen.rss --- a/idlefw/src/framework/homescreen.rss Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/framework/homescreen.rss Wed Mar 31 22:04:35 2010 +0300 @@ -60,3 +60,24 @@ #endif // __SCALABLE_ICONS }; } + +RESOURCE DIALOG r_homescreen_wait_dialog + { + flags = EAknWaitNoteFlags; + buttons = R_AVKON_SOFTKEYS_EMPTY; + items = + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control= AVKON_NOTE + { + layout = EWaitLayout; + singular_label = qtn_hs_backup_use_prevented; + animation = R_QGN_GRAF_WAIT_BAR_ANIM; + }; + } + }; + } + diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/idleint/aiuiidleintegration.cpp --- a/idlefw/src/idleint/aiuiidleintegration.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/idleint/aiuiidleintegration.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -17,12 +17,14 @@ // System includes +#include #include #include #include #include #include #include +#include // User includes #include @@ -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( 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/idleint/aiuiidleintegrationimpl.h --- a/idlefw/src/idleint/aiuiidleintegrationimpl.h Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/idleint/aiuiidleintegrationimpl.h Wed Mar 31 22:04:35 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 diff -r 502e5d91ad42 -r 15e4dd19031c idlefw/src/utility/caipspropertyobserver.cpp --- a/idlefw/src/utility/caipspropertyobserver.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/idlefw/src/utility/caipspropertyobserver.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -38,7 +38,7 @@ CPSPropertyObserver::CPSPropertyObserver( TCallBack aCallBack, TUid aCategory, TInt aKey ) - : CActive( EPriorityStandard ), + : CActive( EPriorityHigh ), iCallBack( aCallBack ), iCategory( aCategory ), iKey( aKey ) diff -r 502e5d91ad42 -r 15e4dd19031c menucontentsrv/conf/s60mcs.confml Binary file menucontentsrv/conf/s60mcs.confml has changed diff -r 502e5d91ad42 -r 15e4dd19031c menucontentsrv/group/mcsmenusrv.mmp --- a/menucontentsrv/group/mcsmenusrv.mmp Mon Mar 15 12:41:53 2010 +0200 +++ b/menucontentsrv/group/mcsmenusrv.mmp Wed Mar 31 22:04:35 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 #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 diff -r 502e5d91ad42 -r 15e4dd19031c menucontentsrv/srvsrc/menusrvmain.cpp --- a/menucontentsrv/srvsrc/menusrvmain.cpp Mon Mar 15 12:41:53 2010 +0200 +++ b/menucontentsrv/srvsrc/menusrvmain.cpp Wed Mar 31 22:04:35 2010 +0300 @@ -16,7 +16,6 @@ */ // INCLUDE FILES -#include #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(); } diff -r 502e5d91ad42 -r 15e4dd19031c package_definition.xml --- a/package_definition.xml Mon Mar 15 12:41:53 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -