supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp
branchRCL_3
changeset 55 ea98413ce11f
parent 49 10852b179f64
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp	Wed Sep 15 12:40:28 2010 +0300
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp	Wed Oct 13 15:01:35 2010 +0300
@@ -46,9 +46,6 @@
 #include "epos_comasupltimeouttimer.h"
 #include "epos_omasuplconstants.h"
 #include "epos_comasuplcommonconfig.h"
-#include "epos_suplgeocellinfo.h"
-
-#include "epos_comasupllocationid.h"
 
 _LIT(KTraceFileName,"SUPL_OMA_PH::EPos_COMASUPLProtocolManager1.cpp");
 
@@ -105,7 +102,11 @@
 // Destructor.
 EXPORT_C COMASUPLProtocolManager1::~COMASUPLProtocolManager1()
 	{
-
+	if(iSettingsLauncher)		
+		{
+			iSettingsLauncher->CancelLaunch();
+		}
+	
 	if(iSuplSettings)
 		{
 		iSuplSettings->SetUIActive( EFalse );
@@ -134,7 +135,7 @@
 	
 	delete iSuplEcomEventWatcher;
 	
-    
+    delete iSettingsLauncher;
     delete iNotifier;
 	iMobilePhone.Close(); 
 	iTelServer.Close();
@@ -172,7 +173,7 @@
 	iSuplStorageSettings = CSuplSettingsInternal::NewL();
 	iSuplStorageSettings->SetObserverL(*this);
 
-   	
+   	iSettingsLauncher = COMASuplSettingsLauncher::NewL( *this );
 	
    	iIMSI.CreateL( KMaxIMSILen );
 	iIsPreviouslyDecodingFailed = EFalse;
@@ -249,7 +250,7 @@
 	//Connect to ETel
 	User::LeaveIfError(ConnectToETelL());
   
-    
+    ReadSuplUsage();    
 	 
 	if(iSuplEcomEventWatcher)
 		{
@@ -527,11 +528,6 @@
 	iTrace->Trace(_L("COMASUPLProtocolManager1::DestroySession Destroy Session"), KTraceFileName, __LINE__);
 
 	COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSession);
-	  if (OMASession->HasMeLaunchedUsageDialog())
-    {
-    		iTrace->Trace(_L("Setting NULL."), KTraceFileName, __LINE__);
-        iSessnUIObserver = NULL;
-    }   
     if (OMASession->GetSessionUIFlag())
     	{
 	    OMASession->DestroySession();
@@ -1042,14 +1038,6 @@
 		iTrace->Trace(_L("Cannot found Supl session."), KTraceFileName, __LINE__);
 		return;
 		}
-	
-		COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSession);
-    if (OMASession->HasMeLaunchedUsageDialog())
-    {
-    		iTrace->Trace(_L("Setting NULL."), KTraceFileName, __LINE__);
-        iSessnUIObserver = NULL;
-    }   
-             
 		aSuplSession->CancelRunSession();	
 		return ;
 	}
@@ -1199,6 +1187,7 @@
     if( aEvent == MSuplSettingsObserver::ESuplSettingsEventSuplUsageChange)
         {
         iTrace->Trace(_L("Setting Changed.SUPL Usage changed.. Reeading once again..."), KTraceFileName, __LINE__);
+        ReadSuplUsage();
 		}
 	else if( aEvent == MSuplSettingsObserver::ESuplSettingsEventCommParameterChange)
 		{
@@ -1625,6 +1614,68 @@
 	}
 	
 	
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::LaunchSettingsUI
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+TInt COMASUPLProtocolManager1::LaunchSettingsUI(MOMASuplUICompletionObserver* aObserver,const TDesC& aForHslp)
+    {        
+	iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSettingsUI"), KTraceFileName, __LINE__);
+
+    if(iUIRequestArray.Count() <= 0 )
+    	{
+		iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSettingsUI"), KTraceFileName, __LINE__);
+		iUIRequestArray.Append(aObserver);
+		iSuplSettings->SetUIActive(ETrue);
+		iCurrentlyUsedHslp.Copy(aForHslp);
+		return iSettingsLauncher->LaunchSettings();	
+    	}
+    else if(iCurrentlyUsedHslp.Compare(aForHslp) == KErrNone)
+    	{
+		iUIRequestArray.Append(aObserver);
+    	}
+    else
+    	{
+		return KErrInUse;                
+    	}
+    		
+	return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::SettingsUICompletedL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::SettingsUICompletedL(TInt aError)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL"), KTraceFileName, __LINE__);
+    iSuplSettings->SetUIActive(EFalse);
+
+    if (iDeInitDone)
+        {
+	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL, de-init done.  Completing request"), KTraceFileName, __LINE__);
+        iDeInitDone = EFalse;
+        User::RequestComplete(iDeInitRequestStatus,KErrNone);
+        }                
+    else
+        {
+    	for(TInt i = 0; i < iUIRequestArray.Count(); i++)
+    		{
+    			iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL,Forwarding ConnRerquestor "), KTraceFileName, __LINE__);
+    			MOMASuplUICompletionObserver* observer = iUIRequestArray[i];
+    			observer->SettingsUICompletedL(aError);
+    		}
+
+        }
+        
+    iCurrentlyUsedHslp.Copy(_L(""));	
+    iUIRequestArray.Reset();
+    }
+
 
 // -----------------------------------------------------------------------------
 // COMASUPLProtocolManager1::DeInitialize
