diff -r 6385c4c93049 -r 8e6fa1719340 browserplugins/browsersysteminfoplugin/src/PowerObserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserplugins/browsersysteminfoplugin/src/PowerObserver.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,215 @@ +/* +* 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 "PowerObserver.h" +#include "SystemInfoPlugin.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPowerObserver::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CPowerObserver* CPowerObserver::NewL( CSystemInfoPlugin* aPlugin ) + { + CPowerObserver* self = new (ELeave) CPowerObserver( aPlugin ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::CPowerObserver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CPowerObserver::CPowerObserver( CSystemInfoPlugin* aPlugin ) + : iSystemInfoPlugin( aPlugin ), + iBatteryInfoPckg( iBatteryInfo ), + iIndicatorPckg( iIndicator ) + { + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +void CPowerObserver::ConstructL() + { + iBatteryInfoObserver = CSystemInfoObserver::NewL( this, EIdBatteryInfo ); + iIndicatorObserver = CSystemInfoObserver::NewL( this, EIdIndicator ); + + iTelephony = CTelephony::NewL(); + iTelephony2 = CTelephony::NewL(); + + // bootstrap monitoring + + // battery + iBatteryInfo.iChargeLevel = 0; // default indicates unknown + iBatteryInfoObserver->RequestNotificationL(); + + // charger + iIndicator.iIndicator = 0; + iIndicatorObserver->RequestNotificationL(); + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::~CPowerObserver() +// Destructor +// ----------------------------------------------------------------------------- +CPowerObserver::~CPowerObserver() + { + delete iIndicatorObserver; + delete iBatteryInfoObserver; + delete iBatteryInfoChangedFunction; + delete iIndicatorChangedFunction; + delete iTelephony2; + delete iTelephony; + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::ChargeLevel +// ----------------------------------------------------------------------------- +TInt CPowerObserver::ChargeLevel() const + { + if ( !iBatteryInfoStarted ) + { + // value indicates unknown + return INT_MIN; + } + return STATIC_CAST( TInt, iBatteryInfo.iChargeLevel ); + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::ChargerConnected +// ----------------------------------------------------------------------------- +TInt CPowerObserver::ChargerConnected() const + { + if ( !iIndicatorStarted ) + { + // value indicates unknown + return INT_MIN; + } + return ( CTelephony::KIndChargerConnected & iIndicator.iIndicator ) ? 1 : 0; + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::RequestNotificationL +// ----------------------------------------------------------------------------- +void CPowerObserver::RequestNotificationL( TIdPowerItem aId, HBufC8* aFunctionName ) + { + if ( aId == EIdBatteryInfo ) + { + delete iBatteryInfoChangedFunction; + iBatteryInfoChangedFunction = aFunctionName; + // already monitoring, don't request notification again + } + else if ( aId == EIdIndicator ) + { + delete iIndicatorChangedFunction; + iIndicatorChangedFunction = aFunctionName; + // already monitoring, don't request notification again + } + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::SubscribeL +// ----------------------------------------------------------------------------- +void CPowerObserver::SubscribeL( TInt aId, TRequestStatus& aStatus ) + { + if ( aId == EIdBatteryInfo ) + { + if ( iBatteryInfoStarted ) + { + iTelephony->NotifyChange( aStatus, + CTelephony::EBatteryInfoChange, + iBatteryInfoPckg ); + } + else + { + iTelephony->GetBatteryInfo( aStatus, iBatteryInfoPckg ); + } + } + else if ( aId == EIdIndicator ) + { + if ( iIndicatorStarted ) + { + iTelephony->NotifyChange( aStatus, + CTelephony::EIndicatorChange, + iIndicatorPckg ); + } + else + { + iTelephony->GetIndicator( aStatus, iIndicatorPckg ); + } + } + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::UpdateL +// ----------------------------------------------------------------------------- +void CPowerObserver::UpdateL( TInt aId ) + { + if ( aId == EIdBatteryInfo ) + { + iBatteryInfoStarted = 1; + if ( iBatteryInfoChangedFunction ) + { + iSystemInfoPlugin->InvokeCallback( *iBatteryInfoChangedFunction, NULL, 0 ); + } + } + else if ( aId == EIdIndicator ) + { + iIndicatorStarted = 1; + if ( iIndicatorChangedFunction ) + { + iSystemInfoPlugin->InvokeCallback( *iIndicatorChangedFunction, NULL, 0 ); + } + } + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::Cancel +// ----------------------------------------------------------------------------- +void CPowerObserver::Cancel( TInt aId ) + { + if ( aId == EIdBatteryInfo ) + { + (void) iTelephony->CancelAsync( ( iBatteryInfoStarted ? + CTelephony::EBatteryInfoChangeCancel + : CTelephony::EGetBatteryInfoCancel ) ); + } + else if ( aId == EIdIndicator ) + { + (void) iTelephony->CancelAsync( ( iIndicatorStarted ? + CTelephony::EIndicatorChangeCancel + : CTelephony::EGetIndicatorCancel ) ); + } + } + +// ----------------------------------------------------------------------------- +// CPowerObserver::Close +// ----------------------------------------------------------------------------- +void CPowerObserver::Close( TInt /*aId*/ ) + { + } + +// End of File