eventsui/eventseditor/src/evtmgmtuilocationserviceadapter.cpp
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
--- /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 <evtmgmteditorui.rsg>
+#include <f32file.h>
+#include <sysutil.h>
+#include <lbs/epos_cposmoduleidlist.h>
+#include <lbs/epos_cposmodules.h>
+#include <aknnotewrappers.h> 
+#include <eikenv.h>
+#include <StringLoader.h>
+#include <centralrepository.h>
+#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