diff -r f7816ffc66ed -r 77415202bfc8 alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp --- a/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp Tue Jan 26 12:12:48 2010 +0200 +++ b/alwayson_net_plugin/pdpcontextmanager2/src/caosettings.cpp Tue Feb 02 00:24:11 2010 +0200 @@ -26,6 +26,8 @@ #include "logger.h" #include "maosettingsobserver.h" #include "pdpcontextmanagerinternalcrkeys.h" +#include "maostatecontext.h" +#include "maoconnectionmanager.h" // UNNAMED NAMESPACE FOR LOCAL DEFINITIONS namespace @@ -68,11 +70,12 @@ // CAOSettings::NewL // --------------------------------------------------------------------------- // -CAOSettings* CAOSettings::NewL( MAOSettingsObserver& aObserver ) +CAOSettings* CAOSettings::NewL( MAOSettingsObserver& aObserver, + MAOStateContext& aStateContext ) { LOG_1( _L("CAOSettings::NewL") ); - CAOSettings* self = new( ELeave ) CAOSettings( aObserver ); + CAOSettings* self = new( ELeave ) CAOSettings( aObserver, aStateContext ); CleanupStack::PushL( self ); self->ConstructL(); @@ -104,14 +107,16 @@ // CAOSettings::CAOSettings // --------------------------------------------------------------------------- // -CAOSettings::CAOSettings( MAOSettingsObserver& aObserver ): +CAOSettings::CAOSettings( MAOSettingsObserver& aObserver, + MAOStateContext& aStateContext ): CActive( CActive::EPriorityStandard ), iObserver( aObserver ), iIAP( KDefaultIAPUid ), iRetryTimerValue( KDefaultRetryInterval ), iSupportedInHPLMN( EFalse ), iSupportedInVPLMN( EFalse ), - iLingerTimerValue( KLingerOff ) + iLingerTimerValue( KLingerOff ), + iStateContext( aStateContext ) { LOG_1( _L("CAOSettings::CAOSettings") ); @@ -587,13 +592,30 @@ TInt value( 0 ); TInt err = repository->Get( KCurrentCellularDataUsage, value ); - if ( err == KErrNone && value == ECmCellularDataUsageDisabled ) + if ( err == KErrNone ) { - // Cellular connection is not allowed by user - allowed = EFalse; - } + if ( value == ECmCellularDataUsageDisabled ) + { + // Cellular connection is not allowed by user + allowed = EFalse; + } + else + { + MAOConnectionManager::TNetworkType nwType = + iStateContext.ConnectionManager().NetworkType(); + + if ( ( nwType == MAOConnectionManager::EVPLMN ) && + ( value == ECmCellularDataUsageConfirm ) ) + { + // Silent connection is not allowed (will fail) + // in visitor network if user has chosen confirm option. + allowed = EFalse; + } + } + } } - + LOG_2( _L("IsCellularAllowedByUser(): %d"), allowed ); + delete repository; return allowed; }