diff -r 1fc85118c3ae -r 870918037e16 eventsui/eventseditor/src/evtmgmtuilocationserviceadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventsui/eventseditor/src/evtmgmtuilocationserviceadapter.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,234 @@ +/* +* Copyright (c) 2002-2005 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 file contains the methods which interface with Location Acquisition +* API for getting location information +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "locnotprefplugindomaincrkeys.h" +#include "evtmgmtuilocationserviceadapter.h" +#include "evteditorconsts.h" +#include "evtdebug.h" + +// ---------------------------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +CEvtMgmtUiLocationServiceAdapter* CEvtMgmtUiLocationServiceAdapter::NewL( MEvtMgmtUiLocationServiceObserver& aObserver ) + { + CEvtMgmtUiLocationServiceAdapter* self = new ( ELeave ) CEvtMgmtUiLocationServiceAdapter( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::~CEvtMgmtUiLocationServiceAdapter +// --------------------------------------------------------- +CEvtMgmtUiLocationServiceAdapter::~CEvtMgmtUiLocationServiceAdapter() + { + EVTUIDEBUG("+ CEvtMgmtUiLocationServiceAdapter::~CEvtMgmtUiLocationServiceAdapter()" ); + Cancel(); + iPositioner.Close(); + iServer.Close(); + EVTUIDEBUG("- CEvtMgmtUiLocationServiceAdapter::~CEvtMgmtUiLocationServiceAdapter()" ); + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::ConstructL +// --------------------------------------------------------- +void CEvtMgmtUiLocationServiceAdapter::ConstructL() + { + //conect to position server + User::LeaveIfError(iServer.Connect()); + + //create subsesion with server + User::LeaveIfError(iPositioner.Open( iServer )); + + //set timeout value + TPositionUpdateOptions updateOptions; + updateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds(KLocAcqTimeOut)); + User::LeaveIfError( iPositioner.SetUpdateOptions(updateOptions) ); + + //set requestor + _LIT(KRequestorName, "LocationSerivce"); + User::LeaveIfError( iPositioner.SetRequestor( + CRequestor::ERequestorService, + CRequestor::EFormatApplication, + KRequestorName )); + + //add to active scheduler for asychrnous operation + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------------------------- +// CLmkLocationService::CLmkLocationService +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +CEvtMgmtUiLocationServiceAdapter::CEvtMgmtUiLocationServiceAdapter( MEvtMgmtUiLocationServiceObserver& aObserver ) +: CActive(EPriorityStandard), iObserver( aObserver ) + { + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::LocationRequestL +// It is used to request current location +// --------------------------------------------------------- + void CEvtMgmtUiLocationServiceAdapter::LocationRequestL() + { + EVTUIDEBUG("+ CEvtMgmtUiLocationServiceAdapter::LocationRequestL()" ); + if ( IsActive() ) + { + User::Leave( KErrInUse ); + } + SetActive(); + iStatus = KRequestPending; + iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus ); + EVTUIDEBUG("- CEvtMgmtUiLocationServiceAdapter::LocationRequestL()" ); + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::CurrentPosition +// It is used to retrieve current location +// @ret Recently retrieved current location +// --------------------------------------------------------- +TPosition& CEvtMgmtUiLocationServiceAdapter::CurrentPosition() + { + return iPosition; + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::AllPositionMethodsDisabled +// Check if all positioning methods are disabled. +// @ret true if disabled else false +// --------------------------------------------------------- +// +TBool CEvtMgmtUiLocationServiceAdapter::AllPositionMethodsDisabledL() + { + CPosModules* moduleDb = CPosModules::OpenL(); + CleanupStack::PushL(moduleDb); + CPosModuleIdList* psyList = moduleDb->ModuleIdListL(); + CleanupStack::PushL(psyList); + + TBool allDisabled =ETrue; + + TPositionModuleInfo moduleInfo; + for(TInt index=0; index< psyList->Count(); index++) + { + TPositionModuleId moduleId = psyList->At( index ); + TRAPD(error, moduleDb->GetModuleInfoL( moduleId, moduleInfo);); + if(error == KErrNone ) + { + if( moduleInfo.IsAvailable() ) + { + allDisabled = EFalse; + break; + } + } + } + + CleanupStack::PopAndDestroy(2); // psyList, moduleDb + return allDisabled; + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::CancelRequest +// It is used to cancel recently issued location request +// --------------------------------------------------------- +void CEvtMgmtUiLocationServiceAdapter::CancelRequest() + { + Cancel(); + TRAP_IGNORE( iObserver.HandleLocationServiceErrorL( KErrCancel ) ); + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::RunL +// Derived from CActive +// --------------------------------------------------------- +void CEvtMgmtUiLocationServiceAdapter::RunL() + { + EVTUIDEBUG1("+ CEvtMgmtUiLocationServiceAdapter::RunL() - %d", iStatus.Int() ); + + //TInt err = KErrTimedOut; + //switch ( err ) + switch ( iStatus.Int() ) + { + case KErrNone: + case KPositionPartialUpdate: + { + //retrieve current location information + iPositionInfo.GetPosition( iPosition ); + TReal32 altitude = iPosition.Altitude(); + if ( Math::IsNaN( altitude ) ) + { + TRealX nan; + nan.SetNaN(); + iPosition.SetVerticalAccuracy( nan ); + } + + //notify observer about successful completion of operation + iObserver.HandleLocationServiceResponseL( iStatus.Int() ); + break; + } + case KErrAccessDenied: + case KPositionQualityLoss: + case KErrTimedOut: + case KErrNotFound: // No PSY selected. + case KErrUnknown: + case KErrCancel: + case KErrArgument: + default: + { + TRAP_IGNORE( iObserver.HandleLocationServiceErrorL( iStatus.Int() ) ); + break; + } + } + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::RunError +// Derived from CActive +// --------------------------------------------------------- +// +TInt CEvtMgmtUiLocationServiceAdapter::RunError(TInt aError) + { + TRAP_IGNORE( iObserver.HandleLocationServiceErrorL( aError ) ); + return KErrNone; + } + +// --------------------------------------------------------- +// CEvtMgmtUiLocationServiceAdapter::DoCancel +// Derived from CActive +// --------------------------------------------------------- +// +void CEvtMgmtUiLocationServiceAdapter::DoCancel() + { + EVTUIDEBUG("+ CEvtMgmtUiLocationServiceAdapter::DoCancel()" ); + iPositioner.CancelRequest( EPositionerNotifyPositionUpdate ); + EVTUIDEBUG("- CEvtMgmtUiLocationServiceAdapter::DoCancel()" ); + } +// End of File