browserplugins/browsersysteminfoplugin/src/PowerObserver.cpp
branchRCL_3
changeset 48 8e6fa1719340
parent 0 84ad3b177aa3
--- /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 <limits.h>
+#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