idlehomescreen/xmluirendering/uiengine/src/xnuistatelistener.cpp
changeset 0 f72a12da539e
child 15 ff572dfe6d86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnuistatelistener.cpp	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 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:  UI State Listener
+*
+*/
+
+// System includes
+#include <ctsydomainpskeys.h>
+
+// User includes
+#include "xnappuiadapter.h"
+#include "xnuistatelistener.h"
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CXnUiStateListener* CXnUiStateListener::NewL( CXnAppUiAdapter& aAdapter  )    
+    {
+    CXnUiStateListener* self = CXnUiStateListener::NewLC( aAdapter );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CXnUiStateListener* CXnUiStateListener::NewLC( CXnAppUiAdapter& aAdapter )
+    {
+    CXnUiStateListener* self = new( ELeave ) CXnUiStateListener( aAdapter );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::CXnUiStateListener()
+// C++ default constructor
+// -----------------------------------------------------------------------------
+//
+CXnUiStateListener::CXnUiStateListener( CXnAppUiAdapter& aAdapter ) 
+    : iAppUiAdapter( aAdapter ), iLightStatus( CHWRMLight::ELightStatusUnknown )    
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::~CXnUiStateListener()
+// C++ default destructor.
+// -----------------------------------------------------------------------------
+//
+CXnUiStateListener::~CXnUiStateListener()
+    {
+    iUiStateObservers.Reset();
+    iResourceChangeObservers.Reset();
+    
+    iAppUiAdapter.StatusPane()->SetObserver( NULL );
+    CCoeEnv::Static()->RemoveMessageMonitorObserver( *this );
+    
+    delete iLightObserver;
+    delete iCallStateObserver;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::ConstructL()
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::ConstructL()
+    {
+    iLightObserver = CHWRMLight::NewL( this );
+    
+    iCallStateObserver = CXnPropertySubscriber::NewL( KPSUidCtsyCallInformation,
+        KCTsyCallState, *this );
+    
+    iAppUiAdapter.StatusPane()->SetObserver( this );
+    
+    CCoeEnv::Static()->AddMessageMonitorObserverL( *this );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::AddObserver()
+// Adds MXnUiStateObserver
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::AddObserver( const MXnUiStateObserver& aObserver )
+    {
+    if ( iUiStateObservers.InsertInAddressOrder( &aObserver ) == KErrNone )
+        {
+        MXnUiStateObserver& observer( 
+                const_cast< MXnUiStateObserver & >( aObserver) );
+        
+        if ( iForegroundStatus != MXnUiStateObserver::EUnknown )
+            {
+            observer.NotifyForegroundChanged( iForegroundStatus );
+            }
+                
+        observer.NotifyInCallStateChaged( iInCallState );
+        observer.NotifyLightStatusChanged( 
+            iLightStatus == CHWRMLight::ELightOn ? ETrue : EFalse );
+        }     
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::RemoveObserver()
+// Removes MXnUiStateObserver
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::RemoveObserver( const MXnUiStateObserver& aObserver )
+    {
+    TInt index( iUiStateObservers.Find( &aObserver ) );
+    
+    if ( index != KErrNotFound )
+        {
+        iUiStateObservers.Remove( index );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::AddObserver()
+// Adds MXnUiResourceChangeObserver 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::AddObserver( 
+    const MXnUiResourceChangeObserver& aObserver )
+    {
+    iResourceChangeObservers.InsertInAddressOrder( &aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::RemoveObserver()
+// Removes MXnUiResourceChangeObserver
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::RemoveObserver( 
+    const MXnUiResourceChangeObserver& aObserver )
+    {
+    TInt index( iResourceChangeObservers.Find( &aObserver ) );
+    
+    if ( index != KErrNotFound )
+        {
+        iResourceChangeObservers.Remove( index );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::HandleResourceChangeL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::HandleResourceChangeL( TInt aType )
+    {   
+    MXnUiStateObserver::TForegroundStatus status( iForegroundStatus );
+    
+    if ( aType == KEikMessageFadeAllWindows )
+        {
+        if ( iForegroundStatus != MXnUiStateObserver::EBackground )
+            {
+            iForegroundStatus = MXnUiStateObserver::EPartialForeground;
+            }        
+        }
+    else if ( aType == KEikMessageUnfadeWindows )           
+        {
+        if ( iForegroundType == KAknFullOrPartialForegroundGained )
+            {
+            if ( iAppUiAdapter.IsPartialForeground() )
+                {                       
+                iForegroundStatus = MXnUiStateObserver::EPartialForeground;            
+                }
+            else
+                {                       
+                iForegroundStatus = MXnUiStateObserver::EForeground;            
+                }                                  
+            }
+        }  
+    
+    if ( status != iForegroundStatus )
+        {
+        for ( TInt i = 0; i < iUiStateObservers.Count(); i++ )
+            {
+            iUiStateObservers[i]->
+                NotifyForegroundChanged( iForegroundStatus );
+            }
+        }
+            
+    for ( TInt i = 0; i < iResourceChangeObservers.Count(); i++ )
+        {
+        iResourceChangeObservers[i]->NotifyResourceChanged( aType );
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::MonitorWsMessage()
+// 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::MonitorWsMessage( const TWsEvent& aEvent )
+    {
+    TInt type( aEvent.Type() );
+
+    MXnUiStateObserver::TForegroundStatus status( iForegroundStatus ); 
+    
+    if ( type == KAknFullOrPartialForegroundGained )
+        {     
+        iForegroundType = type;
+        
+        if ( iAppUiAdapter.IsPartialForeground() )
+            {                       
+            iForegroundStatus = MXnUiStateObserver::EPartialForeground;            
+            }
+        else
+            {                       
+            iForegroundStatus = MXnUiStateObserver::EForeground;            
+            }                      
+        }
+    else if ( type == KAknFullOrPartialForegroundLost )        
+        {
+        iForegroundType = type;
+        
+        iForegroundStatus = MXnUiStateObserver::EBackground;
+        }  
+    else if ( type == EEventFocusLost )
+        {
+        iForegroundStatus = MXnUiStateObserver::EBackground;
+        }
+    else if ( type == EEventFocusGained )
+        {
+        if ( iForegroundType == KAknFullOrPartialForegroundGained )
+            {
+            if ( iAppUiAdapter.IsPartialForeground() )
+                {                       
+                iForegroundStatus = MXnUiStateObserver::EPartialForeground;            
+                }
+            else
+                {                       
+                iForegroundStatus = MXnUiStateObserver::EForeground;            
+                }                                 
+            }
+        }
+    
+    if ( status != iForegroundStatus )
+        {       
+        for ( TInt i = 0; i < iUiStateObservers.Count(); i++ )
+            {
+            iUiStateObservers[i]->
+                NotifyForegroundChanged( iForegroundStatus );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::HandleStatusPaneSizeChange()
+// 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::HandleStatusPaneSizeChange()
+    {              
+    for ( TInt i = 0; i < iResourceChangeObservers.Count(); i++ )
+        {
+        iResourceChangeObservers[i]->NotifyStatusPaneSizeChanged();                         
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::LightStatusChanged()
+// 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::LightStatusChanged( TInt aTarget, 
+    CHWRMLight::TLightStatus aStatus ) 
+    {
+    if ( aTarget == CHWRMLight::EPrimaryDisplay )
+        {
+        if ( ( aStatus == CHWRMLight::ELightOn || 
+             aStatus == CHWRMLight::ELightOff ) &&
+             aStatus != iLightStatus )
+            {
+            iLightStatus = aStatus;
+                            
+            for ( TInt i = 0; i < iUiStateObservers.Count(); i++ )
+                {
+                iUiStateObservers[i]->
+                    NotifyLightStatusChanged( 
+                        iLightStatus == CHWRMLight::ELightOn ? ETrue : EFalse );
+                }                                        
+            }
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CXnUiStateListener::PropertyChangedL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CXnUiStateListener::PropertyChangedL( const TUint32 aKey, 
+    const TInt aValue )
+    {
+    if ( aKey == KCTsyCallState )
+        {
+        TBool active( aValue > EPSCTsyCallStateNone );
+        
+        if( iInCallState != active )
+            {
+            iInCallState = active;
+            
+            for ( TInt i = 0; i < iUiStateObservers.Count(); i++ )
+                {
+                iUiStateObservers[i]->NotifyInCallStateChaged( iInCallState );
+                }                                                  
+            }
+        }    
+    }
+
+// End of file