diff -r 5bcb308bd24d -r 6aaf0276100e phoneengine/networkhandlingstarter/src/cnetworklistener.cpp --- 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 #include #include +#include +#include +#include #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