uifw/AvKon/src/aknbatterydataobserver.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/aknbatterydataobserver.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2006,2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  This internal Avkon class updates the battery indicator 
+*                control in status pane.
+*
+*/
+
+
+// INCLUDE FILES
+#include "aknbatterydataobserver.h"
+#include "aknstatuspanedata.h"
+#include "AknBattery.h"
+#include "AknBatteryStrength.h"
+
+#include "aknstatuspanedatasubscriber.h"
+#include <eikspane.h>
+#include <avkon.hrh>
+#include <eikapp.h>
+#include <eikappui.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknBatteryDataObserver::CAknBatteryDataObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAknBatteryDataObserver::CAknBatteryDataObserver(
+    CAknBatteryPane* aBatteryPane )
+	{
+	iBatteryPane = aBatteryPane;
+	iBatteryPane->MopGetObject( iDataSubscriber );
+	if ( iDataSubscriber )
+		{
+		iDataSubscriber->AddObserver( this ); 
+		}
+    }
+
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CAknBatteryDataObserver::~CAknBatteryDataObserver()
+	{
+	if ( iDataSubscriber )
+		{
+		iDataSubscriber->RemoveObserver( this ); 
+		}
+  }
+
+
+// -----------------------------------------------------------------------------
+// CAknBatteryDataObserver::HandleUpdateL
+// Updates UI control state.    
+// -----------------------------------------------------------------------------
+//
+void CAknBatteryDataObserver::HandleUpdateL(
+    const TAknStatusPaneStateData& aData )
+	{
+	if ( !iDataSubscriber )
+	    {
+		return;
+	    }
+		   	
+	// If this pane is not in current layout, no update. Update happens when 
+	// status pane layout is changed.
+    CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+   	if ( !statusPane || 
+   		 !statusPane->PaneCapabilities(
+   		    TUid::Uid( EEikStatusPaneUidBattery ) ).IsInCurrentLayout() )
+   		{
+		return;
+   		}
+   	
+    TAknBatteryState state = aData.iBatteryState;		
+	TBool levelChanged     = EFalse;
+	TBool rechargeChanged  = EFalse;
+	TBool iconChanged      = EFalse;
+   	
+   	// Animation is not shown in the background unless update level has been 
+   	// set above ERefreshLevelMedium.
+    TBool updateAnimation = 
+        ( !iDataSubscriber->IsBackground() ||     	
+    	  iDataSubscriber->RefreshLevel() > CAknStatusPaneDataSubscriber::ERefreshLevelMedium );
+	
+	if ( iBatteryPane->BatteryState() != state.iIconState )
+	    {
+	    iBatteryPane->SetBatteryStateL( state.iIconState );
+	    iconChanged = ETrue;
+	    }
+			
+	if ( iBatteryPane->BatteryLevel() != state.iBatteryStrength )
+		{
+		iBatteryPane->SetBatteryLevel( state.iBatteryStrength );
+		levelChanged = ETrue;		
+		}
+		
+	if ( updateAnimation )
+		{
+		if ( iBatteryPane->Recharging() != state.iRecharging )
+			{
+			iBatteryPane->SetRecharge( state.iRecharging );										
+			rechargeChanged = ETrue;
+			}
+		}
+	else
+		{
+		if ( iBatteryPane->Recharging() != EFalse )
+			{
+			iBatteryPane->SetRecharge( EFalse );
+			rechargeChanged = ETrue;
+			}
+		}
+
+	if ( levelChanged || rechargeChanged || iconChanged )
+		{
+		iBatteryPane->DrawDeferred();	
+		}
+	}
+
+//  End of File