--- /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<CLogsExtBrandFetcher> iBrandFetcherArray;
+
+ /**
+ * The array that contains the presence fetchers.
+ * Own.
+ */
+ RPointerArray<CLogsExtPresentityIdFetcher> iPresentityIdFetcherArray;
+
+ /**
+ * The array that contains the presence fetchers.
+ * Own.
+ */
+ RPointerArray<CLogsExtServiceHandler> iServiceHandlerArray;
+
+ /**
+ * The icon's bitmap.
+ * Own.
+ */
+ CFbsBitmap* iBitmap;
+
+ /**
+ * The icon's bitmap mask.
+ * Own.
+ */
+ CFbsBitmap* iBitmask;
+
+ };
+
+#endif // C_CLOGSUICONTROLEXTENSION_H