phoneengine/networkhandlingstarter/src/cnetworklistener.cpp
changeset 64 6aaf0276100e
parent 56 5bcb308bd24d
child 65 2a5d4ab426d3
--- a/phoneengine/networkhandlingstarter/src/cnetworklistener.cpp	Wed Aug 18 09:48:26 2010 +0300
+++ b/phoneengine/networkhandlingstarter/src/cnetworklistener.cpp	Thu Sep 02 20:26:16 2010 +0300
@@ -18,6 +18,9 @@
 #include <cnwsession.h>
 #include <BTSapDomainPSKeys.h>
 #include <startupdomainpskeys.h>
+#include <PsetContainer.h>
+#include <PsetNetwork.h>
+#include <PsetSAObserver.h>
 
 #include "cnetworklistener.h"
 #include "mnetworklistenerobserver.h"
@@ -27,6 +30,7 @@
 
 // 1-minute timeout before showing soft notification
 const TInt KNetworkLostTimeout = 60*1000000;
+const TInt KSimRefreshAsynronationTimeout = 1000000;
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -55,6 +59,14 @@
     iTimer = CPeriodic::NewL(CActive::EPriorityStandard);
     QT_TRYCATCH_LEAVING(iDeviceInfo = new QSystemDeviceInfo())
     
+    iContainer = CPsetContainer::NewL();
+    iRefreshHandler = iContainer->CreateRefreshHandlerL();
+    iRefreshHandler->NotifyFileChangeL(
+            *this,
+            KCsp1Ef,
+            EFileChangeNotification );
+    iSettingsEngine = iContainer->CreateNetworkObjectL(*this);
+    
     DPRINT << ": OUT";
 }
 
@@ -84,6 +96,9 @@
     delete iSession;
     delete iTimer;
     delete iDeviceInfo;
+    delete iSettingsEngine;
+    delete iRefreshHandler;
+    delete iContainer;    
     
     DPRINT << ": OUT";
 }
@@ -247,5 +262,163 @@
     return simState == ESimUsable && err == KErrNone;
 }
 
+/*!
+    CNetworkListener::AllowRefresh
+ */
+TBool CNetworkListener::AllowRefresh(
+                const TSatRefreshType aType,
+                const TSatElementaryFiles aFiles )
+{
+    DPRINT << "aType: " << aType;
+    DPRINT << "aFiles: " << aFiles;
+    
+    TBool allowRefresh = ETrue;
+    if ( iSettingsEngine->IsCallActive() == CPsetSAObserver::EPSetCallActive )
+        {
+        allowRefresh = EFalse;
+        }
+
+    DPRINT << ": OUT allowRefresh " << allowRefresh;
+    
+    return allowRefresh;
+}
+
+/*!
+    CNetworkListener::Refresh
+ */
+void CNetworkListener::Refresh(
+                const TSatRefreshType aType,
+                const TSatElementaryFiles aFiles )
+{
+    DPRINT << ": IN";
+    
+    if ((aType != EFileChangeNotification) ||
+        ((aType == EFileChangeNotification) &&
+        (aFiles & KCsp1Ef)))
+        {
+        MPsetNetworkSelect::TSelectMode mode;
+        iSettingsEngine->GetNetworkSelectMode(mode);
+        DPRINT << "mode " << mode;
+        if (mode == MPsetNetworkSelect::ENetSelectModeManual) {
+            TPSetChangedCspSetting changedCspSettings;
+            TPSetChangedCspSetting newValues;
+            TInt err = iRefreshHandler->ChangedCspSettings(changedCspSettings, newValues);
+            if ((changedCspSettings & EPSetNetSelSup) && 
+                !(newValues & EPSetNetSelSup) &&
+                (err == KErrNone)) {
+                DPRINT << "Network selection not supported ";
+                // Network selection mode can't change during SIM refresh,
+                // start 1 second timer.
+                iTimer->Cancel();
+                iTimer->Start(KSimRefreshAsynronationTimeout,
+                              KSimRefreshAsynronationTimeout,
+                              TCallBack( NWSimRefreshCallBack, this ));
+            }
+        }
+    }
+    
+    DPRINT << ": OUT";
+}
+
+/*!
+    CNetworkListener::HandleNetworkInfoReceivedL
+ */
+void CNetworkListener::HandleNetworkInfoReceivedL( 
+        const CNetworkInfoArray* /*aInfoArray*/, const TInt /*aResult*/ )
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::HandleCurrentNetworkInfoL
+ */
+void CNetworkListener::HandleCurrentNetworkInfoL( 
+        const MPsetNetworkSelect::TCurrentNetworkInfo& /*aCurrentInfo*/, 
+        const TInt /*aResult*/ )
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::HandleNetworkChangedL
+ */
+void CNetworkListener::HandleNetworkChangedL( 
+        const MPsetNetworkSelect::TNetworkInfo& /*aCurrentInfo*/,
+        const MPsetNetworkSelect::TCurrentNetworkStatus /*aStatus*/, 
+        const TInt /*aResult*/ )
+{
+    /**
+    *  DEPRECATED.
+    */
+}
+
+/*!
+    CNetworkListener::HandleNetworkChangedL
+ */
+void CNetworkListener::HandleNetworkChangedL( 
+        const MPsetNetworkSelect::TNetworkInfo& /*aCurrentInfo*/,
+        const RMobilePhone::TMobilePhoneRegistrationStatus& /*aStatus*/, 
+        const TInt /*aResult*/ )
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::HandleSearchingNetworksL
+ */
+void CNetworkListener::HandleSearchingNetworksL( TServiceRequest /*aRequest*/ )
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::HandleRequestingSelectedNetworkL
+ */
+void CNetworkListener::HandleRequestingSelectedNetworkL( TBool /*aOngoing*/ )
+{
+    DPRINT; 
+}
+
+/*!
+    CNetworkListener::HandleCallActivatedL
+ */
+void CNetworkListener::HandleCallActivatedL()
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::HandleNetworkErrorL
+ */
+void CNetworkListener::HandleNetworkErrorL( 
+        const MPsetNetworkInfoObserver::TServiceRequest /*aRequest*/,
+        const TInt /*aError*/ )
+{
+    DPRINT;
+}
+
+/*!
+    CNetworkListener::NWSimRefreshCallBack.
+ */
+TInt CNetworkListener::NWSimRefreshCallBack(TAny* aParam)
+{
+    DPRINT << ": IN";
+    
+    CNetworkListener* self = 
+        reinterpret_cast< CNetworkListener* >( aParam );
+    
+    if ( self ) {
+        self->iTimer->Cancel();
+        //Change the network mode to Automatic.
+        MPsetNetworkSelect::TNetworkInfo info;
+        info.iMode = MPsetNetworkSelect::ENetSelectModeAutomatic;
+        DPRINT << ": set network mode to automatic";
+        TRAP_IGNORE(self->iSettingsEngine->SelectNetworkL(info));
+    }
+    
+    DPRINT << ": OUT";
+    return KErrNone;
+}
+
 // End of file