logsui/logsserviceextension/inc/clogsuicontrolextension.h
changeset 0 e686773b3f54
--- /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