diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browsersysteminfoplugin/src/NetworkObserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserplugins/browsersysteminfoplugin/src/NetworkObserver.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INCLUDE FILES +#include +#include "NetworkObserver.h" +#include "SystemInfoPlugin.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNetworkObserver::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CNetworkObserver* CNetworkObserver::NewL( CSystemInfoPlugin* aPlugin ) + { + CNetworkObserver* self = new (ELeave) CNetworkObserver( aPlugin ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::CNetworkObserver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CNetworkObserver::CNetworkObserver( CSystemInfoPlugin* aPlugin ) + : iSystemInfoPlugin( aPlugin ), + iSignalPckg( iSignal ), + iRegistrationStatusPckg( iRegistrationStatus ), + iNetworkInfoPckg( iNetworkInfo ) + { + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +void CNetworkObserver::ConstructL() + { + iSignalObserver = CSystemInfoObserver::NewL( this, EIdSignalStrength ); + iRegistrationStatusObserver = CSystemInfoObserver::NewL( this, EIdRegistrationStatus ); + iNetworkInfoObserver = CSystemInfoObserver::NewL( this, EIdNetworkInfo ); + + iTelephony = CTelephony::NewL(); + iTelephony2 = CTelephony::NewL(); + iTelephony3 = CTelephony::NewL(); + + // bootstrap monitoring + + // signal + iSignal.iSignalStrength = INT_MIN; // default indicates unknown + iSignal.iBar = CHAR_MIN; // default indicates unknown + iSignalObserver->RequestNotificationL(); + + // registration status + iRegistrationStatus.iRegStatus = CTelephony::ERegistrationUnknown; // default + iRegistrationStatusObserver->RequestNotificationL(); + + // network info + iNetworkInfo.iDisplayTag.Copy(_L("")); // default indicates unknown + iNetworkInfoObserver->RequestNotificationL(); + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::~CNetworkObserver() +// Destructor +// ----------------------------------------------------------------------------- +CNetworkObserver::~CNetworkObserver() + { + delete iSignalObserver; + delete iRegistrationStatusObserver; + delete iRegistrationStatusChangedFunction; + delete iNetworkInfoObserver; + delete iTelephony; + delete iTelephony2; + delete iTelephony3; + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::SignalBars +// ----------------------------------------------------------------------------- +TInt CNetworkObserver::SignalBars() const + { + if ( !iSignalStarted ) + { + return INT_MIN; // value indicates unknown + } + return iSignal.iBar; + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::RegistrationStatus +// ----------------------------------------------------------------------------- +TInt CNetworkObserver::RegistrationStatus() const + { + TInt s = iRegistrationStatus.iRegStatus; + // explicitly map enum values in case CTelephony API changes. + switch ( s ) + { + case CTelephony::ERegistrationUnknown: + s = 0; + break; + case CTelephony::ENotRegisteredNoService: + s = 1; + break; + case CTelephony::ENotRegisteredEmergencyOnly: + s = 2; + break; + case CTelephony::ENotRegisteredSearching: + s = 3; + break; + case CTelephony::ERegisteredBusy: + s = 4; + break; + case CTelephony::ERegisteredOnHomeNetwork: + s = 5; + break; + case CTelephony::ERegistrationDenied: + s = 6; + break; + case CTelephony::ERegisteredRoaming: + s = 7; + break; + default: + s = 0; + break; + }; + + return s; + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::NetworkName +// ----------------------------------------------------------------------------- +const TDesC& CNetworkObserver::NetworkName() const + { + return iNetworkInfo.iDisplayTag; + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::RequestNotificationL +// ----------------------------------------------------------------------------- +void CNetworkObserver::RequestNotificationL( TIdNetworkItem aId, HBufC8* aFunctionName ) + { + if ( aId == EIdRegistrationStatus ) + { + delete iRegistrationStatusChangedFunction; + iRegistrationStatusChangedFunction = aFunctionName; + // already monitoring, don't request notification again + } + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::SubscribeL +// ----------------------------------------------------------------------------- +void CNetworkObserver::SubscribeL( TInt aId, TRequestStatus& aStatus ) + { + if ( aId == EIdSignalStrength ) + { + if ( iSignalStarted ) + { + iTelephony->NotifyChange( aStatus, + CTelephony::ESignalStrengthChange, + iSignalPckg ); + } + else + { + iTelephony->GetSignalStrength( aStatus, iSignalPckg ); + } + } + else if ( aId == EIdRegistrationStatus ) + { + if ( iRegistrationStatusStarted ) + { + iTelephony2->NotifyChange( aStatus, + CTelephony::ENetworkRegistrationStatusChange, + iRegistrationStatusPckg ); + } + else + { + iTelephony2->GetNetworkRegistrationStatus( aStatus, iRegistrationStatusPckg ); + } + } + else if ( aId == EIdNetworkInfo ) + { + if ( iNetworkInfoStarted ) + { + iTelephony3->NotifyChange( aStatus, + CTelephony::ECurrentNetworkInfoChange, + iNetworkInfoPckg ); + } + else + { + iTelephony3->GetCurrentNetworkInfo( aStatus, iNetworkInfoPckg ); + } + } + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::UpdateL +// ----------------------------------------------------------------------------- +void CNetworkObserver::UpdateL( TInt aId ) + { + if ( aId == EIdSignalStrength ) + { + iSignalStarted = 1; + } + else if ( aId == EIdRegistrationStatus ) + { + iRegistrationStatusStarted = 1; + if ( iRegistrationStatusChangedFunction ) + { + iSystemInfoPlugin->InvokeCallback( *iRegistrationStatusChangedFunction, NULL, 0 ); + } + } + else if ( aId == EIdNetworkInfo ) + { + iNetworkInfoStarted = 1; + // FUTURE add callback to script API + } + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::Cancel +// ----------------------------------------------------------------------------- +void CNetworkObserver::Cancel( TInt aId ) + { + if ( aId == EIdSignalStrength ) + { + (void) iTelephony->CancelAsync( ( iSignalStarted ? + CTelephony::ESignalStrengthChangeCancel + : CTelephony::EGetSignalStrengthCancel ) ); + } + else if ( aId == EIdRegistrationStatus ) + { + (void) iTelephony2->CancelAsync( ( iRegistrationStatusStarted ? + CTelephony::ENetworkRegistrationStatusChangeCancel + : CTelephony::EGetNetworkRegistrationStatusCancel ) ); + } + else if ( aId == EIdNetworkInfo ) + { + (void) iTelephony3->CancelAsync( ( iNetworkInfoStarted ? + CTelephony::ECurrentNetworkInfoChangeCancel + : CTelephony::EGetCurrentNetworkInfoCancel ) ); + } + } + +// ----------------------------------------------------------------------------- +// CNetworkObserver::Close +// ----------------------------------------------------------------------------- +void CNetworkObserver::Close( TInt /*aId*/ ) + { + } + +// End of File