diff -r 63c982fb92f2 -r b73252188534 locationmanager/locationtrail/inc/clocationrecord.h --- a/locationmanager/locationtrail/inc/clocationrecord.h Thu Jul 15 19:07:24 2010 +0300 +++ b/locationmanager/locationtrail/inc/clocationrecord.h Thu Aug 19 10:20:41 2010 +0300 @@ -22,6 +22,11 @@ #include #include + +#include +#include +#include + #include "rlocationtrail.h" #include "locationdatatype.h" #include "cnetworkinfo.h" @@ -37,6 +42,17 @@ #include "mdequery.h" #include "locationremappingao.h" +#ifdef LOC_GEOTAGGING_CELLID +#include "cgeoconverter.h" +#endif + +#ifdef LOC_REVERSEGEOCODE +#include +#include "ctagcreator.h" +#include "reversegeocode.h" +class CReverseGeoCoderPlugin; +#endif + typedef RLocationTrail::TTrailState TLocTrailState; class CTelephony; @@ -55,11 +71,22 @@ * This method is used to notify about location trail state changes. */ virtual void LocationTrailStateChange() = 0; - + + /** + * This method is used to fetch the current location + * @param aSatelliteInfo The satellite information + * @param aNetworkInfo The network informatiom + * @param aError ErrCode if any + */ virtual void CurrentLocation( const TPositionSatelliteInfo& aSatelliteInfo, const CTelephony::TNetworkInfoV1& aNetworkInfo, const TInt aError ) = 0; - + + + /** + * This method is used to notify about GPS signal quality changes. + * @param aSatelliteInfo The satellite information + */ virtual void GPSSignalQualityChanged( const TPositionSatelliteInfo& aSatelliteInfo ) = 0; /** @@ -86,6 +113,21 @@ TLocTrailState iTrailState; // Trail state for this item. }; +/** +* Location snap shot item class. +*/ +class TLocationSnapshotItem + { + public: + TLocationData iLocationData; // Location info & network info + TItemId iObjectId; // current media object id. + TItemId iLocationId; + TUint iFlag; //indicator for various scenarios +#ifdef LOC_REVERSEGEOCODE + TItemId iCountryTagId; + TItemId iCityTagId; +#endif + }; class MLocationAddObserver { public: @@ -107,14 +149,21 @@ public MNetworkInfoObserver, public MPositionInfoObserver, public MMdEQueryObserver +#ifdef LOC_GEOTAGGING_CELLID + ,public MGeoConverterObserver +#endif +#ifdef LOC_REVERSEGEOCODE + ,public MReverseGeocodeObserver +#endif { public: /** * 2-phased constructor. + * @param aGeoTaggerObserver The observer that is notified after geotagging * @since S60 3.1 */ - IMPORT_C static CLocationRecord* NewL(); - + IMPORT_C static CLocationRecord* NewL(MGeoTaggerObserver& aGeoTaggerObserver, RMobilePhone& aPhone); + /** * C++ destructor. * @since S60 3.1 @@ -195,66 +244,178 @@ /** * Set observer (TrackLog) for notifying new locations in location trail + * @param aObserver, An observer for location changes */ IMPORT_C void SetAddObserver( MLocationAddObserver* aObserver ); - + + + /** + * Update network information + * + */ static TInt UpdateNetworkInfo( TAny* aAny ); + + /* + * creates a location object from the given location data and objectId + * @param aLocationData the location data + * @param aObjectId the object Id + */ IMPORT_C void CreateLocationObjectL( const TLocationData& aLocationData, const TUint& aObjectId ); - + + + /** + * Handle the photos taken by phone camera. + * @param aObjectId Object id + */ IMPORT_C void LocationSnapshotL( const TUint& aObjectId ); - + + /** + * Creates a location object with given location data + * @param aLocationData The location data + * @return The locationId + */ TItemId DoCreateLocationL( const TLocationData& aLocationData ); - + + /** + * Creates a "contains" relation for the given ObjectId and LocationId and adds it to the iMdeSession + * @param aObjectId Object id + * @param aLocationId location id + * @return item id + */ TItemId CreateRelationL( const TUint& aObjectId, const TUint& aLocationId ); - + /** + * Sets the CMdESession for tagcreation + * @param aSession The CMdESession object + */ IMPORT_C void SetMdeSession( CMdESession* aSession ); + /** + * Sets the current location trail state to Stop + */ IMPORT_C void SetStateToStopping(); + /** + * returns the timevalue of the CMdEObject corresponding to a given ObjectId + * @param aObjectId the objectId + * @return the timevalue associated with given object + */ TTime GetMdeObjectTimeL( TItemId aObjectId ); - + + /** + * Checks if Remapping is needed + * @return Boolean to indicate if remapping is needed or not + */ IMPORT_C TBool RemappingNeeded(); - + + IMPORT_C TBool IsLowBattery(); + /** + * Checks if geotagging is in progress + * @return Boolean to indicate if geotagging is in progress + */ + IMPORT_C TBool TaggingInProgress(); + + + /** + * Initiates geotagging + * @param aConnectionOption connection option,silent or not + * @return Etrue if geotagging is started + */ + IMPORT_C TBool StartGeoTagging(const TConnectionOption aConnectionOption); + + /** + * Cancels the geotagging + */ + IMPORT_C void CancelGeoTagging(); + public: // from MNetworkInfoObserver. /** * + * NetworkInfo + * This method is used for setting the network cell id to the * @since S60 3.1 - * @param - * @return + * @param aNetworkInfo N/W info + * @param aError Error code */ void NetworkInfo( const CTelephony::TNetworkInfoV1 &aNetworkInfo, TInt aError ); + + /** + * Get mobile phone object for network info object + * @return mobile phone object + */ + RMobilePhone& GetMobilePhone4NwInfo(); public: // from MPositionInfoObserver /** - * + * This method is used for setting the position info to the + * location trail. * @since S60 3.1 - * @param - * @return + * @param aPositionInfo the position information + * @param aError Captures the errcode if any */ void Position( const TPositionInfo& aPositionInfo, const TInt aError ); public: // From MMdEQueryObserver + /** + * Handle query new results + * @param aQuery Query object + * @param aFirstNewItemIndex new item index + * @param aNewItemCount item count + */ void HandleQueryNewResults(CMdEQuery& aQuery, TInt aFirstNewItemIndex, TInt aNewItemCount); - + + + /* + * This method is called when any of the location/image/tag query is completed + * @param aQuery The Query type + * @param aError Indicates if the query was completed successfully or with any err + * + */ void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError); + +#ifdef LOC_GEOTAGGING_CELLID +public: // MGeoConverterObserver + /** + * This method is used for notifying completion of geotagging + * @param aError error code + * @param aPosition position (lat/lon) for the correcponding n/w info + */ + void ConversionCompletedL( const TInt aError, TLocality& aPosition ); + + /** + * This method is used to handle the conversion error + * @param aError the error code + */ + void HandleConversionError(TInt aError); -private: +#endif +public: + + /* + * Get registrer network country code + * + * @return current register n/w info + */ + IMPORT_C RMobilePhone::TMobilePhoneNetworkInfoV2& GetCurrentRegisteredNw(); + + +private: /** * Stores the location info into the array. + * @param aSatelliteInfo Satellite information */ - void StoreLocation( /*const TPosition& aPosition, const TCourse& aCourse,*/ - const TPositionSatelliteInfo& aSatelliteInfo ); + void StoreLocation( const TPositionSatelliteInfo& aSatelliteInfo ); /** * Changes the current state. New state is published in P&S and * possible observer is notified. + * @param aState The location trail state that is to be set */ void SetCurrentState( TLocTrailState aState ); @@ -262,15 +423,18 @@ * Returns the requested location via callback method, if the location * is valid. Otherwise new location value is requested until the value * is succesful, or the time out limit has been reached. + * @param aSatelliteInfo The satelliteInfo object + * @param aError Indicates any error in handling the location request * */ void HandleLocationRequest( const TPositionSatelliteInfo& aSatelliteInfo /*TLocality& aPosition*/, const TInt aError ); /** * C++ constructor. + * @param aGeoTaggerObserver The observer that is to be notified when geotagging completes */ - CLocationRecord(); - + CLocationRecord(MGeoTaggerObserver& aGeoTaggerObserver, RMobilePhone& aPhone); + /** * 2nd phase constructor. */ @@ -282,12 +446,157 @@ * @param aValue, Read value */ void ReadCenRepValueL(TInt aKey, TInt& aValue); - + + /** + * Validates the lat lon values recieved + * @param aSatelliteInfo The satelliteInfo object + * @return ETrue if the lat=lon are valid + */ TBool CheckGPSFix( const TPositionSatelliteInfo& aSatelliteInfo ); - + + + /** + * Starts the network info timer + */ void StartTimerL(); + + /** + * Fetches the location info from the db + */ + + void FindLocationFromDBL(); + + + /** + * Find location entry + * @param aQuery query type for the tag + * @param aLocationId Location Id + */ + void FindAnyLocationMatchesL( CMdEQuery& aQuery, TUint& aLocationId ); + + /** + * Remaps the location objects when GPS is available + * @param aGPSInfoAvailable Boolean value to indicate if GPS is available + */ + void RemapObjectsL( TBool aGPSInfoAvailable ); + + /** + * Check any location object already exists with same network info + */ + void FindLocationWithSameNetInfoL(); + + /** + * Initialises the location object definitions + */ + void InitialiseL(); + + /** + * handle network location related query on complete + * @param aQuery the query type + */ + void HandleNetLocationQueryL( CMdEQuery& aQuery ); + + + /** + * handle the location query on location query complete + * @param aQuery the query type + */ + void HandleLocationQueryL( CMdEQuery& aQuery ); + + /** + * Callback method on geotagging complete + */ + void GeoTaggingCompleted(); + +#ifdef LOC_REVERSEGEOCODE + /** + * Get any imagefor this location object + * @param aLocID, location object Id + */ + void GetRelatedImageL( TItemId aLocID ); + + /** + * Get tags for this image + * @param aImageID, image object Id + */ + void GetTagsL( TItemId aImageID ); + + /** + * handle the tag query on complete + * @param aQuery the query type + */ + void HandleTagQueryL( CMdEQuery& aQuery ); + + + // MReverseGeocodeObserver + //from reverse-geocode observer + /* + * Call back method from reverse geo coder with address details like country, city.. + * @param aErrorcode Indicates any error in Reverse geocoding + * aAddressInfo address info + */ + void ReverseGeocodeComplete( TInt& aErrorcode, MAddressInfo& aAddressInfo ); + + /* + * Get registrer network country code + * + * @return current register n/w info + */ + RMobilePhone::TMobilePhoneNetworkInfoV2& GetCurrentRegisterNw(); + + /* + * UE is registered to home network? + * + * @return ETrue if UE is registered at home network else EFalse + */ + TBool IsRegisteredAtHomeNetwork(); + + + /* + * Get home network country code + * @param aHomeNwInfoAvailableFlag ETrue if home n/w info available else EFalse + * @return user home n/w info + */ + const RMobilePhone::TMobilePhoneNetworkInfoV1& + GetHomeNetworkInfo(TBool& aHomeNwInfoAvailableFlag); + + /** + * Find country & city tags id + * @param aQuery query type for the tag + * @param aCountryTagId country tag Id + * @param aCityTagId city tag Id + */ + void FindCountryAndCityTagL( CMdEQuery& aQuery, TItemId& aCountryTagId, TItemId& aCityTagId ); + +#endif // LOC_REVERSEGEOCODE + + /** + * Handle n/w related information on taken photograph + * + */ + void NetworkInfoSnapshotL(); + + /** + * Find location from DB within the non leaving method + */ + void HandleFindLocationFromDB(); + + /** + * handle MDS query failure sceenario + */ + void HandleQueryFailure(); + + private: + enum TRemapState + { + ERemapProgressNone = 0x00, + ERemapRevGeoCodeInProgress, + ERemapRevGeoCodePending, + ERemapNwGeoConverterInProgress, + ERemapNwGeoConverterPending + }; /** * A session to Metadata Engine for creating and manipulating location objects. */ @@ -309,7 +618,7 @@ * An array to collect location values. * Own. */ - RArray iTrail; + RPointerArray iTrail; /** * P&S key property. @@ -321,7 +630,7 @@ * Active class to get network information. * Own. */ - CNetworkInfo* iNetworkInfo; + CNetworkInfo* iNetworkInfoChangeListener; /** * Active class to get position information. @@ -357,14 +666,10 @@ TBool iRequestCurrentLoc; TBool iTrailStarted; - TUint iLastNumberOfSatellitesUsed; - TReal32 iLastHDOP; - TReal32 iLastVDOP; TBool iLastGPSFixState; TInt iLocationDelta; TLocationData iLastLocation; - TItemId iLastLocationId; TItemId iObjectId; TLocationData iLocationData; @@ -373,6 +678,83 @@ * This query object is used to find existing locations */ CMdEObjectQuery* iLocationQuery; + + + /** + * Net location query + */ + CMdEObjectQuery* iNetLocationQuery; + + + TRemapState iRemapState; + + + /** + * Database definitions. + */ + CMdENamespaceDef* iNamespaceDef; + CMdEObjectDef* iLocationObjectDef; + CMdEPropertyDef* iLatitudeDef; + CMdEPropertyDef* iLongitudeDef; + CMdEPropertyDef* iAltitudeDef; + + /** + * An array to collect downloaded object + * and its location details. + */ + RPointerArray iMediaItems; + + TLocationSnapshotItem iLastMediaItem; + + TInt iMediaHandlingFlag; + RMobilePhone& iPhone; + + /* + * Flag to track GPS data availability to update camera location icon. + */ + TBool iGpsDataAvailableFlag; + + MGeoTaggerObserver& iGeoTaggerObserver; + +#ifdef LOC_GEOTAGGING_CELLID + /* + * Geo converter + */ + CGeoConverter* iGeoConverter; + TBool iConvertRetry; +#endif + +#ifdef LOC_REVERSEGEOCODE + + TConnectionOption iConnectionOption; + + /** + * query object for getting an image/video object + */ + CMdERelationQuery* iImageQuery; + /** + * query object for getting country and city tags + */ + CMdERelationQuery* iTagQuery; + TLocationSnapshotItem iLastLocationItem; + RPointerArray iLocationItems; + /** + * to create/attach tags + */ + CTagCreator *iTagCreator; + /* + * Flag to track last reverse geocode failure sceenario + */ + TBool iLastReverseGeocodeFails; + + /* + * Reverse geo coder plugin object + */ + CReverseGeoCoderPlugin* iRevGeocoderPlugin; + TUid iDtorKey; + +#endif + }; #endif // C_CLOCATIONRECORD_H