gssettingsuis/Gs/GSNetworkPlugin/Src/GSNetworkPluginModel.cpp
branchRCL_3
changeset 13 23553eb4e470
parent 0 8c5d936e5675
child 25 3b47783fdf16
--- a/gssettingsuis/Gs/GSNetworkPlugin/Src/GSNetworkPluginModel.cpp	Fri Mar 12 15:43:47 2010 +0200
+++ b/gssettingsuis/Gs/GSNetworkPlugin/Src/GSNetworkPluginModel.cpp	Mon Mar 15 12:41:46 2010 +0200
@@ -40,7 +40,7 @@
 #include <PsetSAObserver.h>  //ongoing call check
 #include "GSNetworkDebugHelper.h"
 #include <GsNetworkPluginRsc.rsg>           //for resource IDs
-
+#include <mmtsy_names.h>
 //CONSTANTS
 // default value for autolock period
 // default value for Sat operations
@@ -390,8 +390,17 @@
         iPhoneSettingsEngine = iSettingsContainer->CreateNetworkModeObjectL( *this );
         }
     iPhoneSettingsEngine->SetNetworkModeObserver( *this );
-    // get the current net mode asynchronously
-    StartAsynGetCurrentNetworkModeSelectionL();
+    //CPSMNetworkPlugin will init iPlugin NULL.
+    if ( iPlugin == NULL )
+    	{
+    	// get the current net mode synchronously
+    	StartSynGetCurrentNetworkModeSelectionL();
+    	}
+    else
+    	{
+    	// get the current net mode asynchronously
+    	StartAsynGetCurrentNetworkModeSelectionL();
+    	}
     
     __GSLOGSTRING("[GS] <--CGSNetworkPluginModel::CreatePhoneSettingsEngineL");
     }
@@ -546,6 +555,79 @@
     }
 
 // ---------------------------------------------------------------------------
+// CGSNetworkPluginModel::StartSynGetCurrentNetworkModeSelectionL
+//
+// ---------------------------------------------------------------------------
+//
+void CGSNetworkPluginModel::StartSynGetCurrentNetworkModeSelectionL()
+    {
+	// Connects to Etel and loads Tsy module
+	RMobilePhone phone;
+    RTelServer   server;
+    // Custom phone.
+    RMmCustomAPI customPhone;
+    
+    TInt err = KErrNone;
+	for ( TInt a = 0; a < KPSetRetryCount; a++ )
+		{
+		err = server.Connect();
+
+		if ( err == KErrNone )
+			{
+			break;
+			}
+
+		User::After( KPSetRetryTimeout );
+		}
+
+	if ( err != KErrNone )
+		{
+		User::Leave( err );
+		}
+	else
+		{
+		server.LoadPhoneModule( KMmTsyModuleName );
+		}
+	User::LeaveIfError( server.SetExtendedErrorGranularity( RTelServer::EErrorExtended ) );
+
+	TInt numPhones;
+
+	User::LeaveIfError( server.EnumeratePhones( numPhones ) );
+	if ( !numPhones )
+		{
+		User::Leave( KErrGeneral );
+		}
+
+	//match phone name to correct one
+	RTelServer::TPhoneInfo phoneInfo;
+	TName matchTsyName;
+	TInt i = 0;
+	for (; i < numPhones; i++)
+		{
+		User::LeaveIfError(server.GetTsyName(i, matchTsyName));
+		if (matchTsyName.CompareF(KMmTsyModuleName) == 0)
+			{
+			User::LeaveIfError(server.GetPhoneInfo(i, phoneInfo));
+			break;
+			}
+		}
+	if (i == numPhones)
+		{
+		User::Leave(KErrGeneral);
+		}
+
+	//open phone subsession
+	User::LeaveIfError( phone.Open( server, phoneInfo.iName ) );
+	User::LeaveIfError( customPhone.Open( phone ) );
+	TUint32 currentNetworkModes;
+	customPhone.GetCurrentSystemNetworkModes( currentNetworkModes );
+	iNetworkMode = (TInt)currentNetworkModes;
+	customPhone.Close();
+	phone.Close();
+	server.Close();	
+	}
+
+// ---------------------------------------------------------------------------
 // CGSNetworkPluginModel::GetNetworkMode
 //
 // ---------------------------------------------------------------------------
@@ -662,6 +744,4 @@
     return callActive;
     }
 
-
-
 //  End of File