diff -r c743ef5928ba -r f966699dea19 idlehomescreen/xmluicontroller/src/onlineofflinehelper.cpp --- a/idlehomescreen/xmluicontroller/src/onlineofflinehelper.cpp Tue Feb 02 00:04:13 2010 +0200 +++ b/idlehomescreen/xmluicontroller/src/onlineofflinehelper.cpp Fri Feb 19 22:42:37 2010 +0200 @@ -20,23 +20,48 @@ #include #include #include -#include #include #include #include #include - +#include +#include +#include // StringLoader +#include +#include // User includes +#include +#include #include +#include #include "onlineofflinehelper.h" #include "xmluicontroller.h" #include "appui.h" +#include "ai3.hrh" +#include "globalqueryhandler.h" // Constants const TInt KOfflineProfileId( 5 ); using namespace AiXmlUiController; +#ifdef HS_NETWORK_MONITOR +#include +_LIT( KLogFolder,"xnnetwork" ); +_LIT( KLogDom, "networksettings.log" ); + +#define _LOG1( a ) RFileLogger::Write( \ + KLogFolder, KLogDom, EFileLoggingModeAppend, ( a ) ); +#define _LOG2( a, b ) RFileLogger::WriteFormat( \ + KLogFolder, KLogDom, EFileLoggingModeAppend, ( a ), ( b ) ) +#else +#define _LOG1 +#define _LOG2 +#endif + +_LIT( KDisConnected, "disconnected"); +_LIT( KConnected, "connected"); + // ============================ LOCAL FUNCTIONS ============================== // ============================ MEMBER FUNCTIONS ============================= @@ -92,10 +117,18 @@ } } - // Update repository - iUiCtl.SettingsRepository().Set( KAIWebStatus, iFlags.IsSet( EOnline ) ); + // Update state manager + SetOnline( iFlags.IsSet( EOnline ) ); + + iCurrentNwStatus = ENWRegistrationUnknown; + iHomeNetwork = KErrNotFound; + iRoamingNetwork = KErrNotFound; - iCurrentNwStatus = ENWRegistrationUnknown; + iNwSettingObserver = CCenRepObserver::NewL( this ); + + iGlobalQueryHandler = CGlobalQueryHandler::NewL(iUiCtl); + iGlobalConfirmationQuery = CAknGlobalConfirmationQuery::NewL(); + } // ---------------------------------------------------------------------------- @@ -106,7 +139,25 @@ { delete iHandler; delete iSession; - // Whether the user choice EOnline should be stored in cenrep ? + delete iNwSettingObserver; + delete iGlobalQueryHandler; + delete iGlobalConfirmationQuery; + } + +// ---------------------------------------------------------------------------- +// COnlineOfflineHelper::CurrentCellularDataUsageChangedL +// ---------------------------------------------------------------------------- +// +void COnlineOfflineHelper::CurrentCellularDataUsageChangedL(const TInt aValue) + { + if ( iCurrentNwStatus == ENWRegisteredOnHomeNetwork ) + { + iHomeNetwork = aValue; + } + else if ( iCurrentNwStatus == ENWRegisteredRoaming ) + { + iRoamingNetwork = aValue; + } } // ---------------------------------------------------------------------------- @@ -114,8 +165,8 @@ // ---------------------------------------------------------------------------- // TBool COnlineOfflineHelper::ShowOnlineItem() const - { - if ( iFlags.IsSet( EUtilizeOnline ) ) + { + if ( iUiCtl.FwStateHandler()->OnlineStateInUse() ) { TInt value ( KErrNotFound ); if ( iUiCtl.SettingsRepository().Get( KAIWebStatus, value ) == KErrNone ) @@ -132,7 +183,7 @@ // TBool COnlineOfflineHelper::ShowOfflineItem() const { - if ( iFlags.IsSet( EUtilizeOnline ) ) + if ( iUiCtl.FwStateHandler()->OnlineStateInUse() ) { TInt value ( KErrNotFound ); if ( iUiCtl.SettingsRepository().Get( KAIWebStatus, value ) == KErrNone ) @@ -147,71 +198,22 @@ // COnlineOfflineHelper::ProcessOnlineStateL // ---------------------------------------------------------------------------- // -void COnlineOfflineHelper::ProcessOnlineStateL( - RPointerArray< CXnNodeAppIf >& aList ) - { - _LIT( KOnlineOffline, "online_offline" ); - - iFlags.Clear( EUtilizeOnline ); - - // Check if data plugins are using online_offline - for ( TInt i = 0; i < aList.Count(); i++ ) - { - TAiPublisherInfo info; - - iUiCtl.PublisherInfoL( *aList[i], info ); - - if( iUiCtl.FwEventHandler()->HasMenuItemL( info, KOnlineOffline() ) ) - { - iFlags.Set( EUtilizeOnline ); - break; - } - } - - if( iFlags.IsSet( EUtilizeOnline ) ) - { - TInt value( 0 ); - iUiCtl.SettingsRepository().Get( KAIWebStatus, value ); - - if ( value ) - { - // Switch to online - SetOnlineL( ETrue ); - } - else - { - // Switch to offline - SetOnlineL( EFalse ); - } - } - } - -// ---------------------------------------------------------------------------- -// COnlineOfflineHelper::ProcessOnlineStateL -// ---------------------------------------------------------------------------- -// void COnlineOfflineHelper::ProcessOnlineStateL( TBool aOnline ) { // User has selected online/offline item from menu - if( iFlags.IsSet( EUtilizeOnline ) ) + if( iUiCtl.FwStateHandler()->OnlineStateInUse() ) { - // Don't show R_YES_NO_HS_ONLINE query as user selected online - if (aOnline ) - { + // Don't show R_YES_NO_HS_ONLINE query as user selected online + if ( aOnline ) + { iFlags.Set( EOnline ); - // Save state - iUiCtl.SettingsRepository().Set( KAIWebStatus, ETrue ); - // Run state change. - iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOnline ); } - else - { - iFlags.Clear( EOnline ); - // Save state - iUiCtl.SettingsRepository().Set( KAIWebStatus, EFalse ); - // Run state change. - iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOffline ); - } + else + { + iFlags.Clear( EOnline ); + } + + SetOnline( aOnline ); } } @@ -219,22 +221,14 @@ // COnlineOfflineHelper::SetOnline // ---------------------------------------------------------------------------- // -void COnlineOfflineHelper::SetOnlineL( TBool aOnline ) - { - +void COnlineOfflineHelper::SetOnline( TBool aOnline ) + { // Save state iUiCtl.SettingsRepository().Set( KAIWebStatus, aOnline ); - if( aOnline ) - { - // Run state change. - iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOnline ); - } - else - { - // Run state change. - iUiCtl.FwEventHandler()->ProcessStateChange( EAifwOffline ); - } + // Run state change. + iUiCtl.FwStateHandler()->ChangePluginState( + aOnline ? EAiFwOnline : EAiFwOffline ); } // ---------------------------------------------------------------------------- @@ -265,11 +259,16 @@ switch ( aNWInfo.iRegistrationStatus ) { case ENWRegisteredRoaming: - if( iFlags.IsSet( EOnline ) ) + _LOG1( _L(" Roaming Network Activated ")); + iCurrentNwStatus = aNWInfo.iRegistrationStatus; + CurrentNetworkSetting(); + if( ( iRoamingNetwork == ECmCellularDataUsageConfirm + || iRoamingNetwork == ECmCellularDataUsageDisabled ) + && iFlags.IsSet( EOnline ) ) { // Process to offline state. // Don't change the user selection. - SetOnlineL ( EFalse ); + SetOnline( EFalse ); // Show roaming notification CAknGlobalNote* note = CAknGlobalNote::NewLC(); HBufC* msg( StringLoader::LoadLC( R_QTN_HS_AUTOMATIC_OFFLINE ) ); @@ -277,15 +276,19 @@ note->ShowNoteL( EAknGlobalInformationNote, *msg ); CleanupStack::PopAndDestroy( 2, note ); // msg } - - iCurrentNwStatus = aNWInfo.iRegistrationStatus; break; + case ENWRegisteredOnHomeNetwork: - // Reset to user selection - SetOnlineL(iFlags.IsSet( EOnline ) ); - + _LOG1( _L(" Home Network Activated ")); iCurrentNwStatus = aNWInfo.iRegistrationStatus; + CurrentNetworkSetting(); + if( iHomeNetwork == ECmCellularDataUsageAutomatic ) + { + // Reset to user selection + SetOnline( iFlags.IsSet( EOnline ) ); + } break; + default: // unknown state iCurrentNwStatus = ENWRegistrationUnknown; @@ -372,13 +375,13 @@ { iFlags.Set( EOfflineProfile ); // Don't change the user selection. - SetOnlineL( EFalse ); + SetOnline( EFalse ); } else { iFlags.Clear( EOfflineProfile ); // Reset to user selection - SetOnlineL(iFlags.IsSet( EOnline ) ); + SetOnline( iFlags.IsSet( EOnline ) ); } } @@ -388,5 +391,70 @@ iHandler = CProfileChangeNotifyHandler::NewL( this ); } +// --------------------------------------------------------------------------- +// COnlineOfflineHelper::CurrentNetworkSetting +// --------------------------------------------------------------------------- +// +void COnlineOfflineHelper::CurrentNetworkSetting() + { + CRepository* repository( NULL ); + + TRAP_IGNORE( repository = CRepository::NewL( KCRUidCmManager ) ) + + if ( repository ) + { + TInt value( 0 ); + TInt err( repository->Get( KCurrentCellularDataUsage, value ) ); + + if ( err == KErrNone ) + { + if ( iCurrentNwStatus == ENWRegisteredRoaming ) + { + iRoamingNetwork = value; + _LOG2( _L("Roaming Network Setting <%d>"), value ); + } + else if ( iCurrentNwStatus == ENWRegisteredOnHomeNetwork ) + { + iHomeNetwork = value; + _LOG2( _L("Home Network Setting <%d>"), value ); + } + } + } + delete repository; + } + +// --------------------------------------------------------------------------- +// COnlineOfflineHelper::HandleConnectionQueryL +// --------------------------------------------------------------------------- +// +void COnlineOfflineHelper::HandleConnectionQueryL( const TDesC& aConnection) + { + if ( aConnection == KDisConnected() ) + { + ShowGlobalQueryL(R_QTN_HS_DISABLE_NETWORK, EFalse ); + } + else if ( aConnection == KConnected() ) + { + ShowGlobalQueryL(R_QTN_HS_SWITCH_ONLINE, ETrue ); + } + } + +// --------------------------------------------------------------------------- +// COnlineOfflineHelper::ShowGlobalQueryL +// --------------------------------------------------------------------------- +// +void COnlineOfflineHelper::ShowGlobalQueryL( TInt aResourceId, TBool aSetOnline ) + { + if ( !iGlobalQueryHandler->IsActive() ) + { + HBufC* confirmationText = StringLoader::LoadLC(aResourceId); + iGlobalConfirmationQuery->ShowConfirmationQueryL( + iGlobalQueryHandler->iStatus, + *confirmationText, + R_AVKON_SOFTKEYS_YES_NO); + iGlobalQueryHandler->SetOnlineParamAndActivate(aSetOnline); + CleanupStack::PopAndDestroy(); //confirmationText + } + } + // End of file -