diff -r 05bc53fe583b -r 83ca720e2b9a bearermanagement/mpm/src/mpmdatausagewatcher.cpp --- a/bearermanagement/mpm/src/mpmdatausagewatcher.cpp Tue Aug 31 15:35:44 2010 +0300 +++ b/bearermanagement/mpm/src/mpmdatausagewatcher.cpp Wed Sep 01 12:23:51 2010 +0100 @@ -118,15 +118,24 @@ // Get the new Cellular data usage setting value from central repository. TInt oldCellularDataUsage = iCellularDataUsage; - if ( GetCurrentDataUsageValue() == KErrNone ) + if ( GetCurrentDataUsageValue() == KErrNone // Updates iCellularDataUsage + && oldCellularDataUsage != iCellularDataUsage + && iServer->RoamingWatcher()->RoamingStatus() != EMPMRoamingStatusUnknown ) { - // Stop cellular connections if the setting changes into Disabled. - if ( oldCellularDataUsage != ECmCellularDataUsageDisabled && - iCellularDataUsage == ECmCellularDataUsageDisabled && - iServer->RoamingWatcher()->RoamingStatus() != EMPMRoamingStatusUnknown ) + // Setting changed while cellular is in use + + if ( iCellularDataUsage == ECmCellularDataUsageDisabled ) { + // Cellular data usage disabled -> disconnect cellular iServer->StopCellularConns(); } + else if ( iCellularDataUsage == ECmCellularDataUsageConfirm ) + { + // Cellular data usage needs to be confirmed -> disconnect if + // there are only silent cellular connections left. + iServer->StopCellularConns( ETrue ); + } + } }