# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272878842 -10800 # Node ID 0f22fb80ebba3e9e9ac2e2b5110ed783f0e2ad0a # Parent 13ae750350c92f03d10cf1dabb788bd0c366f62c Revision: 201015 Kit: 201018 diff -r 13ae750350c9 -r 0f22fb80ebba location.pro --- a/location.pro Fri Apr 16 14:54:12 2010 +0300 +++ b/location.pro Mon May 03 12:27:22 2010 +0300 @@ -16,6 +16,7 @@ TEMPLATE = subdirs SUBDIRS = location_plat \ - locationpickerservice + locationpickerservice \ + locationdataharvester CONFIG += ordered diff -r 13ae750350c9 -r 0f22fb80ebba location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,251 @@ +/* +* 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: The header file for MaptileGeocoderPlugin that provides the Geocoding +* and Maptile interfaces. +* +*/ + + +#ifndef __MAPTILEGEOCODERPLUGIN_H__ +#define __MAPTILEGEOCODERPLUGIN_H__ + +// INCLUDES +#include +#include +#include + +//Maptile geocoder plugin uid +const TUid KMaptileGeoCoderPluginUid = { 0x2002E6BE }; + + +/** + * Data class to get the address details. An handle to this type will be given to the + * user through MMaptileGeocoderObserver::GeocodingCompleted callback, through which + * user can retrieve the address details using the following interfaces. + * + */ +class MAddressInfo +{ +public: + + /** + * Gets the latitude information. + * + * @param aLatitude latitude value. + */ + virtual void GetLatitude( TReal& aLatitude ) = 0; + + + /** + * Gets the longitude information. + * + * @param aLongitude longitude value. + */ + virtual void GetLongitude( TReal& aLongitude ) = 0; + +}; + + + +/** + * TMapTileParam + * Data class containing the information required for fetching the map tile. + * + */ +class TMapTileParam +{ + +public: + + /** + * Parameterized constructor. + * + * @param aLatitude latitude value + * @param aLongitude longitude value + * @param aZoom maptile zoom level + * @param aSize requested maptile size + * + */ + TMapTileParam( const TReal aLatitude, const TReal aLongitude, const TInt aZoom, const TInt aSize ): + iLattitude( aLatitude ), iLongitude( aLongitude ), iZoomLevel( aZoom ), iSize( aSize ) + { + } + + + /** + * Default constructor + */ + TMapTileParam() + { + } + + +public: + + // Latitude + TReal iLattitude; + //Longitude + TReal iLongitude; + //Zoom level + TInt iZoomLevel; + //Required image size + TInt iSize; +}; + + +/** + * TConnectionOption + * Data class containing the connection options. + * + */ +enum TConnectionOption +{ + //Interactive connection + EInteractive = 0, + //Silent connection + ESilent +}; + + +/** + * Observer class which exposes callbacks to notify the completion of geocoding + * and maptile fetching events. + * + */ +class MMaptileGeocoderObserver +{ +public: + + /** + * Callback function which notifys the completion of geocoding service. + * This signals the completion of the asynchronous function + * CMaptileGeocoderPlugin::GetCoordinateByAddressL. + * + * @param aErrorcode Error status KErrNone in case of success or other system + * specific errorcodes in case of failures. + * + * @param aAddressInfo refrence to the address stucture, through which user can + * access the coordinate information. + */ + virtual void GeocodingCompleted( TInt aErrorcode, MAddressInfo& aAddressInfo ) = 0; + + + + /** + * Callback function which notifys the completion of Maptile fetching event. + * This signals the completion of the asynchronous function + * CMaptileGeocoderPlugin::GetMapTileByGeoCode. + * + * @param aErrorcode Error status KErrNone in case of success or other system + * specific errorcodes in case of failures. + * + * @param aMapImagePath Maptile image path + * + */ + virtual void MapTileFetchingCompleted( TInt aErrorcode, const TDesC& aMapImagePath ) = 0; + +}; + + + + + +/** + * CMaptileGeocoderPlugin + * + * An interface of the CMaptileGeocoderPlugin encapsulates the goecoding and + * maptile fetching functionality. It acts as a base, for a concrete implementation + * class to provide all the functionality that a client requires from a + * CMaptileGeocoderPlugin implementation. + * + */ + +class CMaptileGeocoderPlugin : public CBase +{ +public: + + /** + * Create instance of CMaptileGeocoderPlugin concrete implementation. + * @return: Instance of this class. + */ + static CMaptileGeocoderPlugin* NewL(); + + /** + * Destructor. + */ + virtual ~CMaptileGeocoderPlugin(); + + +public: + + /** + * Initializes the ReverseGeoCodeObserver + * @param: aObserver The observer class instance that is to be notified when + * geocoding and maptile fetching service completes. + * + */ + virtual void SetMaptileGeocoderObserver( MMaptileGeocoderObserver& aObserver ) = 0; + + /** + * Gets the geo-coordinate information for the given address. This is an + * asynchronous function whose completion will be notified by the + * MMaptileGeocoderObserver::GeocodingCompleted callback. + * + * @param aLandmark Landmark containing the address informations. + * @param aOption OCC setting option + * + */ + virtual void GetCoordinateByAddressL( const CPosLandmark& aLandmark, + const TConnectionOption aOption = EInteractive ) = 0; + + /** + * Gets the geo-coordinate information for the given address. This is an + * asynchronous function whose completion will be notified by the + * MMaptileGeocoderObserver::GeocodingCompleted callback. + * + * @param aAddressDetails , containing the address informations. + * @param aOption OCC setting option + * + */ + virtual void GetCoordinateByAddressL( const TDesC& aAddressDetails, + const TConnectionOption aOption = EInteractive ) = 0; + + /** + * Gets the maptile image path for the given geocordinates. This is an + * asynchronous function whose completion will be notified by the + * MMaptileGeocoderObserver::MapTileFetchingCompleted callback. + * + * @param aMapTileParam Object containing the geocoordinate, zoom level + * informations. + * @param aFilePath Path where the maptile image should be stored. + * + */ + virtual void GetMapTileByGeoCodeL( TMapTileParam& aMapTileParam, + const TDesC& aFilePath ) = 0; + +private: + + /** + * iDtorKey + * Identification of the plugin on cleanup + */ + TUid iDtorKey; +}; + +#include "maptilegeocoderplugin.inl" + +#endif //__MAPTILEGEOCODERPLUGIN_H__ + +//End of file + diff -r 13ae750350c9 -r 0f22fb80ebba location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.inl Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,51 @@ +/* +* 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: This is partial interface implementation which is +* used by plugins. +* +*/ + + + +// INCLUDE FILES + +#include // declares E-com framework classes + + +// ----------------------------------------------------------------------------- +// CMaptileGeocoderPlugin::~CMaptileGeocoderPlugin() +// Destroys the plugin implementation +// ----------------------------------------------------------------------------- +// +inline CMaptileGeocoderPlugin::~CMaptileGeocoderPlugin() +{ + REComSession::DestroyedImplementation( iDtorKey ); +} + + +// ----------------------------------------------------------------------------- +// CMaptileGeocoderPlugin::NewL() +// Creates the instance of CMaptileGeocoderPlugin concrete implementation. +// ----------------------------------------------------------------------------- +// +inline CMaptileGeocoderPlugin* CMaptileGeocoderPlugin::NewL() +{ + CMaptileGeocoderPlugin* self = reinterpret_cast( + REComSession::CreateImplementationL( + KMaptileGeoCoderPluginUid, _FOFF( CMaptileGeocoderPlugin,iDtorKey ) ) ); + + return self; +} + +// End of file diff -r 13ae750350c9 -r 0f22fb80ebba location_plat/location_data_harvester_api/location_data_harvester_api.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/location_plat/location_data_harvester_api/location_data_harvester_api.pri Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,18 @@ +# +# 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: Location picker service api project file +# + +PLATFORM_HEADERS += location_data_harvester_api\inc\maptilegeocoderplugin.h \ + location_data_harvester_api\inc\maptilegeocoderplugin.inl \ No newline at end of file diff -r 13ae750350c9 -r 0f22fb80ebba location_plat/location_plat.pro --- a/location_plat/location_plat.pro Fri Apr 16 14:54:12 2010 +0300 +++ b/location_plat/location_plat.pro Mon May 03 12:27:22 2010 +0300 @@ -18,6 +18,8 @@ BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " include(location_picker_service_api/location_picker_service_api.pri) +include(location_data_harvester_api/location_data_harvester_api.pri) + for(filename,PLATFORM_HEADERS){ BLD_INF_RULES.prj_exports *= "$$filename APP_LAYER_PLATFORM_EXPORT_PATH($$basename(filename))" diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/bwins/maptileserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/bwins/maptileserviceu.def Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,4 @@ +EXPORTS + ?getMapTileImage@MapTileService@@SA?AVQString@@HW4AddressType@1@@Z @ 1 NONAME ; class QString MapTileService::getMapTileImage(int, enum MapTileService::AddressType) + ?isLocationFeatureEnabled@MapTileService@@SA_NW4AppType@1@@Z @ 2 NONAME ; bool MapTileService::isLocationFeatureEnabled(enum MapTileService::AppType) + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/eabi/maptileserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/eabi/maptileserviceu.def Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,4 @@ +EXPORTS + _ZN14MapTileService15getMapTileImageEiNS_11AddressTypeE @ 1 NONAME + _ZN14MapTileService24isLocationFeatureEnabledENS_7AppTypeE @ 2 NONAME + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/bwins/geocodeupdate.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/bwins/geocodeupdate.def Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,4 @@ +EXPORTS + ?UpDate@GeocodeUpdate@@SAXJJNN@Z @ 1 NONAME ; void GeocodeUpdate::UpDate(long, long, double, double) + ?CreateContactdb@GeocodeUpdate@@SAXXZ @ 2 NONAME ; void GeocodeUpdate::CreateContactdb(void) + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/eabi/geocodeupdate.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/eabi/geocodeupdate.def Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,4 @@ +EXPORTS + _ZN13GeocodeUpdate15CreateContactdbEv @ 1 NONAME + _ZN13GeocodeUpdate6UpDateElldd @ 2 NONAME + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/group/bld.inf Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,26 @@ +/* +* 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: +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES +geocodeupdate.mmp + + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/group/geocodeupdate.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/group/geocodeupdate.mmp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,111 @@ +/* +* 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: +* +*/ + +TARGET geocodeupdate.dll +TARGETTYPE dll +UID 0x1000008d 0x2002C3A9 +SECUREID 0x2002C3A9 + + + +EPOCALLOWDLLDATA +USERINCLUDE ../inc +USERINCLUDE ../../inc +USERINCLUDE ../../mylocationlogger/inc + + + +// Qt Macros +MACRO UNICODE +MACRO QT_KEYPAD_NAVIGATION +MACRO QT_SOFTKEYS_ENABLED +MACRO QT_USE_MATH_H_FLOATS +MACRO QT_NO_DEBUG +MACRO QT_GUI_LIB +MACRO QT_CORE_LIB + +SYSTEMINCLUDE /epoc32/include/mw/QtCore +SYSTEMINCLUDE /epoc32/include/mw/QtNetwork +SYSTEMINCLUDE /epoc32/include/mw/QtGui +SYSTEMINCLUDE /epoc32/include/mw +SYSTEMINCLUDE /epoc32/include +SYSTEMINCLUDE /epoc32/include/stdapis +SYSTEMINCLUDE /epoc32/include/stdapis/sys +SYSTEMINCLUDE /epoc32/include/platform/mw +SYSTEMINCLUDE /epoc32/include/platform +SYSTEMINCLUDE /epoc32/include/app +SYSTEMINCLUDE /epoc32/include/platform/app +SYSTEMINCLUDE /epoc32/include/platform/loc +SYSTEMINCLUDE /epoc32/include/platform/mw/loc +SYSTEMINCLUDE /epoc32/include/platform/app/loc +SYSTEMINCLUDE /epoc32/include/platform/loc/sc +SYSTEMINCLUDE /epoc32/include/platform/mw/loc/sc +SYSTEMINCLUDE /epoc32/include/platform/app/loc/sc +SYSTEMINCLUDE /epoc32/include/stdapis/stlportv5 + +SOURCEPATH ../src +SOURCE geocodeupdate.cpp + +LIBRARY QtContacts.lib +LIBRARY cntmodel.lib +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY edbms.lib +LIBRARY bafl.lib + + + +LIBRARY QtCore.lib +LIBRARY libstdcppv5.lib +LIBRARY libc.lib +LIBRARY libm.lib +LIBRARY libdl.lib +LIBRARY cone.lib +LIBRARY eikcore.lib +LIBRARY mediaclientaudio.lib +LIBRARY eikcoctl.lib +LIBRARY eiksrv.lib +LIBRARY apparc.lib +LIBRARY avkon.lib +LIBRARY charconv.lib +LIBRARY ws32.lib +LIBRARY hal.lib +LIBRARY gdi.lib +LIBRARY apgrfx.lib +LIBRARY flogger.lib + +nostrictdef + +CAPABILITY All -Tcb + +OPTION CW -wchar_t on +OPTION ARMCC --visibility_inlines_hidden + +VERSION 10.0 + +PAGED + +OPTION_REPLACE ARMCC --export_all_vtbl //-D__QT_NOEFFECTMACRO_DONOTUSE + +#if defined(ARMCC) && !defined(ARMCC_2_2) && !defined(ARMCC_3_1) +OPTION ARMCC --import_all_vtbl +#endif + +STDCPP + +DEFFILE geocodeupdate.def + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/inc/geocodeupdate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/inc/geocodeupdate.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ + +#ifndef __GEOCODEUPDATE_H__ +#define __GEOCODEUPDATE_H__ + +#include + +// CLASS DECLARATION + +/** + * CntGeocodeUpdate, a class to update latitude and longtude into contact database + * for a perticular contact. + */ +class GeocodeUpdate +{ +public: + /** + * Request to create contactmanager , + * contactmanager will create contact db. + */ + IMPORT_C static void CreateContactdb(); + + /** + * Request to update latitude and longitude. * + * @param aCntId contact unique id + * @param aLatitude Latitude to be saved + * @param aLongitude longitude to be saved + * @return Status code (0 is failure,1 success) + */ + + IMPORT_C static void UpDate(const TInt32 aCntId, + const TInt32 aCntAddressType, const TReal aLatitude, + const TReal aLongitude); +}; + +#endif // __GEOCODEUPDATE_H__ diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/geocodeupdate/src/geocodeupdate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/src/geocodeupdate.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,89 @@ +/* +* 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: +* +*/ + +#include +#include +#include +#include +#include + +#include "geocodeupdate.h" +#include "mylocationsdefines.h" +#include "mylocationlogger.h" + +using namespace QTM_NAMESPACE; +// ---------------------------------------------------------------------------- +// CGeocodeUpdate::CreateContactdb() +// ---------------------------------------------------------------------------- +EXPORT_C void GeocodeUpdate::CreateContactdb() +{ + QContactManager* contactManger = NULL; + MYLOCLOGSTRING("call to create contactManger object and contactdb as well."); + contactManger = new QContactManager("symbian"); + delete contactManger; +} + +// ---------------------------------------------------------------------------- +// CGeocodeUpdate::UpDateL() +// To update contact db with this latitude and longitude value +// ---------------------------------------------------------------------------- +EXPORT_C void GeocodeUpdate::UpDate(const TInt32 aCntId, + const TInt32 aCntAddressType, const TReal aLatitude, + const TReal aLongitude) + +{ + __TRACE_CALLSTACK; + QContactManager* contactManger = NULL; + MYLOCLOGSTRING("call to create contactManger object ."); + contactManger = new QContactManager("symbian"); + MYLOCLOGSTRING("contactManger object created ."); + + MYLOCLOGSTRING("contactManger object is not null ."); + QStringList definitionRestrictions; + QContact contact = contactManger->contact(aCntId ,definitionRestrictions); + QContactGeoLocation location; + + switch (aCntAddressType) + { + case ESourceContactsPref: + { + break; + } + case ESourceContactsWork: + { + location.setContexts(QContactDetail::ContextWork); + break; + } + case ESourceContactsHome: + { + location.setContexts(QContactDetail::ContextHome); + break; + } + default: + { + break; + } + } + location.setLongitude(aLongitude); + location.setLatitude(aLatitude); + contact.saveDetail(&location); + contactManger->saveContact(&contact); + delete contactManger; + +} + +//end of line diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/inc/mylocationsdefines.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/inc/mylocationsdefines.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,124 @@ +/* +* 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: +* +*/ + + +#ifndef __MYLOCATIONSDEFINES_H__ +#define __MYLOCATIONSDEFINES_H__ + +/** + * TLookupItem struct. + * This structure defines a single lookup item. + */ + +class TLookupItem +{ +public: + // Uid of the source entry + TUint32 iUid; + + // Source type + TUint32 iSource; + + // Landmark uid in the landmarks database + TUint32 iLmId; + + // File Path + TFileName iFilePath; +}; + +/** Defines uid source type + */ +enum TUidSourceType +{ + /** Uid Source type calendar */ + ESourceCalendar=0, + /** Uid Source type landmarks */ + ESourceLandmarks, + /** Uid Source type maps history */ + ESourceMapsHistory, + /** Uid Source type contacts default/prefered address */ + ESourceContactsPref, + /** Uid Source type contacts work address */ + ESourceContactsWork, + /** Uid Source type contacts home address */ + ESourceContactsHome, + /** Uid Source type landmarks category */ + ESourceLandmarksCategory, + /** Uid Source type landmarks user created category */ + ESourceLandmarksUserCat, + /** Uid Source type landmarks 'contacts' category */ + ESourceLandmarksContactsCat, + /** Uid Source type landmarks 'calendar' category */ + ESourceLandmarksCalendarCat, + /** Uid Source type maps history' category */ + ESourceLandmarksHistoryCat +}; + +// lookup database folder path +_LIT( KLookupDbPath, "c:\\mylocations\\" ); + +//Mylocations resource file +_LIT(KMyLocationsResourceFile, "z:\\resource\\apps\\mylocations.rsc"); + +// My locations landmarks database uri. +_LIT( KMylocationsDatabaseUri, "file://c:MyLocationsLandmarks.ldb" ); + +// maptile database uri. +_LIT( KMaptileDatabaseUri, "file://c:MyLocationsMaptile.ldb" ); + +// History landmarks database uri. +_LIT( KMapsHistoryUri, "file://c:MapsHistoryLandmarks.ldb" ); + +// mylocations lookup database name +_LIT( KMylocationsLookupDatabaseName, "mylocationslookup.db" ); + +// maptile lookup database name +_LIT( KMapTileLookupDatabaseName, "mylocationsmaptilelookup.db" ); + +// landmarks lookup database name +_LIT( KLandmarksLookupDatabaseName, "landmarkslookup.db" ); + +// database column names +_LIT( NColUid, "uid" ); +_LIT( NColSource, "source" ); +_LIT( NColLmUid, "lmuid" ); + +// maptile database column names +_LIT( NCntColUid, "cntuid" ); +_LIT( NCntColFilePath, "filepath" ); + +// database table name +_LIT( KLookupTable, "lookuptable" ); + +// maptile database table name +_LIT( KMapTileLookupTable, "cntmaptilelookuptable" ); + +// uid column number +const TInt KColumnUid = 1; +// source type column number +const TInt KColumnSource = 2; +// landmark uid column number +const TInt KColumnLmkUid = 3; + +// uid column number +const TInt KColumncntUid = 1; +// source type column number +const TInt KColumnFilePath = 3; + +#endif // __MYLOCATIONSDEFINES_H__ +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/locationdataharvester.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/locationdataharvester.pro Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,39 @@ +# +# 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: +# +# + + +TEMPLATE = subdirs +SUBDIRS = maptileservice + +# Build.inf rules +BLD_INF_RULES.prj_exports += "./mylocationsengine/loc/mylocations.loc APP_LAYER_LOC_EXPORT_PATH(mylocations.loc)" + +BLD_INF_RULES.prj_mmpfiles = "./geocodeupdate/group/geocodeupdate.mmp" \ + "./mylocationsengine/group/mylocationsengine.mmp" +# Exports +deploy.path = / + +# IBY files +iby.path = epoc32/rom/include/core/app +iby.sources = mylocations.iby + +for(iby, iby.sources):BLD_INF_RULES.prj_exports += "./rom/$$iby $$deploy.path$$iby.path/$$iby" + + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/conf/2002E6E8.txt Binary file locationdataharvester/maptileservice/conf/2002E6E8.txt has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/conf/maptileservice.confml Binary file locationdataharvester/maptileservice/conf/maptileservice.confml has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/conf/maptileservice_2002E6E8.crml Binary file locationdataharvester/maptileservice/conf/maptileservice_2002E6E8.crml has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/inc/maptiledblookuptable.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/inc/maptiledblookuptable.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,147 @@ +/* +* 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: +* Retrieving maptile path from lookup db +* +*/ + +#ifndef __MAPTILEDBLOOKUPTABLE_H__ +#define __MAPTILEDBLOOKUPTABLE_H__ + +//Headers needed +#include //RFs +#include //RDbNamedDatabase,RDbView + +// maptile database column names +_LIT( NCntColUid, "cntuid" ); +_LIT( NAppColFilePath, "filepath" ); +_LIT( NColSource, "source" ); + +// maptile lookup database name +_LIT( KMapTileLookupDatabaseName, "mylocationsmaptilelookup.db" ); + +// maptile database table name +_LIT( KMapTileLookupTable, "cntmaptilelookuptable" ); + +_LIT( KLookupDbPath, "c:\\mylocations\\" ); + +// uid column number +const TInt KColumnUid = 1; +// source type column number +const TInt KColumnSource = 2; +// source type column number +const TInt KColumnFilePath = 3; + + +/** + * Maptile database lookup entry + */ +class TLookupItem +{ +public: + // Uid of the source entry + TUint32 iUid; + + // Source type + TUint32 iSource; + + // Landmark uid in the landmarks database + TUint32 iLmId; + + // Uid of the Application + TUint32 iAppUid; + + // File Path + TFileName iFilePath; +}; + +/** + * Defines uid source type + */ +enum TUidSourceType +{ + /** Uid Source type calendar plain address */ + ESourceCalendar = 0, + /** Uid Source type contacts default/prefered address */ + ESourceContactsPref = 3, + /** Uid Source type contacts work address */ + ESourceContactsWork, + /** Uid Source type contacts home address */ + ESourceContactsHome, + +}; + +/** + * CLookupMapTileDatabase class. + * This class handles all the operations related to maptile lookup database. + * + */ +class CLookupMapTileDatabase : public CBase +{ +public: + + /** + * This is a static function, which creates and returns an instance of this class. + */ + static CLookupMapTileDatabase* NewL( const TDesC& aLookupTableName ); + + /** + * This is a static function, which creates and returns an instance of this class. + * Pushes the created object to the cleanup stack. + */ + static CLookupMapTileDatabase* NewLC( const TDesC& aLookupTableName ); + + /** + * Destructor + */ + ~CLookupMapTileDatabase(); + +public: + + /** + * Finds an entry in the lookup table. + * @param[in/out] aLookupItem The lookup item to be found in the database. + * The source iUid is passed in the lookup item + */ + void FindEntryL( TLookupItem& aLookupItem ); + +private: + + // default constructor + CLookupMapTileDatabase(); + + // Second phase constructor + void ConstructL( const TDesC& aLookupTableName ); + +private: + + // Handle to the items database + RDbNamedDatabase iItemsDatabase; + + // handle to the file session + RFs iFsSession; + + // holds the database file name + TFileName iDbFileName; + + // holds the info about database existence. + TBool iDatabaseExists; + +}; + + +#endif // __MAPTILEDBLOOKUPTABLE_H__` + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/inc/maptileservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/inc/maptileservice.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,94 @@ +/* +* 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: +* maptile service interface +* +*/ + +#ifndef _MAPTILESERVICE_H_ +#define _MAPTILESERVICE_H_ + + +#include +#include + + +#ifdef MAPTILESERVICEDLL +#define MAPTILESERVICE_EXPORT Q_DECL_EXPORT +#else +#define MAPTILESERVICE_EXPORT Q_DECL_IMPORT +#endif + + + +// CLASS DECLARATION + +/** +* Maptile service class, provides interface to get map tile image associated with +* contact. Also provides interface to check whether location feature is enabled or disabled. +* +* Note: Location feature can be enabled or disabled by modifying conf\cntmaptileservice.confml file. +*/ +class MAPTILESERVICE_EXPORT MapTileService +{ + +public: + + /** + * Application types + */ + enum AppType + { + /** Contacts application */ + AppTypeContacts, + /** Calendar application */ + AppTypeCalendar + }; + /** + * Address types + */ + enum AddressType + { + /** Plain Address Type */ + AddressPlain, + /** Address Type Pref */ + AddressPreference, + /** Address type Work */ + AddressWork, + /** Address type Home */ + AddressHome + }; + + /** + * Checks whether location feature enabled or disabled for specific application. + * + * @return Returns true or false based on location feature setting. + */ + static bool isLocationFeatureEnabled(AppType appType); + + /** + * Gets a maptile image associated with a id(contact id/calendar id). + * Returns a maptile image path if it is available otherwise returns NULL. + * + * @param contactId Contact id + * @param sourceType Source address type( Preferred, Home , Work address ) + * + * @return Returns maptile image path if it is available, else NULL. + */ + static QString getMapTileImage( int Id, AddressType sourceType ); + +}; + +#endif //MAPTILESERVICE_H_ + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/maptileservice.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/maptileservice.pro Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,74 @@ +# +# 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: +# +# + + +TEMPLATE = lib +TARGET = maptileservice + +CONFIG += dll +CONFIG += hb + + +DEPENDPATH += . +INCLUDEPATH += . +INCLUDEPATH += ../inc + + +MOC_DIR = moc + +DEFINES += MAPTILESERVICEDLL + +INTERNAL_PUBLIC_HEADERS += inc/maptileservice.h + +# Input +HEADERS += $$INTERNAL_PUBLIC_HEADERS \ + ./inc/maptiledblookuptable.h + + + +SOURCES += ./src/maptileservice.cpp ./src/maptiledblookuptable.cpp + +symbian: +{ + + :BLD_INF_RULES.prj_exports += "conf/maptileservice.confml APP_LAYER_CONFML(maptileservice.confml)" + :BLD_INF_RULES.prj_exports += "conf/maptileservice_2002E6E8.crml APP_LAYER_CRML(maptileservice_2002E6E8.crml)" + :BLD_INF_RULES.prj_exports += "conf/2002E6E8.txt /epoc32/winscw/c/private/10202be9/2002E6E8.txt" + + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = All -Tcb + TARGET.UID3 = 0x2002E6E8 + + + LIBS += -ledbms \ + -lbafl \ + -lcentralrepository \ + -leuser + + +} + +deploy.path = / +headers.sources = $$INTERNAL_PUBLIC_HEADERS +headers.path = epoc32/include/app +DEPLOYMENT += exportheaders + +# This is for new exporting system coming in garden +for(header, headers.sources):BLD_INF_RULES.prj_exports += "$$header $$deploy.path$$headers.path/$$basename(header)" \ No newline at end of file diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/src/maptiledblookuptable.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/src/maptiledblookuptable.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,178 @@ +/* +* 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: +* Retrieving maptile path from lookup db implementation +* +*/ + +#include +#include "maptiledblookuptable.h" + +// select all from +_LIT( KSelectAllFrom, "SELECT * FROM " ); + +// string 'where' +_LIT( KStringWhere, " WHERE " ); + +// string ' = ' +_LIT( KStringEqual, " = " ); + +// string 'And' +_LIT( KStringAnd, " AND " ); + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::CLookupMapTileDatabase() +// Default constructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::CLookupMapTileDatabase() +{ +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Destructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::~CLookupMapTileDatabase() +{ + + // close the database + iItemsDatabase.Close(); + + // close the file session + iFsSession.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Creates an object of this class and pushes to cleanup stack. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewLC( const TDesC& aLookupTableName ) +{ + + CLookupMapTileDatabase* self = new (ELeave) CLookupMapTileDatabase; + CleanupStack::PushL(self); + self->ConstructL( aLookupTableName ); + return self; +} + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::NewL() +// Creates an object of this class. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewL( const TDesC& aLookupTableName ) +{ + CLookupMapTileDatabase* self = CLookupMapTileDatabase::NewLC( aLookupTableName ); + CleanupStack::Pop( self ); + return self; +} + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::ConstructL() +// 2nd phase contructor. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::ConstructL( const TDesC& aLookupTableName ) +{ + + User::LeaveIfError( iFsSession.Connect() ); + + iDbFileName.Copy( KLookupDbPath ); + iDbFileName.Append( aLookupTableName ); + + iDatabaseExists = EFalse; + + if( BaflUtils::FileExists( iFsSession, iDbFileName ) ) + { + // database exists + iDatabaseExists = ETrue; + } +} + + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::FindEntryL() +// Finds an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::FindEntryL( TLookupItem& aLookupItem ) +{ + + // used to check whether entry available or not + TBool entryAvailable = EFalse; + + if ( iDatabaseExists ) + { + + // Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Copy( KSelectAllFrom ); + queryBuffer.Append( KMapTileLookupTable ); + queryBuffer.Append( KStringWhere ); + queryBuffer.Append( NCntColUid ); + queryBuffer.Append( KStringEqual ); + queryBuffer.AppendNum( aLookupItem.iUid ); + queryBuffer.Append( KStringAnd ); + queryBuffer.Append( NColSource ); + queryBuffer.Append( KStringEqual ); + queryBuffer.AppendNum( aLookupItem.iSource ); + + TInt ret = iItemsDatabase.Open( iFsSession, iDbFileName ); + + if( ret != KErrNone ) + { + //if already opened , close and open again + iItemsDatabase.Close(); + User::LeaveIfError( iItemsDatabase.Open( iFsSession, iDbFileName ) ); + } + User::LeaveIfError( iItemsDatabase.Begin() ); + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare( iItemsDatabase, TDbQuery( queryBuffer ) ); + CleanupClosePushL( myView ); + myView.EvaluateAll(); + myView.FirstL(); + + if( myView.AtRow() ) + { + // Item found. get the details. + myView.GetL(); + if( aLookupItem.iUid == myView.ColUint( KColumnUid ) ) + { + aLookupItem.iFilePath.Copy( myView.ColDes16( KColumnFilePath ) ); + entryAvailable = ETrue; + } + } + + CleanupStack::PopAndDestroy( &myView ); // myView + + //Close the database + iItemsDatabase.Close(); + } + + //No entry found + if( !entryAvailable ) + { + User::Leave( KErrNotFound ); + } +} + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/src/maptileservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/src/maptileservice.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,132 @@ +/* +* 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: +* Maptile service implementation +* +*/ + + +#include + +#include "maptileservice.h" +#include "maptiledblookuptable.h" + +// CONSTANTS +// Maptile interface uid +const TUid KUidMapTileInterface = { 0x2002E6E8 }; +// Central Repository Key IDs +const TInt KEnableLocationFeature = 0x1; +const TInt KLocationFeatureAppContacts = 0x1; +const TInt KLocationFeatureAppCalendar = 0x2; + + +// ----------------------------------------------------------------------------- +// MapTileService::isLocationFeatureEnabled() +// Checks whether location feature is enabled or disabled +// ----------------------------------------------------------------------------- +// +bool MapTileService::isLocationFeatureEnabled(AppType appType) +{ + + //Create the centrep with uid 0x2002C3A8 + bool iLocationFeatureEnabled = false; + + CRepository* centralRepository = NULL; + + TRAPD( err, centralRepository = CRepository::NewL( KUidMapTileInterface ) ); + if ( KErrNone == err ) + { + TInt repValue; + + //Get the Location feature flag + int ret=0; + if ( appType == AppTypeContacts ) + { + ret = centralRepository->Get( KEnableLocationFeature , repValue ); + } + else if ( appType == AppTypeCalendar ) + { + ret = centralRepository->Get( KEnableLocationFeature , repValue ); + } + + if ( ret == KErrNone && repValue == 1 ) + { + iLocationFeatureEnabled = true; + } + + delete centralRepository; + } + + return iLocationFeatureEnabled; + +} + + +// ----------------------------------------------------------------------------- +// MapTileService::getMapTileImage() +// Gets the maptile image path associated with a contact. +// ----------------------------------------------------------------------------- +// +QString MapTileService::getMapTileImage( int id, AddressType sourceType ) +{ + + //Image file to return; + + //Maptile database instance + CLookupMapTileDatabase* mapTileDatabase = NULL; + + TRAPD( err, mapTileDatabase = CLookupMapTileDatabase::NewL( + KMapTileLookupDatabaseName ) ); + if ( KErrNone == err ) + { + TLookupItem lookupItem; + lookupItem.iUid = id; + switch( sourceType ) + { + case AddressPlain: + lookupItem.iSource = ESourceCalendar; + break; + case AddressPreference: + lookupItem.iSource = ESourceContactsPref; + break; + case AddressWork: + lookupItem.iSource = ESourceContactsWork; + break; + case AddressHome: + lookupItem.iSource = ESourceContactsHome; + break; + default: + break; + } + + TRAP( err , mapTileDatabase->FindEntryL( lookupItem ) ); + + //delet the database instance + delete mapTileDatabase; + + //if entry available returns the file path otherwise NULL. + if ( KErrNone == err ) + { + //Get the image path + QString imageFile((QChar*)lookupItem.iFilePath.Ptr(), + lookupItem.iFilePath.Length()); + return imageFile; + } + } + + return QString(); +} + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/tsrc/ut_maptileservice/homeaddressmap.png Binary file locationdataharvester/maptileservice/tsrc/ut_maptileservice/homeaddressmap.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/tsrc/ut_maptileservice/preferredaddressmap.png Binary file locationdataharvester/maptileservice/tsrc/ut_maptileservice/preferredaddressmap.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2009 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: +* +*/ +#include +#include +#include +#include +#include + + +#include "maptileservice.h" + + +//Maximum maptile processing time +const int KMapTileFetchTime = 150000; + +QTM_USE_NAMESPACE + + +//Maptile test interface class +class MaptileServiceTest: public QObject +{ + Q_OBJECT + +private slots: + + void checkLocationFeature(); + void getPreferredAddressMapTilePath(); + void getWorkAddressMapTilePath(); + void getHomeAddressMapTilePath(); + void checkInvalidContactId(); + +}; + + +//Checks whether location feature enabled or disabled +void MaptileServiceTest::checkLocationFeature() +{ + + QVERIFY( CntMapTileService::isLocationFeatureEnabled() == 1 ); +} + +//Checks the maptile path retrieval for preferred address +void MaptileServiceTest::getPreferredAddressMapTilePath() +{ + + QContact* contact = new QContact(); + + //Add contact name + QContactName* name = new QContactName(); + name->setFirst("Raj"); + contact->saveDetail( name ); + + //Add address + QContactAddress* address = new QContactAddress(); + address->setPostOfficeBox("87640"); + address->setStreet("Torstrasse"); + address->setPostcode("12345"); + address->setLocality("Berlin"); + address->setCountry("Germany"); + contact->saveDetail(address); + + //Save the contact + QContactManager* contactManager = NULL; + contactManager = new QContactManager("symbian"); + contactManager->saveContact( contact ); + + //Wait till maptile operation complete + QTest::qWait( KMapTileFetchTime ); + + + //Get the saved id + QContactId savedId = contact->id(); + TUint32 contactId = savedId.localId(); + + //Get the maptile + QString string = CntMapTileService::getMapTileImage( contactId, CntMapTileService::AddressPreference ); + + //Construct the QPimap from reference bitmap + QImage referenceBitmap( "c:\\maptiletest\\preferredaddressmap.png" ); + + //Construct the QPixmap from new retrieved bitmap + QImage retrievedBitmap( string ); + + + //delete the contact + contactManager->removeContact( contactId ); + + delete contact; + delete name; + delete address; + delete contactManager; + +} + +//Checks the maptile path retrieval for work address +void MaptileServiceTest::getWorkAddressMapTilePath() +{ + + QContact* contact = new QContact(); + + //Set name + QContactName* name = new QContactName(); + name->setFirst("Mike"); + contact->saveDetail(name); + + //Set address + QContactAddress* address = new QContactAddress(); + address->setPostOfficeBox("2345"); + address->setPostcode("29834"); + address->setStreet("Domlur"); + address->setLocality("Bangalore"); + address->setCountry("India"); + address->setContexts(QContactDetail::ContextWork); + contact->saveDetail(address); + + //Save the contact + QContactManager* contactManager = NULL; + contactManager = new QContactManager("symbian"); + contactManager->saveContact( contact ); + + //Wait till maptile operation complete + QTest::qWait( KMapTileFetchTime ); + + + //Get the saved id + QContactId savedId = contact->id(); + TUint32 contactId = savedId.localId(); + + //Get the maptile + QString string = CntMapTileService::getMapTileImage( contactId, CntMapTileService::AddressWork ); + + //Construct the QPimap from already stored bitmap + QImage referenceBitmap( "c:\\maptiletest\\workaddressmap.png" ); + + //Construct the QPixmap from new retrieved bitmap + QImage retrievedBitmap( string ); + + //check results are same + QVERIFY( retrievedBitmap == referenceBitmap ); + + + contactManager->removeContact( contactId ); + + delete contact; + delete name; + delete address; + delete contactManager; + +} + +//Checks the maptile path retrieval for home address +void MaptileServiceTest::getHomeAddressMapTilePath() +{ + + QContact* contact = new QContact(); + + QContactName* name = new QContactName(); + name->setFirst("first"); + contact->saveDetail(name); + + QContactAddress* address = new QContactAddress(); + address->setContexts(QContactDetail::ContextHome); + address->setPostOfficeBox("81282"); + address->setStreet("Keilalahdentie"); + address->setPostcode("67890"); + address->setLocality("Espoo"); + address->setCountry("Finland"); + contact->saveDetail(address); + + //Save the contact + QContactManager* contactManager = NULL; + contactManager = new QContactManager("symbian"); + contactManager->saveContact( contact ); + + //Wait till maptile operation complete + QTest::qWait( KMapTileFetchTime ); + + //Get the saved id + QContactId savedId = contact->id(); + TUint32 contactId = savedId.localId(); + + //Get the maptile + QString string = CntMapTileService::getMapTileImage( contactId, CntMapTileService::AddressHome ); + + //Construct the QPimap from already stored bitmap + QImage referenceBitmap( "c:\\maptiletest\\homeaddressmap.png" ); + + //Construct the QPixmap from new retrieved bitmap + QImage retrievedBitmap( string ); + + //comapre the bitmaps + QVERIFY( retrievedBitmap == referenceBitmap ); + + + contactManager->removeContact( contactId ); + + delete contact; + delete name; + delete address; + delete contactManager; + +} + +//Checks the maptile path retrieval returns NULL for invalid address +void MaptileServiceTest::checkInvalidContactId() +{ + + QContact* contact = new QContact(); + + QContactName* name = new QContactName(); + name->setFirst("first"); + contact->saveDetail(name); + + //Add some invalid address + QContactAddress* address = new QContactAddress(); + address->setPostOfficeBox("11111"); + address->setStreet("htrtfdsk"); + address->setPostcode("98989"); + address->setLocality("ghwdxnkwnn"); + address->setCountry("Fbsjwskws"); + contact->saveDetail(address); + + //Save the contact + QContactManager* contactManager = NULL; + contactManager = new QContactManager("symbian"); + contactManager->saveContact( contact ); + + //Wait till maptile operation complete + QTest::qWait( KMapTileFetchTime ); + + + //Get the saved id + QContactId savedId = contact->id(); + TUint32 contactId = savedId.localId(); + + //Get the maptile + QString string = CntMapTileService::getMapTileImage( contactId, CntMapTileService::AddressPreference ); + + contactManager->removeContact( contactId ); + + //Maptile path should be NULL for invalid address + QVERIFY( string.isNull() ); + + delete contact; + delete name; + delete address; + delete contactManager; + + +} + + +QTEST_MAIN(MaptileServiceTest) +#include "ut_maptileservice.moc" + + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.pro Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,38 @@ +# +# Copyright (c) 2009 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: +# + +TEMPLATE = app +QT += testlib + +INCLUDEPATH += inc +INCLUDEPATH += ../inc + +symbian: +{ + :BLD_INF_RULES.prj_exports += "preferredaddressmap.png /epoc32/winscw/c/maptiletest/preferredaddressmap.png" + :BLD_INF_RULES.prj_exports += "workaddressmap.png /epoc32/winscw/c/maptiletest/workaddressmap.png" + :BLD_INF_RULES.prj_exports += "homeaddressmap.png /epoc32/winscw/c/maptiletest/homeaddressmap.png" + SYSTEMINCLUDEPATH += \epoc32\include\stdapis +} + +SOURCES += ut_maptileservice.cpp + + +LIBS += -lmaptileservice \ + -lQtContacts + +TARGET.CAPABILITY = ALL -TCB + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/maptileservice/tsrc/ut_maptileservice/workaddressmap.png Binary file locationdataharvester/maptileservice/tsrc/ut_maptileservice/workaddressmap.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationlogger/inc/mylocationlogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationlogger/inc/mylocationlogger.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,143 @@ +/* +* 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: +* +*/ + +#ifndef MYLOCATIONLOGGER_H +#define MYLOCATIONLOGGER_H +#include +#include +#include +#include +#include "mylocloggingconfiguration.h" +_LIT( KLogsDir, "Mylocation"); +_LIT( KLogFileName, "Mylocation.log"); + +/* + We have 3 possible logging methods: + + set MYLOC_LOGGING_METHOD to 0 to get no logging at all + set MYLOC_LOGGING_METHOD to 1 to get logging via RDebug::Print + set MYLOC_LOGGING_METHOD to 2 to get logging to log file + + Switching on/off is done in the Configuration file (MyLocLoggingConfiguration.h) + */ + +#if ( defined (_MYLOCLOGGING) ) +#if ( defined (_MYLOC_LOGGING_TO_FILE)) +#define MYLOC_LOGGING_METHOD 2 +#else +#define MYLOC_LOGGING_METHOD 1 +#endif +#else +#define MYLOC_LOGGING_METHOD 0 +#endif + +#if (MYLOC_LOGGING_METHOD==0) +#define MYLOCLOGSTRING(C) +#define MYLOCLOGSTRING1(C, X) +#define MYLOCLOGSTRING2(C, X, Y) +#define MYLOCLOGSTRING3(C, X, Y, Z) +#define MYLOCLOGSTRING4(C, X, Y, Z, A) +#endif +#if (MYLOC_LOGGING_METHOD==1) +#define MYLOCLOGSTRING(C) RDebug::Print(_L(C)); +#define MYLOCLOGSTRING1(C, X) RDebug::Print(_L(C),X); +#define MYLOCLOGSTRING2(C, X, Y) RDebug::Print(_L(C),X, Y); +#define MYLOCLOGSTRING3(C, X, Y, Z) RDebug::Print(_L(C),X, Y, Z); +#define MYLOCLOGSTRING4(C, X, Y, Z, A) RDebug::Print(_L(C),X, Y, Z, A); +#endif +#if (MYLOC_LOGGING_METHOD==2) +#ifndef __COMMSDEBUGUTILITY_H__ +#define __COMMSDEBUGUTILITY_H__ +#include +#endif + + +#define MYLOCLOGSTRING(C) {_LIT(tempLogDes,C);RFileLogger::WriteFormat(KLogsDir(),KLogFileName(), EFileLoggingModeAppend, tempLogDes());} +#define MYLOCLOGSTRING1(C, X) {_LIT(tempLogDes,C);RFileLogger::WriteFormat(KLogsDir(),KLogFileName(), EFileLoggingModeAppend, TRefByValue(tempLogDes()),X);} +#define MYLOCLOGSTRING2(C, X, Y) {_LIT(tempLogDes,C);RFileLogger::WriteFormat(KLogsDir(),KLogFileName(), EFileLoggingModeAppend, TRefByValue(tempLogDes()),X,Y);} +#define MYLOCLOGSTRING3(C, X, Y, Z) {_LIT(tempLogDes,C);RFileLogger::WriteFormat(KLogsDir(),KLogFileName(), EFileLoggingModeAppend, TRefByValue(tempLogDes()),X,Y,Z);} +#define MYLOCLOGSTRING4(C, X, Y, Z, A) {_LIT(tempLogDes,C);RFileLogger::WriteFormat(KLogsDir(),KLogFileName(), EFileLoggingModeAppend, TRefByValue(tempLogDes()),X,Y,Z,A);} +#endif + +/* + *Trace implementation + * Description: + * Macro definition file for logging. + */ + +#if !(MYLOC_LOGGING_METHOD == 0) +#ifdef __cplusplus + +// define the following macro to enable call stack trace. +#define FUNCTION_ETRY_EXIT + +const TInt KMaxLogLength = 256; +class CLogFunctionEntryExit : public CBase +{ +public: + CLogFunctionEntryExit(const char* aFunctionName, const TInt aLineNo) : + iFunctionName(aFunctionName) + { + #if (MYLOC_LOGGING_METHOD == 2) + iBuffer = HBufC8::New(KMaxLogLength); + if (iBuffer != NULL) + { + TPtr8 buf = iBuffer->Des(); + buf.Copy((const TUint8 *) aFunctionName); + _LIT8(KFormat,"=> %S [%02d])"); + RFileLogger::WriteFormat(KLogsDir(), KLogFileName(), + EFileLoggingModeAppend, TRefByValue ( + KFormat()), &buf, aLineNo); + } + #else + RDebug::Printf("=> %s [%02d])", iFunctionName, aLineNo); + #endif + } + ~CLogFunctionEntryExit() + { + #if (MYLOC_LOGGING_METHOD == 2) + TPtr8 buf = iBuffer->Des(); + _LIT8(KFormat,"<= %S"); + RFileLogger::WriteFormat(KLogsDir(), KLogFileName(), + EFileLoggingModeAppend, TRefByValue (KFormat()), + &buf); + delete iBuffer; + #else + RDebug::Printf("<= %s", iFunctionName); + #endif + } +private: + const char* iFunctionName; + #if (MYLOC_LOGGING_METHOD == 2) + HBufC8* iBuffer; + #endif +}; + +#ifdef FUNCTION_ETRY_EXIT +// track +#pragma message ("MyLocation Call stack trace - ENABLE") +#define __TRACE_CALLSTACK CLogFunctionEntryExit functionEtryExit(__PRETTY_FUNCTION__,__LINE__) +#endif +#endif // __cplusplus +#endif // +#ifndef __TRACE_CALLSTACK +// don't track function enter and exit +#pragma message ("MyLocation Call stack trace - DISABLE") +#define __TRACE_CALLSTACK +#endif + +#endif //MYLOCATIONLOGGER_H diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationlogger/inc/mylocloggingconfiguration.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationlogger/inc/mylocloggingconfiguration.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,44 @@ +/* +* 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: +* +*/ + + +#ifndef MYLOCCONFIGURATION_H +#define MYLOCCONFIGURATION_H + +//#ifdef _DEBUG // logging to file in debug only + +/** +* Have this line active if you want to have logging for this component. +* Comment this line out if you don't want any logging for this component. +*/ +#define _MYLOCLOGGING + +/** +* Have this line active if you want to have logging to file. +* Comment this line out if you want to have logging via RDebug::Print. +*/ +#define _MYLOC_LOGGING_TO_FILE + +/** +* Have this line active in case you want to have plugin loading performance +* measurements activated. +*/ +//#define _MYLOC_PERFORMANCE_TRACES + +//#endif // _DEBUG + +#endif // MYLOCCONFIGURATION_H diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/data/mylocations.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/data/mylocations.rss Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,43 @@ +/* +* 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 registeration file. +* +*/ + +// INCLUDES +#include +#include + +// RESOURCE SIGNATURE +RESOURCE RSS_SIGNATURE { } + +// RESOURCE DEFINITIONS +RESOURCE LBUF r_locint_list_title_myloc + { + txt=qtn_locint_list_title_myloc; + } +RESOURCE LBUF r_locint_list_category_history + { + txt=qtn_locint_list_category_history; + } +RESOURCE LBUF r_locint_list_category_contacts + { + txt=qtn_locint_list_category_others; + } +RESOURCE LBUF r_locint_list_category_calendar + { + txt=qtn_locint_list_category_others; + } + +//end of file \ No newline at end of file diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/group/bld.inf Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,25 @@ +/* +* 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: bld.inf for mylocationengine +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../loc/mylocations.loc APP_LAYER_LOC_EXPORT_PATH(mylocations.loc) + +PRJ_MMPFILES +mylocationsengine.mmp diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/group/mylocationsengine.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/group/mylocationsengine.mmp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,93 @@ +/* +* 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 mmp file +* +*/ + +#include +#include + +TARGET mylocationsengine.exe +TARGETTYPE exe +UID 0x2002680A +CAPABILITY ALL -TCB + +USERINCLUDE ../inc +USERINCLUDE ../../inc +USERINCLUDE ../../geocodeupdate/inc +USERINCLUDE ../../mylocationlogger/inc + +SYSTEMINCLUDE /epoc32/include +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/platform/mw +SYSTEMINCLUDE /epoc32/include/platform/app +SYSTEMINCLUDE /epoc32/include/mw +SYSTEMINCLUDE /epoc32/include/app + +START RESOURCE ../data/mylocations.rss +TARGETPATH APP_RESOURCE_DIR +HEADER +LANGUAGE_IDS +end + +SOURCEPATH ../src +SOURCE appmain.cpp +SOURCE mylocationsengine.cpp +SOURCE mylocationslookupdb.cpp +SOURCE mylocationsdatabasemanager.cpp +SOURCE maptileinterface.cpp +SOURCE lookupmaptiledb.cpp +SOURCE addresscomparision.cpp +SOURCE calendernotification.cpp + +LIBRARY euser.lib + + // Dependencies to S60 components +LIBRARY lbs.lib +LIBRARY eposlandmarks.lib +LIBRARY eposlmsearchlib.lib +LIBRARY eposlmdbmanlib.lib + +//calender DB dependencies +LIBRARY calinterimapi.lib + +//contacts DB dependencies +LIBRARY cntmodel.lib + + +//Contact db update with lat and lon field +LIBRARY geocodeupdate.lib + + +//RFs +LIBRARY efsrv.lib + +//RDbNamedDatabase,RDbView +LIBRARY edbms.lib + +// bafl utilities +LIBRARY bafl.lib + +// RFileLogger utilities +LIBRARY flogger.lib + +//Ecom library +LIBRARY ecom.lib + + +#ifdef ENABLE_ABIV2_MODE +DEBUGGABLE_UDEBONLY +#endif + +EPOCSTACKSIZE 0x6000 diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/addresscomparision.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/addresscomparision.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,51 @@ +/* +* 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: Address comparison header file implementation. +* +*/ + +#ifndef ADDRESSCOMPARISION_H_ +#define ADDRESSCOMPARISION_H_ +#include +#include "mylocationslookupdb.h" +class CAddressComparision : public CBase + { +public: + + static CAddressComparision* NewL(); + /** + * Is edited address changed . + * @param aLandmarks handle to all type of address + * @param aCntId contact id. + * @param aAddressType type of address + * @return Status code(ETrue address is changed ,EFalse is not changed) + */ + TBool IsAddressChangedL( const CPosLandmark& aLandmarks, const TInt32 aCntId, + const TUidSourceType aAddressType ); + +private: + + /** + * CAdressComparision. + * C++ default constructor. + */ + CAddressComparision(); + + // Handle to landmarks db + CPosLandmarkDatabase* iLandmarkDb; + + // Handle to the My locations database manager + CLookupDatabase *iLookUpDatabase; + }; +#endif /* ADDRESSCOMPARISION_H_ */ diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/appmain.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/appmain.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,30 @@ +/* +* 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: Application main header. +* +*/ + +#ifndef __APPMAIN_H__ +#define __APPMAIN_H__ + +// Include Files + +#include + +// Function Prototypes + +GLDEF_C TInt E32Main(); + +#endif // __APPMAIN_H__ + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/calendernotification.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/calendernotification.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,89 @@ +/* + * 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: calender db create notification . + * + */ + +#ifndef CALENDERNOTIFICATION_H_ +#define CALENDERNOTIFICATION_H_ + +// INCLUDES + +#include +#include + +/** + * The observer class gives notification to derive class . + * When calender db creates in specific path. + */ +class MNotifyChange +{ +public: + virtual void NotifyChangeL(TInt &aStatus)=0; +}; + +class CCalenderNotification : public CActive +{ +public: + /** + * CCalenderNotification::NewL() + */ + static CCalenderNotification* NewL(MNotifyChange* aNotifyChange); + + /** + * CCalenderNotification::NewL() + */ + static CCalenderNotification* NewLC(MNotifyChange* aNotifyChange); + /** + * ~CCalenderNotification. + * Virtual Destructor. + */ + virtual ~ CCalenderNotification(); + +private: + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(MNotifyChange* aNotifyChange); + /** + * CMyLocationsEngine. + * C++ default constructor. + */ + CCalenderNotification(MNotifyChange* aNotifyChange); + +public: + + /** + * CheckCalenderDbFileStructure. + * Observes the calendar db file structure changes. + */ + void CheckCalenderDbFileStructure( TChar aDrive ); + + /** + * Handles active object's request completion event. + */ + void RunL(); + /** + * Implements cancellation of an outstanding request. + */ + void DoCancel(); +private: + //data member + //file server + RFs iFsession; + //observer to provide notification on completion of event + MNotifyChange& iNotifyChange; +}; +#endif /* CALENDERNOTIFICATION_H_ */ diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/lookupmaptiledb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/lookupmaptiledb.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,122 @@ +/* +* 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: Maptile database lookup table header. +* +*/ + +#ifndef __LOOKUPMAPTILEDB_H__ +#define __LOOKUPMAPTILEDB_H__ + +//Headers needed +#include //RFs +#include //RDbNamedDatabase,RDbView + +#include "mylocationsdefines.h" + +/** + * CLookupMapTileDatabase class. + * This class handles all the operations related to maptile lookup database. + * + */ + +class CLookupMapTileDatabase : public CBase +{ +public: + // Two phase constructors + + /** + * This is a static function, which creates and returns an instance of this class. + */ + static CLookupMapTileDatabase* NewL( const TDesC& aLookupTableName ); + + /** + * This is a static function, which creates and returns an instance of this class. Pushes the created object + * to the cleanup stack. + */ + static CLookupMapTileDatabase* NewLC( const TDesC& aLookupTableName ); + + /** + * Destructor + */ + ~CLookupMapTileDatabase(); + +public: + + /** + * Opens the lookup database. + */ + TInt Open(); + + /** + * Closes the lookup database. + */ + void Close(); + + /** + * Creates an entry in the lookup table. + * @param[in] aLookupItem The lookup item to be created in the database. + */ + void CreateEntryL( const TLookupItem& aLookupItem ); + + /** + * Updates an entry in the lookup table. + * @param[in] aLookupItem The lookup item to be updated in the database. + */ + void UpdateEntryL( const TLookupItem& aLookupItem ); + + /** + * Deletes an entry from the lookup table. + * @param[in] aLookupItem The lookup item to be deleted from the database. + */ + void DeleteEntryL( const TLookupItem& aLookupItem ); + + /** + * Finds an entry in the lookup table. + * @param[in/out] aLookupItem The lookup item to be found in the database. The source iUid is passed + * in the lookup item + * @return ETrue if found, else EFalse + */ + TBool FindEntryL( TLookupItem& aLookupItem); + + + +private: + + // default constructor + CLookupMapTileDatabase(); + + // Second phase constructor + void ConstructL( const TDesC& aLookupTableName ); + + // Creates a lookup table in the lookup database. + void CreateTableL(RDbDatabase& aDatabase); + +private: + + // Handle to the items database + RDbNamedDatabase iItemsDatabase; + + // handle to the file session + RFs iFsSession; + + // holds the database file name + TFileName iDbFileName; + +}; + + +#endif // __LOOKUPMAPTILEDB_H__ + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/maptileinterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/maptileinterface.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,143 @@ +/* +* 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: Maptile interface header implementation. +* +*/ + +#ifndef __MAPTILEINTERFACE_H__ +#define __MAPTIlEINTERFACE_H__ + +#include +#include + +#include + + + +/** + * MMapTileObserver class. + * Observer class for notifying the maptile related events + * + */ +class MMapTileObserver + { +public: + + /** Informs once maptile is retrived from the REST server + * + * @param[in] aErrCode Error code + * @param[in] aMapTilePath Path where the maptile image staroed + * + */ + virtual void MapTilefetchingCompleted( TInt aErrCode,const TDesC& aMapTilePath ) = 0; + + /** Informs once geocoding completed + * + * @param[in] aLatitude converted latitude value + * @param[in] aLongitude converted longitude value + * + */ + virtual void RestGeoCodeCompleted( TReal aLatitude,TReal aLongitude ) = 0; + + }; + + + +/** + * Class used for interacting with maptile and geocoder components . + * This class raises the request for geocoding service and maptile + * fetching service. + */ +class CMapTileInterface : public CBase, MMaptileGeocoderObserver +{ +public: + + /** + * Factory method + */ + static CMapTileInterface* NewL(); + + /** + * Interface for requesting maptile image for a landmark object + * + * @param[in] aLandmark Landmark containing address details + * @param[in] aFilePath Path where the maptile image to be stored + * @param[in] aObserver Observer for callback notification + */ + void GetMapTileImageL( CPosLandmark* aLandmark , + const TDesC& aFilePath, MMapTileObserver* aObserver ); + + /** + * Interface for requesting maptile image for a landmark object + * + * @param[in] aAddressDetails containing address details + * @param[in] aFilePath Path where the maptile image to be stored + * @param[in] aObserver Observer for callback notification + */ + void GetMapTileImageL(const TDesC& aAddressDetails, + const TDesC& aFilePath, MMapTileObserver* aObserver); + + /** + * Constructor + */ + CMapTileInterface(); + + /** + * Destructor + */ + ~CMapTileInterface(); + +private: + + /** + * Function for Retrieving latitude & longitude information + * + * @param[in] aLatitude latitude value + * @param[in] aLongitude Longitude value + */ + void GetMapTileL( TReal aLatitude, TReal aLongitude ); + +protected: + + /** + * Derived from MMaptileGeocoderObserver + */ + void GeocodingCompleted( TInt aErrorcode, MAddressInfo& aAddressInfo ); + + /** + * Derived from MMaptileGeocoderObserver + */ + void MapTileFetchingCompleted( TInt aErrorcode, const TDesC& aMapImagePath ); + +private: + + /** + * Two phase construction + */ + void ConstructL(); + +private: + + //MaptileGeocode plugin interface instance + CMaptileGeocoderPlugin* iMaptileGeocoder; + //Flag to check street availability + TBool iStreetAvailable; + //Maptile image path + HBufC* iFilePath; + //Maptile observer + MMapTileObserver* iObserver ; + + }; +#endif // MAPTILEINTERFACE_H + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/mylocationsdatabasemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/mylocationsdatabasemanager.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,242 @@ +/* +* 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: Database manager implementation for location picker and +* maptile service. +* +*/ + +#ifndef __MYLOCATIONSDATABASEMANAGER_H__ +#define __MYLOCATIONSDATABASEMANAGER_H__ + +// Landmarks +#include +#include + +// Lookup database +#include "mylocationslookupdb.h" + +// Maximum string length of landmark address. +const TUint32 KMaxAddressLength = 255; + +/** Defines entry change type +*/ +enum TEntryChangeType + { + /** Entry added */ + EEntryAdded, + /** Entry modified */ + EEntryModified, + /** Entry deleted */ + EEntryDeleted, + /** Entry change unknown */ + EEntryUnknown + }; + + +/** + * CMyLocationsDatabaseManager class. + * This class handles all the operations related to mylocations landmark database. + * + */ +class CMyLocationsDatabaseManager : public CBase + { + public: + // Constructors and destructor + + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CMyLocationsDatabaseManager. + * C++ default constructor. + */ + CMyLocationsDatabaseManager(); + + /** + * ~CMyLocationsDatabaseManager. + * Virtual Destructor. + */ + virtual ~CMyLocationsDatabaseManager(); + + public: + /** + * UpdateDatabaseL. + * Updates the location into the landmark database and lookup table. + * Based on the entry source type and the entry change type the updation can be + * addition/modification/deletion. + * + * @param[in] aLandmark Landmark object to be updated in the database. + * @param[in] aUid Uid of the changed source entry. + * @param[in] aSourceType Source type of the aUid. + * @param[in] aChangeType Type of change to the entry ( added/modified/deleted ) + */ + void UpdateDatabaseL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType, const TEntryChangeType aChangeType ); + + /** Gets the full address from a given landmark object + * + * @param[out] aLandmarkAddress comma separated landmark's full address + * @param[in] aLandmark landmark object whose address needs to be found. + */ + void GetLandmarkFullAddress( TBuf& aLandmarkAddress, + const CPosLandmark* aLandmark ); + + + private: + + /** + * AddMylocationsCategory. + * Adds the category to mylocations and landmarks database. + * Used to add history and others categories. + * @param[in] aCategoryType defines the category type to be added. + */ + void AddMylocationsCategoryL( const TUint32 aCategoryType ); + + /** + * CheckIfDuplicateExistsL. + * Checks if this landmark is already present in database. + * If present returns the landmark id, else 0. + * @param[in] aLandmark A landmark object to be checked for. + * @returns If no duplicate is found in database returns 0 + * else returns the id of the found landmark. + */ + TPosLmItemId CheckIfDuplicateExistsL( const CPosLandmark* aLandmark ); + + /** + * CompareLandmarks. + * Compares two landmarks. Only the text fields, landmark name, + * street, city, state country and postal code are compared. + * @param[in] aLandmark1 First landmark object to be compared. + * @param[in] aLandmark2 Second landmark object to be compared. + * @returns ETrue if the landmarks are same, else returns EFalse. + */ + TBool CompareLandmarks( const CPosLandmark* alandmark1, + const CPosLandmark* alandmark2 ); + + /** + * HandleEntryAdditionL. + * Handles the entry addition in lookup table and landmarks db + * @param[in] aLandmark Landmark object added. + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void HandleEntryAdditionL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType ); + + /** + * HandleEntryModificationL. + * Handles the entry modification in lookup table and landmarks db + * @param[in] aLandmark Landmark object modified. + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void HandleEntryModificationL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType ); + + /** + * HandleEntryDeletionL. + * Handles the entry deletion in lookup table and landmarks db + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void HandleEntryDeletionL( const TUint32 aUid, const TUint32 aSourceType ); + + /** + * AddToMylocationsDbL. + * Adds entry into mylocations db and also updates the lookup table + * @param[in] aLandmark Landmark object to be added. + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void AddToMylocationsDbL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType ); + + /** + * ModifyMylocationsDbL. + * Updates the entry into mylocations db and also updates the lookup table + * @param[in] aLandmark Landmark object modified. + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void ModifyMylocationsDbL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType ); + + /** + * DeleteFromMylocationsDbL. + * Deletes the entry from mylocations db and also updates the lookup table + * @param[in] aUid Uid of the source entry corresponding to aLandmark.. + * @param[in] aSourceType source type of the aUid passed. + */ + void DeleteFromMylocationsDbL( const TUint32 aUid, const TUint32 aSourceType ); + + /** + * CreateCategoryL. + * Creates a new category in Mylocations Db and adds a corresponding entry in + * mylocations lookup table. + * @param[in] aUid Uid of the source category. + */ + void CreateCategoryL( const TUint32 aUid ); + + /** + * CheckCategoryAvailabilityL. + * Checks whether a category is available in database pointed by category manager. + * @param[in] aCategoryManager handle to the category manager + * @param[in] aCategoryId Id of the category + */ + void CheckCategoryAvailabilityL( CPosLmCategoryManager* aCategoryManager, + const TUint32 aCategoryId ); + + /** + * CheckAndReadLandmarkL. + * Checks whether a category is available in database pointed by category manager. + * @param[in] CPosLandmarkDatabase handle to the database manager + * @param[in] aLmId Id of the landmark + * @returns landmark object if found else NULL + */ + CPosLandmark* CMyLocationsDatabaseManager::CheckAndReadLandmarkL( + CPosLandmarkDatabase* aDb, const TUint32 aLmId ); + + private: + + // Handle to the landmark database + CPosLandmarkDatabase* iLandmarkDb; + + // Handle to the mylocations landmark database + CPosLandmarkDatabase* iMyLocationsLandmarksDb; + + // Contacts category to be created for contacts and calendar + // related location entries in landmark database + TPosLmItemId iLmContactsCatId; + + // handle to landmarks lookup database. + CLookupDatabase* iLandmarksLookupDb; + + // handle to mylocations lookup database. + CLookupDatabase* iMylocationsLookupDb; + + // handle to mylocations category manager + CPosLmCategoryManager* iMyLocationsCatManager; + + // handle to landmarks category manager + CPosLmCategoryManager* iLandmarksCatManager; + + // handle to the file session + RFs iFsSession; + + }; + +#endif // __MYLOCATIONSDATABASEMANAGER_H__ diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/mylocationsengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/mylocationsengine.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,320 @@ +/* +* 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 +#include + +// Header for contact DB +#include + +// Header for landmarks db +#include + +// mylocations database manager +#include "maptileinterface.h" +#include "mylocationsdatabasemanager.h" +#include "lookupmaptiledb.h" +#include "addresscomparision.h" +#include "calendernotification.h" + +/** + * 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; + //Contact id + TInt32 iUId; + //Address type + TInt32 iAddressType; + //Image path + TFileName iImagePath; + //Event type + TInt iEventType; +}; + +// 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: + + /** + * 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 ); + + /** Gets the handle to mylocations database manager + * + */ + CMyLocationsDatabaseManager& MyLocationsDbManager(); + +private: + + /** + * 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] aContactItem A contact item whose location details needs to be used to create landmark object. + * @param[in] aAddressType Mentions the address type ( prefered/work/home ) of the contact item to be used. + * @returns A valid landmark object if location in the contact item is validated, NULL otherwise. + */ + CPosLandmark* GetContactAddressDetailsLC( const CContactItem *aContactItem, + TContactAddressType aAddressType ); + + /** Creates a landmark object from contact item's location details + * @param[in] aContactItem A contact item whose location details needs to be used to create landmark object. + * @param[in] aAddressType Mentions the address type ( prefered/work/home ) of the contact item to be used. + * @returns A valid landmark object if location in the contact item is validated, NULL otherwise. + */ + CPosLandmark* GetContactLocationDetailsLC( const CContactItem *aContactItem, + TContactAddressType aAddressType ); + + /** Finds the contact's field type id + * @param[in] aContactItem A contact item whose field details needs to found. + * @param[in] aAddressType Mentions the address type ( prefered/work/home ) of the contact item to be used. + * @param[in] aField The field type of interest. + * @return If found, the index of the field within the field set, or KErrNotFound if not found. + */ + TInt FindContactsField( const CContactItem *aContactItem, TContactAddressType aAddressType, + TUid aField ); + + /** + * A call back function for calendar change notification + * @param aChangeItems List of changes since the last notification. + */ + virtual void CalChangeNotification( RArray& 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 contact database event and updates the landmark database + * @param aEvent Provides information about the change event. + */ + void HandlelandmarkDatabaseL( 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 HandleMaptileDatabaseL(TInt aEventType , + TLookupItem& aLookupItem ); + /** + * Handles active object's request completion event. + */ + void RunL(); + + /** + * Implements cancellation of an outstanding request. + */ + void DoCancel(); + + /** + * Implements RunError of active object. + */ + TInt RunError( TInt aError ); + + /** + * 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 ); + + /** + * 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); + + /** + * 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(); + /** + * Calender entry added. + */ + void CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry); + +public: //From MMapTileObserver + + /** + * Informs the maptile fetching completion + */ + void MapTilefetchingCompleted( TInt aErrCode,const TDesC& aMapTilePath ); + + /** + * Informs the geocode completion + */ + void RestGeoCodeCompleted( TReal latitude,TReal longitude); + +public://from MNotifychange + void NotifyChangeL(TInt &aStatus); + +private: + + // 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; + + //Address comparison pointer + CAddressComparision *iAddressCompare; + + //Maptile image request queue + RArray iMapTileRequestQueue; + + //Flag to check maptilegeocoder plugin availability + TBool iMaptileGeocoderPluginAvailable; + + //Maptile image path + TFileName imageFilePath; + //Object to listen calender db create notification. + CCalenderNotification *iCalenderNotification; + +}; + +#endif // __MYLOCATIONSENGINE_H__ +// End of File diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/inc/mylocationslookupdb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/inc/mylocationslookupdb.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,138 @@ +/* +* 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: Header file for mylocation database lookup table. +* +*/ + +#ifndef __MYLOCATIONSLOOKUPDB_H__ +#define __MYLOCATIONSLOOKUPDB_H__ + +//Headers needed +#include //RFs +#include //RDbNamedDatabase,RDbView + +#include "mylocationsdefines.h" + +/** + * CLookupDatabase class. + * This class handles all the operations related to mylocations lookup database. + * + */ + +class CLookupDatabase : public CBase +{ +public: + // Two phase constructors + + /** + * This is a static function, which creates and returns an instance of this class. + */ + static CLookupDatabase* NewL( const TDesC& aLookupTableName ); + + /** + * This is a static function, which creates and returns an instance of this class. Pushes the created object + * to the cleanup stack. + */ + static CLookupDatabase* NewLC( const TDesC& aLookupTableName ); + + /** + * Destructor + */ + ~CLookupDatabase(); + +public: + + /** + * Opens the lookup database. + */ + TInt Open(); + + /** + * Closes the lookup database. + */ + void Close(); + + /** + * Creates an entry in the lookup table. + * @param[in] aLookupItem The lookup item to be created in the database. + */ + void CreateEntryL( const TLookupItem& aLookupItem ); + + /** + * Updates an entry in the lookup table. + * @param[in] aLookupItem The lookup item to be updated in the database. + */ + void UpdateEntryL( const TLookupItem& aLookupItem ); + + /** + * Deletes an entry from the lookup table. + * @param[in] aLookupItem The lookup item to be deleted from the database. + */ + void DeleteEntryL( const TLookupItem& aLookupItem ); + + /** + * Finds an entry in the lookup table. + * @param[in/out] aLookupItem The lookup item to be found in the database. The source iUid and source type + * iSource is passed in the lookup item, if the entry is found, then the iLmId is copied to the lookup item + * @return ETrue if found, else EFalse + */ + TBool FindEntryL( TLookupItem& aLookupItem ); + + /** + * Finds list of lookup items given a landmark id. + * @param[in] aLandmarkId The landmark id to be found in the lookup database. + * @param[out] aLookupItemArray List of lookup entried found. + */ + void FindEntriesByLandmarkIdL( const TUint32 aLandmarkId, + RArray& aLookupItemArray ); + + /** + * Finds list of lookup items given a source type. + * @param[in] aSourceType The source type to be found in the lookup database. + * @param[out] aLookupItemArray List of lookup entried found. + */ + void FindEntriesBySourceTypeL( const TUint32 aSourceType, + RArray& aLookupItemArray ); + + + +private: + + // default constructor + CLookupDatabase(); + + // Second phase constructor + void ConstructL( const TDesC& aLookupTableName ); + + // Creates a lookup table in the lookup database. + void CreateTableL(RDbDatabase& aDatabase); + +private: + + // Handle to the items database + RDbNamedDatabase iItemsDatabase; + + // handle to the file session + RFs iFsSession; + + // holds the database file name + TFileName iDbFileName; + +}; + + +#endif // __MYLOCATIONSLOOKUP_H__ + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/loc/mylocations.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/loc/mylocations.loc Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,54 @@ +/* +* 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 loc file +* +*/ + + +//r: +//v: +//i:LOCALISATION_TARGET = s60,s90 +//i:Default mylocation category names, selector dialog title that can be displayed on UI. + +// LOCALISATION STRINGS + + +// d:Title of My locations +// l:title_pane_t2/opt9 +// r:9.2? +// +#define qtn_locint_list_title_myloc "My locations" + +//b:-1 +//e:-1 +//f:EDialogLabelFont +//s: +//w: +//d:History category created from My location. +//l:list_single_graphic_pane_t1 +// +#define qtn_locint_list_category_history "History" + + +//b:-1 +//e:-1 +//f:EDialogLabelFont +//s: +//w: +//d: Others category created from My location +//l:list_single_graphic_pane_t1 +// +#define qtn_locint_list_category_others "Others" + +// End of File diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/addresscomparision.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/addresscomparision.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,56 @@ +/* +* 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: Address comparison source implementation for maptile +* service. +* +*/ + +#include "mylocationlogger.h" +#include "addresscomparision.h" + + +CAddressComparision* CAddressComparision::NewL() +{ + CAddressComparision* self = new (ELeave) CAddressComparision(); + return self; +} + +CAddressComparision::CAddressComparision() +{ + +} + +// Need to enhance the functionality for address comparison +TBool CAddressComparision::IsAddressChangedL(const CPosLandmark& /*aLandmarks*/, + const TInt32 aCntId, const TUidSourceType aAddressType) +{ + __TRACE_CALLSTACK; + + + TBool addressChanged = ETrue; + CLookupDatabase* lookupdb = NULL; + lookupdb = CLookupDatabase::NewLC(KMylocationsLookupDatabaseName); + + TLookupItem lookupItem; + lookupItem.iUid = aCntId; + lookupItem.iSource = aAddressType; + User::LeaveIfError(lookupdb->Open()); + addressChanged=lookupdb->FindEntryL(lookupItem); + addressChanged=ETrue; + lookupdb->Close(); + CleanupStack::PopAndDestroy(lookupdb); + return addressChanged;//addressChanged; +} + +//end of file diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/appmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/appmain.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,87 @@ +/* +* 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: Application startup main implementation. +* +*/ + +// Include Files +#include "mylocationlogger.h" +#include "appmain.h" +#include "mylocationsengine.h" +#include +#include + +// Local Functions +// ----------------------------------------------------------------------------- +// DoExecuteL() +// +// ----------------------------------------------------------------------------- +// +static void DoExecuteL() +{ + __TRACE_CALLSTACK;// Create and install active scheduler + CActiveScheduler* scheduler = NULL; + + scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install(scheduler); + + // create Mylocations engine object + CMyLocationsEngine *myLocationsEngine = CMyLocationsEngine::NewL(); + CleanupStack::PushL( myLocationsEngine ); + // Start listening to calendar db changes + //myLocationsEngine->StartCalenderChangeNotifierL(); + + + // Start listening to landmarks db changes + //myLocationsEngine->StartLandmarksChangeNotifier(); + + //MYLOCLOGSTRING("Start listening to landmarks db changes."); + + RProcess::Rendezvous(KErrNone); + // Start handling requests + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(myLocationsEngine); + // Pop and destroy the scheduler + CleanupStack::PopAndDestroy(scheduler); + +} + +// ----------------------------------------------------------------------------- +// Execute() +// +// ----------------------------------------------------------------------------- +// +static TInt Execute() +{ + // __UHEAP_MARK; + TInt error = KErrNoMemory; + // Create the cleanup stack + CTrapCleanup* cleanup = CTrapCleanup::New(); + if (cleanup) + { + // Initialize and start the server + TRAP( error, DoExecuteL() ); + delete cleanup; + } + // __UHEAP_MARKEND; + return error; +} + +GLDEF_C TInt E32Main() +{ + return Execute(); +} + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/calendernotification.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/calendernotification.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,120 @@ +/* + * 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 source implementation for calender db path observation. + * + */ + +#include + +_LIT( KCalendarDbPath, ":\\private\\10003a5b\\" ); + +const TInt KMaxFilePtahSize = 256; + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::NewL() +// ----------------------------------------------------------------------------- +// +CCalenderNotification* CCalenderNotification::NewL(MNotifyChange* aNotifyChange) +{ + CCalenderNotification* self = CCalenderNotification::NewLC(aNotifyChange); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::NewLC() +// ----------------------------------------------------------------------------- +// +CCalenderNotification* CCalenderNotification::NewLC( + MNotifyChange* aNotifyChange) +{ + CCalenderNotification* self = new (ELeave) CCalenderNotification( + aNotifyChange); + CleanupStack::PushL(self); + self->ConstructL(aNotifyChange); + return self; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCalenderNotification::ConstructL(MNotifyChange* aNotifyChange) +{ + CActiveScheduler::Add(this); + User::LeaveIfError(iFsession.Connect()); + +} + + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::CheckCalenderDbFileStructure() +// Observes the calendar db file structure changes. +// ----------------------------------------------------------------------------- +// +void CCalenderNotification::CheckCalenderDbFileStructure( TChar aDrive ) +{ + TBuf filePath; + filePath.Append( aDrive ); + filePath.Append( KCalendarDbPath ); + iFsession.NotifyChange(ENotifyEntry, iStatus, filePath ); + SetActive(); +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::CCalenderNotification() +// Default constructor . +// ----------------------------------------------------------------------------- +// +CCalenderNotification::CCalenderNotification(MNotifyChange* aNotifyChange) : + CActive(EPriorityStandard), iNotifyChange(*aNotifyChange) +{ +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::~CCalenderNotification() +// default destuctor. +// ----------------------------------------------------------------------------- +// +CCalenderNotification::~CCalenderNotification() +{ + if (IsActive()) + { + Cancel(); + } + iFsession.Close(); +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::RunL() +// Assyncronous request handler , on completion of notification +// ----------------------------------------------------------------------------- +// +void CCalenderNotification::RunL() +{ + TInt status; + iNotifyChange.NotifyChangeL( status ); + if ( KErrNone == status ) + { + iFsession.NotifyChangeCancel(); + } +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::DoCancel() +// Handels the error condition on assynchronous request +// ----------------------------------------------------------------------------- +// +void CCalenderNotification::DoCancel() +{ +} + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,335 @@ +/* +* 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: Maptile database lookup table source implementation. +* +*/ + +#include +#include "mylocationlogger.h" +#include "lookupmaptiledb.h" + +_LIT( KSelectAllFrom, "SELECT * FROM " ); +_LIT(KQueryToDB,"SELECT * FROM cntmaptilelookuptable WHERE cntuid = %d AND source = %d"); + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::CLookupMapTileDatabase() +// Default constructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::CLookupMapTileDatabase() +{ +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Destructor. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase::~CLookupMapTileDatabase() +{ + __TRACE_CALLSTACK;// close the database + iItemsDatabase.Close(); + // close the file session + iFsSession.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::~CLookupMapTileDatabase() +// Creates an object of this class and pushes to cleanup stack. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewLC( + const TDesC& aLookupTableName) +{ + CLookupMapTileDatabase* self = new (ELeave) CLookupMapTileDatabase; + CleanupStack::PushL(self); + self->ConstructL(aLookupTableName); + return self; +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::NewL() +// Creates an object of this class. +// ----------------------------------------------------------------------------- +// +CLookupMapTileDatabase* CLookupMapTileDatabase::NewL( + const TDesC& aLookupTableName) +{ + CLookupMapTileDatabase* self = CLookupMapTileDatabase::NewLC( + aLookupTableName); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::ConstructL() +// 2nd phase contructor. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::ConstructL(const TDesC& aLookupTableName) +{ + __TRACE_CALLSTACK; + User::LeaveIfError(iFsSession.Connect()); + + //create private path + User::LeaveIfError(iFsSession.CreatePrivatePath(RFs::GetSystemDrive())); + // private path with no drive on it + iFsSession.PrivatePath(iDbFileName); + + TFindFile PrivFolder(iFsSession); + // find out the drive + if (KErrNone == PrivFolder.FindByDir(iDbFileName, KNullDesC)) + { + iFsSession.MkDir(KLookupDbPath); + iDbFileName.Copy(KLookupDbPath); + iDbFileName.Append(aLookupTableName); + + if (!BaflUtils::FileExists(iFsSession, iDbFileName)) + { // no database exists so we make one + User::LeaveIfError(iItemsDatabase.Create(iFsSession, iDbFileName)); + // and will create the only table needed for it + CreateTableL(iItemsDatabase); + + //close the database + iItemsDatabase.Close(); + } + } +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::Open() +// Opens the lookup database. +// ----------------------------------------------------------------------------- +// +TInt CLookupMapTileDatabase::Open() +{ + __TRACE_CALLSTACK; + return iItemsDatabase.Open(iFsSession, iDbFileName); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::Close() +// Closes the lookup database. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::Close() +{ + __TRACE_CALLSTACK; + iItemsDatabase.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::CreateTableL() +// Creates a lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::CreateTableL(RDbDatabase& aDatabase) +{ + __TRACE_CALLSTACK;// Create a table definition + CDbColSet* columns = CDbColSet::NewLC(); + + // Add Columns + + // Add uid column + columns->AddL(TDbCol(NCntColUid, EDbColUint32)); + + columns->AddL(TDbCol(NColSource, EDbColUint32)); + + // add file path type column + columns->AddL(TDbCol(NCntColFilePath, EDbColText16)); + + // Create a table + User::LeaveIfError(aDatabase.CreateTable(KMapTileLookupTable, *columns)); + + // cleanup the column set + CleanupStack::PopAndDestroy(columns); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::CreateEntryL() +// Creates an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::CreateEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// create a query for the view + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KMapTileLookupTable); + + TInt ret = Open(); + if (ret != KErrNone) + { + Close(); + Open(); + + } + iItemsDatabase.Begin(); + + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + // Inert the item + myView.InsertL(); + // set the fields + myView.SetColL(KColumncntUid, aLookupItem.iUid); + myView.SetColL(KColumnSource, aLookupItem.iSource); + myView.SetColL(KColumnFilePath, aLookupItem.iFilePath); + + myView.PutL(); + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); + Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::UpdateEntryL() +// Updates an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::UpdateEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// Create the query to find the row to be updated. + TFileName queryBuffer; + queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); + TInt ret = Open(); + if (ret != KErrNone) + { + Close(); + Open(); + + } + iItemsDatabase.Begin(); + + // Create a view of the table based on the query created. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + myView.EvaluateAll(); + myView.FirstL(); + + if (myView.AtRow()) + { + // found the entry. update it. + myView.UpdateL(); + myView.SetColL(KColumnFilePath, aLookupItem.iFilePath); + myView.PutL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); + + Close(); + +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::DeleteEntryL() +// Deletes an entry from the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupMapTileDatabase::DeleteEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// Create the query to find the row to be deleted. + + TFileName queryBuffer; + queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); + + TInt ret = Open(); + if (ret != KErrNone) + { + Close(); + Open(); + + } + iItemsDatabase.Begin(); + + RDbView myView; + // query buffer finds only the selected item row. + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + myView.EvaluateAll(); + + // positions the cursor on the first row of the rowset + myView.FirstL(); + + // Delete the entry found. + if (myView.AtRow()) + { + myView.GetL(); + if (aLookupItem.iUid == myView.ColUint(KColumncntUid)) + { + ret = iFsSession.Delete(myView.ColDes16(KColumnFilePath)); + } + myView.DeleteL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); + // compacts the databse, by physicaly removing deleted data. + iItemsDatabase.Compact(); + + Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupMapTileDatabase::FindEntryL() +// Finds an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +TBool CLookupMapTileDatabase::FindEntryL(TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// used to store return value + TBool retVal = EFalse; + // Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); + + TInt ret = Open(); + if (ret != KErrNone) + { + Close(); + Open(); + + } + iItemsDatabase.Begin(); + + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + myView.EvaluateAll(); + myView.FirstL(); + + if (myView.AtRow()) + { + // Item found. get the details. + myView.GetL(); + if (aLookupItem.iUid == myView.ColUint(KColumncntUid)) + { + aLookupItem.iFilePath.Copy(myView.ColDes16(KColumnFilePath)); + } + retVal = ETrue; + } + + CleanupStack::PopAndDestroy(&myView); // myView + Close(); + return retVal; +} +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/maptileinterface.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/maptileinterface.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,211 @@ +/* +* 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: Maptile interface source implementation for maptile +* service. +* +*/ + +#include +#include +#include +#include +#include +#include +#include "maptileinterface.h" +#include "mylocationlogger.h" + +//Invalid latitude & longitude value +const TReal KInvalidLatitudeLongitude = 200.00; +const TInt KStreetLvelZoom = 14; +const TInt KCityLevelZoom = 7; +const TInt KMapTileSize= 256; + +// ----------------------------------------------------------------------------- +// CMapTileInterface::NewL() +// Creates and returns the instance of CMapTileInterface +// ----------------------------------------------------------------------------- +// +CMapTileInterface* CMapTileInterface::NewL() +{ + CMapTileInterface* self = new (ELeave) CMapTileInterface(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CMapTileInterface::~CMapTileInterface() +// Destructor +// ----------------------------------------------------------------------------- +// +CMapTileInterface::~CMapTileInterface() +{ + __TRACE_CALLSTACK; + + delete iFilePath; + + delete iMaptileGeocoder; +} + + +// ----------------------------------------------------------------------------- +// CMapTileInterface::CMapTileInterface() +// Constructor +// ----------------------------------------------------------------------------- +// +CMapTileInterface::CMapTileInterface() : + iMaptileGeocoder( NULL ), iFilePath( NULL ),iObserver(NULL) +{ +} + +// ----------------------------------------------------------------------------- +// CMapTileInterface::ConstructL() +// Two phase constructor +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::ConstructL() +{ + __TRACE_CALLSTACK; + + iMaptileGeocoder = CMaptileGeocoderPlugin::NewL(); + + iMaptileGeocoder->SetMaptileGeocoderObserver( *this ); +} +// ----------------------------------------------------------------------------- +// CMapTileInterface::GetMapTileImageL() +// Interface for requesting maptile image for a landmark object +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::GetMapTileImageL(const TDesC& aAddressDetails, + const TDesC& aFilePath, MMapTileObserver* aObserver) +{ + __TRACE_CALLSTACK; + iObserver = aObserver; + delete iFilePath; + iFilePath = NULL; + iFilePath = HBufC::NewL(aFilePath.Length()); + iFilePath->Des().Copy(aFilePath); + TConnectionOption conn = EInteractive; + iMaptileGeocoder->GetCoordinateByAddressL(aAddressDetails, conn); +} +// ----------------------------------------------------------------------------- +// CMapTileInterface::GetMapTileImageL() +// Interface for requesting maptile image for a landmark object +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::GetMapTileImageL(CPosLandmark* aLandmark, + const TDesC& aFilePath, MMapTileObserver* aObserver) +{ + __TRACE_CALLSTACK; + iObserver = aObserver; + delete iFilePath; + iFilePath = NULL; + iFilePath = HBufC::NewL(aFilePath.Length()); + iFilePath->Des().Copy(aFilePath); + + TPtrC getStreet; + + aLandmark->GetPositionField(EPositionFieldStreet, getStreet); + + if (getStreet.Length() > 0) + { + iStreetAvailable = ETrue; + } + + TConnectionOption conn = EInteractive; + + + iMaptileGeocoder->GetCoordinateByAddressL(*aLandmark, conn); +} + +// ----------------------------------------------------------------------------- +// CMapTileInterface::GetMapTileImageL() +// Function for Retrieving latitude & longitude information +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::GetMapTileL(TReal aLatitude, TReal aLongitude) +{ + __TRACE_CALLSTACK;//Notification to observer , to update contact db, + iObserver->RestGeoCodeCompleted(aLatitude, aLongitude); + + TInt zoom = KCityLevelZoom; + TInt size = KMapTileSize; + if (iStreetAvailable) + { + zoom = KStreetLvelZoom; + } + + iStreetAvailable = EFalse; + + TMapTileParam mapTileparam(aLatitude, aLongitude, zoom, size); + + iMaptileGeocoder->GetMapTileByGeoCodeL( mapTileparam, *iFilePath ); +} + +// ----------------------------------------------------------------------------- +// CMapTileInterface::MapComplete() +// Maptile retrievel notification +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::MapTileFetchingCompleted( TInt aErrCode, const TDesC& aMapTilePath ) +{ + __TRACE_CALLSTACK; + MYLOCLOGSTRING1("MapComplete() status-%d ",aErrCode ); + iObserver->MapTilefetchingCompleted( aErrCode, aMapTilePath ); + +} + +// ----------------------------------------------------------------------------- +// CMapTileInterface::GeocodeComplete() +// Geocode completion notification +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::GeocodingCompleted(TInt aErrorcode, + MAddressInfo& aAddressInfo) +{ + __TRACE_CALLSTACK; + TReal latitude, longitude; + aAddressInfo.GetLatitude( latitude ); + aAddressInfo.GetLongitude( longitude ); + + MYLOCLOGSTRING1("GeocodeCompleted() status-%d",aErrorcode); + MYLOCLOGSTRING1("GeocodeCompleted() latitude-%f",latitude ); + MYLOCLOGSTRING1("GeocodeCompleted() longitude-%f",longitude ); + + if (aErrorcode == KErrNone) + { + if ( latitude != KInvalidLatitudeLongitude + && longitude != KInvalidLatitudeLongitude) + { + TRAPD( error, GetMapTileL(latitude, longitude) ); + if ( error != KErrNone ) + { + //Log error message + MYLOCLOGSTRING1("GetMapTileL() status-%d",error); + iObserver->MapTilefetchingCompleted(error, KNullDesC); + } + } + else + { + iObserver->MapTilefetchingCompleted(KErrGeneral, KNullDesC); + } + } + else + { + iObserver->MapTilefetchingCompleted(aErrorcode, KNullDesC); + + } +} + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/mylocationsdatabasemanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/mylocationsdatabasemanager.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,980 @@ +/* +* 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: Database manager implementation for location picker and +* maptile service. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mylocationsdatabasemanager.h" +#include "mylocationlogger.h" +#include "mylocationsdefines.h" +//Custom landmark database for storing the my locations details +_LIT( KMyLocationsDatabaseUri, "file://c:MyLocationsLandmarks.ldb" ); +// separator +_LIT( KSeparator, ","); +// space +_LIT( KSpace, " "); + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::ConstructL() +// 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::ConstructL() +{ + __TRACE_CALLSTACK;//Open and intialize Landmark DB + iLandmarkDb = CPosLandmarkDatabase::OpenL(); + ExecuteAndDeleteLD(iLandmarkDb->InitializeL()); + + // create landmarks lookup database. + iLandmarksLookupDb = CLookupDatabase::NewL(KLandmarksLookupDatabaseName); + User::LeaveIfError( iLandmarksLookupDb->Open() ); + + CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL(); + CleanupStack::PushL(dbManager); + + //Create custom landmark database for storing my locations data + if (!dbManager->DatabaseExistsL(KMyLocationsDatabaseUri)) + { + HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC( + KMyLocationsDatabaseUri); + dbManager->CreateDatabaseL(*dbInfo); + CleanupStack::PopAndDestroy(dbInfo); + } + + CleanupStack::PopAndDestroy(dbManager); + + //Open and initialize the custom landmark database + iMyLocationsLandmarksDb = CPosLandmarkDatabase::OpenL( + KMyLocationsDatabaseUri); + if (iMyLocationsLandmarksDb->IsInitializingNeeded()) + { + ExecuteAndDeleteLD(iMyLocationsLandmarksDb->InitializeL()); + } + + // create mylocations lookup database. + iMylocationsLookupDb + = CLookupDatabase::NewL(KMylocationsLookupDatabaseName); + + // Create category manager for mylocations + iMyLocationsCatManager = CPosLmCategoryManager::NewL( + *iMyLocationsLandmarksDb); + + // Create category manager for landmarks + iLandmarksCatManager = CPosLmCategoryManager::NewL(*iLandmarkDb); + + //open the lookup database + User::LeaveIfError( iMylocationsLookupDb->Open() ); + + // open file session + User::LeaveIfError(iFsSession.Connect()); + + // Add contacts, calendar and history categories + AddMylocationsCategoryL(ESourceLandmarksContactsCat); + //close the lookup database + iMylocationsLookupDb->Close(); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CMyLocationsDatabaseManager() +// Default constructor. +// ----------------------------------------------------------------------------- +// +CMyLocationsDatabaseManager::CMyLocationsDatabaseManager() : iLandmarkDb( NULL ), + iMyLocationsLandmarksDb( NULL ), + iLmContactsCatId( 0 ), iLandmarksLookupDb( NULL ), + iMylocationsLookupDb( NULL ), iMyLocationsCatManager( NULL ), + iLandmarksCatManager( NULL ) +{ +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::_CMyLocationsDatabaseManager() +// Destructor. +// ----------------------------------------------------------------------------- +// +CMyLocationsDatabaseManager::~CMyLocationsDatabaseManager() +{ + __TRACE_CALLSTACK;// delete member variables. + if (iLandmarksLookupDb) + { + iLandmarksLookupDb->Close(); + delete iLandmarksLookupDb; + } + if (iMylocationsLookupDb) + { + iMylocationsLookupDb->Close(); + delete iMylocationsLookupDb; + } + + delete iLandmarksCatManager; + + delete iLandmarkDb; + + delete iMyLocationsCatManager; + + delete iMyLocationsLandmarksDb; + + // close the file session + iFsSession.Close(); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::AddMylocationsCategoryL() +// Adds the category to the mylocations and landmarks database.. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::AddMylocationsCategoryL( const TUint32 aCategoryType ) +{ + __TRACE_CALLSTACK;//Open the resource file + RResourceFile resourceFile; + resourceFile.OpenL( iFsSession, KMyLocationsResourceFile ); + CleanupClosePushL( resourceFile ); + + // Get the category name + HBufC8* dataBuffer = NULL; + if (aCategoryType == ESourceLandmarksContactsCat) + { + dataBuffer = resourceFile.AllocReadLC(R_LOCINT_LIST_CATEGORY_CONTACTS); + } + + TResourceReader resReader; + resReader.SetBuffer(dataBuffer); + TPtrC resData = resReader.ReadTPtrC(); + + TLookupItem lookupItem; + lookupItem.iLmId = 0; + lookupItem.iSource = aCategoryType; + lookupItem.iUid = 0; + + RArray itemArray; + CleanupClosePushL(itemArray); + iMylocationsLookupDb->FindEntriesBySourceTypeL(lookupItem.iSource, + itemArray); + + // Get the category from mylocations lookup table + if (itemArray.Count() == 0) + { + // category not found, so create one. + CPosLandmarkCategory *category = CPosLandmarkCategory::NewL(); + CleanupStack::PushL(category); + category->SetCategoryNameL(resData); + + if ( aCategoryType == ESourceLandmarksContactsCat) + { + TPosLmItemId landmarksCatId = 0; + // Add category to landmarks database + TRAPD ( error, ( landmarksCatId = iLandmarksCatManager->AddCategoryL( *category ) ) ); + if (error == KErrNone || error == KErrAlreadyExists) + { + landmarksCatId = iLandmarksCatManager->GetCategoryL(resData); + } + lookupItem.iUid = landmarksCatId; + } + + // Add the catefory to mylocations database + TPosLmItemId myLocationsCatId = 0; + // Add category to mylocations database + TRAPD ( error, ( myLocationsCatId = iMyLocationsCatManager->AddCategoryL( *category ) ) ); + if (error == KErrNone || error == KErrAlreadyExists) + { + myLocationsCatId = iMyLocationsCatManager->GetCategoryL(resData); + } + // create this entry in mylocations lookup table + lookupItem.iSource = aCategoryType; + lookupItem.iLmId = myLocationsCatId; + iMylocationsLookupDb->CreateEntryL(lookupItem); + + CleanupStack::PopAndDestroy(category); + } + else + { + // category found in lookup table, + // update the corresponding category in Mylocations and landmarks database with + // current localized string + + + lookupItem.iLmId = itemArray[0].iLmId; + lookupItem.iUid = itemArray[0].iUid; + if ( aCategoryType == ESourceLandmarksContactsCat) + { + CPosLandmarkCategory *category = + iLandmarksCatManager->ReadCategoryLC(lookupItem.iUid); + category->SetCategoryNameL(resData); + TRAP_IGNORE ( ( iLandmarksCatManager->UpdateCategoryL( *category ) ) ); + CleanupStack::PopAndDestroy(category); + } + // update category in mylocations db + CPosLandmarkCategory *category2 = + iMyLocationsCatManager->ReadCategoryLC(lookupItem.iLmId); + category2->SetCategoryNameL(resData); + TRAP_IGNORE ( ( iMyLocationsCatManager->UpdateCategoryL( *category2 ) ) ); + CleanupStack::PopAndDestroy(category2); + } + + CleanupStack::PopAndDestroy(&itemArray); + + if ( dataBuffer ) + { + CleanupStack::PopAndDestroy(dataBuffer); + } + + if (aCategoryType == ESourceLandmarksContactsCat) + iLmContactsCatId = lookupItem.iUid; + + // Close the resource file + CleanupStack::PopAndDestroy( &resourceFile ); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::UpdateDatabaseL() +// Updates the location into the landmark database and lookup table. Based on +// the entry source type and the entry change type the updation can be +// addition/modification/deletion. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::UpdateDatabaseL(CPosLandmark* aLandmark, + const TUint32 aUid, const TUint32 aSourceType, const TEntryChangeType aChangeType) +{ + __TRACE_CALLSTACK;//open the lookup database + User::LeaveIfError(iMylocationsLookupDb->Open()); + switch (aChangeType) + { + // if the entry is added + case EEntryAdded: + { + // Handle this entry in the lookup table and update landmarks db. + HandleEntryAdditionL(aLandmark, aUid, aSourceType); + break; + } + // if the entry is modified + case EEntryModified: + { + // Handle this entry in the lookup table and update landmarks db. + HandleEntryModificationL(aLandmark, aUid, aSourceType); + break; + } + // if the entry is deleted + case EEntryDeleted: + { + // Handle this entry in the lookup table and update landmarks db. + HandleEntryDeletionL(aUid, aSourceType); + break; + } + } + //close the lookup database + iMylocationsLookupDb->Close(); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CheckIfDuplicateExistsL() +// Checks if this landmark is already present in database. If present returns the landmark id, else 0 +// ----------------------------------------------------------------------------- +// +TPosLmItemId CMyLocationsDatabaseManager::CheckIfDuplicateExistsL( + const CPosLandmark* aLandmark) +{ + __TRACE_CALLSTACK;// Stores the found duplicate landmark's id. + TPosLmItemId retId = 0; + + // Initially filter only the landmarks which are nearer to the current landmark. + // Then we can make a duplicate check on each of the found landmarks. + + // create a search object. + CPosLandmarkSearch* search = CPosLandmarkSearch::NewL( + *iMyLocationsLandmarksDb); + CleanupStack::PushL(search); + + TBuf lmAddress; + GetLandmarkFullAddress(lmAddress, aLandmark); + + // Create the search criterion + CPosLmTextCriteria* crit = CPosLmTextCriteria::NewLC(); + crit->SetTextL(lmAddress); + crit->SetAttributesToSearch(CPosLandmark::ELandmarkName); + + // Start the search and execute it at once. + ExecuteAndDeleteLD(search->StartLandmarkSearchL(*crit)); + CleanupStack::PopAndDestroy(crit); + + // Retrieve an iterator to access the matching landmarks. + CPosLmItemIterator* iter = search->MatchIteratorL(); + CleanupStack::PushL(iter); + + // Iterate the search matches. + TPosLmItemId lmId; + + while ((lmId = iter->NextL()) != KPosLmNullItemId) + { + //Found duplicate entries. + // Get the corresponding id in landmarks db + RArray itemArray; + CleanupClosePushL(itemArray); + iMylocationsLookupDb->FindEntriesByLandmarkIdL(lmId, itemArray); + if (itemArray.Count()) + { + if (itemArray[0].iSource == ESourceLandmarks) + { + // return id only if the source is from landmarks database. + retId = itemArray[0].iUid; + CleanupStack::PopAndDestroy(&itemArray); + break; + } + } + CleanupStack::PopAndDestroy(&itemArray); + } + + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(search); + + return retId; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CompareLandmarks() +// Compares two landmarks. Only the text fields, landmark name, street, city, state country and +// postal code are compared. +// ----------------------------------------------------------------------------- +// +TBool CMyLocationsDatabaseManager::CompareLandmarks( + const CPosLandmark* aLandmark1, const CPosLandmark* aLandmark2) +{ + __TRACE_CALLSTACK;// Compare landmark names + TPtrC name1, name2; + aLandmark1->GetLandmarkName(name1); + aLandmark2->GetLandmarkName(name2); + if (name1 != name2) + { + return EFalse; + } + + // Compare street info + TPtrC street1, street2; + aLandmark1->GetPositionField(EPositionFieldStreet, street1); + aLandmark2->GetPositionField(EPositionFieldStreet, street2); + if (street1 != street2) + { + return EFalse; + } + + // Compare City info + TPtrC city1, city2; + aLandmark1->GetPositionField(EPositionFieldCity, city1); + aLandmark2->GetPositionField(EPositionFieldCity, city2); + if (city1 != city2) + { + return EFalse; + } + + // compare state info + TPtrC state1, state2; + aLandmark1->GetPositionField(EPositionFieldState, state1); + aLandmark2->GetPositionField(EPositionFieldState, state2); + if (state1 != state2) + { + return EFalse; + } + + // compare postal code + TPtrC postalCode1, postalCode2; + aLandmark1->GetPositionField(EPositionFieldPostalCode, postalCode1); + aLandmark2->GetPositionField(EPositionFieldPostalCode, postalCode2); + if (postalCode1 != postalCode2) + { + return EFalse; + } + + // compare country name + TPtrC country1, country2; + aLandmark1->GetPositionField(EPositionFieldCountry, country1); + aLandmark2->GetPositionField(EPositionFieldCountry, country2); + if (country1 != country2) + { + return EFalse; + } + + return ETrue; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::HandleEntryAdditionL() +// Handles the entry addition in lookup table and landmarks db +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::HandleEntryAdditionL(CPosLandmark* aLandmark, + const TUint32 aUid, const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + if ( aSourceType == ESourceLandmarks ) + { + AddToMylocationsDbL(aLandmark, aUid, aSourceType); + return; + } + if ( aSourceType == ESourceLandmarksCategory ) + { + CreateCategoryL(aUid); + return; + } + // Create a lookup item + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + + // check if this landmark is already present in database + TPosLmItemId dupLmId = CheckIfDuplicateExistsL(aLandmark); + if (dupLmId) + { + // landmark already present in db. get the details + CPosLandmark* dupLandmark = iLandmarkDb->ReadLandmarkLC(dupLmId); + if (dupLandmark) + { + if (aSourceType == ESourceContactsPref || aSourceType + == ESourceContactsWork || aSourceType + == ESourceContactsHome) + { + dupLandmark->AddCategoryL(iLmContactsCatId); + } + // update the landmark object in the db + iLandmarkDb->UpdateLandmarkL(*dupLandmark); + CleanupStack::PopAndDestroy(dupLandmark); + } + + // point the lookup item's landmark uid to the existing landmark. + lookupItem.iLmId = dupLmId; + } + else // it is a new entry, so add into the database + { + if (aSourceType == ESourceContactsPref || aSourceType + == ESourceContactsWork || aSourceType == ESourceContactsHome) + { + aLandmark->AddCategoryL(iLmContactsCatId); + } + // add the landmark into the db. + // point the lookup item's landmark uid to the newly created landmark in the db. + lookupItem.iLmId = iLandmarkDb->AddLandmarkL(*aLandmark); + } + + // create the entry in the lookup table. + iLandmarksLookupDb->CreateEntryL(lookupItem); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::HandleEntryModificationL() +// Handles the entry modification in the lookup table and landmarks db. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::HandleEntryModificationL( + CPosLandmark* aLandmark, const TUint32 aUid, const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + if ( aSourceType == ESourceLandmarks ) + { + ModifyMylocationsDbL( aLandmark, aUid, aSourceType ); + return; + } + + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + + + if (aSourceType == ESourceContactsPref || aSourceType + == ESourceContactsWork || aSourceType == ESourceContactsHome) + { + // Behavior: If a contact is modified, + // If this entry is not present in lookup table. add the entry and update the landmarks db. + // If this entry is already present in lookup table, check if the location info is modified or not. + // If the location info is modified, delete the landmark from db and add the new landmark + // into the db. + // Before deletion make sure that the landmark is not being refered by other lookup entries. + + // find the entry in the lookup table. + if (iLandmarksLookupDb->FindEntryL(lookupItem)) + { + // check if the location info is modified by comparing the new landmark with the existing landmark + CPosLandmark* existingLandmark = NULL; + TRAPD( error, ( existingLandmark = + CheckAndReadLandmarkL( iLandmarkDb, lookupItem.iLmId ) ) ); + CleanupStack::PushL(existingLandmark); + if (error == KErrNotFound) + { + // Landmarks item deleted. So delete corresponding lookup entries. + RArray itemArray; + CleanupClosePushL(itemArray); + iLandmarksLookupDb->FindEntriesByLandmarkIdL(lookupItem.iLmId, + itemArray); + for (TInt i = 0; i < itemArray.Count(); i++) + { + iLandmarksLookupDb->DeleteEntryL(itemArray[i]); + } + CleanupStack::PopAndDestroy(&itemArray); + + // Add the entry into the lookup table and update landmarks db. + HandleEntryAdditionL(aLandmark, aUid, aSourceType); + + CleanupStack::PopAndDestroy(existingLandmark); + return; + } + + if (!CompareLandmarks(existingLandmark, aLandmark)) + { + // landmarks are not same, means location information is modified. + + // Check if the new landmark is already in db. + TPosLmItemId dupLmId = CheckIfDuplicateExistsL(aLandmark); + if (dupLmId) + { + // landmark already present in db. get the details + CPosLandmark* dupLandmark = iLandmarkDb->ReadLandmarkLC( + dupLmId); + if (dupLandmark) + { + // add category. + dupLandmark->AddCategoryL(iLmContactsCatId); + + // update the landmark object in the db + iLandmarkDb->UpdateLandmarkL(*dupLandmark); + } + CleanupStack::PopAndDestroy(dupLandmark); + + // update the lookup item to refer to the newly created landmark. + lookupItem.iLmId = dupLmId; + iLandmarksLookupDb->UpdateEntryL(lookupItem); + } + else + { + // landmark not already present in db. + // Create a new entry in the db + aLandmark->AddCategoryL(iLmContactsCatId); + lookupItem.iLmId = iLandmarkDb->AddLandmarkL(*aLandmark); + // update the lookup table + iLandmarksLookupDb->UpdateEntryL(lookupItem); + } + } + else + { + // landmarks are same, means location not modified. So return. + CleanupStack::PopAndDestroy(existingLandmark); + return; + } + + // delete the existing landmark only if it not being refered by other lookup entries. + + // Check if any other entries are refering this landmark. + RArray itemArray; + CleanupClosePushL(itemArray); + iLandmarksLookupDb->FindEntriesByLandmarkIdL( + existingLandmark->LandmarkId(), itemArray); + + if (itemArray.Count()) + { + // There are other lookup entries refering this landmark. So do not delete the landmark + + // If none of these lookup item's source type is contacts, disassociate 'iLmContactsCatId' category + // from this landmark. + TInt i = 0; + while (i < itemArray.Count()) + { + if (itemArray[i].iSource == ESourceContactsPref + || itemArray[i].iSource == ESourceContactsWork + || itemArray[i].iSource == ESourceContactsHome + ) + { + // a lookup item exists which is from contacts, so 'iLmContactsCatId' is still valid. + break; + } + i++; + } + if (i == itemArray.Count()) + { + // no lookup items from contacts exists refering this landmark. + // so disassociate 'iLmContactsCatId' from this landmark + + existingLandmark->RemoveCategory(iLmContactsCatId); + iLandmarkDb->UpdateLandmarkL(*existingLandmark); + } + } + else + { + // no other lookup entry is refering this landmark. + + // check if any other categories is associated with this landmark. + // Assume this landmark is associated with a history entry or a user created landmark entry. + // there is a chance that this landmark is still valid. + // Do not delete the landmark in this case. + RArray categoryIdArray; + CleanupClosePushL(categoryIdArray); + existingLandmark->GetCategoriesL(categoryIdArray); + if (categoryIdArray.Count() == 1) + { + // only one category i.e, 'iLmContactsCatId' is associated. + // delete the landmark. + iLandmarkDb->RemoveLandmarkL(existingLandmark->LandmarkId()); + } + CleanupStack::PopAndDestroy(&categoryIdArray); + } + CleanupStack::PopAndDestroy(&itemArray); + CleanupStack::PopAndDestroy(existingLandmark); + + } + else // entry not present in lookup table + { + // Add the entry into the lookup table and update landmarks db. + HandleEntryAdditionL(aLandmark, aUid, aSourceType); + } + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::HandleEntryDeletionL() +// Handles the entry deletion in lookup table and landmarks db. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::HandleEntryDeletionL(const TUint32 aUid, + const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + + if (aSourceType == ESourceContactsPref || aSourceType + == ESourceContactsWork || aSourceType == ESourceContactsHome) + { + // Behavior: In the context of contacts, if a contact is deleted, the user is not interested in + // that contact's data, hence its address as well. So, delete the corresponding entries from + // both lookup table and iLandmarkDb. + // Before deleting the entry from iLandmarkDb, make sure that this entry is not being refered by + // other entries of the lookup table. If it is being refered by other entries in lookup table, then + // do not delete the landmark. + + // Find the corresponding landmark uid + if (iLandmarksLookupDb->FindEntryL(lookupItem)) + { + // delete the lookup entry. + iLandmarksLookupDb->DeleteEntryL(lookupItem); + + // Check if any other entries are refering this landmark. + RArray itemArray; + CleanupClosePushL(itemArray); + iLandmarksLookupDb->FindEntriesByLandmarkIdL(lookupItem.iLmId, + itemArray); + + if (itemArray.Count()) + { + // There are other lookup entries refering this landmark. So do not delete the landmark + + // If none of these lookup item's source type is contacts, disassociate 'iLmContactsCatId' category + // from this landmark. + TInt i = 0; + while (i < itemArray.Count()) + { + if (itemArray[i].iSource == ESourceContactsPref + || itemArray[i].iSource == ESourceContactsWork + || itemArray[i].iSource == ESourceContactsHome) + { + // a lookup item exists which is from contacts/calendar, so 'iLmContactsCatId' is still valid. + break; + } + i++; + } + if ( i == itemArray.Count() ) + { + // no lookup items from contacts exists refering this landmark. + // so disassociate 'iLmContactsCatId' from this landmark + + CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC( + lookupItem.iLmId); + landmark->RemoveCategory(iLmContactsCatId); + iLandmarkDb->UpdateLandmarkL(*landmark); + CleanupStack::PopAndDestroy(landmark); + } + } + else + { + // no other lookup entry is refering this landmark. + + // check if any other categories is associated with this landmark. + // Assume this landmark is associated with a history entry or a user created landmark entry. + // there is a chance that this landmark is still valid. + // Do not delete the landmark in this case. + CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC( + lookupItem.iLmId); + RArray categoryIdArray; + CleanupClosePushL(categoryIdArray); + landmark->GetCategoriesL(categoryIdArray); + if (categoryIdArray.Count() == 1) + { + // only one category i.e, 'iLmCalendarCatId' is associated. + // delete the landmark. + iLandmarkDb->RemoveLandmarkL(lookupItem.iLmId); + } + + CleanupStack::PopAndDestroy(&categoryIdArray); + CleanupStack::PopAndDestroy(landmark); + } + CleanupStack::PopAndDestroy(&itemArray); + } + } + + else if (aSourceType == ESourceLandmarks) + { + // Landmarks item deleted. So delete corresponding lookup entries. + RArray itemArray; + CleanupClosePushL(itemArray); + iLandmarksLookupDb->FindEntriesByLandmarkIdL(aUid, itemArray); + for (TInt i = 0; i < itemArray.Count(); i++) + { + iLandmarksLookupDb->DeleteEntryL(itemArray[i]); + } + + CleanupStack::PopAndDestroy(&itemArray); + + DeleteFromMylocationsDbL(aUid, aSourceType); + } +} + + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::GetLandmarkFullAddress() +// Gets the comma separated full address of the given landmark. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::GetLandmarkFullAddress( + TBuf& aLandmarkAddress, + const CPosLandmark* aLandmark) +{ + TPtrC tempStr; + TInt retStatus; + TBool addressEmtpy = ETrue; + retStatus = aLandmark->GetLandmarkName(tempStr); + if (retStatus == KErrNone && tempStr.Length()) + { + aLandmarkAddress.Copy(tempStr); + addressEmtpy = EFalse; + } + + retStatus = aLandmark->GetPositionField(EPositionFieldStreet, tempStr); + if (retStatus == KErrNone && tempStr.Length()) + { + if (!addressEmtpy) + { + aLandmarkAddress.Append(KSeparator); + aLandmarkAddress.Append(KSpace); + aLandmarkAddress.Append(tempStr); + } + else + { + aLandmarkAddress.Copy(tempStr); + addressEmtpy = EFalse; + } + } + + retStatus = aLandmark->GetPositionField(EPositionFieldCity, tempStr); + if (retStatus == KErrNone && tempStr.Length()) + { + if (!addressEmtpy) + { + aLandmarkAddress.Append(KSeparator); + aLandmarkAddress.Append(KSpace); + aLandmarkAddress.Append(tempStr); + } + else + { + aLandmarkAddress.Copy(tempStr); + addressEmtpy = EFalse; + } + } + + retStatus = aLandmark->GetPositionField(EPositionFieldState, tempStr); + if (retStatus == KErrNone && tempStr.Length()) + { + if (!addressEmtpy) + { + aLandmarkAddress.Append(KSeparator); + aLandmarkAddress.Append(KSpace); + aLandmarkAddress.Append(tempStr); + } + else + { + aLandmarkAddress.Copy(tempStr); + addressEmtpy = EFalse; + } + } + + retStatus = aLandmark->GetPositionField(EPositionFieldCountry, tempStr); + if (retStatus == KErrNone && tempStr.Length()) + { + if (!addressEmtpy) + { + aLandmarkAddress.Append(KSeparator); + aLandmarkAddress.Append(KSpace); + aLandmarkAddress.Append(tempStr); + } + else + { + aLandmarkAddress.Copy(tempStr); + addressEmtpy = EFalse; + } + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CheckCategoryAvailabilityL() +// Checks if given category id is found in the database pointed by category manager. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::CheckCategoryAvailabilityL( + CPosLmCategoryManager* aCategoryManager, const TUint32 aCategoryId) +{ + __TRACE_CALLSTACK; + CPosLandmarkCategory *category = aCategoryManager->ReadCategoryLC( + aCategoryId); + CleanupStack::PopAndDestroy(category); +} +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CheckAndReadLandmarkL() +// Checks if given landmark id is found in the database and returns the read landmark. +// ----------------------------------------------------------------------------- +// +CPosLandmark* CMyLocationsDatabaseManager::CheckAndReadLandmarkL( + CPosLandmarkDatabase* aDb, const TUint32 aLmId) +{ + __TRACE_CALLSTACK; + CPosLandmark* lm = aDb->ReadLandmarkLC(aLmId); + CleanupStack::Pop(lm); + return lm; +} +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::AddToMylocationsDbL() +// Adds the entry into the mylocations database and updates the lookup table. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::AddToMylocationsDbL(CPosLandmark* aLandmark, + const TUint32 aUid, const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + if (aSourceType == ESourceLandmarks) + { + CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC(aUid); + RArray catArray; + CleanupClosePushL( catArray ); + landmark->GetCategoriesL(catArray); + + + // add the categories in the mylocations database for this landmark + for (TInt i = 0; i < catArray.Count(); i++) + { + TLookupItem lItem; + lItem.iUid = catArray[i]; + lItem.iSource = ESourceLandmarksUserCat; + lItem.iLmId = 0; + if (!iMylocationsLookupDb->FindEntryL(lItem)) + { + lItem.iSource = ESourceLandmarksContactsCat; + if (!iMylocationsLookupDb->FindEntryL(lItem)) + { + // means this is global category, so just add it + lItem.iLmId = lItem.iUid; + } + } + TRAP_IGNORE( aLandmark->AddCategoryL( lItem.iLmId ) ); + } + + CleanupStack::PopAndDestroy( &catArray ); + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + TRAP_IGNORE( lookupItem.iLmId = iMyLocationsLandmarksDb->AddLandmarkL( *aLandmark ) ); + CleanupStack::PopAndDestroy(landmark); + iMylocationsLookupDb->CreateEntryL(lookupItem); + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::ModifyMylocationsDbL() +// Adds the entry into the mylocations database and updates the lookup table. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::ModifyMylocationsDbL(CPosLandmark* aLandmark, + const TUint32 aUid, const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + iMylocationsLookupDb->FindEntryL(lookupItem); + iMylocationsLookupDb->DeleteEntryL(lookupItem); + iMyLocationsLandmarksDb->RemoveLandmarkL(lookupItem.iLmId); + AddToMylocationsDbL(aLandmark, lookupItem.iUid, lookupItem.iSource); +} + +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::DeleteFromMylocationsDbL() +// Deletes the entry from the mylocations database and updates the lookup table. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::DeleteFromMylocationsDbL(const TUint32 aUid, + const TUint32 aSourceType) +{ + __TRACE_CALLSTACK; + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = aSourceType; + iMylocationsLookupDb->FindEntryL(lookupItem); + + iMyLocationsLandmarksDb->RemoveLandmarkL(lookupItem.iLmId); + iMylocationsLookupDb->DeleteEntryL(lookupItem); +} +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::CreateCategoryL() +// Creates a new category in Mylocations Db and adds a corresponding entry in +// mylocations lookup table. +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::CreateCategoryL(const TUint32 aUid) +{ + __TRACE_CALLSTACK;// Read the category. + CPosLandmarkCategory *category = iLandmarksCatManager->ReadCategoryLC(aUid); + + TLookupItem lookupItem; + lookupItem.iUid = aUid; + lookupItem.iSource = ESourceLandmarksUserCat; + // Add category to landmarks database + TRAPD ( err, (lookupItem.iLmId = iMyLocationsCatManager->AddCategoryL( *category ) ) ); + + if (err == KErrNone) + { + iMylocationsLookupDb->CreateEntryL(lookupItem); + } + CleanupStack::PopAndDestroy(category); + +} + + +// End of file diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/mylocationsengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/mylocationsengine.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,1467 @@ +/* +* 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 source implementation for location picker +* and maptile service. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include "mylocationsengine.h" +#include "mylocationsdefines.h" +#include "geocodeupdate.h" //header for CGeocodeUpdate class +//handle for CMyLocationsHistoryDbObserver class +#include "mylocationlogger.h" +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) +_LIT ( KImageStorageDrive, "C:\\Maptile\\"); +#endif +_LIT(KFolderName,":\\MapTile\\"); +const TInt KImagePathSize=36; +const TInt KBufSize=256; +const TInt KDefaultFilePathSize = 20; + +// separator +_LIT( KSeparator, ","); +_LIT(KContactPrefered, "Contact Prefered"); +_LIT(KContactHome, "Contact Home"); +_LIT(KContactWork, "Contact Work"); +_LIT(KPNGType, ".png"); +_LIT(KSingleSpace, " "); + +// ============================ MEMBER FUNCTIONS =============================== + +CMyLocationsEngine* CMyLocationsEngine::NewL() +{ + CMyLocationsEngine* self = new (ELeave) CMyLocationsEngine(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::ConstructL() +{ + __TRACE_CALLSTACK; + CActiveScheduler::Add(this); + + + + //Connection to Landmark DB + iLandmarkDb = CPosLandmarkDatabase::OpenL(); + ExecuteAndDeleteLD(iLandmarkDb->InitializeL()); + + MYLOCLOGSTRING("Connection to Landmark DB."); + // create CMyLocationsDatabaseManager instance + iMyLocationsDatabaseManager = new (ELeave) CMyLocationsDatabaseManager; + iMyLocationsDatabaseManager->ConstructL(); + + MYLOCLOGSTRING("create CMyLocationsDatabaseManager instance"); + + TRAPD( error , iMapTileInterface = CMapTileInterface::NewL()); + if( error == KErrNone ) + { + iMaptileGeocoderPluginAvailable = ETrue; + } + + MYLOCLOGSTRING("iMapTileInterface = CMapTileInterface::NewL()"); + //Maptile Db instance + iMaptileDatabase = CLookupMapTileDatabase::NewL(KMapTileLookupDatabaseName); + + MYLOCLOGSTRING("Maptile Db instance created "); + + iAddressCompare = CAddressComparision::NewL(); + + MYLOCLOGSTRING(" start contact db observation "); + StartContactsChangeNotifierL(); + MYLOCLOGSTRING(" start landmark db observation "); + StartLandmarksChangeNotifier(); + + //set the folder path to store maptile + imageFilePath.Zero(); + SetFolderPathL(); + + TInt status; + iCalSession = CCalSession::NewL(); + NotifyChangeL(status); + +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::SetFolderPath() +// set folder path structure +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::SetFolderPathL() +{ + __TRACE_CALLSTACK; + RFs session; + User::LeaveIfError(session.Connect()); + if ( imageFilePath.Length() > 0 && BaflUtils::FolderExists(session, imageFilePath)) + { + session.Close(); + MYLOCLOGSTRING("Image folder path exists"); + return; + } + const TUint EMediaMemoryCard = 0x000014; + imageFilePath.Zero(); +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + imageFilePath.Copy(KImageStorageDrive); + MYLOCLOGSTRING("using in debug mode"); +#else + TVolumeInfo vol; + TInt driveNumber = EDriveE; + TChar driveLetter; + TDriveInfo driveInfo; + TInt error( KErrNone ); + error=session.Volume(vol, driveNumber); + MYLOCLOGSTRING1("E drive volume info status -%d",error); + if (error == KErrNone) + { + error = session.Drive(driveInfo, driveNumber); + MYLOCLOGSTRING1("E driveinfo status -%d",error); + switch(driveInfo.iType) + { + case EMediaFlash: + case EMediaHardDisk: + case EMediaNANDFlash: + case EMediaMemoryCard: + case EMediaCdRom: + { + MYLOCLOGSTRING(" E drive match case"); + session.DriveToChar( driveNumber , driveLetter ); + imageFilePath.Append(driveLetter); + imageFilePath.Append(KFolderName); + break; + } + default: + break; + + }; + } + + if (!imageFilePath.Length() > 0) + { + driveNumber = EDriveF; + error = session.Volume(vol, driveNumber); + MYLOCLOGSTRING1("F drive volume info status -%d",error); + + if (error == KErrNone) + { + error = session.Drive(driveInfo, driveNumber); + MYLOCLOGSTRING1("F drive info status-%d", error); + + switch (driveInfo.iMediaAtt) + { + /** Solid-state media. */ + case EMediaFlash: + case EMediaHardDisk: + case EMediaNANDFlash: + case EMediaMemoryCard: + { + MYLOCLOGSTRING("F drive exist as this type"); + session.DriveToChar(driveNumber, driveLetter); + imageFilePath.Append(driveLetter); + imageFilePath.Append(KFolderName); + break; + } + + default: + break; + + }; + } + } +#endif + if (imageFilePath.Length()>0 && !BaflUtils::FolderExists(session, imageFilePath)) + { + session.MkDirAll(imageFilePath); + MYLOCLOGSTRING("folder path does not exist , created "); + } + session.Close(); +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::CMyLocationsEngine() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CMyLocationsEngine::CMyLocationsEngine() : + CActive(EPriorityStandard), iCalSession(NULL), iCalView(NULL), iContactsDb( + NULL), iContactChangeNotifier(NULL), iLandmarkDb(NULL), + iMapTileInterface(NULL), iMyLocationsDatabaseManager(NULL), + iMaptileDatabase(NULL), iAddressCompare(NULL), + iMaptileGeocoderPluginAvailable(EFalse),iCalenderNotification(NULL) +{ + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::~CMyLocationsEngine() +// Destructor. +// ----------------------------------------------------------------------------- +// +CMyLocationsEngine::~CMyLocationsEngine() +{ + __TRACE_CALLSTACK;// delete the member variables. + + delete iContactChangeNotifier; + + delete iMyLocationsDatabaseManager; + + delete iLandmarkDb; + + delete iContactsDb; + + delete iCalView; + + delete iCalSession; + + delete iMapTileInterface; + + delete iMaptileDatabase; + + delete iAddressCompare; + + delete iCalenderNotification; + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::NotifyChangeL() +// Starts calender db create notification to get callbacks. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::NotifyChangeL(TInt &aStatus) +{ + __TRACE_CALLSTACK; + + TBufC defaultFile = iCalSession->DefaultFileNameL(); + TChar drive = defaultFile[0]; + + TRAP(aStatus, iCalSession->OpenL( defaultFile )); + MYLOCLOGSTRING1("iCalSession->OpenL() status-%d",aStatus); + if ( KErrNone == aStatus ) + { + // create a calendar entry view with the opened session + iCalView = CCalEntryView::NewL(*iCalSession); + StartCalenderChangeNotifierL(); + } + else + { + if( !iCalenderNotification ) + { + iCalenderNotification = CCalenderNotification::NewL( this ); + } + + + iCalenderNotification->CheckCalenderDbFileStructure( drive ); + } +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::StartCalenderChangeNotifierL() +// Starts calender change notification method to get callbacks when entries are +// added/modified/deleted in contacts +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::StartCalenderChangeNotifierL() +{ + __TRACE_CALLSTACK;// Get the current time and set Calendar filter to consider entries whose start time + // fall under the timeframe one year past and one year ahead of the current time. + if (iCalSession) + { + MYLOCLOGSTRING("iCalSession is not null"); + TTime currentTime; + currentTime.HomeTime(); + + TTime startTime = currentTime - TTimeIntervalYears(1); + TTime endTime = currentTime + TTimeIntervalYears(1); + + TCalTime calStartTime; + calStartTime.SetTimeLocalL(startTime); + + MYLOCLOGSTRING("SetTimeLocalL(startTime)"); + + TCalTime calEndTime; + calEndTime.SetTimeLocalL(endTime); + + MYLOCLOGSTRING("SetTimeLocalL(endTime)"); + + // set the filter for modification tracking + CCalChangeNotificationFilter *filter = + CCalChangeNotificationFilter::NewL( + MCalChangeCallBack2::EChangeEntryAll, ETrue, + CalCommon::TCalTimeRange(calStartTime, calEndTime)); + MYLOCLOGSTRING(" CCalChangeNotificationFilter::NewL()"); + // 'this' object implements MCalChangeCallBack + iCalSession->StartChangeNotification(*this, *filter); + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::StartContactsChangeNotifierL() +// Starts contacts change notification method to get callbacks when entries are +// added/modified/deleted in contacts +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::StartContactsChangeNotifierL() +{ + __TRACE_CALLSTACK; + + GeocodeUpdate::CreateContactdb(); + iContactsDb = CContactDatabase::OpenL(); + // Create CContactChangeNotifier object with 'this' object. + iContactChangeNotifier = CContactChangeNotifier::NewL(*iContactsDb,this); +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::StartLandmarksChangeNotifier() +// Starts landmarks change notification method to get callbacks when entries are added/modified/deleted in landmarks +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::StartLandmarksChangeNotifier() +{ + __TRACE_CALLSTACK;// Resume event listening + iLandmarkDb->NotifyDatabaseEvent(iLmEvent, iStatus); + SetActive(); +} + + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::CalChangeNotification() +// Callback when there is a change in the calendar database. +// ----------------------------------------------------------------------------- +// + +void CMyLocationsEngine::CalChangeNotification( + RArray& aChangeItems) +{ + __TRACE_CALLSTACK; + + if(iCalenderNotification) + { + delete iCalenderNotification; + iCalenderNotification = NULL; + } + + // get entries associated with this UID + for (int i = 0; i < aChangeItems.Count(); i++) + { + + TCalChangeEntry calChangeEntry = aChangeItems[i]; + iEventType = calChangeEntry.iChangeType; + switch (calChangeEntry.iChangeType) + { + case EChangeAdd: + { + + TRAP_IGNORE(CalenderEntryAddedL(calChangeEntry)); + break; + } + + case EChangeModify: + { + + TLookupItem lookupItem; + lookupItem.iSource = ESourceCalendar; + lookupItem.iUid = calChangeEntry.iEntryId; + //TODO: comapare address and then delete + TRAP_IGNORE( iMaptileDatabase->DeleteEntryL(lookupItem) ); + TRAP_IGNORE( CalenderEntryAddedL(calChangeEntry) ); + break; + } + case EChangeDelete: + { + TLookupItem lookupItem; + lookupItem.iSource = ESourceCalendar; + lookupItem.iUid = calChangeEntry.iEntryId; + TRAP_IGNORE( iMaptileDatabase->DeleteEntryL(lookupItem)); + break; + } + }; + + } +} + +void CMyLocationsEngine::CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry) +{ + __TRACE_CALLSTACK; + CCalEntry* calEntry = NULL; + calEntry = iCalView->FetchL(aCalChangeEntry.iEntryId); + TPtrC address(calEntry->LocationL()); + if(address.Length()>0) + { + RequestMapTileImageL(address,ESourceCalendar, aCalChangeEntry.iEntryId); + } + delete calEntry; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::HandleDatabaseEventL() +// Callback that provides information about the contact database change event. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::HandleDatabaseEventL(TContactDbObserverEvent aEvent) +{ + __TRACE_CALLSTACK; + + HandlelandmarkDatabaseL(aEvent); + + //Forward the event for maptile fetching only if maptile plugin available + if( iMaptileGeocoderPluginAvailable ) + { + TriggerMaptileRequestL(aEvent); + } + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::HandlelandmarkDatabaseL() +// Process the contact database event and updates the landmark database +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::HandlelandmarkDatabaseL( + TContactDbObserverEvent& aEvent) +{ + __TRACE_CALLSTACK;// If contact is modified or added, update the mylocations db + if (aEvent.iType == EContactDbObserverEventContactChanged || aEvent.iType + == EContactDbObserverEventContactAdded) + { + //Get the contact item + CContactItem* contactItem = + iContactsDb->ReadContactL(aEvent.iContactId); + + if (contactItem) + { + CleanupStack::PushL(contactItem); + + // Get the default/prefered address details + CPosLandmark *preferedAddressLm = GetContactLocationDetailsLC( + contactItem, EAddressPref); + + // Get the work address details + CPosLandmark *workAddressLm = GetContactLocationDetailsLC( + contactItem, EAddressWork); + + // Get the home address details + CPosLandmark *homeAddressLm = GetContactLocationDetailsLC( + contactItem, EAddressHome); + + // if the contact item has no validated address (preferef, home or work) + if (!preferedAddressLm && !workAddressLm && !homeAddressLm) + { + if (aEvent.iType == EContactDbObserverEventContactChanged) + { + // If the contact is a modified one and it might already exist in + // mylocations db, so delete it + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + aEvent.iContactId, ESourceContactsPref, + EEntryDeleted); + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + aEvent.iContactId, ESourceContactsWork, + EEntryDeleted); + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + aEvent.iContactId, ESourceContactsHome, + EEntryDeleted); + } + } + else + { + // There is atleast one valid address present. + + // Get the TEntryChangeType for contacts. + TEntryChangeType changeType = MapChangeType( + ESourceContactsPref, aEvent.iType); + + // if home address available, update Mylocations. + if (homeAddressLm) + { + iMyLocationsDatabaseManager->UpdateDatabaseL(homeAddressLm, + aEvent.iContactId, ESourceContactsHome, changeType); + CleanupStack::PopAndDestroy(homeAddressLm); + } + + // if work address available, update Mylocations. + if (workAddressLm) + { + iMyLocationsDatabaseManager->UpdateDatabaseL(workAddressLm, + aEvent.iContactId, ESourceContactsWork, changeType); + CleanupStack::PopAndDestroy(workAddressLm); + } + + // if prefered address available, update Mylocations. + if (preferedAddressLm) + { + iMyLocationsDatabaseManager->UpdateDatabaseL( + preferedAddressLm, aEvent.iContactId, + ESourceContactsPref, changeType); + CleanupStack::PopAndDestroy(preferedAddressLm); + } + + } + + // Pop and destroy the contactItem + CleanupStack::PopAndDestroy(contactItem); + } + } + else if (aEvent.iType == EContactDbObserverEventContactDeleted) + { + // the contact is deleted, so delete the corresponding entries from database. + + // delete prefered address in database + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + ESourceContactsPref, EEntryDeleted); + + // delete work address in database + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + ESourceContactsWork, EEntryDeleted); + + // delete home address in database + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + ESourceContactsHome, EEntryDeleted); + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::TriggerMaptileRequestL() +// Callback that provides information about the contact database change event. +// ----------------------------------------------------------------------------- +// + +void CMyLocationsEngine::TriggerMaptileRequestL(TContactDbObserverEvent& aEvent) +{ + __TRACE_CALLSTACK; + TLookupItem lookupItem; + lookupItem.iUid = aEvent.iContactId; + // If contact is deleted delete from mylocations db + /* if (aEvent.iType == EContactDbObserverEventContactDeleted) + { + MYLOCLOGSTRING("EContactDbObserverEventContactDeleted" ); + // delete prefered address in database + lookupItem.iSource = ESourceContactsPref; + FindEntryAndDeleteL(lookupItem); + + lookupItem.iSource = ESourceContactsWork; + FindEntryAndDeleteL(lookupItem); + + lookupItem.iSource = ESourceContactsHome; + FindEntryAndDeleteL(lookupItem); + }*/ + + //Get the contact item + iEventType = aEvent.iType; + CContactItem* contactItem = iContactsDb->ReadContactL(aEvent.iContactId); + CleanupStack::PushL(contactItem); + + CPosLandmark *preferedAddressLm = NULL; + CPosLandmark *workAddressLm = NULL; + CPosLandmark *homeAddressLm = NULL; + + // If contact is modified or added, update the mylocations db + /* if (contactItem) + { + CleanupStack::PushL(contactItem); + */ + // Get the home address details + homeAddressLm = GetContactAddressDetailsLC(contactItem, EAddressHome); + + // Get the work address details + workAddressLm = GetContactAddressDetailsLC(contactItem, EAddressWork); + + // Get the default/prefered address details + preferedAddressLm = GetContactAddressDetailsLC(contactItem, EAddressPref); + + // iContactUid = aEvent.iContactId; + switch (aEvent.iType) + { + case EContactDbObserverEventContactChanged: + { + MYLOCLOGSTRING("EContactDbObserverEventContactChanged" );MYLOCLOGSTRING1("iMapTileRequestQueue.Count()-%d",iMapTileRequestQueue.Count() ); + + if (iMapTileRequestQueue.Count() > 0) + { + if (iMapTileRequestQueue[0]->iUId == aEvent.iContactId) + { + if (preferedAddressLm) + { + CleanupStack::PopAndDestroy(preferedAddressLm); + } + if (workAddressLm) + { + CleanupStack::PopAndDestroy(workAddressLm); + } + if (homeAddressLm) + { + CleanupStack::PopAndDestroy(homeAddressLm); + } + + CleanupStack::PopAndDestroy(contactItem); + MYLOCLOGSTRING("retrun from geolocation callback" ); + return; + } + } + /* + // if the contact item has no validated address (preferef, home or work) + if (!preferedAddressLm && !workAddressLm && !homeAddressLm) + { + MYLOCLOGSTRING("Contact changed no address" ); + //Delete the entries from maptile lookup table + lookupItem.iSource = ESourceContactsPref; + iMaptileDatabase->DeleteEntryL(lookupItem); + + lookupItem.iSource = ESourceContactsWork; + iMaptileDatabase->DeleteEntryL(lookupItem); + + lookupItem.iSource = ESourceContactsHome; + iMaptileDatabase->DeleteEntryL(lookupItem); + + }*/ + /* else + {*/ + MYLOCLOGSTRING("Contact address changed" ); + + // if default address available, update Mylocations. + lookupItem.iSource = ESourceContactsPref; + if (preferedAddressLm) + { + MYLOCLOGSTRING("preferedAddressLm address changed" ); + + if (iAddressCompare->IsAddressChangedL(*preferedAddressLm, + aEvent.iContactId, ESourceContactsPref)) + + { + //remove entry from database + iMaptileDatabase->DeleteEntryL(lookupItem); + RequestMapTileImageL(*preferedAddressLm, ESourceContactsPref, + aEvent.iContactId); + } + + CleanupStack::PopAndDestroy(preferedAddressLm); + + } + else + { + iMaptileDatabase->DeleteEntryL(lookupItem); + } + + // if work address available, update Mylocations. + lookupItem.iSource = ESourceContactsWork; + if (workAddressLm) + { + MYLOCLOGSTRING("workAddressLm address changed" ); + if (iAddressCompare->IsAddressChangedL(*workAddressLm, + aEvent.iContactId, ESourceContactsWork)) + //remove entry from database + { + iMaptileDatabase->DeleteEntryL(lookupItem); + RequestMapTileImageL(*workAddressLm, ESourceContactsWork, + aEvent.iContactId); + } + + CleanupStack::PopAndDestroy(workAddressLm); + + } + else + { + iMaptileDatabase->DeleteEntryL(lookupItem); + } + + // if home address available, update Mylocations. + lookupItem.iSource = ESourceContactsHome; + if (homeAddressLm) + { + MYLOCLOGSTRING("homeAddressLm address changed" ); + + if (iAddressCompare->IsAddressChangedL(*homeAddressLm, + aEvent.iContactId, ESourceContactsHome)) + + { + //remove entry from databse + iMaptileDatabase->DeleteEntryL(lookupItem); + RequestMapTileImageL(*homeAddressLm, ESourceContactsHome, + aEvent.iContactId); + } + CleanupStack::PopAndDestroy(homeAddressLm); + } + else + { + iMaptileDatabase->DeleteEntryL(lookupItem); + } + // } + break; + } + case EContactDbObserverEventContactDeleted: + { + + lookupItem.iSource = ESourceContactsPref; + iMaptileDatabase->DeleteEntryL(lookupItem); + + lookupItem.iSource = ESourceContactsWork; + iMaptileDatabase->DeleteEntryL(lookupItem); + + lookupItem.iSource = ESourceContactsHome; + iMaptileDatabase->DeleteEntryL(lookupItem); + + MYLOCLOGSTRING("EContactDbObserverEventContactDeleted "); + /* // the contact is deleted, so delete the corresponding entries from database. + TLookupItem lookupItem; + lookupItem.iUid = aEvent.iContactId; + iMaptileDatabase->DeleteEntryL(lookupItem);*/ + break; + } + case EContactDbObserverEventContactAdded: + { + MYLOCLOGSTRING("EContactDbObserverEventContactAdded" ); + if (preferedAddressLm) + { + RequestMapTileImageL(*preferedAddressLm, ESourceContactsPref, + aEvent.iContactId); + CleanupStack::PopAndDestroy(preferedAddressLm); + } + if (workAddressLm) + { + RequestMapTileImageL(*workAddressLm, ESourceContactsWork, + aEvent.iContactId); + CleanupStack::PopAndDestroy(workAddressLm); + } + if (homeAddressLm) + { + RequestMapTileImageL(*homeAddressLm, ESourceContactsHome, + aEvent.iContactId); + CleanupStack::PopAndDestroy(homeAddressLm); + } + break; + } + + }; + CleanupStack::PopAndDestroy(contactItem); + //} + +} + +void CMyLocationsEngine::RequestMapTileImageL(const TDesC& aAddressDetails, + const TUidSourceType aAddressType, const TInt32 aUId) +{ + __TRACE_CALLSTACK; + SetFolderPathL(); + TBuf mImagePath; + + //mImagePath.Append(KImageStorageDrive); + mImagePath.Copy(imageFilePath); + mImagePath.AppendNum(aUId); + mImagePath.AppendNum(aAddressType); + mImagePath.Append(KPNGType); + + CMapTileRequest* mapTileRequest = new (ELeave) CMapTileRequest; + + mapTileRequest->iAddressDetails = aAddressDetails.AllocL(); + mapTileRequest->iUId = aUId; + mapTileRequest->iAddressType = aAddressType; + mapTileRequest->iEventType = iEventType; + mapTileRequest->iImagePath.Zero(); + mapTileRequest->iImagePath.Copy(mImagePath); + if (iMapTileRequestQueue.Count() <= 0) + { + if ( KErrNone == RequestExecute(mapTileRequest) ) + { + iMapTileRequestQueue.Append(mapTileRequest); + } + else + { + delete mapTileRequest; + } + } + else + { + MYLOCLOGSTRING("Added one more request to request queue" ); + iMapTileRequestQueue.Append(mapTileRequest); + } +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::RequestMapTileImageL() +// Request to get maptiel +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::RequestMapTileImageL(CPosLandmark& aLandmark, + const TUidSourceType aAddressType, const TInt32 aUId) +{ + __TRACE_CALLSTACK; + + MYLOCLOGSTRING("check folder path existance!"); + SetFolderPathL(); + TBuf mImagePath; + + //mImagePath.Append(KImageStorageDrive); + mImagePath.Copy(imageFilePath); + mImagePath.AppendNum(aUId); + mImagePath.AppendNum(aAddressType); + mImagePath.Append(KPNGType); + + CMapTileRequest* mapTileRequest = new (ELeave) CMapTileRequest; + + mapTileRequest->iLandmarkInfo = CPosLandmark::NewL(aLandmark); + mapTileRequest->iUId = aUId; + mapTileRequest->iAddressType = aAddressType; + mapTileRequest->iEventType = iEventType; + mapTileRequest->iImagePath.Zero(); + mapTileRequest->iImagePath.Copy(mImagePath); + MYLOCLOGSTRING1("RequestMapTileImageL() Queue count -%d",iMapTileRequestQueue.Count()); + + if (iMapTileRequestQueue.Count() <= 0) + { + // iMapTileRequestQueue.Append(mapTileRequest); + if( KErrNone == RequestExecute(mapTileRequest) ) + { + iMapTileRequestQueue.Append(mapTileRequest); + } + else + { + delete mapTileRequest; + } + } + else + { + MYLOCLOGSTRING("Added one more request to request queue" ); + iMapTileRequestQueue.Append(mapTileRequest); + } + + +} +TInt CMyLocationsEngine::RequestExecute( CMapTileRequest* aMapTileRequest) +{ + __TRACE_CALLSTACK; + TInt errorCode; + switch (aMapTileRequest->iAddressType) + { + case ESourceCalendar: + { + TRAP(errorCode,iMapTileInterface->GetMapTileImageL(aMapTileRequest->iAddressDetails->Des(), + aMapTileRequest->iImagePath, this )); + break; + } + case ESourceContactsPref: + case ESourceContactsWork: + case ESourceContactsHome: + { + TRAP(errorCode, iMapTileInterface->GetMapTileImageL(aMapTileRequest->iLandmarkInfo, + aMapTileRequest->iImagePath, this)); + break; + } + }; + + return errorCode; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::GetLocationDetailsLC() +// get locatin details +// ----------------------------------------------------------------------------- +// +CPosLandmark* CMyLocationsEngine::GetContactAddressDetailsLC( + const CContactItem *aContactItem, TContactAddressType aAddressType) +{ + __TRACE_CALLSTACK; + CPosLandmark *landmark = NULL; + + // Set the street + TInt adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapADR); + + if (adrId != KErrNotFound) + { + TPtrC tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + if (!landmark) + { + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + } + + landmark->SetPositionFieldL(EPositionFieldStreet, tempText); + } + } + + // Set the City + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapLOCALITY); + if (adrId != KErrNotFound) + { + TPtrC tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + if (!landmark) + { + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + } + landmark->SetPositionFieldL(EPositionFieldCity, tempText); + } + } + + // Set the state/region + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapREGION); + if (adrId != KErrNotFound) + { + TPtrC tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + if (!landmark) + { + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + } + landmark->SetPositionFieldL(EPositionFieldState, tempText); + } + } + + // Set the Postal code + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapPOSTCODE); + if (adrId != KErrNotFound) + { + TPtrC tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + if (!landmark) + { + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + } + landmark->SetPositionFieldL(EPositionFieldPostalCode, tempText); + } + } + + // Set the country + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapCOUNTRY); + if (adrId != KErrNotFound) + { + TPtrC tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + if (!landmark) + { + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + } + landmark->SetPositionFieldL(EPositionFieldCountry, tempText); + } + } + + return landmark; + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::GetContactLocationDetailsLC() +// Finds the contact's location details +// ----------------------------------------------------------------------------- +// +CPosLandmark* CMyLocationsEngine::GetContactLocationDetailsLC( + const CContactItem *aContactItem, TContactAddressType aAddressType) +{ + __TRACE_CALLSTACK;//return value + CPosLandmark *landmark = NULL; + // Get the geo field + TInt addrInd = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapGEO); + if (addrInd != KErrNotFound) + { + // Geo field present. + + TPtrC addrText = + aContactItem->CardFields()[addrInd].TextStorage()->Text(); + if (addrText.Length() > 0) + { + //Parse the addresstext to get the latitude and longitude + TInt separator = addrText.Find(KSeparator); + if (separator != KErrNotFound) + { + TReal64 latitude = 0; + TReal64 longitude = 0; + TLex lexLatitude(addrText.Left(addrText.Length() - separator)); + TLex lexLongitude(addrText.Right(addrText.Length() - separator + - 1)); + if (lexLatitude.Val(latitude) == KErrNone && lexLongitude.Val( + longitude) == KErrNone) + { + TLocality loc(TCoordinate(latitude, longitude), 0); + + landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + + // Fill the location details into the landmark object + landmark->SetPositionL(loc); + + // Set the landmark name as contact name + TBuf sName1; + TBool nameEmpty = ETrue; + //get the second name and + TInt sNameInd = aContactItem->CardFields().Find( + KUidContactFieldGivenName); + if (sNameInd != KErrNotFound) + { + TPtrC sName = + aContactItem->CardFields()[sNameInd].TextStorage()->Text(); + sName1.Copy(sName); + nameEmpty = EFalse; + } + + sNameInd = aContactItem->CardFields().Find( + KUidContactFieldFamilyName); + if (sNameInd != KErrNotFound) + { + if (!nameEmpty) + { + sName1.Append(KSingleSpace); + } + TPtrC + sName = + aContactItem->CardFields()[sNameInd].TextStorage()->Text(); + sName1.Append(sName); + } + + TRAP_IGNORE( landmark->SetLandmarkNameL( sName1 ) ); + + if (aAddressType == EAddressPref) // default/prefered address + { + TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactPrefered) ); + } + else if (aAddressType == EAddressWork) // work address + { + TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactWork) ); + } + else // home address + { + TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactHome) ); + } + + // Set the street + TInt adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapADR); + if (adrId != KErrNotFound) + { + TPtrC + tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + landmark->SetPositionFieldL(EPositionFieldStreet, + tempText); + } + } + + // Set the City + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapLOCALITY); + if (adrId != KErrNotFound) + { + TPtrC + tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + landmark->SetPositionFieldL(EPositionFieldCity, + tempText); + } + } + + // Set the state/region + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapREGION); + if (adrId != KErrNotFound) + { + TPtrC + tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + landmark->SetPositionFieldL(EPositionFieldState, + tempText); + } + } + + // Set the Postal code + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapPOSTCODE); + if (adrId != KErrNotFound) + { + TPtrC + tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + landmark->SetPositionFieldL( + EPositionFieldPostalCode, tempText); + } + } + + // Set the country + adrId = FindContactsField(aContactItem, aAddressType, + KUidContactFieldVCardMapCOUNTRY); + if (adrId != KErrNotFound) + { + TPtrC + tempText = + aContactItem->CardFields()[adrId].TextStorage()->Text(); + if (tempText.Length() > 0) + { + landmark->SetPositionFieldL(EPositionFieldCountry, + tempText); + } + } + } + } + } + } + + return landmark; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::FindContactsField() +// Finds the contact's field type id +// ----------------------------------------------------------------------------- +// + +TInt CMyLocationsEngine::FindContactsField(const CContactItem *aContactItem, + TContactAddressType aAddressType, TUid aField) +{ + __TRACE_CALLSTACK; + if (aAddressType == EAddressPref) // default/prefered address + { + return aContactItem->CardFields().Find(aField); + } + else if (aAddressType == EAddressWork) // work address + { + return aContactItem->CardFields().Find(KUidContactFieldVCardMapWORK, + aField); + } + else // home address + { + return aContactItem->CardFields().Find(KUidContactFieldVCardMapHOME, + aField); + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::MapsChangeType() +// Maps the source's change type to Mylocations entry change type +// ----------------------------------------------------------------------------- +// +TEntryChangeType CMyLocationsEngine::MapChangeType(TUidSourceType aSrcType, + TUint32 aChangeType) +{ + __TRACE_CALLSTACK;// return value + TEntryChangeType retVal = EEntryUnknown; + + switch (aSrcType) + { + // if source type is contacts + case ESourceContactsPref: + case ESourceContactsWork: + case ESourceContactsHome: + { + switch (aChangeType) + { + case EContactDbObserverEventContactAdded: + retVal = EEntryAdded; + break; + case EContactDbObserverEventContactDeleted: + retVal = EEntryDeleted; + break; + case EContactDbObserverEventContactChanged: + retVal = EEntryModified; + break; + } + break; + } + + // if source type is landmarks or maps history + case ESourceLandmarks: + { + switch (aChangeType) + { + case EPosLmEventLandmarkCreated: + retVal = EEntryAdded; + break; + case EPosLmEventLandmarkDeleted: + retVal = EEntryDeleted; + break; + case EPosLmEventLandmarkUpdated: + retVal = EEntryModified; + break; + } + break; + } + case ESourceLandmarksCategory: + { + switch (aChangeType) + { + case EPosLmEventCategoryCreated: + retVal = EEntryAdded; + break; + } + } + break; + } + return retVal; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::MyLocationsDbManager() +// Gets handle to mylocations database manager. +// ----------------------------------------------------------------------------- +// +CMyLocationsDatabaseManager& CMyLocationsEngine::MyLocationsDbManager() +{ + __TRACE_CALLSTACK; + return *iMyLocationsDatabaseManager; +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::RunL() +// Handles active object's request completion event. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::RunL() +{ + __TRACE_CALLSTACK; + switch (iLmEvent.iEventType) + { + case EPosLmEventLandmarkCreated: + case EPosLmEventLandmarkUpdated: + { + TBuf lmAddress; + CPosLandmark* readLandmark = iLandmarkDb->ReadLandmarkLC( + iLmEvent.iLandmarkItemId); + + if (readLandmark) + { + iMyLocationsDatabaseManager->GetLandmarkFullAddress(lmAddress, + readLandmark); + + CPosLandmark* landmark = CPosLandmark::NewL(); + CleanupStack::PushL(landmark); + + TRAP_IGNORE( landmark->SetLandmarkNameL( lmAddress )); + + TPtrC iconFileName; + TInt iconIndex; + TInt iconMaskIndex; + TInt err = readLandmark->GetIcon(iconFileName, iconIndex, + iconMaskIndex); + + if (err == KErrNone) + { + TRAP_IGNORE( landmark->SetIconL( + iconFileName, iconIndex, iconMaskIndex ) ); + } + + // update the entry in mylocations database. + iMyLocationsDatabaseManager->UpdateDatabaseL(landmark, + iLmEvent.iLandmarkItemId, ESourceLandmarks, MapChangeType( + ESourceLandmarks, iLmEvent.iEventType)); + + CleanupStack::PopAndDestroy(landmark); + CleanupStack::PopAndDestroy(readLandmark); + } + } + break; + case EPosLmEventLandmarkDeleted: + { + // delete the corresponding entries in mylocations database. + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + iLmEvent.iLandmarkItemId, ESourceLandmarks, EEntryDeleted); + } + break; + + case EPosLmEventCategoryCreated: + { + // delete the corresponding entries in mylocations database. + iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + iLmEvent.iLandmarkItemId, ESourceLandmarksCategory, + MapChangeType(ESourceLandmarksCategory, iLmEvent.iEventType)); + } + break; + + + } + + // start the change notifier again; + StartLandmarksChangeNotifier(); + +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::DoCancel() +// Implements cancellation of an outstanding request. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::DoCancel() +{ + __TRACE_CALLSTACK; + iLandmarkDb->CancelNotifyDatabaseEvent(); +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::RunError() +// Implements cancellation of an outstanding request. +// ----------------------------------------------------------------------------- +// +TInt CMyLocationsEngine::RunError(TInt /*aError*/) +{ + __TRACE_CALLSTACK; + return KErrNone; +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::MapTilefetchingCompleted() +// Handles the maptile fetching completion event and updates the maptile lookup db. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::MapTilefetchingCompleted(TInt aErrCode, + const TDesC& aMapTilePath) +{ + __TRACE_CALLSTACK; + MYLOCLOGSTRING1("MapTilefetchingCompleted aErrCode - %d ",aErrCode); + MYLOCLOGSTRING1("iMapTileRequestQueue.Count - %d",iMapTileRequestQueue.Count()); + + if (iMapTileRequestQueue.Count() > 0) + { + + MYLOCLOGSTRING1("No.of RequestQueue - %d",iMapTileRequestQueue.Count()); + + if (aErrCode == KErrNone ) + { + TLookupItem lookupItem; + lookupItem.iSource = iMapTileRequestQueue[0]->iAddressType; + lookupItem.iUid = iMapTileRequestQueue[0]->iUId; + lookupItem.iFilePath.Copy(aMapTilePath); + TRAP_IGNORE( HandleMaptileDatabaseL(iMapTileRequestQueue[0]->iEventType,lookupItem ) ); + } + + delete iMapTileRequestQueue[0]; + iMapTileRequestQueue.Remove(0); + iMapTileRequestQueue.Compress(); + } + + + //Process the next request + if (iMapTileRequestQueue.Count() > 0) + { + MYLOCLOGSTRING1("MapTile fetch completed request-%d",iMapTileRequestQueue.Count()); + for (TInt cnt = 0; cnt < iMapTileRequestQueue.Count(); cnt++) + { + if ( KErrNone == RequestExecute(iMapTileRequestQueue[0]) ) + { + break; + } + else + { + delete iMapTileRequestQueue[0]; + iMapTileRequestQueue.Remove(0); + iMapTileRequestQueue.Compress(); + } + } + } + else + { + MYLOCLOGSTRING("MapTile fetch completed no request in queue"); + iMapTileRequestQueue.Reset(); + } + +} +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::HandleMaptileDatabaseL() +// Handle maptile database(find/create/update/delete). +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::HandleMaptileDatabaseL( + TInt aEventType, TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK; + if (aEventType == EContactDbObserverEventContactChanged || aEventType + == EChangeModify) + { + if (iMaptileDatabase->FindEntryL(aLookupItem)) + { + iMaptileDatabase->UpdateEntryL(aLookupItem); + } + else + { + iMaptileDatabase->CreateEntryL(aLookupItem); + } + } + else if (aEventType == EContactDbObserverEventContactAdded || aEventType + == EChangeAdd) + { + iMaptileDatabase->CreateEntryL(aLookupItem); + + } +} + +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::RestGeoCodeCompleted() +// observed when rest geo codeing completed. +// started lat and lon field updation into contact db. +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::RestGeoCodeCompleted(TReal aLatitude, TReal aLongitude) +{ + __TRACE_CALLSTACK; + + MYLOCLOGSTRING1("No. of iMapTileRequestQueue - %d",iMapTileRequestQueue.Count()); + if (iMapTileRequestQueue.Count() > 0) + { + switch (iMapTileRequestQueue[0]->iAddressType) + { + /*//TODO: + case ESourceCalendar: + { + break; + }*/ + case ESourceContactsPref: + case ESourceContactsWork: + case ESourceContactsHome: + { + GeocodeUpdate::UpDate(iMapTileRequestQueue[0]->iUId, + iMapTileRequestQueue[0]->iAddressType, aLatitude, + aLongitude); + MYLOCLOGSTRING("Geo code updated into contact db"); + break; + } + }; + + + } + +} + +//End of file diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/mylocationsengine/src/mylocationslookupdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/src/mylocationslookupdb.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,410 @@ +/* +* 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 database lookup table implementation. +* +*/ + +#include +#include +#include "mylocationslookupdb.h" +#include "mylocationlogger.h" +// select all from +_LIT( KSelectAllFrom, "SELECT * FROM " ); +// string 'where' +_LIT( KStringWhere, " WHERE " ); +// string ' = ' +_LIT( KStringEqual, " = " ); +// string 'And' +_LIT( KStringAnd, " AND " ); + +// ----------------------------------------------------------------------------- +// CLookupDatabase::CLookupDatabase() +// Default constructor. +// ----------------------------------------------------------------------------- +// +CLookupDatabase::CLookupDatabase() +{ +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::~CLookupDatabase() +// Destructor. +// ----------------------------------------------------------------------------- +// +CLookupDatabase::~CLookupDatabase() +{ + __TRACE_CALLSTACK;// close the database + iItemsDatabase.Close(); + // close the file session + iFsSession.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::~CLookupDatabase() +// Creates an object of this class and pushes to cleanup stack. +// ----------------------------------------------------------------------------- +// +CLookupDatabase* CLookupDatabase::NewLC(const TDesC& aLookupTableName) +{ + CLookupDatabase* self = new (ELeave) CLookupDatabase; + CleanupStack::PushL(self); + self->ConstructL(aLookupTableName); + return self; +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::NewL() +// Creates an object of this class. +// ----------------------------------------------------------------------------- +// +CLookupDatabase* CLookupDatabase::NewL(const TDesC& aLookupTableName) +{ + CLookupDatabase* self = CLookupDatabase::NewLC(aLookupTableName); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::ConstructL() +// 2nd phase contructor. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::ConstructL(const TDesC& aLookupTableName) +{ + __TRACE_CALLSTACK; + User::LeaveIfError(iFsSession.Connect()); + + //create private path + User::LeaveIfError(iFsSession.CreatePrivatePath(RFs::GetSystemDrive())); + // private path with no drive on it + iFsSession.PrivatePath(iDbFileName); + + TFindFile PrivFolder(iFsSession); + // find out the drive + if (KErrNone == PrivFolder.FindByDir(iDbFileName, KNullDesC)) + { + iFsSession.MkDir(KLookupDbPath); + iDbFileName.Copy(KLookupDbPath); + iDbFileName.Append(aLookupTableName); + + if (!BaflUtils::FileExists(iFsSession, iDbFileName)) + { // no database exists so we make one + User::LeaveIfError(iItemsDatabase.Create(iFsSession, iDbFileName)); + // and will create the only table needed for it + CreateTableL(iItemsDatabase); + + //close the database + iItemsDatabase.Close(); + } + } +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::Open() +// Opens the lookup database. +// ----------------------------------------------------------------------------- +// +TInt CLookupDatabase::Open() +{ + __TRACE_CALLSTACK; + return iItemsDatabase.Open(iFsSession, iDbFileName); +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::Close() +// Closes the lookup database. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::Close() +{ + __TRACE_CALLSTACK; + iItemsDatabase.Close(); +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::CreateTableL() +// Creates a lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::CreateTableL(RDbDatabase& aDatabase) +{ + __TRACE_CALLSTACK;// Create a table definition + CDbColSet* columns = CDbColSet::NewLC(); + + // Add Columns + + // Add uid column + columns->AddL(TDbCol(NColUid, EDbColUint32)); + + // add source type column + columns->AddL(TDbCol(NColSource, EDbColUint32)); + + // add landmark uid column + columns->AddL(TDbCol(NColLmUid, EDbColUint32)); + + // Create a table + User::LeaveIfError(aDatabase.CreateTable(KLookupTable, *columns)); + + // cleanup the column set + CleanupStack::PopAndDestroy(columns); +} + + +// ----------------------------------------------------------------------------- +// CLookupDatabase::CreateEntryL() +// Creates an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::CreateEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// create a query for the view + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + + iItemsDatabase.Begin(); + + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + // Inert the item + myView.InsertL(); + + // set the fields + myView.SetColL(KColumnUid, aLookupItem.iUid); + myView.SetColL(KColumnSource, aLookupItem.iSource); + myView.SetColL(KColumnLmkUid, aLookupItem.iLmId); + + myView.PutL(); + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::UpdateEntryL() +// Updates an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::UpdateEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// Create the query to find the row to be updated. + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + queryBuffer.Append(KStringWhere); + queryBuffer.Append(NColUid); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iUid); + queryBuffer.Append(KStringAnd); + queryBuffer.Append(NColSource); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iSource); + + iItemsDatabase.Begin(); + + // Create a view of the table based on the query created. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + myView.EvaluateAll(); + myView.FirstL(); + + if (myView.AtRow()) + { + // found the entry. update it. + myView.UpdateL(); + myView.SetColL(KColumnLmkUid, aLookupItem.iLmId); + myView.PutL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); + +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::DeleteEntryL() +// Deletes an entry from the lookup table. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::DeleteEntryL(const TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// Create the query to find the row to be deleted. + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + queryBuffer.Append(KStringWhere); + queryBuffer.Append(NColUid); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iUid); + queryBuffer.Append(KStringAnd); + queryBuffer.Append(NColSource); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iSource); + + iItemsDatabase.Begin(); + + RDbView myView; + // query buffer finds only the selected item row. + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + + myView.EvaluateAll(); + + // positions the cursor on the first row of the rowset + myView.FirstL(); + + // Delete the entry found. + if (myView.AtRow()) + { + myView.GetL(); + myView.DeleteL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView + iItemsDatabase.Commit(); + // compacts the databse, by physicaly removing deleted data. + iItemsDatabase.Compact(); +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::FindEntryL() +// Finds an entry in the lookup table. +// ----------------------------------------------------------------------------- +// +TBool CLookupDatabase::FindEntryL(TLookupItem& aLookupItem) +{ + __TRACE_CALLSTACK;// used to store return value + TBool retVal = EFalse; + + // Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + queryBuffer.Append(KStringWhere); + queryBuffer.Append(NColUid); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iUid); + queryBuffer.Append(KStringAnd); + queryBuffer.Append(NColSource); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLookupItem.iSource); + + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + myView.EvaluateAll(); + myView.FirstL(); + + if (myView.AtRow()) + { + // Item found. get the details. + myView.GetL(); + + aLookupItem.iUid = myView.ColUint(KColumnUid); + aLookupItem.iSource = myView.ColUint(KColumnSource); + aLookupItem.iLmId = myView.ColUint(KColumnLmkUid); + retVal = ETrue; + } + + CleanupStack::PopAndDestroy(&myView); // myView + + return retVal; +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::FindEntriesByLandmarkIdL() +// Finds a list of lookup items given a landmark uid. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::FindEntriesByLandmarkIdL(const TUint32 aLandmarkId, + RArray& aLookupItemArray) +{ + __TRACE_CALLSTACK;// Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + queryBuffer.Append(KStringWhere); + queryBuffer.Append(NColLmUid); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aLandmarkId); + + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + myView.EvaluateAll(); + myView.FirstL(); + + while (myView.AtRow()) + { + // Item found. get the details. + myView.GetL(); + TLookupItem newItem; + newItem.iUid = myView.ColUint(KColumnUid); + newItem.iSource = myView.ColUint(KColumnSource); + newItem.iLmId = myView.ColUint(KColumnLmkUid); + aLookupItemArray.Append(newItem); + myView.NextL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView +} + +// ----------------------------------------------------------------------------- +// CLookupDatabase::FindEntriesByLandmarkIdL() +// Finds a list of lookup items given a landmark uid. +// ----------------------------------------------------------------------------- +// +void CLookupDatabase::FindEntriesBySourceTypeL(const TUint32 aSourceType, + RArray& aLookupItemArray) +{ + __TRACE_CALLSTACK;// Create a query to find the item. + TFileName queryBuffer; + queryBuffer.Copy(KSelectAllFrom); + queryBuffer.Append(KLookupTable); + queryBuffer.Append(KStringWhere); + queryBuffer.Append(NColSource); + queryBuffer.Append(KStringEqual); + queryBuffer.AppendNum(aSourceType); + + // Create a view of the table with the above query. + RDbView myView; + myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); + CleanupClosePushL(myView); + myView.EvaluateAll(); + myView.FirstL(); + + while (myView.AtRow()) + { + // Item found. get the details. + myView.GetL(); + + TLookupItem newItem; + newItem.iUid = myView.ColUint(KColumnUid); + newItem.iSource = myView.ColUint(KColumnSource); + newItem.iLmId = myView.ColUint(KColumnLmkUid); + aLookupItemArray.Append(newItem); + myView.NextL(); + } + + CleanupStack::PopAndDestroy(&myView); // myView +} + +// End of file + diff -r 13ae750350c9 -r 0f22fb80ebba locationdataharvester/rom/mylocations.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/rom/mylocations.iby Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,30 @@ +/* +* 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: +* +*/ + + + +#ifndef __Mylocations_IBY__ +#define __Mylocations_IBY__ + +file=ABI_DIR\BUILD_DIR\mylocationsengine.exe PROGRAMS_DIR\mylocationsengine.exe +file=ABI_DIR\BUILD_DIR\geocodeupdate.dll PROGRAMS_DIR\geocodeupdate.dll +file=ABI_DIR\BUILD_DIR\maptileservice.dll PROGRAMS_DIR\maptileservice.dll + +//Resource file(s) for Mylocations application (mylocations.iby) +data=DATAZ_\APP_RESOURCE_DIR\mylocations.rsc APP_RESOURCE_DIR\mylocations.rsc + +#endif diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerallview.h --- a/locationpickerservice/inc/locationpickerallview.h Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* 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: LocationPickerAllView declaration -* -*/ - -#ifndef LOCATIONPICKERALLVIEW_H -#define LOCATIONPICKERALLVIEW_H - -#include -#include "locationpickerproxymodel.h" - -//forward declaration -class HbListView; -class HbAction; -class QStandardItemModel; -class LocationPickerAppWindow; -class LocationPickerDataManager; - -/** Class for handling a 'All' view of location picker - * - */ -class LocationPickerAllView : public HbView -{ - Q_OBJECT -public: - - // contructor - LocationPickerAllView( LocationPickerAppWindow *aWindow, QGraphicsItem* aParent = 0 ); - - // destructor - ~LocationPickerAllView(); - - // locationsNotFound - bool locationsFound(); - -private slots: - // slot triggered when sort by ascending is selected in menu - void sortAscending(); - // slot triggered when sort by descending is selected in menu - void sortDescending(); - - // slot to handle select event on a list item - void handleActivated( const QModelIndex &aIndex ); - -private: - // used to construct a menu for the view - void constructMenu(); - -private: - HbListView *mListView; - LocationPickerProxyModel *mProxyModel; - QStandardItemModel *mModel; - LocationPickerAppWindow *mWindow; - LocationPickerDataManager *mDataManager; - bool mLocationsFound; - HbAction *mSecondaryBackAction; -}; - - -#endif // LOCATIONPICKERALLVIEW_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerappwindow.h --- a/locationpickerservice/inc/locationpickerappwindow.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickerappwindow.h Mon May 03 12:27:22 2010 +0300 @@ -18,48 +18,67 @@ #ifndef LOCATIONPICKERAPPWINDOW_H #define LOCATIONPICKERAPPWINDOW_H #include -#include -#include "qlocationpickeritem.h" +#include "locationpickertypes.h" // Forward declarations -class LocationPickerAllView; class LocationPickerSearchView; -class LocationPickerCollectionListView; +class LocationPickerDocumentLoader; +class LocationPickerPotraitView; class LocationPickerService; +class LocationPickerProxyModel; +class LocationPickerLandscapeView; class LocationPickerAppWindow: public HbMainWindow { Q_OBJECT public: - // constructor - LocationPickerAppWindow( QWidget* aParent = 0 ); + LocationPickerAppWindow(QWidget *parent=0, Hb::WindowFlags + windowFlags=Hb::WindowFlagNone); // destructor ~LocationPickerAppWindow(); - - // deletes the collection content view - void deleteCollectionContentView(); - -public slots: - // a list item is selected - void itemSelected( quint32 aLm); - -public slots: - // slot used for back action on the top right corner - void backButtonTriggered(); private: - // all view - LocationPickerAllView* mLocationPickerAllView; + //Loads the Potrait View + void loadPotrait(); + //Loads landscape View + void loadLandscape(); + //Connect the slots for Potrait view + void connectPotraitSlots(); + //Connect the slots for Landscape view + void connectLandscapeSlots(); +public slots: + // a list item is selected + void itemSelected( quint32 aLm ); +private slots: + //activate search view + void activateSearchView(); + //activate locationpicker view + void activateLocationPickerView(); + //changes the orientation + void changeOrientation(Qt::Orientation); + //complete the service + void serviceComplete(); + //sets the category ID during orientation change in collection content + void setCategoryID( quint32 acategoryId ); + //handles orientation change in collection list + void handleCollectionList(); + //handle all List + void allListHandle(); +private: // search view LocationPickerSearchView* mLocationPickerSearchView; - // collection list view - LocationPickerCollectionListView* mLocationPickerCollectionListView; - - // location picker service; + //document loader + LocationPickerDocumentLoader* mLocationPickerDocumentLoader; + //location picker potrait view + LocationPickerPotraitView* mLocationPickerPotraitView; + //location picker landscape view + LocationPickerLandscapeView* mLocationPickerLandscapeView; + //location picker service; LocationPickerService *mService; - + //View Type + TViewType mviewType; }; #endif // LOCATIONPICKERAPPWINDOW_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickercollectioncontent.h --- a/locationpickerservice/inc/locationpickercollectioncontent.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickercollectioncontent.h Mon May 03 12:27:22 2010 +0300 @@ -11,53 +11,37 @@ * * Contributors: * -* Description: LocationPickerCollectionListView declaration +* Description: LocationPickerCollectionContent declaration * */ #ifndef LOCATIONPICKERCOLLECTIONCONTENT_H #define LOCATIONPICKERCOLLECTIONCONTENT_H -#include - -class HbListView; -class HbAction; class QStandardItemModel; class LocationPickerProxyModel; class LocationPickerDataManager; -class LocationPickerAppWindow; -/** Class for handling a view collection content - * +/** + * Class for handling collection content */ -class LocationPickerCollectionContent : public HbView +class LocationPickerCollectionContent : public QObject { - Q_OBJECT public: // constructor - LocationPickerCollectionContent( LocationPickerAppWindow *aWindow, - quint32 aCollectionid, QGraphicsItem* aParent = 0); + LocationPickerCollectionContent( Qt::Orientations aOrientation , quint32 aCollectionid ); + //Destructor ~LocationPickerCollectionContent(); -private slots: - // slot triggered when sort ascending is selected in menu - void sortAscending(); - // slot triggered when sort descending is selected in menu - void sortDescending(); - - // slot used to handle when a location is selected in list view - void handleActivated(const QModelIndex &aIndex); + //get proxy model + LocationPickerProxyModel* getProxyModel(); + //get LocationPickerDataManager + LocationPickerDataManager* getDataManager(); private: - // constructs a menu for the view - void constructMenu(); - -private: - HbListView *mListView; + Qt::Orientations mOrientation; LocationPickerProxyModel *mProxyModel; QStandardItemModel *mModel; LocationPickerDataManager *mDataManager; - LocationPickerAppWindow* mWindow; - HbAction *mSecondaryBackAction; }; #endif // LOCATIONPICKERCOLLECTIONCONTENT_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickercollectionlistcontent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/inc/locationpickercollectionlistcontent.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,47 @@ +/* +* 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: LocationPickerCollectionListContent declaration +* +*/ + +#ifndef LOCATIONPICKERCOLLECTIONLISTCONTENT_H +#define LOCATIONPICKERCOLLECTIONLISTCONTENT_H + +class QStandardItemModel; +class LocationPickerDataManager; + +/** + * Class for handling Collections content of location picker + */ +class LocationPickerCollectionListContent : public QObject +{ +public: + + // constructor + LocationPickerCollectionListContent( Qt::Orientation aOrientation ); + + // destructor + ~LocationPickerCollectionListContent(); + //get standard model + QStandardItemModel* getStandardModel(); + //get LocationPickerDataManager + LocationPickerDataManager* getDataManager(); + +private: + Qt::Orientation mOrientation; + QStandardItemModel *mModel; + LocationPickerDataManager *mDataManager; +}; + +#endif // LOCATIONPICKERCOLLECTIONLISTCONTENT_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickercollectionlistview.h --- a/locationpickerservice/inc/locationpickercollectionlistview.h Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* 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: LocationPickerCollectionListView declaration -* -*/ - -#ifndef LOCATIONPICKERCOLLECTIONLISTVIEW_H -#define LOCATIONPICKERCOLLECTIONLISTVIEW_H - -#include - -class HbListView; -class HbAction; -class QStandardItemModel; -class LocationPickerCollectionContent; -class LocationPickerAppWindow; -class LocationPickerDataManager; - -/** Class for handling Collections view of location picker - * - */ -class LocationPickerCollectionListView : public HbView -{ - Q_OBJECT -public: - - // constructor - LocationPickerCollectionListView( LocationPickerAppWindow *aWindow, QGraphicsItem* aParent = 0); - - // destructor - ~LocationPickerCollectionListView(); - - // slot used to delete the child view, ie collection content view. - void deleteCollectionContentView(); - - -private slots: - - // slot to handle event when a collection is selected - void handleActivated( const QModelIndex &aIndex ); - -private: - HbListView *mListView; - QStandardItemModel *mModel; - LocationPickerCollectionContent *mCollectionContentView; - - LocationPickerAppWindow *mWindow; - LocationPickerDataManager *mDataManager; - HbAction *mSecondaryBackAction; -}; - -#endif // LOCATIONPICKERCOLLECTIONLISTVIEW_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickercontent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/inc/locationpickercontent.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,68 @@ +/* +* 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: LocationPickerContent declaration +* +*/ + +#ifndef LOCATIONPICKERCONTENT_H +#define LOCATIONPICKERCONTENT_H + + +#include "locationpickerproxymodel.h" + +//forward declaration +class QStandardItemModel; +class LocationPickerDataManager; + +/** + *Class to create model for Location Picker + */ +class LocationPickerContent : public QObject +{ + Q_OBJECT +public: + + // contructor + LocationPickerContent(Qt::Orientation aOrientation ); + + // destructor + ~LocationPickerContent(); + + // locationsNotFound + bool locationsFound(); + + //get proxy model + LocationPickerProxyModel* getListProxyModel(); + + //get standard Model + QStandardItemModel* getStandardModel(); + + //get data manager + LocationPickerDataManager* getDataManager(); + + //get hbgridview proxy model + LocationPickerProxyModel* getGridProxyModel(); + +private: + Qt::Orientations mOrientation; + LocationPickerProxyModel *mListProxyModel; + LocationPickerProxyModel *mProxyGridModel; + LocationPickerDataManager *mDataManager; + QStandardItemModel *mModel; + bool mLocationsFound; + +}; + + +#endif // LOCATIONPICKERCONTENT_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerdatamanager.h --- a/locationpickerservice/inc/locationpickerdatamanager.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickerdatamanager.h Mon May 03 12:27:22 2010 +0300 @@ -38,7 +38,7 @@ ~LocationPickerDataManager(); // populates the model with data - bool populateModel( quint32 aCollectionId = 0 ); + bool populateModel(Qt::Orientations aOrientation,quint32 aCollectionId = 0); // gets the data pointed to by index and copies to the aValue void getData(int index, quint32& aValue ); diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerdatamanager_p.h --- a/locationpickerservice/inc/locationpickerdatamanager_p.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickerdatamanager_p.h Mon May 03 12:27:22 2010 +0300 @@ -41,7 +41,7 @@ ~LocationPickerDataManagerPrivate(); // populates the model with data - bool populateModel( quint32 aCollectionId = 0 ); + bool populateModel( const Qt::Orientations aOrientation, quint32 aCollectionId = 0 ); // gets the data pointed to by index and copies to the aValue void getData(int index, quint32& aValue ); @@ -60,7 +60,7 @@ void getLocationItemL( quint32 aLmId, QLocationPickerItem &aItem ); private: - + Qt::Orientations mOrientation; QStandardItemModel *mModel; TViewType mViewType; CPosLmItemIterator* mIterator; diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerdocumentloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/inc/locationpickerdocumentloader.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,46 @@ +/* +* 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: LocationPickerDocumentLoader declaration +* +*/ + +#ifndef LOCATIONPICKERDOCUMENTLOADER_H_ +#define LOCATIONPICKERDOCUMENTLOADER_H_ + +#include + +class LocationPickerDocumentLoader : public HbDocumentLoader +{ + +public: + + /** + * Constructor. + */ + LocationPickerDocumentLoader(); + + /** + * Destructor. + */ + ~LocationPickerDocumentLoader(); + +public: + + /** + * from base class + */ + QObject *createObject(const QString& type, const QString &name); +}; + +#endif /* LOCATIONPICKERDOCUMENTLOADER_H_ */ diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerlandscapeview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/inc/locationpickerlandscapeview.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,112 @@ +/* +* 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: LocationPickerLandscapeView declaration +* +*/ + +#ifndef LOCATIONPICKERLANDSCAPEVIEW_H_ +#define LOCATIONPICKERLANDSCAPEVIEW_H_ + + + +#include +#include +#include "locationpickertypes.h" + +//forward declarations +class HbListView; +class QStandardItemModel; +class LocationPickerProxyModel; +class LocationPickerContent; +class LocationPickerCollectionListContent; +class LocationPickerCollectionContent; +class HbGridViewItem; +class HbGridView; +class HbAction; + +/** + * Class defines the location picker view + */ +class LocationPickerLandscapeView : public HbView +{ + + Q_OBJECT +public: + // constructor + LocationPickerLandscapeView(HbDocumentLoader* aLoader); + // destructor + ~LocationPickerLandscapeView(); +private: + //disable the tabs + void disableTabs(); +public: + //get the items from docml and connect to respective slots + void init(Qt::Orientation aOrientation ); + //Set the appropriate model on grid view + void manageGridView(); + //Create collection list and sets to list view + void setCollectionData( quint32 aCategoryId ); + //Set Ctegory ID + void setCategoryID( quint32 aCategoryId ); + //Get the view type + TViewType getViewType(); + //set the view type + void setViewType(TViewType aViewType); +private slots: + //slot to handle list item actions + void handleActivated(const QModelIndex &aIndex); + //slots to handle menu action items + void sortDescending(); + void sortAscending(); + void backButtonTriggered(); + //slot to handle search tab + void searchTabTriggered(); +public slots: + //slot to handle all tab + void allTabTriggered(); + //slot to handle collection tab + void colectionTabTriggered(); +signals: + void switchToSearchView(); + void handleCollectionList(); + void selectItem( quint32 aLm ); + void completeService(); + void sendCategoryID( quint32 acategoryId ); +private: + //document loader + HbDocumentLoader* mDocumentLoader; + // all view + LocationPickerContent* mLocationPickerContent; + // collection list content + LocationPickerCollectionListContent* mLocationPickerCollectionListContent; + //actions + HbAction *mAllAction; + HbAction *mCollectionAction; + HbAction *mSearchAction; + HbAction *mAscendingAction; + HbAction *mDescendingAction; + //secondary back action + HbAction *mLandscapeBackAction; + HbGridView *mGridView; + //collection content + LocationPickerCollectionContent *mCollectionContent; + HbGridViewItem *mGridViewItem; + //view type + TViewType mViewType ; + //get the collection/category id + quint32 mCategoryId; + +}; + +#endif /* LOCATIONPICKERLANDSCAPEVIEW_H_ */ diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerpotraitview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/inc/locationpickerpotraitview.h Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,111 @@ +/* +* 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: LocationPickerPotraitView declaration +* +*/ + +#ifndef LOCATIONPICKERPOTRAITVIEW_H +#define LOCATIONPICKERPOTRAITVIEW_H + + +#include +#include +#include "locationpickertypes.h" + +//forward declarations +class HbListView; +class QStandardItemModel; +class LocationPickerProxyModel; +class LocationPickerContent; +class LocationPickerCollectionListContent; +class LocationPickerCollectionContent; +class HbListViewItem; +class HbAction; + +/** + * Class defines the location picker view + */ +class LocationPickerPotraitView : public HbView +{ + Q_OBJECT +public: + // constructor + LocationPickerPotraitView(HbDocumentLoader* aLoader); + // destructor + ~LocationPickerPotraitView(); +private: + //disable the tabs + void disableTabs(); +public: + //get the items from docml and connect to respective slots + void init(Qt::Orientation aOrientation ); + //Set the appropriate model on list view + void manageListView(); + //Create collection list and sets to list view + void setCollectionData( quint32 acategoryId ); + //Set Ctegory ID + void setCategoryID( quint32 acategoryId ); + //Get the view type + TViewType getViewType(); + //set the view type + void setViewType(TViewType aViewType); +private slots: + //slot to handle list item actions + void handleActivated(const QModelIndex &aIndex); + //slots to handle menu action items + void sortDescending(); + void sortAscending(); + void backTriggered(); + //slot to handle search tab + void searchTabTriggered(); +public slots: + //slot to handle all tab + void allTabTriggered(); + //slot to handle collection tab + void colectionTabTriggered(); +signals: + void switchToSearchView(); + void selectItem( quint32 aLm ); + void completeService(); + void sendCategoryID( quint32 aCategoryId ); + void handleAllList(); +private: + //document loader + HbDocumentLoader* mDocumentLoader; + // all view + LocationPickerContent* mLocationPickerContent; + // collection list content + LocationPickerCollectionListContent* mLocationPickerCollectionListContent; + //actions + HbAction *mAllAction; + HbAction *mCollectionAction; + HbAction *mSearchAction; + HbAction *mAscendingAction; + HbAction *mDescendingAction; + //secondary back action + HbAction *mPotraitBackAction; + // list view + HbListView *mListView; + //list item + HbListViewItem *mListItem; + //collection content + LocationPickerCollectionContent *mCollectionContent; + //ViewType + TViewType mViewType ; + // get the collection/category id + quint32 mCategoryId; +}; + + +#endif // LOCATIONPICKERPOTRAITVIEW_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickerproxymodel.h --- a/locationpickerservice/inc/locationpickerproxymodel.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickerproxymodel.h Mon May 03 12:27:22 2010 +0300 @@ -31,7 +31,7 @@ public: // constructor - LocationPickerProxyModel(QObject *parent = 0); + LocationPickerProxyModel(Qt::Orientations aOrientation , QObject *parent = 0); // used to void filterParameterChanged(QString aSearchText); @@ -45,6 +45,7 @@ private: // search string QString mSearchText; + Qt::Orientations mOrientation; }; diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickersearchview.h --- a/locationpickerservice/inc/locationpickersearchview.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickersearchview.h Mon May 03 12:27:22 2010 +0300 @@ -21,51 +21,57 @@ #include -//forward declarations class HbListView; -class HbAction; -class QGraphicsLinearLayout; class QStandardItemModel; class HbSearchPanel; -class LocationPickerAppWindow; class LocationPickerDataManager; class LocationPickerProxyModel; +class HbDocumentLoader; +class HbTextItem; +class QGraphicsLinearLayout; -/** Class defines the search view of location picker - * +/** + * Class defines the search view of location picker */ class LocationPickerSearchView : public HbView { Q_OBJECT public: // constructor - LocationPickerSearchView( LocationPickerAppWindow *aWindow, QGraphicsItem* aParent = 0 ); + LocationPickerSearchView(HbDocumentLoader &aLoader); // destructor ~LocationPickerSearchView(); - + //initialize the action items and connect to slots + void init(); private slots: // slot to perform search void doSearch(QString aCriteria); // slot to handle select event on a list item void handleActivated(const QModelIndex &aIndex); - + // slot to handle backbutton on search panel + void handleExit(); +signals: + //signals to switch current view + void switchView(); + //signals when any item is selected + void selectItem( quint32 aLm ); private: - //proxymodel used for sort and filter LocationPickerProxyModel *mProxyModel; // model for the view QStandardItemModel *mModel; - // graphics linear layout for list items and search panel - QGraphicsLinearLayout* mLayout; // list view HbListView *mListView; // search panel HbSearchPanel *mSearchPanel; - // handle to main window - LocationPickerAppWindow *mWindow; // handle to data manager to populate model LocationPickerDataManager *mDataManager; - HbAction *mSecondaryBackAction; + //TextItem + HbTextItem* mEmptyLabel; + //Graphicslayout + QGraphicsLinearLayout* mVerticalLayout; + //Documentloader + HbDocumentLoader &mDocumentLoader; }; diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickertoolbar.h --- a/locationpickerservice/inc/locationpickertoolbar.h Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* 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: LocationPickerToolBar declaration -* -*/ - -#ifndef LOCATIONPICKERTOOLBAR_H -#define LOCATIONPICKERTOOLBAR_H - -#include - -// forward declarations -class HbAction; -class LocationPickerAppWindow; - -/** Class used to create toolbar for location picker - * - */ -class LocationPickerToolBar : public HbToolBar -{ - Q_OBJECT -public: - - /** Constructor - */ - LocationPickerToolBar( LocationPickerAppWindow *aWindow, QGraphicsItem *aParent = 0 ); - - /** disable tabs if no locations - */ - void disableTabs(); - -private slots: - - /** Slot triggered when All tab is selected - */ - void AllTabTriggered(); - - /** Slot triggered when Collection tab is selected - */ - void CollectionTabTriggered(); - - /** Slot triggered when Search tab is selected - */ - void SearchTabTriggered(); - -private: - // Actions defined for the tabs - HbAction *mAllAction; - HbAction *mCollectionAction; - HbAction *mSearchAction; - - // pointer to the main window - LocationPickerAppWindow* mWindow; -}; - - -#endif // LOCATIONPICKERTOOLBAR_H diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/inc/locationpickertypes.h --- a/locationpickerservice/inc/locationpickertypes.h Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/inc/locationpickertypes.h Mon May 03 12:27:22 2010 +0300 @@ -18,8 +18,7 @@ #ifndef LOCATIONPICKERTYPES_H #define LOCATIONPICKERTYPES_H -// Defines total number of main views ( all, collectionlist, search ) -const int KNumberOfMainViews = 3; +#include // separator const QString KSeparator(","); @@ -27,64 +26,44 @@ // space const QString KSpace(" "); -// Application Title -const QString KApplicationTitle("Select Location"); - -// Application Title -const QString KNoLocations("No Location entries present"); - -// space -const QString KContactCollection("Contact addresses"); - -// strings used to differentiate the contact address type -const QString KContactPrefered("Contact Prefered"); -const QString KContactHome("Contact Home"); -const QString KContactWork("Contact Work"); -const QString KContactsString("Others"); -const QString KContactsCollection("Contact addresses"); -const QString KSortBy("Sort by"); -const QString KAscend("Ascending"); -const QString KDescend("Descending"); - //Icon Paths // dummy image for a location -const QString KDummyImage(":/qtg_large_maps.png"); - -//All tab icon -const QString KAllTab(":/qtg_mono_location.png.png"); +const QString KDummyImage("qtg_large_maps"); -//COllection tab icon -const QString KCollectionTab(":/qtg_mono_location_collection.png"); - -//Search tab icon -const QString KSearchTab(":/qtg_mono_search.png"); +//Contacts collection icon +const QString KCollectionsContacts("qtg_small_contacts"); //Contacts collection icon -const QString KCollectionsContacts(":/qtg_small_contacts.png"); - -//Contacts collection icon -const QString KCollectionsCalendar(":/qtg_small_calendar.png"); +const QString KCollectionsCalendar("qtg_small_calendar"); //Contacts type prefered icon -const QString KContactPrefIcon(":/qtg_mono_favourites.png"); +const QString KContactPrefIcon("qtg_mono_favourites"); //Contacts type home icon -const QString KContactHomeIcon(":/qtg_mono_home.png"); +const QString KContactHomeIcon("qtg_mono_home"); //Contacts type work icon -const QString KContactWorkIcon(":/qtg_mono_work.png"); +const QString KContactWorkIcon("qtg_mono_work"); + -/** Defines view type in location picker +// strings used to differentiate the contact address type +const QString KContactHome("Contact Home"); +const QString KContactWork("Contact Work"); +const QString KContactsString("Others"); + + +/** + * Defines view type in location picker */ enum TViewType { - /** All View */ - ELocationPickerAllView, - /** Collection list view */ - ELocationPickerCollectionListView, + /** LocationPicker Content */ + ELocationPickerContent, + /** Collection list Content*/ + ELocationPickerCollectionListContent, /** Search View */ ELocationPickerSearchView, - /** Collection content view */ - ELocationPickerCollectionContentView + /** Collection content */ + ELocationPickerCollectionContent }; diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/locationpickerservice.pro --- a/locationpickerservice/locationpickerservice.pro Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/locationpickerservice.pro Mon May 03 12:27:22 2010 +0300 @@ -43,40 +43,44 @@ # ##### qthighway CONFIG += service LIBS += -lxqservice \ - -lxqserviceutil \ - -lflogger + -lxqserviceutil SERVICE.FILE = service_conf.xml SERVICE.OPTIONS = embeddable SERVICE.OPTIONS += hidden # #### /qthighway -RESOURCES += .\resources\locationpicker.qrc +RESOURCES += ./resources/locationpicker.qrc +TRANSLATIONS += lilpicker.ts SOURCES += src/main.cpp \ - src/locationpickerallview.cpp \ + src/locationpickercontent.cpp \ src/locationpickerappwindow.cpp \ - src/locationpickertoolbar.cpp \ src/locationpickersearchview.cpp \ src/locationpickerproxymodel.cpp \ - src/locationpickercollectionlistview.cpp \ + src/locationpickercollectionlistcontent.cpp \ src/locationpickercollectioncontent.cpp \ src/locationpickerservice.cpp \ src/locationpickerdatamanager.cpp \ - src/locationpickerdatamanager_p.cpp + src/locationpickerdatamanager_p.cpp \ + src/locationpickerpotraitview.cpp \ + src/locationpickerlandscapeview.cpp \ + src/locationpickerdocumentloader.cpp -HEADERS += inc/locationpickerallview.h \ +HEADERS += inc/locationpickercontent.h \ inc/locationpickerappwindow.h \ - inc/locationpickertoolbar.h \ inc/locationpickersearchview.h \ inc/locationpickerproxymodel.h \ - inc/locationpickercollectionlistview.h \ + inc/locationpickercollectionlistcontent.h \ inc/locationpickercollectioncontent.h \ inc/locationpickertypes.h \ inc/locationpickerservice.h \ inc/locationpickerdatamanager.h \ - inc/locationpickerdatamanager_p.h + inc/locationpickerdatamanager_p.h \ + inc/locationpickerpotraitview.h \ + inc/locationpickerlandscapeview.h \ + inc/locationpickerdocumentloader.h diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/locationgrid.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/resources/locationgrid.css Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,31 @@ +HbGridViewItem#locationgrid +{ + layout:layout-1; +} +HbGridViewItem#locationgrid::icon{ + fixed-width: 24.375un; + fixed-height: 32.5un; +} + +HbGridViewItem#locationgrid::text{ + text-height: var(hb-param-text-height-tiny); + font-variant: primary; + text-align: center center; + color: qtc_grid; + text-line-count-min: 1; + text-line-count-max: 2; +} + +HbGridViewItem#locationgrid::selection-icon{ + fixed-width: 3.0un; + fixed-height: 3.0un; +} + +HbGridViewItem#locationgrid::multiselection-toucharea{ + fixed-width: 9.0un; + fixed-height: 9.0un; +} + +HbGridViewItem#locationgrid::frame{ + border-width: var(hb-param-background-grid-main); +} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/locationgrid.hbgridviewitem.widgetml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/resources/locationgrid.hbgridviewitem.widgetml Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/locationpicker.qrc --- a/locationpickerservice/resources/locationpicker.qrc Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/resources/locationpicker.qrc Mon May 03 12:27:22 2010 +0300 @@ -1,13 +1,9 @@ - qtg_large_maps.png - qtg_mono_favourites.png - qtg_mono_home.png - qtg_mono_location.png - qtg_mono_location_collection.png - qtg_mono_search.png - qtg_mono_work.png - qtg_small_calendar.png - qtg_small_contacts.png + locationpickerpotrait.docml + locationpickerlandscape.docml + locationpickersearchview.docml + locationgrid.css + locationgrid.hbgridviewitem.widgetml diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_large_maps.png Binary file locationpickerservice/resources/qtg_large_maps.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_favourites.png Binary file locationpickerservice/resources/qtg_mono_favourites.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_home.png Binary file locationpickerservice/resources/qtg_mono_home.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_location.png Binary file locationpickerservice/resources/qtg_mono_location.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_location_collection.png Binary file locationpickerservice/resources/qtg_mono_location_collection.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_search.png Binary file locationpickerservice/resources/qtg_mono_search.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_mono_work.png Binary file locationpickerservice/resources/qtg_mono_work.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_small_calendar.png Binary file locationpickerservice/resources/qtg_small_calendar.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/resources/qtg_small_contacts.png Binary file locationpickerservice/resources/qtg_small_contacts.png has changed diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/rom/locationpickerservice.iby --- a/locationpickerservice/rom/locationpickerservice.iby Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/rom/locationpickerservice.iby Mon May 03 12:27:22 2010 +0300 @@ -14,7 +14,6 @@ * Description: The locationpickerservice iby file. * */ - #ifndef __LOCATION_PICKER_SERVICE_IBY__ #define __LOCATION_PICKER_SERVICE_IBY__ diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerallview.cpp --- a/locationpickerservice/src/locationpickerallview.cpp Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* 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: LocationPickerAllView implementation -* -*/ - -#include -#include -#include -#include -#include - -#include "locationpickerallview.h" -#include "locationpickerproxymodel.h" -#include "locationpickertypes.h" -#include "locationpickerappwindow.h" -#include "locationpickerdatamanager.h" - -// ======== MEMBER FUNCTIONS ======== - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::LocationPickerAllView() -// ----------------------------------------------------------------------------- -LocationPickerAllView::LocationPickerAllView( LocationPickerAppWindow *aWindow, QGraphicsItem* aParent ) - : HbView( aParent ) -{ - mWindow = aWindow; - - // Create a standard model for the view list - mModel = new QStandardItemModel( this ); - - // create the list view and connect the signal - mListView=new HbListView( this ); - - // create data manager to manage data in the model - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerAllView ); - if( mDataManager->populateModel() ) - { - // connect the signal of the list activated to a slot. - connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); - - //Creation of List View - //Set grahics size for the list items. - HbListViewItem *hbListItem = new HbListViewItem(); - hbListItem->setGraphicsSize(HbListViewItem::Thumbnail); - - // Create the proxy model and set source model - mProxyModel = new LocationPickerProxyModel( this ); - mProxyModel->setSourceModel(mModel); - - // set proxymodel with list view - mListView->setModel(mProxyModel, hbListItem); - - // set sort properties - mProxyModel->setDynamicSortFilter(TRUE); - mProxyModel->setSortRole(Qt::DisplayRole); - mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); - - // sort in ascending order - mProxyModel->sort(0, Qt::AscendingOrder); - - // construct menu for the view - constructMenu(); - - mLocationsFound = true; - } - - else - { - // no locations to display. - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(KNoLocations), Qt::DisplayRole); - mModel->appendRow( modelItem ); - mListView->setModel(mModel); - mLocationsFound = false; - } - - // set the listview as the view's widget - setWidget(mListView); - - // create back action - mSecondaryBackAction = new HbAction( Hb::BackAction, this ); - // add back key action - setNavigationAction( mSecondaryBackAction ); - connect(mSecondaryBackAction, SIGNAL(triggered()), mWindow, - SLOT(backButtonTriggered())); - -} - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::LocationPickerAllView() -// ----------------------------------------------------------------------------- -LocationPickerAllView::~LocationPickerAllView() -{ - // delete data manager - if( mDataManager ) - delete mDataManager; -} - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::locationsFound() -// ----------------------------------------------------------------------------- -bool LocationPickerAllView::locationsFound() -{ - return mLocationsFound; -} - - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::constructMenu() -// ----------------------------------------------------------------------------- -void LocationPickerAllView::constructMenu() -{ - HbMenu *menu = this->menu(); - HbMenu *subMenu = menu->addMenu(KSortBy); - HbAction *act; - - act = new HbAction(KAscend, this ); - subMenu->addAction(act); - connect(act,SIGNAL(triggered()),this,SLOT(sortAscending())); - - act = subMenu->addAction( KDescend ); - connect(act, SIGNAL(triggered()), SLOT(sortDescending())); -} - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::sortAscending() -// ----------------------------------------------------------------------------- -void LocationPickerAllView::sortAscending() -{ - mProxyModel->sort(0, Qt::AscendingOrder); -} - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::sortDescending() -// ----------------------------------------------------------------------------- -void LocationPickerAllView::sortDescending() -{ - mProxyModel->sort(0, Qt::DescendingOrder); -} - -// ----------------------------------------------------------------------------- -// LocationPickerAllView::handleActivated() -// ----------------------------------------------------------------------------- -void LocationPickerAllView::handleActivated( const QModelIndex &aIndex) -{ - QModelIndex index = mProxyModel->mapToSource(aIndex); - quint32 lm = 0; - mDataManager->getData( index.row(), lm ); - mWindow->itemSelected( lm ); -} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerappwindow.cpp --- a/locationpickerservice/src/locationpickerappwindow.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickerappwindow.cpp Mon May 03 12:27:22 2010 +0300 @@ -16,87 +16,75 @@ */ #include "locationpickerappwindow.h" -#include "locationpickertoolbar.h" -#include "locationpickerallview.h" + +#include "qlocationpickeritem.h" + #include "locationpickersearchview.h" -#include "locationpickercollectionlistview.h" +#include "locationpickerpotraitview.h" #include "locationpickerservice.h" -#include "locationpickertypes.h" -#include "locationpickertypes.h" #include "locationpickerdatamanager.h" - +#include "locationpickerdocumentloader.h" +#include "locationpickerlandscapeview.h" + // ---------------------------------------------------------------------------- // LocationPickerAppWindow::LocationPickerAppWindow() // ---------------------------------------------------------------------------- -LocationPickerAppWindow::LocationPickerAppWindow( - QWidget* aParent ): - HbMainWindow( aParent ) +LocationPickerAppWindow::LocationPickerAppWindow(QWidget *parent, Hb::WindowFlags windowFlags) + :HbMainWindow(parent, windowFlags), + mLocationPickerSearchView(NULL), + mLocationPickerDocumentLoader(NULL), + mLocationPickerPotraitView(NULL), + mLocationPickerLandscapeView(NULL), + mService(NULL), + mviewType(ELocationPickerContent) { // create the service object; - mService = new LocationPickerService( this ); - - LocationPickerToolBar *toolBar = new LocationPickerToolBar( this ); + mService = new LocationPickerService(this); + //create document loader object + mLocationPickerDocumentLoader = new LocationPickerDocumentLoader(); + + bool ok = false; + //load the Locationpicker portrait view + mLocationPickerDocumentLoader->load(":/locationpickerpotrait.docml", &ok); + Q_ASSERT_X(ok, "locationpickerservice", "invalid DocML file"); + //find graphics location picker potrait view + QGraphicsWidget *locationPickerWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerPotraitView"); + Q_ASSERT_X((locationPickerWidget != 0), "locationpickerservice", "invalid DocML file"); + mLocationPickerPotraitView = qobject_cast(locationPickerWidget); + //initialize potrait widgets and connect to respective signals + mLocationPickerPotraitView->init(Qt::Vertical); + connectPotraitSlots(); + addView( mLocationPickerPotraitView ); - // Create 'all' view, set the tool bar and add the view to main window - mLocationPickerAllView = new LocationPickerAllView( this ); - if( !mLocationPickerAllView->locationsFound() ) - { - toolBar->disableTabs(); - } - mLocationPickerAllView->setToolBar(toolBar); - addView(mLocationPickerAllView); - setCurrentView(mLocationPickerAllView); + mLocationPickerDocumentLoader->reset(); - // Create 'search' view, set the tool bar and add the view to main window - mLocationPickerSearchView = new LocationPickerSearchView( this ); - mLocationPickerSearchView->setToolBar(toolBar); - addView(mLocationPickerSearchView); - - // Create 'collection' view, set the tool bar and add the view to main window - mLocationPickerCollectionListView = new LocationPickerCollectionListView( this ); - mLocationPickerCollectionListView->setToolBar(toolBar); - addView(mLocationPickerCollectionListView); - + //load the Locationpicker landscape view + mLocationPickerDocumentLoader->load(":/locationpickerlandscape.docml", &ok); + Q_ASSERT_X(ok, "locationpickerservice", "invalid DocML file"); + //find graphics location picker landscape view + locationPickerWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerLandscapeView"); + Q_ASSERT_X((locationPickerWidget != 0), "locationpickerservice", "invalid DocML file"); + mLocationPickerLandscapeView = qobject_cast(locationPickerWidget); + //initialize widgets and connect to respective signals + mLocationPickerLandscapeView->init(Qt::Horizontal); + connectLandscapeSlots(); + addView(mLocationPickerLandscapeView); + //connect to orientationChanged signal + connect(this, SIGNAL(orientationChanged(Qt::Orientation)),this, SLOT(changeOrientation(Qt::Orientation))); + //launch the view in current orientation + changeOrientation(this->orientation()); } - // ---------------------------------------------------------------------------- // LocationPickerAppWindow::~LocationPickerAppWindow() // ---------------------------------------------------------------------------- LocationPickerAppWindow::~LocationPickerAppWindow() { delete mService; -} - - -// ---------------------------------------------------------------------------- -// LocationPickerAppWindow::backButtonTriggered() -// ---------------------------------------------------------------------------- -void LocationPickerAppWindow::backButtonTriggered() -{ - if( currentViewIndex() > KNumberOfMainViews-1 ) - { - //the current view is collection content view. - //so come back to collection list view - setCurrentView(mLocationPickerCollectionListView); - deleteCollectionContentView(); - } - else - { - // Other views request complete with a invalid location picker item - QLocationPickerItem item; - item.mIsValid = false; - mService->complete(item); - } -} - -// ---------------------------------------------------------------------------- -// LocationPickerAppWindow::deleteCollectionContentView() -// ---------------------------------------------------------------------------- -void LocationPickerAppWindow::deleteCollectionContentView() -{ - // call collection view's deleteCollectionContentView() - mLocationPickerCollectionListView->deleteCollectionContentView(); + delete mLocationPickerSearchView; + delete mLocationPickerDocumentLoader; + delete mLocationPickerPotraitView; + delete mLocationPickerLandscapeView; } // ---------------------------------------------------------------------------- @@ -105,14 +93,186 @@ void LocationPickerAppWindow::itemSelected( quint32 aLmid ) { QLocationPickerItem item; - LocationPickerDataManager dataManager; - dataManager.getLocationItem( aLmid, item ); - + dataManager.getLocationItem(aLmid, item); // complete the request mService->complete(item); - +} + +void LocationPickerAppWindow::serviceComplete() +{ + // Other views request complete with a valid location picker item + QLocationPickerItem item; + item.mIsValid = false; + mService->complete(item); +} +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::activateSearchView() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::activateSearchView() +{ + //load the LocationPickerSearchView + bool ok = false; + if(!mLocationPickerSearchView) + { + mLocationPickerDocumentLoader->load(":/locationpickersearchview.docml", &ok); + Q_ASSERT_X(ok, "locationpickerService", "invalid DocML file"); + //find the LocationPickerSearchView + QGraphicsWidget *locationPickerSearchWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerSearchView"); + Q_ASSERT_X((locationPickerSearchWidget != 0), "locationpickerService", "invalid DocML file"); + mLocationPickerSearchView = qobject_cast(locationPickerSearchWidget); + Q_ASSERT_X((mLocationPickerSearchView != 0), "mLocationPickerSearchView", + "qobject cast failure"); + //initialize the action items and connect to slots + mLocationPickerSearchView->init(); + connect(mLocationPickerSearchView,SIGNAL(switchView()),this,SLOT(activateLocationPickerView())); + connect(mLocationPickerSearchView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); + addView(mLocationPickerSearchView); + } + //set LocationPickerSearchview as current view + setCurrentView(mLocationPickerSearchView); + mviewType = ELocationPickerSearchView; +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::activateLocationPickerView() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::activateLocationPickerView() +{ + mviewType = ELocationPickerContent; + //check the orientation and load view accordingly + if(this->orientation() == Qt::Horizontal) + { + mLocationPickerLandscapeView->setViewType( ELocationPickerContent ); + mLocationPickerLandscapeView->manageGridView(); + setCurrentView(mLocationPickerLandscapeView); + } + else + { + mLocationPickerPotraitView->setViewType( ELocationPickerContent ); + mLocationPickerPotraitView->manageListView(); + setCurrentView( mLocationPickerPotraitView ); + } +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::changeOrientation() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::changeOrientation(Qt::Orientation) +{ + //check the orientation and load view accordingly + if( orientation() == (Qt::Horizontal )) + { + loadLandscape(); + } + else + { + loadPotrait(); + } } +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::loadPotrait() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::loadPotrait() +{ + //load potrait view except for search view + if(mviewType != ELocationPickerSearchView) + { + if(mLocationPickerLandscapeView->getViewType() == ELocationPickerContent) + { + mLocationPickerPotraitView->setViewType(ELocationPickerContent); + } + mLocationPickerPotraitView->manageListView(); + setCurrentView( mLocationPickerPotraitView ); + } +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::loadLandscape() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::loadLandscape() +{ + if(mviewType != ELocationPickerSearchView) + { + //load landscape view in current potrait content + mLocationPickerLandscapeView->setViewType( mLocationPickerPotraitView->getViewType() ); + //load landscape for all content except collectionlistcontent + if(mLocationPickerPotraitView->getViewType() != ELocationPickerCollectionListContent) + { + mLocationPickerLandscapeView->manageGridView(); + setCurrentView(mLocationPickerLandscapeView); + } + } +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::loadLandscape() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::connectPotraitSlots() +{ + connect(mLocationPickerPotraitView,SIGNAL(switchToSearchView()),this,SLOT(activateSearchView())); + connect(mLocationPickerPotraitView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); + connect(mLocationPickerPotraitView,SIGNAL(completeService()),this,SLOT(serviceComplete())); + connect(mLocationPickerPotraitView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryID( quint32 ))); + connect(mLocationPickerPotraitView,SIGNAL(handleAllList()),this,SLOT(allListHandle())); +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::loadLandscape() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::connectLandscapeSlots() +{ + connect(mLocationPickerLandscapeView,SIGNAL(switchToSearchView()),this,SLOT(activateSearchView())); + connect(mLocationPickerLandscapeView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); + connect(mLocationPickerLandscapeView,SIGNAL(completeService()),this,SLOT(serviceComplete())); + connect(mLocationPickerLandscapeView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryID( quint32 ))); + connect(mLocationPickerLandscapeView,SIGNAL(handleCollectionList()),this,SLOT(handleCollectionList())); +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::setCategoryID() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::setCategoryID( quint32 acategoryId ) +{ + //set the same category id to both views + mLocationPickerPotraitView->setCategoryID(acategoryId); + mLocationPickerLandscapeView->setCategoryID(acategoryId); + //Load the collectioncontent in appropriate orientation + if(orientation() == Qt::Vertical) + { + mviewType = ELocationPickerCollectionContent; + mLocationPickerPotraitView->manageListView(); + setCurrentView( mLocationPickerPotraitView ); + } + else + { + mviewType = ELocationPickerCollectionContent; + loadLandscape(); + } +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::handleCollectionList() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::handleCollectionList() +{ + //In collection List both view should look same(list) + mLocationPickerPotraitView->setViewType( ELocationPickerCollectionListContent ); + mviewType = ELocationPickerCollectionListContent; + mLocationPickerPotraitView->manageListView(); + setCurrentView( mLocationPickerPotraitView ); +} + +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::allListHandle() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::allListHandle() +{ + //all list after collection list in horizontal orientation + mLocationPickerLandscapeView->setViewType( ELocationPickerContent ); + mLocationPickerLandscapeView->manageGridView(); + setCurrentView(mLocationPickerLandscapeView); +} Q_IMPLEMENT_USER_METATYPE(QLocationPickerItem) diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickercollectioncontent.cpp --- a/locationpickerservice/src/locationpickercollectioncontent.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickercollectioncontent.cpp Mon May 03 12:27:22 2010 +0300 @@ -15,81 +15,45 @@ * */ -#include #include -#include -#include -#include #include "locationpickerproxymodel.h" #include "locationpickercollectioncontent.h" #include "locationpickerdatamanager.h" #include "locationpickertypes.h" -#include "locationpickerappwindow.h" // ======== MEMBER FUNCTIONS ======== // ---------------------------------------------------------------- // LocationPickerCollectionContent::LocationPickerCollectionContent() // ----------------------------------------------------------------- -LocationPickerCollectionContent::LocationPickerCollectionContent( - LocationPickerAppWindow *aWindow, quint32 aCollectionId, QGraphicsItem* aParent): - HbView( aParent ) - +LocationPickerCollectionContent::LocationPickerCollectionContent( Qt::Orientations aOrientation , quint32 aCollectionId ) + :mOrientation(aOrientation), + mProxyModel(NULL), + mModel(NULL), + mDataManager(NULL) { - // inditialize window - mWindow = aWindow; // Create a standard model for the view list mModel = new QStandardItemModel( this ); - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionContentView ); - mListView = new HbListView( this ); - - - if( mDataManager->populateModel( aCollectionId ) ) + mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionContent ); + if( mDataManager->populateModel( mOrientation , aCollectionId ) ) { - // connect the activated signal of list view item - connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); - //Creation of List View - //Set graphics size for the list items. - HbListViewItem *hbListItem = new HbListViewItem(); - hbListItem->setGraphicsSize(HbListViewItem::Thumbnail); - // Create the proxy model. - mProxyModel = new LocationPickerProxyModel(); + mProxyModel = new LocationPickerProxyModel(mOrientation); mProxyModel->setSourceModel(mModel); - - // set the model - mListView->setModel( mProxyModel, hbListItem ); mProxyModel->setDynamicSortFilter(TRUE); mProxyModel->setSortRole(Qt::DisplayRole); mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); - // sort mProxyModel->sort(0, Qt::AscendingOrder); - - // construct menu for the view - constructMenu(); } - else { // no locations to display. QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(KNoLocations), Qt::DisplayRole); + modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); mModel->appendRow( modelItem ); - mListView->setModel(mModel); - } - - setWidget(mListView); - - - // create back action - mSecondaryBackAction = new HbAction( Hb::BackAction, this ); - // add back key action - setNavigationAction( mSecondaryBackAction ); - connect(mSecondaryBackAction, SIGNAL(triggered()), mWindow, - SLOT(backButtonTriggered())); - + } } // ---------------------------------------------------------------- @@ -97,50 +61,24 @@ // ----------------------------------------------------------------- LocationPickerCollectionContent::~LocationPickerCollectionContent() { - if( mDataManager ) - delete mDataManager; + delete mProxyModel; + delete mModel; + delete mDataManager; } // ---------------------------------------------------------------- -// LocationPickerCollectionContent::constructMenu() +// LocationPickerCollectionContent::getProxyModel // ----------------------------------------------------------------- -void LocationPickerCollectionContent::constructMenu() -{ - HbMenu *menu = this->menu(); - HbMenu *subMenu = menu->addMenu(KSortBy); - HbAction *act; - - act = new HbAction(QString(KAscend), this); - subMenu->addAction(act); - connect(act,SIGNAL(triggered()),this,SLOT(sortAscending())); - - act = subMenu->addAction( KDescend ); - connect(act, SIGNAL(triggered()), SLOT(sortDescending())); -} +LocationPickerProxyModel* LocationPickerCollectionContent::getProxyModel() + { + return mProxyModel; + } // ---------------------------------------------------------------- -// LocationPickerCollectionContent::sortAscending() -// ----------------------------------------------------------------- -void LocationPickerCollectionContent::sortAscending() -{ - mProxyModel->sort(0, Qt::AscendingOrder); -} -// ---------------------------------------------------------------- -// LocationPickerCollectionContent::sortDescending() +// LocationPickerCollectionContent::getDataManager // ----------------------------------------------------------------- -void LocationPickerCollectionContent::sortDescending() -{ - mProxyModel->sort(0, Qt::DescendingOrder); -} - -// ---------------------------------------------------------------- -// LocationPickerCollectionContent::handleActivated() -// ----------------------------------------------------------------- -void LocationPickerCollectionContent::handleActivated(const QModelIndex &aIndex) -{ - QModelIndex index = mProxyModel->mapToSource(aIndex); - quint32 lm = 0; - mDataManager->getData( index.row(), lm ); - mWindow->itemSelected( lm ); -} +LocationPickerDataManager* LocationPickerCollectionContent::getDataManager() + { + return mDataManager; + } diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickercollectionlistcontent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/src/locationpickercollectionlistcontent.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,65 @@ +/* +* 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: LocationPickerCollectionListContent implementation +* +*/ + +#include + +#include "locationpickercollectionlistcontent.h" +#include "locationpickerdatamanager.h" + +// ======== MEMBER FUNCTIONS ======== + +// ---------------------------------------------------------------------- +// LocationPickerCollectionListContent::LocationPickerCollectionListContent() +// ---------------------------------------------------------------------- +LocationPickerCollectionListContent::LocationPickerCollectionListContent(Qt::Orientation aOrientation ) + :mOrientation(aOrientation), + mModel(NULL), + mDataManager(NULL) +{ + // Create a standard model for the view list + mModel = new QStandardItemModel( this ); + + mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionListContent ); + mDataManager->populateModel( mOrientation ); +} + +// ---------------------------------------------------------------------- +// LocationPickerCollectionListContent::~LocationPickerCollectionListContent() +// ---------------------------------------------------------------------- +LocationPickerCollectionListContent::~LocationPickerCollectionListContent() +{ + if( mDataManager ) + delete mDataManager; + delete mModel; +} + +// ---------------------------------------------------------------- +// LocationPickerCollectionListContent::getStandardModel +// ----------------------------------------------------------------- +QStandardItemModel* LocationPickerCollectionListContent::getStandardModel() + { + return mModel; + } + +// ---------------------------------------------------------------- +// LocationPickerCollectionListContent::getDataManager +// ----------------------------------------------------------------- +LocationPickerDataManager* LocationPickerCollectionListContent::getDataManager() + { + return mDataManager; + } + diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickercollectionlistview.cpp --- a/locationpickerservice/src/locationpickercollectionlistview.cpp Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* 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: LocationPickerCollectionListView implementation -* -*/ - -#include -#include -#include - -#include "locationpickercollectionlistview.h" -#include "locationpickercollectioncontent.h" -#include "locationpickertoolbar.h" -#include "locationpickerappwindow.h" -#include "locationpickerdatamanager.h" -#include "locationpickertypes.h" - -// ======== MEMBER FUNCTIONS ======== - -// ---------------------------------------------------------------------- -// LocationPickerCollectionListView::LocationPickerCollectionListView() -// ---------------------------------------------------------------------- -LocationPickerCollectionListView::LocationPickerCollectionListView( - LocationPickerAppWindow *aWindow, QGraphicsItem* aParent ) - :HbView( aParent ) - -{ - mWindow = aWindow; - //Creation of List View - mListView=new HbListView( this ); - connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); - - //Set grahics size for the list items. - HbListViewItem *hbListItem = new HbListViewItem(); - hbListItem->setGraphicsSize(HbListViewItem::MediumIcon); - - // Create a standard model for the view list - mModel = new QStandardItemModel( this ); - mListView->setModel( mModel, hbListItem ); - - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionListView ); - mDataManager->populateModel(); - - setWidget( mListView ); - - - // create back action - mSecondaryBackAction = new HbAction( Hb::BackAction, this ); - // add back key action - setNavigationAction( mSecondaryBackAction ); - connect(mSecondaryBackAction, SIGNAL(triggered()), mWindow, - SLOT(backButtonTriggered())); - -} - -// ---------------------------------------------------------------------- -// LocationPickerCollectionListView::~LocationPickerCollectionListView() -// ---------------------------------------------------------------------- -LocationPickerCollectionListView::~LocationPickerCollectionListView() -{ - if( mDataManager ) - delete mDataManager; -} - - -// ---------------------------------------------------------------------- -// LocationPickerCollectionListView::handleActivated() -// ---------------------------------------------------------------------- -void LocationPickerCollectionListView::handleActivated( const QModelIndex &aIndex ) -{ - // get the collection/category id - quint32 categoryId = 0; - mDataManager->getData( aIndex.row(), categoryId ); - - // Create a content view of the selected collection - LocationPickerToolBar *toolBar = new LocationPickerToolBar( mWindow, this ); - mCollectionContentView = new LocationPickerCollectionContent( mWindow, categoryId ); - mCollectionContentView->setToolBar(toolBar); - - // switch to the content view - mWindow->addView( mCollectionContentView ); - mWindow->setCurrentView( mCollectionContentView ); -} - -// ---------------------------------------------------------------------- -// LocationPickerCollectionListView::deleteCollectionContentView() -// ---------------------------------------------------------------------- -void LocationPickerCollectionListView::deleteCollectionContentView() -{ - // delete the content view - mWindow->removeView(mCollectionContentView); - delete mCollectionContentView; - mCollectionContentView = NULL; -} - diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickercontent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/src/locationpickercontent.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,146 @@ +/* +* 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: LocationPickerContent implementation +* +*/ + +#include + +#include "locationpickercontent.h" +#include "locationpickerproxymodel.h" +#include "locationpickertypes.h" +#include "locationpickerdatamanager.h" + +// ======== MEMBER FUNCTIONS ======== + +// ----------------------------------------------------------------------------- +// LocationPickerContent::LocationPickerContent() +// ----------------------------------------------------------------------------- +LocationPickerContent::LocationPickerContent( Qt::Orientation aOrientation ) + :mOrientation(aOrientation), + mListProxyModel(NULL), + mProxyGridModel(NULL), + mDataManager(NULL), + mModel(NULL), + mLocationsFound(true) +{ + // Create a standard model for the list view + mModel = new QStandardItemModel( this ); + // create data manager to manage data in the model + mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerContent ); + if(mOrientation == Qt::Vertical) + { + if( mDataManager->populateModel(mOrientation) ) + { + // Create the proxy model and set source model + mListProxyModel = new LocationPickerProxyModel( mOrientation, this ); + mListProxyModel->setSourceModel(mModel); + // set sort properties + mListProxyModel->setDynamicSortFilter(TRUE); + mListProxyModel->setSortRole(Qt::DisplayRole); + mListProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + + // sort in ascending order + mListProxyModel->sort(0, Qt::AscendingOrder); + mLocationsFound = true; + } + else + { + // no locations to display. + QStandardItem *modelItem = new QStandardItem(); + modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); + mModel->appendRow( modelItem ); + mLocationsFound = false; + } + } + //for landscape view + else + { + if( mDataManager->populateModel(mOrientation) ) + { + // Create the proxy model and set source model + mProxyGridModel = new LocationPickerProxyModel( mOrientation , this ); + mProxyGridModel->setSourceModel(mModel); + // set sort properties + mProxyGridModel->setDynamicSortFilter(TRUE); + mProxyGridModel->setSortRole(Qt::DisplayRole); + mProxyGridModel->setSortCaseSensitivity(Qt::CaseInsensitive); + + // sort in ascending order + mProxyGridModel->sort(0, Qt::AscendingOrder); + mLocationsFound = true; + } + else + { + // no locations to display. + QStandardItem *modelItem = new QStandardItem(); + modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); + mModel->appendRow( modelItem ); + mLocationsFound = false; + } + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::LocationPickerContent() +// ----------------------------------------------------------------------------- +LocationPickerContent::~LocationPickerContent() +{ + // delete data manager + if( mDataManager ) + delete mDataManager; + delete mProxyGridModel; + delete mListProxyModel; + delete mModel; +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::locationsFound() +// ----------------------------------------------------------------------------- +bool LocationPickerContent::locationsFound() +{ + return mLocationsFound; +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::getListProxyModel() +// ----------------------------------------------------------------------------- +LocationPickerProxyModel* LocationPickerContent::getListProxyModel() +{ + return mListProxyModel; +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::getStandardModel() +// ----------------------------------------------------------------------------- +QStandardItemModel* LocationPickerContent::getStandardModel() +{ + return mModel; +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::getDataManager() +// ----------------------------------------------------------------------------- +LocationPickerDataManager* LocationPickerContent::getDataManager() +{ + return mDataManager; +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::getGridProxyModel() +// ----------------------------------------------------------------------------- +LocationPickerProxyModel* LocationPickerContent::getGridProxyModel() +{ + return mProxyGridModel; +} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerdatamanager.cpp --- a/locationpickerservice/src/locationpickerdatamanager.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickerdatamanager.cpp Mon May 03 12:27:22 2010 +0300 @@ -50,10 +50,10 @@ // ---------------------------------------------------------------------------- // LocationPickerDataManager::populateModel() // ---------------------------------------------------------------------------- -bool LocationPickerDataManager::populateModel( quint32 aCollectionId ) -{ +bool LocationPickerDataManager::populateModel(Qt::Orientations aOrientation, quint32 aCollectionId) +{ Q_D( LocationPickerDataManager); - return( d->populateModel( aCollectionId ) ); + return( d->populateModel(aOrientation, aCollectionId) ); } diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerdatamanager_p.cpp --- a/locationpickerservice/src/locationpickerdatamanager_p.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickerdatamanager_p.cpp Mon May 03 12:27:22 2010 +0300 @@ -35,7 +35,7 @@ LocationPickerDataManagerPrivate::LocationPickerDataManagerPrivate() : mModel( NULL ), - mViewType( ELocationPickerAllView ), + mViewType( ELocationPickerContent ), mIterator(NULL), mLandmarkDb(NULL), mLmCategoryManager(NULL), @@ -78,9 +78,10 @@ // ---------------------------------------------------------------------------- // LocationPickerDataManagerPrivate::populateModel() // ---------------------------------------------------------------------------- -bool LocationPickerDataManagerPrivate::populateModel( quint32 aCollectionId ) +bool LocationPickerDataManagerPrivate::populateModel( const Qt::Orientations aOrientation, quint32 aCollectionId ) { bool retValue = false; + mOrientation = aOrientation; TRAP_IGNORE( retValue = populateModelL( aCollectionId ) ); return retValue; } @@ -92,20 +93,20 @@ { // Handle to the landmark database mLandmarkDb = NULL; - + //Open and intialize Landmark DB mLandmarkDb = CPosLandmarkDatabase::OpenL(); ExecuteAndDeleteLD( mLandmarkDb->InitializeL() ); switch( mViewType ) { - case ELocationPickerAllView: + case ELocationPickerContent: case ELocationPickerSearchView: { // Create an iterator for iterating the landmarks in the database mIterator = mLandmarkDb->LandmarkIteratorL(); - if( ( mIterator == NULL ) || (mIterator->NumOfItemsL() == 0) ) + if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) { // no items in the landmark database, so return false. return false; @@ -115,7 +116,7 @@ CleanupStack::Pop( mIterator ); } break; - case ELocationPickerCollectionListView: + case ELocationPickerCollectionListContent: { // Create category manager for landmarks @@ -128,7 +129,7 @@ // Create an iterator for iterating the referenced categories in the database mIterator = mLmCategoryManager->ReferencedCategoryIteratorL(); - if( ( mIterator == NULL ) || (mIterator->NumOfItemsL() == 0) ) + if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) { // no items in the landmark database, so return false. return false; @@ -140,7 +141,7 @@ } break; - case ELocationPickerCollectionContentView: + case ELocationPickerCollectionContent: { // create a search object. @@ -157,7 +158,7 @@ // Retrieve an iterator to access the matching landmarks. mIterator = mLandmarkSearch->MatchIteratorL(); - if( ( mIterator == NULL ) || (mIterator->NumOfItemsL() == 0) ) + if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) { // no landmarks in this collection CleanupStack::Pop(mLandmarkSearch); @@ -181,10 +182,11 @@ { // Read each landmark in the database and copy to the model. TPosLmItemId lmId; - while ((lmId = mIterator->NextL()) != KPosLmNullItemId ) + mModel->clear(); + while ( ( lmId = mIterator->NextL() ) != KPosLmNullItemId ) { CPosLandmark* readLandmark = mLandmarkDb->ReadLandmarkLC(lmId ); - + if( readLandmark ) { QString lmAddressLine1(" "); @@ -270,7 +272,7 @@ } // set icons based on contact address type - QVariantList icons;; + QVariantList icons; if( contactAddressType == KContactHome ) { icons << HbIcon(KDummyImage) << HbIcon(KContactHomeIcon); @@ -283,15 +285,30 @@ { icons << HbIcon(KDummyImage) << HbIcon(KContactPrefIcon); } - - + // create a list item and set to model QStringList addressData; - addressData << lmAddressLine1 << lmAddressLine2; - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(addressData), Qt::DisplayRole); - modelItem->setData( icons, Qt::DecorationRole ); - mModel->appendRow( modelItem ); + //create model for grid view in landscape mode + if(mOrientation == Qt::Horizontal && ( mViewType == ELocationPickerCollectionContent || mViewType == ELocationPickerContent) ) + { + addressData.clear(); + QStandardItem *modelItem = new QStandardItem(); + addressData << lmAddressLine1; + modelItem->setData(QVariant(addressData), Qt::DisplayRole); + modelItem->setData( icons[0], Qt::DecorationRole ); + modelItem->setData(QString("contact"),Qt::UserRole); + mModel->appendRow( modelItem ); + } + else + { + //create model for list view in potrai mode + addressData.clear(); + QStandardItem *modelItem = new QStandardItem(); + addressData << lmAddressLine1 << lmAddressLine2; + modelItem->setData(QVariant(addressData), Qt::DisplayRole); + modelItem->setData( icons, Qt::DecorationRole ); + mModel->appendRow( modelItem ); + } CleanupStack::PopAndDestroy( readLandmark ); } @@ -323,7 +340,7 @@ categoryName = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); if(categoryName == KContactsString) { - categoryName = KContactsCollection; + categoryName = hbTrId("txt_lint_list_contact_addresses"); } } @@ -332,7 +349,7 @@ QString iconPath; QStandardItem *modelItem = new QStandardItem(); modelItem->setData(QVariant(categoryName), Qt::DisplayRole); - modelItem->setData( QIcon (KCollectionsContacts), Qt::DecorationRole ); + modelItem->setData( HbIcon (KCollectionsContacts), Qt::DecorationRole ); mModel->appendRow( modelItem ); CleanupStack::PopAndDestroy( readCategory ); diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerdocumentloader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/src/locationpickerdocumentloader.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,68 @@ +/* +* 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: locationpickerdocumentloader implementation +* +*/ + +#include "locationpickerdocumentloader.h" +#include "locationpickerpotraitview.h" +#include "locationpickersearchview.h" +#include "locationpickerlandscapeview.h" + +// --------------------------------------------------------------------------- +// LocationPickerDocumentLoader::LocationPickerDocumentLoader() +// --------------------------------------------------------------------------- +// +LocationPickerDocumentLoader::LocationPickerDocumentLoader() +{ +} + +// --------------------------------------------------------------------------- +// LocationPickerDocumentLoader::~LocationPickerDocumentLoader() +// --------------------------------------------------------------------------- +// +LocationPickerDocumentLoader::~LocationPickerDocumentLoader() +{ +} + +// --------------------------------------------------------------------------- +// LocationPickerDocumentLoader::createObject +// --------------------------------------------------------------------------- +// +QObject *LocationPickerDocumentLoader::createObject(const QString& type, const QString &name) +{ + //for locationpickerpotraitview + if (name == LocationPickerPotraitView::staticMetaObject.className() ) + { + QObject *object = new LocationPickerPotraitView(this); + object->setObjectName(name); + return object; + } + //for locationpickerlandscapeview + if (name == LocationPickerLandscapeView::staticMetaObject.className()) + { + QObject *object = new LocationPickerLandscapeView(this); + object->setObjectName(name); + return object; + } + //for locationpickersearchview + if (name == LocationPickerSearchView::staticMetaObject.className()) + { + QObject *object = new LocationPickerSearchView(*this); + object->setObjectName(name); + return object; + } + //default case + return HbDocumentLoader::createObject(type, name); +} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerlandscapeview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/src/locationpickerlandscapeview.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,346 @@ +/* +* 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: LocationPickerLandscapeView implementation +* +*/ + +#include "locationpickerlandscapeview.h" + +#include +#include +#include +#include +#include +#include + +#include "locationpickerproxymodel.h" +#include "locationpickerdatamanager.h" +#include "locationpickercontent.h" +#include "locationpickercollectionlistcontent.h" +#include "locationpickercollectioncontent.h" + + +// ---------------------------------------------------- +// LocationPickerLandscapeView::LocationPickerLandscapeView() +// ---------------------------------------------------- +LocationPickerLandscapeView::LocationPickerLandscapeView(HbDocumentLoader* aLoader) + :mDocumentLoader(aLoader), + mLocationPickerContent(NULL), + mLocationPickerCollectionListContent(NULL), + mAllAction(NULL), + mCollectionAction(NULL), + mSearchAction(NULL), + mAscendingAction(NULL), + mDescendingAction(NULL), + mGridView(NULL), + mCollectionContent(NULL), + mGridViewItem(NULL), + mViewType(ELocationPickerContent) +{ + HbStyleLoader::registerFilePath(":/locationgrid.css"); + HbStyleLoader::registerFilePath(":/locationgrid.hbgridviewitem.widgetml"); + //create grid view item + mGridViewItem = new HbGridViewItem(); + mGridViewItem->setObjectName("locationgrid"); + + // create back action + mLandscapeBackAction = new HbAction(Hb::BackAction); + setNavigationAction(mLandscapeBackAction); + connect(mLandscapeBackAction, SIGNAL(triggered()), this, + SLOT(backButtonTriggered())); +} +// ---------------------------------------------------- +// LocationPickerPotraitView::~LocationPickerLandscapeView() +// ---------------------------------------------------- +LocationPickerLandscapeView::~LocationPickerLandscapeView() +{ + delete mCollectionContent; + delete mLocationPickerContent; + delete mLocationPickerCollectionListContent; + delete mAllAction; + delete mCollectionAction; + delete mAscendingAction; + delete mDescendingAction; +} + +// ---------------------------------------------------------------------------- +// LocationPickerPotraitView::backButtonTriggered() +// ---------------------------------------------------------------------------- +void LocationPickerLandscapeView::backButtonTriggered() +{ + //if current model is collection content, go back to collectionlist content + if(mViewType == ELocationPickerCollectionContent) + { + colectionTabTriggered(); + delete mCollectionContent; + mCollectionContent=NULL; + } + else + { + //complete the service + emit completeService(); + } +} + + +// ---------------------------------------------------- +// LocationPickerPotraitView::~init() +// ---------------------------------------------------- +void LocationPickerLandscapeView::init(Qt::Orientation aOrientation ) +{ + // Create Collection List Content + mLocationPickerCollectionListContent = new LocationPickerCollectionListContent(aOrientation); + + mLocationPickerContent = new LocationPickerContent(aOrientation); + + //Get HbAction items + mGridView = qobject_cast (mDocumentLoader->findObject(QString( + "gridView"))); + //get the action items from docml + mAllAction = qobject_cast (mDocumentLoader->findObject(QString( + "allAction"))); + mCollectionAction = qobject_cast (mDocumentLoader->findObject( + QString("collectionAction"))); + mSearchAction = qobject_cast (mDocumentLoader->findObject(QString( + "searchAction"))); + mAscendingAction = qobject_cast (mDocumentLoader->findObject( + QString("ascendingAction"))); + mDescendingAction = qobject_cast (mDocumentLoader->findObject( + QString("descendingAction"))); + if( !mAllAction || !mCollectionAction || !mSearchAction || !mGridView || !mAscendingAction || !mDescendingAction) + { + qFatal("Error Reading Docml"); + } + + //connect to slots + connect(mAscendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); + connect(mDescendingAction, SIGNAL(triggered()), this, + SLOT(sortDescending())); + //connect all action Items to respective slots + connect(mAllAction, SIGNAL(triggered()), this, SLOT(allTabTriggered())); + connect(mCollectionAction, SIGNAL(triggered()), this,SLOT(colectionTabTriggered())); + connect(mSearchAction, SIGNAL(triggered()), this, + SLOT(searchTabTriggered())); + + connect(mGridView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); +} + + +void LocationPickerLandscapeView::manageGridView() +{ + // Create Locationpicker Content + if (!mLocationPickerContent->locationsFound()) + { + //if no location entries present + mGridView->setModel(mLocationPickerContent->getStandardModel(),mGridViewItem); + disableTabs(); + mViewType = ELocationPickerContent; + } + else + { + //set the appropriate model + switch(mViewType) + { + case ELocationPickerContent: + { + mGridView->setModel(mLocationPickerContent->getGridProxyModel(),mGridViewItem); + mAllAction->setChecked(true); + mCollectionAction->setChecked(false); + } + break; + case ELocationPickerCollectionContent: + { + setCollectionData(mCategoryId); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + } + break; + } + } +} + +void LocationPickerLandscapeView::disableTabs() +{ + mAllAction->setDisabled(true); + mCollectionAction->setDisabled(true); + mSearchAction->setDisabled(true); + mAscendingAction->setDisabled(true); + mDescendingAction->setDisabled(true); +} + + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::handleActivated() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::handleActivated(const QModelIndex &aIndex) +{ + //handle the activated signal according to model set + + switch(mViewType) + { + case ELocationPickerContent: + { + QModelIndex index = mLocationPickerContent->getGridProxyModel()->mapToSource( + aIndex); + quint32 lm = 0; + mLocationPickerContent->getDataManager()->getData(index.row(), lm); + emit selectItem( lm ); + } + break; + case ELocationPickerCollectionListContent: + { + mLocationPickerCollectionListContent->getDataManager()->getData( + aIndex.row(), mCategoryId); + setCollectionData(mCategoryId); + emit sendCategoryID(mCategoryId); + } + break; + //default + case ELocationPickerCollectionContent: + { + QModelIndex index = mCollectionContent->getProxyModel()->mapToSource( + aIndex); + quint32 lm = 0; + mCollectionContent->getDataManager()->getData(index.row(), lm); + emit selectItem(lm); + } + break; + default: + break; + } +} + + + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::sortAscending() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::sortAscending() +{ + //check the model set and do sorting accordingly + if (mViewType == ELocationPickerContent) + { + mLocationPickerContent->getGridProxyModel()->sort(0, Qt::AscendingOrder); + } + else + { + mCollectionContent->getProxyModel()->sort(0, Qt::AscendingOrder); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::sortDescending() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::sortDescending() +{ + //check the model set and do sorting accordingly + if (mViewType == ELocationPickerContent) + { + mLocationPickerContent->getGridProxyModel()->sort(0, Qt::DescendingOrder); + } + else + { + mCollectionContent->getProxyModel()->sort(0, Qt::DescendingOrder); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::handleAllTab() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::allTabTriggered() +{ + //execute only if tab is not pressed + if (mAllAction->isChecked()) + { + mGridView->setModel(mLocationPickerContent->getGridProxyModel(),mGridViewItem); + mAscendingAction->setEnabled(true); + mDescendingAction->setEnabled(true); + mCollectionAction->setChecked(false); + mViewType = ELocationPickerContent; + //delete mCollectionContent if coming back from collectioncontent + if (mCollectionContent) + { + delete mCollectionContent; + mCollectionContent = NULL; + } + } + else + { + //Keep the tab pressed + mAllAction->setChecked(true); + } + +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::handleCollectionTab() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::colectionTabTriggered() +{ + //execute only if tab is not pressed + if (mCollectionAction->isChecked()) + { + mViewType = ELocationPickerCollectionListContent; + emit handleCollectionList(); + } + else + { + //Keep the tab pressed + mCollectionAction->setChecked(true); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::searchTabTriggered() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::searchTabTriggered() +{ + emit switchToSearchView(); +} + +void LocationPickerLandscapeView::setCollectionData( quint32 aCategoryId ) +{ + mCollectionContent + = new LocationPickerCollectionContent(this->mainWindow()->orientation() , aCategoryId); + mGridView->setModel(mCollectionContent->getProxyModel(),mGridViewItem); + mViewType = ELocationPickerCollectionContent; + //Enable the options + mAscendingAction->setEnabled(true); + mDescendingAction->setEnabled(true); + mCollectionAction->setChecked(true); +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::setCategoryID() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::setCategoryID( quint32 aCategoryId ) +{ + mCategoryId = aCategoryId; +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::getViewType() +// ----------------------------------------------------------------------------- +TViewType LocationPickerLandscapeView::getViewType() +{ + return mViewType; +} + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::setViewType() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::setViewType(TViewType aViewType) +{ + mViewType = aViewType; +} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerpotraitview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/src/locationpickerpotraitview.cpp Mon May 03 12:27:22 2010 +0300 @@ -0,0 +1,374 @@ +/* +* 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: LocationPickerView implementation +* +*/ + +#include "locationpickerpotraitview.h" + +#include +#include +#include +#include +#include + +#include "locationpickerproxymodel.h" +#include "locationpickerdatamanager.h" +#include "locationpickercontent.h" +#include "locationpickercollectionlistcontent.h" +#include "locationpickercollectioncontent.h" + +// ======== MEMBER FUNCTIONS ======== + +// ---------------------------------------------------- +// LocationPickerPotraitView::LocationPickerView() +// ---------------------------------------------------- +LocationPickerPotraitView::LocationPickerPotraitView(HbDocumentLoader* aLoader) + :mDocumentLoader(aLoader), + mLocationPickerContent(NULL), + mLocationPickerCollectionListContent(NULL), + mAllAction(NULL), + mCollectionAction(NULL), + mSearchAction(NULL), + mAscendingAction(NULL), + mDescendingAction(NULL), + mListView(NULL), + mCollectionContent(NULL), + mViewType(ELocationPickerContent) +{ + // create back action + mPotraitBackAction = new HbAction(Hb::BackAction); + // add back key action + setNavigationAction(mPotraitBackAction); + //connect to slots + connect(mPotraitBackAction, SIGNAL(triggered()), this, + SLOT(backTriggered())); + //create list item + mListItem = new HbListViewItem(); + //set the graphics size + mListItem->setGraphicsSize(HbListViewItem::Thumbnail); +} +// ---------------------------------------------------- +// LocationPickerPotraitView::~LocationPickerView() +// ---------------------------------------------------- +LocationPickerPotraitView::~LocationPickerPotraitView() +{ + delete mCollectionContent; + delete mLocationPickerContent; + delete mLocationPickerCollectionListContent; + delete mAllAction; + delete mCollectionAction; + delete mAscendingAction; + delete mDescendingAction; + delete mListView; +} + +// ---------------------------------------------------------------------------- +// LocationPickerPotraitView::backButtonTriggered() +// ---------------------------------------------------------------------------- +void LocationPickerPotraitView::backTriggered() +{ + //if current model is collection content, go back to collectionlist content + if(mViewType == ELocationPickerCollectionContent) + { + colectionTabTriggered(); + delete mCollectionContent; + mCollectionContent=NULL; + } + else + { + //complete the service + emit completeService(); + } +} + + +// ---------------------------------------------------- +// LocationPickerPotraitView::init() +// ---------------------------------------------------- +void LocationPickerPotraitView::init(Qt::Orientation aOrientation ) +{ + // Create Collection List Content + mLocationPickerCollectionListContent = new LocationPickerCollectionListContent(aOrientation); + mLocationPickerContent = new LocationPickerContent(aOrientation); + + //Get HbAction items + mListView = qobject_cast (mDocumentLoader->findObject(QString( + "ListView"))); + + //get the action items from docml + mAllAction = qobject_cast (mDocumentLoader->findObject(QString( + "allAction"))); + mCollectionAction = qobject_cast (mDocumentLoader->findObject( + QString("collectionAction"))); + mSearchAction = qobject_cast (mDocumentLoader->findObject(QString( + "searchAction"))); + mAscendingAction = qobject_cast (mDocumentLoader->findObject( + QString("ascendingAction"))); + mDescendingAction = qobject_cast (mDocumentLoader->findObject( + QString("descendingAction"))); + if( !mAllAction || !mCollectionAction || !mSearchAction || !mListView || !mAscendingAction || !mDescendingAction) + { + qFatal("Error Reading Docml"); + } + + //connect to slots + connect(mAscendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); + connect(mDescendingAction, SIGNAL(triggered()), this, + SLOT(sortDescending())); + //connect all action Items to respective slots + connect(mAllAction, SIGNAL(triggered()), this, SLOT(allTabTriggered())); + connect(mCollectionAction, SIGNAL(triggered()), this,SLOT(colectionTabTriggered())); + connect(mSearchAction, SIGNAL(triggered()), this, + SLOT(searchTabTriggered())); + // connect the signal of the list activated to a slot. + connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); +} + +void LocationPickerPotraitView::manageListView() +{ + if (!mLocationPickerContent->locationsFound()) + { + //if no location entries present + mListView->setModel(mLocationPickerContent->getStandardModel(),mListItem); + disableTabs(); + } + else + { + //set the appropriate model + switch(mViewType) + { + case ELocationPickerContent: + { + mListItem->setGraphicsSize(HbListViewItem::Thumbnail); + mListView->setModel(mLocationPickerContent->getListProxyModel(),mListItem); + mAllAction->setChecked(true); + mCollectionAction->setChecked(false); + mViewType = ELocationPickerContent; + } + break; + case ELocationPickerCollectionListContent: + { + mListItem->setGraphicsSize(HbListViewItem::MediumIcon); + mListView->setModel(mLocationPickerCollectionListContent->getStandardModel(),mListItem); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + mViewType = ELocationPickerCollectionListContent; + } + break; + case ELocationPickerCollectionContent: + { + setCollectionData(mCategoryId); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + mViewType = ELocationPickerCollectionContent; + } + break; + default: + break; + } + + } +} + + +void LocationPickerPotraitView::disableTabs() +{ + mAllAction->setDisabled(true); + mCollectionAction->setDisabled(true); + mSearchAction->setDisabled(true); + mAscendingAction->setDisabled(true); + mDescendingAction->setDisabled(true); +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::handleActivated() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::handleActivated(const QModelIndex &aIndex) +{ + //handle the activated signal according to model set + switch(mViewType) + { + case ELocationPickerContent: + { + QModelIndex index = mLocationPickerContent->getListProxyModel()->mapToSource( + aIndex); + quint32 lm = 0; + mLocationPickerContent->getDataManager()->getData(index.row(), lm); + //item selected, complete request + emit selectItem( lm ); + } + break; + case ELocationPickerCollectionListContent: + { + mLocationPickerCollectionListContent->getDataManager()->getData( + aIndex.row(), mCategoryId); + mViewType = ELocationPickerCollectionContent; + //send categoryID to set the collection content + emit sendCategoryID(mCategoryId); + } + break; + case ELocationPickerCollectionContent: + { + QModelIndex index = mCollectionContent->getProxyModel()->mapToSource( + aIndex); + quint32 lm = 0; + mCollectionContent->getDataManager()->getData(index.row(), lm); + //item selected, complete request + emit selectItem(lm); + } + break; + default: + break; + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::sortAscending() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::sortAscending() +{ + //check the model set and do sorting accordingly + if (mViewType == ELocationPickerContent) + { + mLocationPickerContent->getListProxyModel()->sort(0, Qt::AscendingOrder); + } + else + { + mCollectionContent->getProxyModel()->sort(0, Qt::AscendingOrder); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::sortDescending() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::sortDescending() +{ + //check the model set and do sorting accordingly + if (mViewType == ELocationPickerContent) + { + mLocationPickerContent->getListProxyModel()->sort(0, Qt::DescendingOrder); + } + else + { + mCollectionContent->getProxyModel()->sort(0, Qt::DescendingOrder); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::handleAllTab() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::allTabTriggered() +{ + //execute only if tab is not pressed + if (mAllAction->isChecked()) + { + mViewType = ELocationPickerContent; + if(this->mainWindow()->orientation() == Qt::Horizontal) + { + //if in landscape send signal to launch grid view + emit handleAllList(); + } + else + { + mListItem->setGraphicsSize(HbListViewItem::Thumbnail); + mListView->setModel(mLocationPickerContent->getListProxyModel(),mListItem); + mCollectionAction->setChecked(false); + } + mAscendingAction->setEnabled(true); + mDescendingAction->setEnabled(true); + //delete mCollectionContent if coming back from collectioncontent + if (mCollectionContent) + { + delete mCollectionContent; + mCollectionContent = NULL; + } + } + else + { + //Keep the tab pressed + mAllAction->setChecked(true); + } + +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::handleCollectionTab() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::colectionTabTriggered() +{ + //execute only if tab is not pressed + if (mCollectionAction->isChecked()) + { + mListItem->setGraphicsSize(HbListViewItem::MediumIcon); + mListView->setModel(mLocationPickerCollectionListContent->getStandardModel(),mListItem); + mAscendingAction->setDisabled(true); + mDescendingAction->setDisabled(true); + mAllAction->setChecked(false); + mViewType = ELocationPickerCollectionListContent; + } + else + { + //Keep the tab pressed + mCollectionAction->setChecked(true); + } +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::searchTabTriggered() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::searchTabTriggered() +{ + emit switchToSearchView(); +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::setCollectionData() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::setCollectionData( quint32 acategoryId ) +{ + mCollectionContent + = new LocationPickerCollectionContent(this->mainWindow()->orientation() , acategoryId); + mListItem->setGraphicsSize(HbListViewItem::Thumbnail); + mListView->setModel(mCollectionContent->getProxyModel(),mListItem); + mViewType = ELocationPickerCollectionContent; + //Enable the options + mAscendingAction->setEnabled(true); + mDescendingAction->setEnabled(true); + mCollectionAction->setChecked(true); +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::setCategoryID() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::setCategoryID( quint32 aCategoryId ) +{ + mCategoryId = aCategoryId; +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::getViewType() +// ----------------------------------------------------------------------------- +TViewType LocationPickerPotraitView::getViewType() +{ + return mViewType; +} + +// ----------------------------------------------------------------------------- +// LocationPickerView::setViewType() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::setViewType(TViewType aViewType) +{ + mViewType = aViewType; +} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerproxymodel.cpp --- a/locationpickerservice/src/locationpickerproxymodel.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickerproxymodel.cpp Mon May 03 12:27:22 2010 +0300 @@ -22,8 +22,9 @@ // LocationPickerProxyModel::LocationPickerProxyModel() // ---------------------------------------------------- -LocationPickerProxyModel::LocationPickerProxyModel(QObject *parent) - : QSortFilterProxyModel(parent) +LocationPickerProxyModel::LocationPickerProxyModel(Qt::Orientations aOrientation , QObject *parent) + :QSortFilterProxyModel(parent), + mOrientation( aOrientation ) { } @@ -33,18 +34,28 @@ bool LocationPickerProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { - // get left and right items data and implement sort logic + // get left and right items data and implement sort logic // return true if left is less than right - QVariant leftData = sourceModel()->data(left); - QVariant rightData = sourceModel()->data(right); + QVariant leftData = sourceModel()->data(left); + QVariant rightData = sourceModel()->data(right); + + if( mOrientation == Qt::Vertical ) + { + QStringList leftStringList = leftData.toStringList(); + + QStringList rightStringList = rightData.toStringList(); - QStringList leftStringList = leftData.toStringList(); - - QStringList rightStringList = rightData.toStringList(); + return QString::compare( QString( leftStringList[0] + " " + leftStringList[1] ), + QString( rightStringList[0] + " " + rightStringList[1] ), Qt::CaseInsensitive ) < 0; + } + else + { + QString leftString = leftData.toString(); - return QString::compare( QString( leftStringList[0] + " " + leftStringList[1] ), - QString( rightStringList[0] + " " + rightStringList[1] ), Qt::CaseInsensitive ) < 0; + QString rightString = rightData.toString(); + return QString::compare( leftString, rightString, Qt::CaseInsensitive ) < 0; + } } // ---------------------------------------------------- @@ -54,13 +65,18 @@ bool LocationPickerProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - // implement logic for search. + if( mOrientation == Qt::Vertical) + { + // implement logic for search. QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); QStringList stringList = sourceModel()->data(index0).toStringList(); QString fullString = " " + stringList[0] + " " + stringList[1]; return (fullString.contains(mSearchText, Qt::CaseInsensitive)); + } + else + return true; } // ---------------------------------------------------- diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickersearchview.cpp --- a/locationpickerservice/src/locationpickersearchview.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickersearchview.cpp Mon May 03 12:27:22 2010 +0300 @@ -16,47 +16,83 @@ */ #include -#include #include #include #include +#include +#include +#include #include "locationpickerproxymodel.h" #include "locationpickersearchview.h" #include "locationpickerdatamanager.h" -#include "locationpickerappwindow.h" // ======== MEMBER FUNCTIONS ======== // ---------------------------------------------------- // LocationPickerSearchView::LocationPickerSearchView() // ---------------------------------------------------- -LocationPickerSearchView::LocationPickerSearchView( LocationPickerAppWindow *aWindow, QGraphicsItem* aParent ): - HbView( aParent ), - mSearchPanel(new HbSearchPanel(this)) +LocationPickerSearchView::LocationPickerSearchView(HbDocumentLoader &aLoader) + :mProxyModel(NULL), + mModel(NULL), + mListView(NULL), + mSearchPanel(NULL), + mDataManager(NULL), + mEmptyLabel(NULL), + mVerticalLayout(NULL), + mDocumentLoader(aLoader) +{ + +} +// ---------------------------------------------------- +// LocationPickerSearchView::~LocationPickerSearchView() +// ---------------------------------------------------- +LocationPickerSearchView::~LocationPickerSearchView() +{ + if( mDataManager ) + delete mDataManager; + delete mProxyModel; + delete mModel; + delete mEmptyLabel; +} -{ +// ---------------------------------------------------- +// LocationPickerSearchView::init() +// ---------------------------------------------------- +void LocationPickerSearchView::init() +{ + //get listview from docml + mListView = qobject_cast( + mDocumentLoader.findObject(QString("SearchListView"))); + if(mListView == NULL) + { + qFatal("Error Reading Docml"); + } + //get search panel from docml + mSearchPanel = qobject_cast( + mDocumentLoader.findObject(QString("searchPanel"))); + if(mListView == NULL) + { + qFatal("Error Reading Docml"); + } + //conect to respective slots + connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated + (const QModelIndex &))); + connect(mSearchPanel, SIGNAL(exitClicked()),this, SLOT(handleExit())); + connect(mSearchPanel,SIGNAL(criteriaChanged(QString)),this,SLOT(doSearch(QString))); - mWindow = aWindow; - //Create a linear layout - mLayout = new QGraphicsLinearLayout(Qt::Vertical); - - // create the list view - mListView=new HbListView(); - connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated(const QModelIndex &))); - //Set graphics size for the list items. HbListViewItem *hbListItem = new HbListViewItem(); hbListItem->setGraphicsSize(HbListViewItem::Thumbnail); mListView->setItemPrototype( hbListItem ); // Create a standard model for the view list - mModel = new QStandardItemModel(); + mModel = new QStandardItemModel(this); // create a data manager to populate the model mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerSearchView ); // Create the proxy model. - mProxyModel = new LocationPickerProxyModel(); + mProxyModel = new LocationPickerProxyModel( Qt ::Vertical ); mProxyModel->setSourceModel(mModel); mListView->setModel(mProxyModel); @@ -66,43 +102,26 @@ mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); // populate data - mDataManager->populateModel(); - - // sort - mProxyModel->sort(0, Qt::AscendingOrder); - - // add the list view to layout - mLayout->addItem(mListView); - - // create search panel - mSearchPanel->setProgressive(true); - mSearchPanel->setSearchOptionsEnabled(false); - connect(mSearchPanel,SIGNAL(criteriaChanged(QString)),this,SLOT(doSearch(QString))); - - // add search panel to the layout - mLayout->addItem(mSearchPanel); + bool populated = mDataManager->populateModel(Qt::Vertical); + if(!populated) + { + // no entries to display. + QStandardItem *modelItem = new QStandardItem(); + modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); + mModel->appendRow( modelItem ); + } - // setlayout for the view - setLayout(mLayout); - - - // create back action - mSecondaryBackAction = new HbAction( Hb::BackAction, this ); - // add back key action - setNavigationAction( mSecondaryBackAction ); - connect(mSecondaryBackAction, SIGNAL(triggered()), mWindow, - SLOT(backButtonTriggered())); + // sort + mProxyModel->sort(0, Qt::AscendingOrder); +} - -} // ---------------------------------------------------- -// LocationPickerSearchView::~LocationPickerSearchView() +// LocationPickerSearchView::handleExit() // ---------------------------------------------------- -LocationPickerSearchView::~LocationPickerSearchView() -{ - // delete mDataManager - if( mDataManager ) - delete mDataManager; +void LocationPickerSearchView::handleExit() +{ + //emit signal to switch the current view + emit switchView(); } // ---------------------------------------------------- @@ -113,6 +132,42 @@ // use the string to search mProxyModel->filterParameterChanged(aCriteria); mProxyModel->setFilterFixedString(aCriteria); + //if no entries presentdisplay empty text item + if (!mProxyModel->rowCount() ) + { + if(!mEmptyLabel) + { + QGraphicsWidget *widget = NULL; + widget = mDocumentLoader.findWidget(QString("container")); + if(widget == NULL) + { + qFatal("Error Reading Docml"); + } + mVerticalLayout = static_cast(widget->layout()); + if(mVerticalLayout == NULL) + { + qFatal("Error Reading Docml"); + } + mVerticalLayout->removeItem(mListView); + mListView->setVisible(false); + mEmptyLabel = new HbTextItem(hbTrId("txt_lint_list_no_results")); + mEmptyLabel->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + mEmptyLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); + mEmptyLabel->setAlignment(Qt::AlignCenter); + mVerticalLayout->insertItem(0, mEmptyLabel); + mEmptyLabel->setVisible(true); + } + } + //else display the result + else if (mEmptyLabel) + { + mVerticalLayout->removeItem(mEmptyLabel); + mEmptyLabel->setVisible(false); + delete mEmptyLabel; + mEmptyLabel=NULL; + mVerticalLayout->insertItem(0, mListView); + mListView->setVisible(true); + } } // ---------------------------------------------------- @@ -123,6 +178,7 @@ QModelIndex index = mProxyModel->mapToSource(aIndex); quint32 lm = 0; mDataManager->getData( index.row(), lm ); - mWindow->itemSelected( lm ); + //emit item is selectedsignal + emit selectItem( lm ); } diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickerservice.cpp --- a/locationpickerservice/src/locationpickerservice.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/locationpickerservice.cpp Mon May 03 12:27:22 2010 +0300 @@ -48,8 +48,12 @@ { mReturn=aLm; connect( this, SIGNAL( returnValueDelivered() ), qApp, SLOT( quit() ) ); - completeRequest(mAsyncReqId,mReturn); + bool ok = completeRequest(mAsyncReqId,mReturn); mAsyncReqId = 0; + if(ok==false) + { + qApp->quit(); + } } } // ---------------------------------------------------------------------------- diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/locationpickertoolbar.cpp --- a/locationpickerservice/src/locationpickertoolbar.cpp Fri Apr 16 14:54:12 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* 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: LocationPickerToolBar implementation -* -*/ - -#include "locationpickertoolbar.h" -#include "locationpickertypes.h" -#include "locationpickerappwindow.h" - - -// -------------------------------------------------- -// LocationPickerToolBar::LocationPickerToolBar() -// -------------------------------------------------- -LocationPickerToolBar::LocationPickerToolBar( LocationPickerAppWindow* aWindow, QGraphicsItem* aParent ): - HbToolBar( aParent ) -{ - mWindow = aWindow; - - // Add all tab and connect to the slot - mAllAction = addAction(HbIcon(KAllTab),QString("")); - connect(mAllAction, SIGNAL(triggered()), this, SLOT(AllTabTriggered())); - - // Add collection tab and connect to the slot - mCollectionAction = addAction(HbIcon(KCollectionTab),QString("")); - connect(mCollectionAction, SIGNAL(triggered()), this, SLOT(CollectionTabTriggered())); - - // Add search tab and connect to the slot - mSearchAction = addAction(HbIcon(KSearchTab),QString("")); - connect(mSearchAction, SIGNAL(triggered()), this, SLOT(SearchTabTriggered())); -} - -// -------------------------------------------------- -// LocationPickerToolBar::disableTabs() -// -------------------------------------------------- -void LocationPickerToolBar::disableTabs() -{ - mAllAction->setDisabled( true ); - mCollectionAction->setDisabled( true ); - mSearchAction->setDisabled( true ); -} -// -------------------------------------------------- -// LocationPickerToolBar::AllTabTriggered() -// -------------------------------------------------- -void LocationPickerToolBar::AllTabTriggered() -{ - int viewIndex = mWindow->currentViewIndex(); - mWindow->setCurrentViewIndex(0); - - if( viewIndex > KNumberOfMainViews-1 ) - { - // the current view is collection view, so delete before switching to another view - mWindow->deleteCollectionContentView(); - } -} - -// -------------------------------------------------- -// LocationPickerToolBar::CollectionTabTriggered() -// -------------------------------------------------- -void LocationPickerToolBar::CollectionTabTriggered() -{ - int viewIndex = mWindow->currentViewIndex(); - mWindow->setCurrentViewIndex(2); - - if( viewIndex > KNumberOfMainViews-1 ) - { - // the current view is collection view, so delete before switching to another view - mWindow->deleteCollectionContentView(); - } -} - -// -------------------------------------------------- -// LocationPickerToolBar::SearchTabTriggered() -// -------------------------------------------------- -void LocationPickerToolBar::SearchTabTriggered() -{ - int viewIndex = mWindow->currentViewIndex(); - mWindow->setCurrentViewIndex(1); - - if( viewIndex > KNumberOfMainViews-1 ) - { - // the current view is collection view, so delete before switching to another view - mWindow->deleteCollectionContentView(); - } -} diff -r 13ae750350c9 -r 0f22fb80ebba locationpickerservice/src/main.cpp --- a/locationpickerservice/src/main.cpp Fri Apr 16 14:54:12 2010 +0300 +++ b/locationpickerservice/src/main.cpp Mon May 03 12:27:22 2010 +0300 @@ -15,14 +15,22 @@ * */ -#include +#include +#include +#include #include "locationpickerappwindow.h" #include "locationpickertypes.h" int main(int argc, char *argv[]) { HbApplication app(argc, argv); - app.setApplicationName( KApplicationTitle ); + + QTranslator translator; + QString lang = QLocale::system().name(); + translator.load("lilpicker_" + lang); + app.installTranslator(&translator); + + app.setApplicationName( hbTrId("txt_lint_title_select_location") ); LocationPickerAppWindow mainWindow; mainWindow.show(); return app.exec();