diff -r 000000000000 -r e686773b3f54 logsui/logsserviceextension/inc/clogsuicontrolextension.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsserviceextension/inc/clogsuicontrolextension.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,589 @@ +/* +* Copyright (c) 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: Provides additional functionality to the Logs UI application +* +*/ + + + +#ifndef C_CLOGSUICONTROLEXTENSION_H +#define C_CLOGSUICONTROLEXTENSION_H + + +#include "MLogsUiControlExtension.h" +#include "mlogsextbrandfetcherobserver.h" +#include "mlogsextpresentityidfetcherobserver.h" +#include "mlogsextservicehandlerobserver.h" + +#include "MLogsModel.h" +#include "MLogsEventGetter.h" +#include "MLogsExtObserver.h" +#include "LogsConsts.h" +#include "logsextconsts.h" +#include "MLogsEventGetter.h" + +class CAknIconArray; +class CAknDoubleGraphicStyleListBox; +class CLogsPresenceTableManager; +class CLogsExtBrandFetcher; +class CLogsExtPresentityIdFetcher; +class CLogsEventInfoManager; +class TLogsEventInfo; +class CLogsExtServiceHandler; +class RFile; + +/** + * Logs Ui Extension + * + * Implements the MLogsUiControlExtension interface which is used by the + * Logs application to provide the support for the branding icon / + * presence status icon appearance. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS(CLogsUiControlExtension) : + public CBase, + public MLogsUiControlExtension, + public MLogsExtBrandFetcherObserver, + public MLogsExtPresentityIdFetcherObserver, + public MLogsExtServiceHandlerObserver + { + +public: + + /** + * Two-phased constructor. + * + * @since S60 v3.2 + */ + static CLogsUiControlExtension* NewL(); + + /** + * Two-phased constructor. + * + * @since S60 v3.2 + */ + static CLogsUiControlExtension* NewLC(); + + /** + * Destructor. + * + * @since S60 v3.2 + */ + ~CLogsUiControlExtension(); + +public: + +// from MLogsUiControlExtension + + /** + * From MLogsUiControlExtension + * Method does nothing. + * + * @since S60 v3.2 + * @param aArray array of icons + */ + void AppendIconsL( CAknIconArray* aArray ); + + /** + * From MLogsUiControlExtension + * Method does nothing. + * + * @since S60 v3.2 + * @param aContactId contact id + * @param aIndex icon index + * @return ETrue if found, otherwise EFalse + */ + TBool GetIconIndexL( TContactItemId aContactId, TInt& aIndex ); + + /** + * From MLogsUiControlExtension + * Creates and starts all the icon fetching processes + * + * @since S60 v3.2 + * @param aModel the data model that contains the + * information about the log event entries in the current view. + * @param aListBox fetched icons will be added to the icon array + * of the specified listbox + */ + void HandleAdditionalData( + MLogsModel& aModel, + CAknDoubleGraphicStyleListBox& aListBox ); + + /** + * From MLogsUiControlExtension + * Modifies the given icon string. + * + * @since S60 v3.2 + * @param aDes the icon string to be modified + * @param aServiceId the service id of the log event + * this icon string is modified for + */ + void ModifyIconString( + TDes& aDes, + const MLogsEventGetter& aLogsEventGetter ); + + /** + * From MLogsUiControlExtension + * Sets the observer of the extension + * + * @since S60 v3.2 + * @param aObserver the observer that handles the callback + * of this extension. + */ + void SetObserver(MLogsExtObserver& aObserver); + + +// from MLogsExtBrandFetcherObserver + + /** + * From MLogsExtBrandFetcherObserver + * Callback for the brand fetcher objects. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aBitmapFile file handle to bitmap file + * @param aBitmapId id of the the presence icon's bitmap in the file + * @param aBitmapMaskId id of the the presence icon's mask in the file + */ + void BrandIconFetchDoneL( const TUint32 aServiceId, + RFile& aBitmapFile, + const TInt aBitmapId, + const TInt aBitmapMaskId ); + + +// from MLogsExtPresentityIdFetcherObserver + + /** + * From MLogsExtPresentityIdFetcherObserver + * Callback for presentity id fetcher objects. + * + * @since S60 v3.2 + * @param aServiceId a service id + * @param aPresentityId the presentity id that was retrieved + * by the fetcher + * @param aLogId a unique event id associated with a log event + */ + void PresentityIdFetchDoneL( const TUint32 aServiceId, + const TDesC& aPresentityId, + const TLogId aLogId ); + +// from MLogsExtServiceHandlerObserver + + /** + * From MLogsExtServiceHandlerObserver + * Handles the service handler's callback. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId presentity id + * @param aPresenceStatus a presence status + * @param aShowStatus presentity presense status display flag + */ + void HandlePresentityPresenceStatusL( + const TUint32 aServiceId, + const TDesC& aPresentityId, + const TDesC& aPresenceStatus, + TBool aShowStatus ); + + /** + * From MLogsExtServiceHandlerObserver + * This function is used to notify the observer of a service handler + * if the presence status of a certain presentity should be displayed + * or not. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId presentity id + * @param aShowStatus presentity presense status display flag + */ + void SetDisplayStatusFlag( const TUint32 aServiceId, + const TDesC& aPresentityId, + TBool aShowStatus ); + +private: + + /** + * Constructor. + */ + CLogsUiControlExtension(); + + /** + * Symbian second-phase constructor + */ + void ConstructL(); + + +// from MLogsUiExtensionBase + + /** + * From MLogsUiExtensionBase + * Releases this object and any resources it owns. + * + * @since S60 v3.2 + */ + void DoRelease(); + + +private: + + /** + * Creates and starts all the icon fetching processes + * + * @since S60 v3.2 + * @param aModel the data model that contains the information about + * the log event entries in the current view. + */ + void DoAdditionalDataHandlingL( MLogsModel& aModel ); + + /** + * Notifies the update function of the observer of this extension. + * + * @since S60 v3.2 + */ + void NotifyObserverL(); + + /** + * Checks whether servicehandler with the specified service id already + * exists + * + * @since S60 v3.2 + * @param aServiceId a service id + * @return ETrue, if there is already a service handler for the specified + * service id; EFalse otherwise + */ + TBool ServiceHandlerExists( const TUint32 aServiceId ); + + + /** + * Checks whether brandfetcher with the specified service id already + * exists + * + * @since S60 v3.2 + * @param aServiceId a service id + * @return ETrue, if there is already a fetcher for the specified + * service id; EFalse otherwise + */ + TBool BrandFetcherExists( const TUint32 aServiceId ); + + + /** + * Checks whether a presence fetcher for the specified service id + * and presentity id already exists + * + * @since S60 v3.2 + * @param aServiceId a service id + * @param aPresentityId a presentity id + * @return ETrue, if there is already a fetcher for the specified + * service id and presentity id; EFalse otherwise + */ + TBool PresenceFetcherExists( const TUint32 aServiceId, + const TDesC& aPresentityId ); + + + /** + * Stores the brand icon's index in the listbox's icon array + * to a manager, that keeps track of this information. + * + * @since S60 v3.2 + * @param aServiceId a service id + * @param aIndex the index + * @return KErrNone, if setting the index succeeded or one errorcode + * if setting failed(e.g. KErrNotFound) + */ + TInt SetBrandIndex( const TUint32 aServiceId, + const TInt aIndex ); + + + + /** + * Stores the presence icon's index in the listbox's icon array + * to a manager, that keeps track of this information. + * + * @since S60 v3.2 + * @param aServiceId a service id + * @param aPresenceStatus a presence status + * @param aIndex the index + * @return KErrNone, if setting the index succeeded; system-wide + * errorcode otherwise + */ + TInt SetPresenceIndex( const TUint32 aServiceId, + const TDesC& aPresenceStatus, + const TInt aIndex ); + + + /** + * Creates a proper icon and adds it to the listbox' icon array. + * + * @since S60 v3.2 + * @param aBitmap the bitmap of the fetched icon + * @param aBitmask the bitmask of the fetched icon + * @param aIndex the index of the appended icon in the icon array + * @return The index of the added icon in the icon array + */ + void AddIconL( CFbsBitmap* aBitmap, CFbsBitmap* aBitmask, TInt& aIndex ); + + /** + * Performs the icon string modification. + * + * @since S60 v3.2 + * @param aDes reference of the icon string the descriptor + * @param aDataField a unparsed data field of a log event + */ + void DoIconStringModificationL( + TDes& aDes, + const MLogsEventGetter& aLogsEventGetter ); + + + /** + * Adds the Branding icon index to a local copy of the icon string + * that we want to modify. + * + * @since S60 v3.2 + * @param aTempDes the icon string where we append the branding + * icon + * @param aServiceId service id + * @return True, if appending successful, false otherwise + */ + TBool AddBrandIconIndex( TDes& aTempDes, const TUint32 aServiceId ); + + /** + * Copies that part of the global icon string to the local copy + * which contains the non-icon index related data. + * + * @since S60 v3.2 + * @param aDes the original icon string + * @param aTempDes the icon string where we append the data + * @return True, if appending successful, false otherwise + */ + TBool AddNonIndexData( const TDesC& aDes, TDes& aTempDes ); + + /** + * Appends the trailing delimiters (if they do not already exist) + * and the presence icon index. + * + * @since S60 v3.2 + * @param aTempDes the icon string where we append the data + * @param aServiceId service id + * @param aPresentityId presentity id + * @return True, if appending successful, false otherwise + */ + TBool AddPresenceIconIndex( TDes& aTempDes, + const TUint32 aServiceId, + const TDesC& aPresentityId ); + + /** + * Appends 'aNumber' trailing delimiters to the specified icon string. + * + * @since S60 v3.2 + * @param aTempDes the icon string where we append the data + * @param aNumber the number of trailing delimiters that should + * be appended to aTempDes + * @return KErrNone, if appending was successful, KErrNoMemory otherwise + */ + TInt AppendTrailingDelimiters( TDes& aTempDes, TInt aNumber ); + + /** + * Determines the number of delimiters in the specified string. + * + * @since S60 v3.2 + * @param aTempDes a string + * @return the number of delimiters 'aTempDes' contains + */ + TInt DetermineNumberDelimiters( const TDesC& aTempDes ); + + /** + * Deletes the bitmaps. + * + * @since S60 v3.2 + */ + void DeleteBitmaps(); + + /** + * Creates a certain service handler. + * + * @since S60 v3.2 + * @param aServiceId a service id + */ + void CreateAndBindServiceHandlerL( TUint32 aServiceId ); + + /** + * Creates and starts the brand fetchers. + * + * @since S60 v3.2 + * @param aModel the data model that contains the + * information about the log event entries in the current view. + */ + void CreateAndStartBrandFetchersL( MLogsModel& aModel ); + + /** + * Initiates the presence / presentity id fetcher creation. + * + * @since S60 v3.2 + * @param aModel the data model that contains the + * information about the log event entries in the current view. + */ + void CreateAndStartPresentityIdFetchersL( MLogsModel& aModel ); + + + /** + * Adds a single presentity to a service handler. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId presentity id + */ + void AddPresentityToServiceHandlerL( const TUint32 aServiceId, + const TDesC& aPresentityId ); + + + /** + * Creates and starts one presentity id fetcher. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aCntLink a contact link + * @param aLogId a log id + */ + void DoPresentityIdFetcherCreationL( const TUint32 aServiceId, + const TDesC8& aCntLink, + const TLogId aLogId ); + + /** + * Retrieves a presentity id using the specified log id. + * + * @since S60 v3.2 + * @param aLogId a log id + * @return the retrieved presentity id or NULL if no mapping was found + * for the specified lod id. + */ + const TDesC* LookupPresentityId( const TLogId aLogId ); + + /** + * Adds another mapping to the collection of mappings. + * + * @since S60 v3.2 + * @param aLogId a log id + * @param aPresentityId presentity id + */ + void AddLogIdToPresentityIdMappingL( const TLogId aLogId, + const TDesC& aPresentityId ); + + /** + * Resets the presentity id fetcher array and also deletes the objects + * whose pointers are stored in the array. + * + * @since S60 v3.2 + */ + void ResetPresentityIdFetcherArray(); + + /** + * Resets the presence status of all entries in the status table. + */ + void ResetPresenceStatuses(); + + /** + * Gets the service handler of the specified service. + * + * @since S60 v3.2 + * @param aServiceId a service id + * @param aServiceHandler service handler object pointer. + * @return KErrNone in case data has been retrieved successfully, + * system-wide errorcode otherwise + */ + TInt GetServiceHandler( TUint32 aServiceId, + CLogsExtServiceHandler*& aServiceHandler ); + + /** + * Retrieves the icon bitmaps from the branding server + * + * @since S60 v3.2 + * @param aServiceId service id. + * @param aPresenceStatus the current presence status. + * @param aBitmapFile file handle to bitmap file + * @param aBitmapId id of the presence image bitmap in the file + * @param aBitmapMaskId id of the presence image mask in the file + */ + void FetchBitmapsFromBrandingServerL( + const TUint aServiceId, + const TDesC& aPresenceStatus, + RFile& aBitmapFile, + TInt& aBitmapId, + TInt& aBitmapMaskId ); + +private: // data + + /** + * A reference to a listbox. The fetched icons will be added + * to this listbox. + * Not own. + */ + CAknDoubleGraphicStyleListBox* iListBox; + + /** + * The observer of this extension. + * Not own. + */ + MLogsExtObserver* iLogsExtObserver; + + /** + * Stores the information about the service ids and the brand + * icon indices that correspond to the service ids of each + * log event. + * Own. + */ + CLogsEventInfoManager* iLogEntryInfoManager; + + + /** + * Stores presence related information. Uses + * CLogsPresenceStatusTableInformation and + * CLogsPresenceIndexTableInformation objects in order to achieve that. + * Own. + */ + CLogsPresenceTableManager* iPresenceTableManager; + + /** + * The array that contains the different fetchers + * Own. + */ + RPointerArray iBrandFetcherArray; + + /** + * The array that contains the presence fetchers. + * Own. + */ + RPointerArray iPresentityIdFetcherArray; + + /** + * The array that contains the presence fetchers. + * Own. + */ + RPointerArray iServiceHandlerArray; + + /** + * The icon's bitmap. + * Own. + */ + CFbsBitmap* iBitmap; + + /** + * The icon's bitmap mask. + * Own. + */ + CFbsBitmap* iBitmask; + + }; + +#endif // C_CLOGSUICONTROLEXTENSION_H