diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfserver/cfecomobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/src/cfserver/cfecomobserver.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,200 @@ +/* +* 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: CCFEcomObserver class implementation. +* +*/ + + +#include "cfecomobserver.h" +#include "cftrace.h" +#include "cfstateobserver.h" + +// LOCAL DEFINITIONS + +#ifdef _DEBUG +_LIT( KPanicCat, "CFEcomObs" ); + +// Panic codes +enum TPanicReason + { + EAlreadyActive, + EInvalidObserver + }; + +// LOCAL FUNCTIONS +LOCAL_C void Panic( TInt aReason ) + { + User::Panic( KPanicCat, aReason ); + } +#endif + +//----------------------------------------------------------------------------- +// CCFEComObserver::CCFEComObserver +//----------------------------------------------------------------------------- +// +CCFEComObserver::CCFEComObserver(): CActive( EPriorityStandard ) + { + FUNC_LOG; + + CActiveScheduler::Add( this ); + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::NewLC +//----------------------------------------------------------------------------- +// +CCFEComObserver* CCFEComObserver::NewLC() + { + FUNC_LOG; + + CCFEComObserver* self = new ( ELeave ) CCFEComObserver(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::NewL +//----------------------------------------------------------------------------- +// +CCFEComObserver* CCFEComObserver::NewL() + { + FUNC_LOG; + + CCFEComObserver* self = CCFEComObserver::NewLC(); + CleanupStack::Pop(); // self; + return self; + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::ConstructL +//----------------------------------------------------------------------------- +// +void CCFEComObserver::ConstructL() + { + FUNC_LOG; + + iEComSession = &REComSession::OpenL(); + StartObserving(); + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::~CCFEComObserver +//----------------------------------------------------------------------------- +// +CCFEComObserver::~CCFEComObserver() + { + FUNC_LOG; + + // Cancel any request, if outstanding + Cancel(); + + // Clean up memebers + iObservers.Close(); + if( iEComSession ) + { + iEComSession->Close(); + } + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::DoCancel +//----------------------------------------------------------------------------- +// +void CCFEComObserver::DoCancel() + { + FUNC_LOG; + + iEComSession->CancelNotifyOnChange( iStatus ); + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::StartObserving +//----------------------------------------------------------------------------- +// +void CCFEComObserver::StartObserving() + { + FUNC_LOG; + + __ASSERT_DEBUG( !IsActive(), Panic( EAlreadyActive) ); + + SetActive(); + iEComSession->NotifyOnChange( iStatus ); + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::AddObserverL +//----------------------------------------------------------------------------- +// +void CCFEComObserver::AddObserverL( MCFStateObserver* aObserver ) + { + FUNC_LOG; + + __ASSERT_DEBUG( aObserver, Panic( EInvalidObserver ) ); + + iObservers.AppendL( aObserver ); + } + + +//----------------------------------------------------------------------------- +// CCFEComObserver::RunL +//----------------------------------------------------------------------------- +// +void CCFEComObserver::RunL() + { + FUNC_LOG; + + // Store completion status + TInt status = iStatus.Int(); + + // Continue request + StartObserving(); + + // Notify observers + if( status == KErrNone ) + { + NotifyObservers(); + } + } + +//----------------------------------------------------------------------------- +// CCFEComObserver::RunError +//----------------------------------------------------------------------------- +// +TInt CCFEComObserver::RunError( TInt aError ) + { + return aError; + } + +//------------------------------------------------------------------------------ +// CCFEComObserver::NotifyObservers +//------------------------------------------------------------------------------ +// +void CCFEComObserver::NotifyObservers() + { + FUNC_LOG; + + INFO( "CCFEComObserver::NotifyObservers - New plug-ins detected, updating" ); + + TInt count = iObservers.Count(); + for( TInt i = 0; i < count; i++ ) + { + TInt err = KErrNone; + TRAP( err, iObservers[i]->UpdatePlugInsL( ) ); + ERROR( err, "Failed to update plug-ins" ); + } + } + +// End of file +