locationdataharvester/mylocationsengine/inc/mylocationsengine.h
branchRCL_3
changeset 17 1fc85118c3ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationdataharvester/mylocationsengine/inc/mylocationsengine.h	Tue Aug 31 15:09:25 2010 +0300
@@ -0,0 +1,412 @@
+/*
+* 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: Mylocation engine header implementation.
+*
+*/
+
+
+#ifndef __MYLOCATIONSENGINE_H__
+#define __MYLOCATIONSENGINE_H__
+
+// INCLUDES
+// calendar related headers
+#include <calsession.h>
+#include <calentryview.h>
+
+// Header for contact DB
+#include <cntdb.h>
+
+//Qt contacts mobility apis
+#include <qtcontacts.h>
+#include <qcontactmanager.h>
+
+// Header for landmarks db
+#include<EPos_CPosLandmarkDatabase.h>
+
+// mylocations database manager
+#include "maptileinterface.h"
+#include "mylocationsdatabasemanager.h"
+#include "lookupmaptiledb.h"
+#include "calendernotification.h"
+#include "mylocationgeotagtimerao.h"
+class GeocodeUpdate;
+class CContactSubscriber;
+class CCalendarSubscriber;
+using namespace QTM_NAMESPACE;
+
+/**  
+ * This class contains the required data  for maptile image  processing.
+ * Each  address added/modified in contact database will be added as queue
+ * using this class for maptile processing.
+ */
+class CMapTileRequest: public CBase
+{
+public:
+    //Consturctor
+    CMapTileRequest():iLandmarkInfo(NULL),iAddressDetails(NULL){};
+    //Destrucotr
+    ~CMapTileRequest(){delete iLandmarkInfo;delete iAddressDetails;};
+public:
+    //Landmark contains address details
+    CPosLandmark* iLandmarkInfo;
+    //single row address.
+    HBufC* iAddressDetails;
+    //entry id
+    TInt32 iUId;
+    //Address type 
+    TInt32 iAddressType;
+    //Image path 
+    TFileName iImagePath;
+    //Event type    
+    TInt iEventType;
+};
+
+/**  
+ * This class stores the information required for  maptile
+ * processing when it is triggered from the application(contact)
+ * viewer.
+ */
+class TAppAddressInfo
+{
+public:    
+  TInt iUid;
+  TInt iAddressType;
+};
+
+// CLASS DECLARATION
+/**  Class used to listen on various database change events from applications like calendar, 
+ * contacts, landmarks
+ * 
+ * This class listens on database change events from applications like contacts, calendar, landmarks
+ * and triggers updating the Mylocations database accordingly. 
+ * This process starts on phone bootup and always runs in the background.
+ */
+class CMyLocationsEngine : public CActive, public MCalChangeCallBack2,
+				 public MContactDbObserver, public MMapTileObserver,public MNotifyChange,
+				 public MyLocationTimerObserver
+			
+{
+    
+public:
+    
+    /** 
+     * Contact address types
+     */
+    enum TContactAddressType
+        {
+        /** Address Type Pref */
+        EAddressPref,
+        /** Address type Work */
+        EAddressWork,
+        /** Address type Home */
+        EAddressHome,
+        };
+
+public:
+
+    /** 
+     * CMyLocationsEngine::NewL()
+     */
+    static CMyLocationsEngine* CMyLocationsEngine::NewL();
+    
+    /**
+     * ~CMyLocationsEngine.
+     * Virtual Destructor.
+     */
+    virtual ~CMyLocationsEngine();
+    
+    /** Starts calender change notification method to get callbacks when entries are added/modified/deleted in calender
+     *
+     */      
+    void StartCalenderChangeNotifierL();
+
+    /** Starts contacts change notification method to get callbacks when entries are added/modified/deleted in contacts
+     *
+     */      
+    void StartContactsChangeNotifierL();
+
+    /** Starts landmarks change notification method to get callbacks when entries are added/modified/deleted in landmarks
+     *
+     */      
+    void StartLandmarksChangeNotifier();
+
+
+    
+    /** Maps the source type change type to Mylocations entry change type
+    * @param[in] aSrcType Source type of the change
+    * @param[in] aChangeType Type of change ( added/modified/deleted ).
+    * @return The mylocations entry change type value.
+     */      
+    TEntryChangeType MapChangeType( TUidSourceType aSrcType, TUint32 aChangeType );    
+ 
+#ifdef MYLOCATIONENGINE_UNIT_TEST
+public:
+#else
+private:
+#endif
+    
+    /**
+     * ConstructL.
+     * 2nd phase constructor.
+     */
+    void ConstructL();
+    
+    /**
+     * CMyLocationsEngine.
+     * C++ default constructor. 
+     */
+    CMyLocationsEngine();
+    
+    /** Creates a landmark object from contact item's location details and checks whether address available.
+     * @param[in] aContactAddress A contact address whose location details needs to be used to create landmark object.
+     * @returns A valid landmark object if location in the contact item is validated, NULL otherwise.
+     */      
+    CPosLandmark* GetContactAddressDetailsLC( QContactAddress& aContactAddress );
+            
+    /**
+     *  A call back function for calendar change notification
+	 *	@param aChangeItems  List of changes since the last notification.	
+	 */      
+    virtual void CalChangeNotification( RArray<TCalChangeEntry>& aChangeItems );
+    
+    /** Tests the contact database observer event type and handles it. The ID of a 
+    * contact affected by the change event, if relevant, can be retrieved via TContactDbObserverEvent::iContactId.
+    * @param aEvent Provides information about the change event. 
+    */
+    virtual void HandleDatabaseEventL( TContactDbObserverEvent aEvent );
+    
+    /** 
+     * Triggers the maptile processing for complete address
+     * @param aEvent  Provides information about the change event.   
+     */      
+	void TriggerMaptileRequestL(  TContactDbObserverEvent& aEvent  );
+			
+    /** 
+    * Process the maptile database event and updates the maptile database
+    * @param aEventType  Provides information about the type of request address.
+    * @param aLookupItem Provides information about single address of contact.  
+    */  
+	void UpdateMaptileDatabaseL(TInt aEventType ,
+	                             TLookupItem& aLookupItem );
+	
+    /**
+     *  Handles active object's request completion event. 
+     */
+    void RunL();
+
+    /** 
+     * Implements cancellation of an outstanding request. 
+     */
+    void DoCancel();
+ 
+    
+    /** 
+     * Requests for map tile image , structure serch.
+     * @param aLandmark  Provides information about the address.
+     * @param aAddressType Provides information about address type .  
+     * @param aUId, uid of the event.
+     */
+    void RequestMapTileImageL( CPosLandmark&  aLandmark, const TUidSourceType aAddressType,
+                               const TInt32 aUId, const TInt aEventType  );
+    
+    /** 
+     * Requests for map tile image , one box serch.
+     * @param aAddressDetails  Provides information about the address.
+     * @param aAddressType Provides information about address type .  
+     * @param aUId, uid of the event.
+     */
+    void RequestMapTileImageL(const TDesC& aAddressDetails,
+            const TUidSourceType aAddressType, const TInt32 aUId,const TInt aEventType);
+ 
+    /** 
+     * Checks whether contact has a valid geocoordinates.
+     * @param aContact  Provides all the required information about the contact.
+     * @param aAddressType Provides information about address type .  
+     * @param aLatitude, Latitude information.
+     * @param aLongitude, Longitude information.
+     * @return If geocoordinate available returns TRUE otherwise FALSE
+     */    
+    TBool IsGeoCoordinateAvailable( QContact& aContact, 
+            QString aAddressType, double& aLatitude , double& aLongitude );
+    
+    /** 
+     * Add to maptile request queue.
+     * @param mapTileRequest, request queue.
+     * @return If successful, retrun KErrNone, or return some systemwide error.
+     */
+    TInt RequestExecute( CMapTileRequest* aMapTileRequest);
+	/**
+    * SetFolderPath.
+    * Sets the maptile storing path.
+    */
+    void SetFolderPathL();
+
+    /**
+    * Refreshes calendar entries in mylocation databases. This is typically called when there is an undefined 
+    * change in calendar db.
+    */
+    void RefreshCalendarEntryListL();    
+
+    /**
+    * Returns True if a calendar entry is available for a given id.
+    */
+    TBool IsCalendarEntryValidL( TUint32 aId );    
+
+    /**
+    * Calender entry added.
+    */
+    void CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry);    
+
+    /**
+    * Calender entry modifyied.
+    */
+    void CalenderEntryModifyL(TCalChangeEntry aCalChangeEntry);
+    /**
+    * Update the mylocations database.
+    */
+    void UpdateDatabaseL( CPosLandmark* aLandmark, const TUint32 aUid, 
+            const TUint32 aSourceType, const TEntryChangeType aChangeType );
+			
+    /** 
+     * Informs the geocode completion
+     */
+    void UpdateGeoCodeToAppDataBase( TReal latitude,TReal longitude );		
+    
+    /** 
+     * Process the pending maptile requests
+     */
+    void ProcessNextMaptileRequest();
+    
+    /**
+     * maptile database manipulation.
+     */
+    void ManipulateMapTileDataBaseL(TLookupItem& aLookupItem);
+    
+    /**
+     * Crop and create multiple maptile images for different applications requirements.
+     */
+    void CreateMultipleMaptiles( const TDesC& aMaptilePath );
+    
+    /**
+     * Crop the maptile image and save the different files.
+     */
+    void CropAndSaveImage( QString filePath, int width, 
+                               int height, QString appType, QString orientationType );
+
+	/**Get the contact name for this perticular id.
+     */
+	void GetContactName( TInt32 iUId , TDes& aName );
+     
+public:  //From MMapTileObserver
+    
+    /**
+     *  Informs the maptile fetching completion  
+     */ 
+    void MapTilefetchingCompleted( TInt aErrCode,const TDesC& aMapTilePath );
+    
+    /**
+     *  Informs the geo codes fetching completion  
+     */
+    void GeoCodefetchingCompleted( TInt aErrCode, const TReal& aLatitude,
+	                                   const TReal& aLongitude, const TDesC& aMapTilePath );
+public://from MNotifychange
+    void NotifyChangeL(TInt &aStatus);
+    void GetChangeNotificationL(TInt &aId, TInt &addressType, TInt &addressCount );
+    void SubscribeFromCalendarL(TInt aId);
+	
+public: //from MyLocationTimerObserver
+    /** 
+     * Notifies the timer expiry when 3AM timer was started to notify. 
+     */
+    void MyLocationThreeAMTimerExpiredL();
+
+    
+#ifdef MYLOCATIONENGINE_UNIT_TEST
+public:
+#else
+private:
+#endif
+
+    // Data member
+    
+    //handle to timer class
+    //calendar session handle
+    CCalSession *iCalSession;
+    
+    // calendar view
+    CCalEntryView *iCalView;   
+
+    // Handle to the contacts database
+    CContactDatabase* iContactsDb;
+    
+    // Receives events reporting changes to a contact database.
+    CContactChangeNotifier *iContactChangeNotifier;
+    
+    // Handle to landmarks db
+    CPosLandmarkDatabase* iLandmarkDb;
+    
+    // landmark change event type.
+    TPosLmEvent iLmEvent;
+   
+    //Handle to maptile interface
+    CMapTileInterface* iMapTileInterface;
+    
+    CMyLocationsDatabaseManager*  iMyLocationsDatabaseManager;
+    
+    //maptiledb 
+    CLookupMapTileDatabase* iMaptileDatabase;
+
+    //Current event type
+    TInt iEventType;
+    
+    //Maptile image request queue
+    RArray<CMapTileRequest*> iMapTileRequestQueue;
+    
+    // 3am Timer
+    CLocationGeoTagTimerAO *iMyLocationThreeAMTimer;
+    
+    //Flag to check maptilegeocoder plugin availability
+    TBool iMaptileGeocoderPluginAvailable;
+	
+	//Maptile image path
+    TFileName imageFilePath;
+    
+    //Object to listen calender db create notification.    
+    CCalenderNotification  *iCalenderNotification;
+    
+    //Contact manager instance for retrieving contact info.
+    QContactManager* iContactManager;
+    
+    //Subscribe from contact
+    CContactSubscriber *iContactSubscriber;
+    
+    //Subscribe from calendar
+    CCalendarSubscriber *iCalendarSubscriber;
+    
+    //Geo-code class instance
+    GeocodeUpdate *iGeocodeUpdate;
+       
+    //Last viewed contact id
+    TInt iLastContactId;
+    
+    //Last viewed calendar id
+    TInt iLastCalendarId;
+    
+    //Address information for viewver maptile processing.
+    RArray<TAppAddressInfo*> iAddressInfo;
+   
+};
+
+#endif // __MYLOCATIONSENGINE_H__
+// End of File