@@ -1678,11 +1729,72 @@
     return networkMode;
 	}
 
-
-
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+TInt COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI(MOMASuplUICompletionObserver* aObserver, TBool aRoaming)	
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI"), KTraceFileName, __LINE__);
+    if (iSuplSettings->IsUIActive() && !iTimeOutDialogPresent)
+        return KErrInUse;                
+    // If timeout dialog is present, close it
+    if (iTimeOutDialogPresent)
+        {
+        iTimeOutDialogPresent = EFalse;
+        iSuplSettings->SetUIActive(EFalse);
+        iSettingsLauncher->Cancel();
+        }                
+    iSessnUIObserver = aObserver;            
+    iSuplSettings->SetUIActive(ETrue);
+    return iSettingsLauncher->LaunchSuplUsageSettingsUI(aRoaming);
+	}
 
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::SettingsUsageUICompletedL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::SettingsUsageUICompletedL(TInt aError)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUsageUICompletedL"), KTraceFileName, __LINE__);
+    iSuplSettings->SetUIActive(EFalse);
 
+    if (iDeInitDone)
+        {
+	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUsageUICompletedL, de-init done.  Completing request"), KTraceFileName, __LINE__);
+        iDeInitDone = EFalse;
+        User::RequestComplete(iDeInitRequestStatus,KErrNone);
+        }                
+    else
+        {
+        if (iSessnUIObserver)                
+        	iSessnUIObserver->SettingsUsageUICompletedL(aError);
+        }
 
+    CheckOutstandingUsageUIRequestsL();
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::ReadSuplUsage
+// Reads Supl Usage from Central Repository
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::ReadSuplUsage()
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager1::ReadSuplUsage start"), KTraceFileName, __LINE__);	
+	CSuplSettings::TSuplSettingsUsage suplUsage;
+	TInt err = iSuplStorageSettings->GetSuplUsage(suplUsage);		
+	if(err == KErrNone ) 
+		{
+			iSuplSettings->SetSUPLUsage(suplUsage);
+		}
+	iTrace->Trace(_L("COMASUPLProtocolManager1::ReadSuplUsage end"), KTraceFileName, __LINE__);	
+	}
 
 void COMASUPLProtocolManager1::UpdateAllSubSessnsInSameSession(TInt aIpcSessionId)
     {
@@ -1722,7 +1834,8 @@
 			OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
 
             if (OMAsuplSession->GetSuplUsageFlag())
-                {                      
+                {                        
+                OMAsuplSession->StartUsageDialogLaunchL();
                 break;
                 }
 		}
@@ -1806,7 +1919,62 @@
         }            
     }            
 
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::LaunchSuplDialogTimeoutUI
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+TInt COMASUPLProtocolManager1::LaunchSuplDialogTimeoutUI(MOMASuplUICompletionObserver* aObserver )
+    {
+    iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchTimeOutUI"), KTraceFileName, __LINE__);
+    
+    iSessnUIObserver = aObserver;            
+    if (iSuplSettings->IsUIActive())
+        {
+        iSuplSettings->SetUIActive(EFalse);
+        iSettingsLauncher->Cancel();
+        }                
 
+    iSuplSettings->SetUIActive(ETrue);
+    iTimeOutDialogPresent = ETrue;
+    return iSettingsLauncher->LaunchSessionTimeOutDialog();		
+    }
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::SettingsTimeOutUICompletedL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::SettingsTimeOutUICompletedL(TInt aError)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsTimeOutUICompletedL"), KTraceFileName, __LINE__);
+    iSuplSettings->SetUIActive(EFalse);
+    iTimeOutDialogPresent = EFalse;
+
+    if (iDeInitDone)
+        {
+	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsTimeOutUICompletedL, Completing request"), KTraceFileName, __LINE__);
+        iDeInitDone = EFalse;
+        User::RequestComplete(iDeInitRequestStatus,KErrNone);
+        }                
+    else
+        {
+        if (iSessnUIObserver)                
+        	iSessnUIObserver->SettingsTimeOutUICompletedL(aError);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::GetLastUsedAccessPoint
+// 
+// -----------------------------------------------------------------------------
+//
+TInt COMASUPLProtocolManager1::GetLastUsedAccessPoint(TDes& aLastlyUsedAccessPoint,TUint32& iIAPId)
+	{
+	return iSettingsLauncher->GetIAPName(aLastlyUsedAccessPoint,iIAPId);
+	}
 
 // -----------------------------------------------------------------------------
 // COMASUPLProtocolManager1::PrintHex
@@ -1904,100 +2072,17 @@
     iSuplInitTimeOut = aCommmonConfig->iSuplInitTimeOut;
     iPersistFailTimer = aCommmonConfig->iPersistFailTimer;
     }
