coreapplicationuis/SysAp/Src/SysApEtelNetworkBarObserver.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApEtelNetworkBarObserver.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2005-2008 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:  CSysApEtelNetworkBarObserver implementation
+*
+*/
+
+
+// INCLUDES
+#include "SysApEtelNetworkBarObserver.h"
+#include "SysApAppUi.h"
+
+// Constants 
+const TInt8 KNetworkBarsUninitialized(-111);
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::NewL() 
+// ----------------------------------------------------------------------------
+CSysApEtelNetworkBarObserver* CSysApEtelNetworkBarObserver::NewL( CSysApAppUi& aSysApAppUi, RMobilePhone& aPhone )
+    {
+    CSysApEtelNetworkBarObserver* self = new(ELeave) CSysApEtelNetworkBarObserver( aSysApAppUi, aPhone );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::CSysApEtelNetworkBarObserver() 
+// ----------------------------------------------------------------------------
+CSysApEtelNetworkBarObserver::CSysApEtelNetworkBarObserver( CSysApAppUi& aSysApAppUi, RMobilePhone& aPhone ) 
+    : CActive(EPriorityStandard), 
+    iSysApAppUi( aSysApAppUi ),
+    iPhone( aPhone ),
+    iSignalBars( KNetworkBarsUninitialized ),
+    iPreviousNetworkBarValue( KNetworkBarsUninitialized )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::ConstructL() 
+// ----------------------------------------------------------------------------
+void CSysApEtelNetworkBarObserver::ConstructL()
+    {    
+    // Get initial value (will also reorder in RunL)
+    TRACES( RDebug::Print(_L("CSysApEtelNetworkBarObserver::ConstructL - Ordering signal strength change." ) ) );
+    OrderNotification();
+    iNetworkBarGetter = CSysApEtelNetworkBarGetter::NewL( *this, iPhone );
+    iNetworkBarGetter->GetBarCountL();
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::~CSysApEtelNetworkBarObserver() 
+// ----------------------------------------------------------------------------
+
+CSysApEtelNetworkBarObserver::~CSysApEtelNetworkBarObserver()
+    {
+    TRACES( RDebug::Print( _L("CSysApEtelNetworkBarObserver::~CSysApEtelNetworkBarObserver" ) ) );
+    delete iNetworkBarGetter;
+    Cancel();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::RunL
+// Handle notification from pubsub session.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelNetworkBarObserver::RunL()
+    {
+    TRACES( RDebug::Print(_L("CSysApEtelNetworkBarObserver::RunL - Signal Strength change: %d, bars: %d" ), iSignalStrength, iSignalBars ) );
+    
+    // Reorder notification
+    OrderNotification();
+
+    // Notify SysApAppUi
+    if ( iPreviousNetworkBarValue != iSignalBars )
+        {
+        iPreviousNetworkBarValue = iSignalBars;
+        TRAPD(err, iSysApAppUi.UpdateSignalBarsL());
+        if ( err != KErrNone )
+            {
+            TRACES( RDebug::Print(_L("CSysApEtelNetworkBarObserver::RunL - UpdateSignalBarsL error: %d" ), err ));                
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::DoCancel
+// Handle cancel order on this active object.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelNetworkBarObserver::DoCancel()
+    {
+    TRACES( RDebug::Print( _L("CSysApEtelNetworkBarObserver::DoCancel" ) ) );
+    if ( IsActive() )
+        {
+        iPhone.CancelAsyncRequest( EMobilePhoneNotifySignalStrengthChange );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::OrderNotification
+// Order new notification from CenRep.
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelNetworkBarObserver::OrderNotification()
+    {
+    TRACES( RDebug::Print( _L("CSysApEtelNetworkBarObserver::OrderNotification" ) ) );
+    iPhone.NotifySignalStrengthChange(iStatus, iSignalStrength, iSignalBars);
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::GetBarCount
+// -----------------------------------------------------------------------------
+//
+TInt CSysApEtelNetworkBarObserver::GetBarCount() const
+    {
+    TRACES( RDebug::Print( _L("CSysApEtelNetworkBarObserver::GetBarCount: iSignalBars=%d, iSignalBarsFromGetter=%d" ),
+                           iSignalBars, iSignalBarsFromGetter ) );
+
+    if ( iSignalBars == KNetworkBarsUninitialized ) // notification not yet completed
+        {
+        return iSignalBarsFromGetter; // from EMobilePhoneGetSignalStrength
+        }
+    else        
+        {
+        return iSignalBars; // from EMobilePhoneNotifySignalStrengthChange    
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// CSysApEtelNetworkBarObserver::GetBarCountCompleted
+// -----------------------------------------------------------------------------
+//
+void CSysApEtelNetworkBarObserver::GetBarCountCompleted( TInt8 aSignalBars )
+    {
+    TRACES( RDebug::Print( _L("CSysApEtelNetworkBarObserver::GetBarCountCompleted:  aSignalBars=%d" ), aSignalBars ) );
+    
+    iSignalBarsFromGetter = aSignalBars;
+    
+    // Update indicator only if notification isn't completed meanwhile. Use iPreviousNetworkBarValue for
+    // evaluation because iSignalBars may be updated even if RunL has not yet been executed
+    if ( iPreviousNetworkBarValue == KNetworkBarsUninitialized )
+        {
+        TRAPD( err, iSysApAppUi.UpdateSignalBarsL() );
+        
+        if ( err != KErrNone )
+            {
+            TRACES( RDebug::Print(_L("CSysApEtelNetworkBarObserver::GetBarCountCompleted - UpdateSignalBarsL error: %d" ), err ));
+            }
+        }
+        
+    // getter object no longer needed as signal bar information is received via notification
+    delete iNetworkBarGetter;
+    iNetworkBarGetter = NULL;    
+    }
+
+// End of file