diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfwplugins/displaysourceplugin/src/displayservicelight.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfwplugins/displaysourceplugin/src/displayservicelight.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2009-2009 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: CDisplayServiceLight class implementation. +* +*/ + + +// SYSTEM INCLUDES +#include +#include + +// USER INCLUDES +#include "displayservicelight.h" +#include "displaysourcecontextdef.h" +#include "trace.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CDisplayServiceLight::CDisplayServiceLight( MCFContextInterface& aCF ): + CDisplayServiceBase( CDisplayServiceBase::EDisplayLightStatus, aCF ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CDisplayServiceLight::ConstructL() + { + FUNC_LOG; + + // Call base class + CDisplayServiceBase::ConstructL(); + + // Initialize context object + iContext->SetSourceL( KDisplaySource ); + iContext->SetTypeL( KDisplayStatusType ); + + // Define context: + // Device: Display.Status.Light + TInt err = iCF.DefineContext( + KDisplaySource, KDisplayStatusType, KDisplayStatusTypeSec ); + User::LeaveIfError( err ); + + // Initialize light client + iLight = CHWRMLight::NewL( this ); + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +CDisplayServiceLight* CDisplayServiceLight::NewL( MCFContextInterface& aCF ) + { + FUNC_LOG; + + CDisplayServiceLight* self = CDisplayServiceLight::NewLC( aCF ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +CDisplayServiceLight* CDisplayServiceLight::NewLC( MCFContextInterface& aCF ) + { + FUNC_LOG; + + CDisplayServiceLight* self = new ( ELeave ) CDisplayServiceLight( aCF ); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor. +// --------------------------------------------------------------------------- +// +CDisplayServiceLight::~CDisplayServiceLight() + { + FUNC_LOG; + + delete iLight; + } + +//------------------------------------------------------------------------------ +// CDisplayServiceLight::StartL +//------------------------------------------------------------------------------ +// +void CDisplayServiceLight::StartL() + { + FUNC_LOG; + + // Get current display light status value and publish it + PublishContext( iLight->LightStatus( CHWRMLight::EPrimaryDisplay ) ); + } + +//------------------------------------------------------------------------------ +// CDisplayServiceLight::Stop +//------------------------------------------------------------------------------ +// +void CDisplayServiceLight::Stop() + { + FUNC_LOG; + + // Nothing to do here. + } + +//---------------------------------------------------------------------------- +// CDisplayServiceLight::LightStatusChanged +//---------------------------------------------------------------------------- +// +void CDisplayServiceLight::LightStatusChanged( + TInt aTarget, + CHWRMLight::TLightStatus aStatus ) + { + FUNC_LOG; + + if ( aTarget & CHWRMLight::EPrimaryDisplay ) + { + PublishContext( aStatus ); + } + } + +//------------------------------------------------------------------------------ +// CDisplayServiceLight::PublishContext +//------------------------------------------------------------------------------ +// +void CDisplayServiceLight::PublishContext( CHWRMLight::TLightStatus aStatus ) + { + FUNC_LOG; + + INFO_1( "Primary display light status = %d", aStatus ); + + if ( aStatus >= 0 && + aStatus < KDisplayStatusTypeValueCount && + aStatus != iCurrentStatus ) + { + // Store new status + iCurrentStatus = aStatus; + + // Publish context, ignore error values + TRAP_IGNORE( iContext->SetValueL( + TPtrC( KDisplayStatusTypeValues[aStatus] ) ) ); + iCF.PublishContext( *iContext, iThread ); + } + } + +// End of file