-	
-	
-// -----------------------------------------------------------------------------
-// COMASUPLProtocolManager1::MakeLocationConversionRequestL
+    
+    // -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::CancelUiLaunch
 // 
-// To make conversion request to retrieve position for a given cell id
+// 
 // -----------------------------------------------------------------------------
 //
-void COMASUPLProtocolManager1::MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
-        TGeoCellInfo& aCellInfo,
-        TRequestStatus& aStatus )
+void COMASUPLProtocolManager1::CancelUiLaunch()
     {
-    iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL"), KTraceFileName, __LINE__);
-    TBuf<64> tempBuf;
-
-    if ( iSuplSessions.Find(aSuplSessn) == KErrNotFound )
-        {
-        TRequestStatus *status = &aStatus; 
-        User::RequestComplete(status,KErrNotFound ); 
-        return;
-        }
-
-    CheckForSessionCount();
-    iRunningSessionCount++;
-
-    COMASuplLocationId* locationId =   COMASuplLocationId::NewL();
-    COMASuplLocationId::TOMASuplStatus status = COMASuplLocationId::EStale;
-    switch(aCellInfo.iGeoCellType)
-        {
-        case EGeoGsmCell:
-            {
-            iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL - Setting GSM Cell Info"), KTraceFileName, __LINE__);
-            COMASuplGSMCellInfo* cellInfo = COMASuplGSMCellInfo::NewL();
-            cellInfo->SetSuplGSMCellInfo(aCellInfo.iMNC,aCellInfo.iMCC,aCellInfo.iCid,aCellInfo.iLac);
-            locationId->SetSuplLocationId(cellInfo,status);
-            }
-            break;
-        case EGeoWcdmaCell:
-            {
-            iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL - Setting WCDMA Cell Info"), KTraceFileName, __LINE__);
-            COMASuplCellInfo* cellInfo = COMASuplCellInfo::NewL();
-            cellInfo->SetSuplCellInfo(aCellInfo.iMNC,aCellInfo.iMCC,aCellInfo.iCid);
-            locationId->SetSuplLocationId(cellInfo,status);
-            }
-            break;
-        }
-   
-    tempBuf.Copy(_L("MCC = "));
-    tempBuf.AppendNum(aCellInfo.iMCC);
-    iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
-    tempBuf.Copy(_L("MNC = "));
-    tempBuf.AppendNum(aCellInfo.iMNC);
-    iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
-    tempBuf.Copy(_L("LAC = "));
-    tempBuf.AppendNum(aCellInfo.iLac);
-    iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
-    tempBuf.Copy(_L("CId = "));
-    tempBuf.AppendNum(aCellInfo.iCid);
-    iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
-    tempBuf.Copy(_L("Prompt = "));
-    tempBuf.AppendNum(aCellInfo.iConnectionPrompt);
-    iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
-
-    TInt allowedCapabilities = KECID|KCID;
-    TInt requestID = 1000; 
-    COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSessn);
-    OMASession->SetConfigurationParameters(iUT1_StartTimer,iUT2_PosInitTimer, iUT3_PosTimer,iPrivacyTimer,iSETMode,
-            iSuplUsage, iPersistFailTimer,iSuplInitTimeOut);
-    OMASession->RunSuplSessionL(aStatus,ETrue, KNullDesC,EFalse, allowedCapabilities,iRunningSessionCount,requestID,ETrue,locationId,aCellInfo.iConnectionPrompt,aCellInfo.iWlanOnly);
-
+    iTrace->Trace(_L("COMASUPLProtocolManager1::CancelUiLaunch"), KTraceFileName, __LINE__);
+    iSettingsLauncher->CancelLaunch();
     }
-
-// -----------------------------------------------------------------------------
-// COMASUPLProtocolManager1::CancelLocationConversionRequest
-// 
-// Cancel an ongoing conversion request 
-// -----------------------------------------------------------------------------
-//
-void COMASUPLProtocolManager1::CancelLocationConversionRequest(CSuplSessionBase* aSuplSession)
-    {
-    // Log
-    iTrace->Trace(_L("COMASUPLProtocolManager1::CancelLocationConversionRequest"), KTraceFileName, __LINE__);
-
-    // Check if the Session is valid
-    TInt index = iSuplSessions.Find(aSuplSession);
-
-    if(KErrNotFound == index)
-        {
-        iTrace->Trace(_L("Cannot find Supl session."), KTraceFileName, __LINE__);
-        return;
-        }
-    aSuplSession->CancelRunSession();   
-    return ;
-    }
-	
     
 // end of file