diff -r 000000000000 -r 094583676ce7 wvuing/IMPSConnectionUI/NotifySrc/CIMPSConnUiConnectionModeNotifierImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSConnectionUI/NotifySrc/CIMPSConnUiConnectionModeNotifierImp.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,298 @@ +/* +* Copyright (c) 2004 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: Connection mode notifier implementation. +* +*/ + +// INCLUDE FILES +#include +#include +#include "CIMPSConnUiConnectionModeNotifierImp.h" +#include "CnUiPanics.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::NewL() +// ----------------------------------------------------------------------------- +// +CIMPSConnUiConnectionModeNotifierImp* CIMPSConnUiConnectionModeNotifierImp::NewL( + CIMPSConnUiConnectionModeNotifier& aInterface, + TIMPSConnectionClient aClient ) + { + CIMPSConnUiConnectionModeNotifierImp* self = + new ( ELeave ) CIMPSConnUiConnectionModeNotifierImp( aInterface, + aClient ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); //self + return self; + } + + +// Destructor +CIMPSConnUiConnectionModeNotifierImp::~CIMPSConnUiConnectionModeNotifierImp() + { + Dying(); + delete iConnModeHandler; + iObserverArray.Close(); + } + + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CIMPSConnUiConnectionModeNotifierImp::CIMPSConnUiConnectionModeNotifierImp( + CIMPSConnUiConnectionModeNotifier& aInterface, + TIMPSConnectionClient aClient ) + : iInterface( aInterface ), + iClient( aClient ), + iStarted( EFalse ), + iDying( EFalse ) + { + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::ConstructL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::ConstructL() + { + iConnModeHandler = CreateConnModeHandlerL(); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::StartL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::StartL() + { + //make here sanity checks to encapsulate + //notifier behaviour + if ( iDying ) + { + //if dying, the notifier restart is silently ignored + //notifier is evidently going down anyway + return; + } + + if ( iStarted ) + { + User::Leave( KErrInUse ); + } + + if ( iObserverArray.Count() == 0 ) + { + User::Leave( KErrNotReady ); + } + + TRAPD( err, DoStartL() ); + if ( err != KErrNone ) + { + DoStop(); + User::Leave( err ); + } + + iStarted = ETrue; + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::Stop() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::Stop() + { + //notify observers from cancel + StopAndNotifyObserversFromError( KErrCancel ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::AddObserverL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::AddObserverL( + MIMPSConnUiConnectionModeObserver* aObserver ) + { + __ASSERT_ALWAYS( aObserver, + CnUiPanicOrLeaveL( EIMPSConn_NULLPtr, + KErrArgument ) ); + + iObserverArray.AddObserverL( aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::RemoveObserver() +// ----------------------------------------------------------------------------- +// +TInt CIMPSConnUiConnectionModeNotifierImp::RemoveObserver( + MIMPSConnUiConnectionModeObserver* aObserver ) + { + return iObserverArray.RemoveObserver( aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::ConnectionModeByCategoryL() +// ----------------------------------------------------------------------------- +// +TIMPSConnectionModeEvent CIMPSConnUiConnectionModeNotifierImp::ConnectionModeByCategoryL( + TIMPSConnectionModeEvent aModeEventCateqory ) + { + return iConnModeHandler->ConnectionModeL( iClient, aModeEventCateqory ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::StopAndNotifyObserversFromError() +// from MCnUiConnModeObserver +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::HandleConnModeChange( + TIMPSConnectionClient /*aRequestedClient*/, + TIMPSConnectionModeEvent aConnMode ) + { + NotifyObserversFromEvent( aConnMode ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::DoStartL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::DoStartL() + { + iConnModeHandler->NotifyConnectionModeChangesL( this, iClient ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::DoStop() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::DoStop() + { + iConnModeHandler->CancelConnectionModeNotify(); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::Dying() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::Dying() + { + iDying = ETrue; + if ( iStarted ) + { + iStarted = EFalse; + DoStop(); + } + } + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::NotifyObserversFromEvent() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::NotifyObserversFromEvent( + TIMPSConnectionModeEvent aEvent ) + { + //if not running, don't notify the clients + if ( !iStarted ) + { + return; + } + + iObserverArray.NotifyObservers( *this, aEvent ); + } + + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::StopAndNotifyObserversFromError() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::StopAndNotifyObserversFromError( TInt aError ) + { + //if not running, don't notify the clients + if ( !iStarted ) + { + return; + } + + //Error propagating from the underlying implementation + //causes the notifier to stop. However, flag & actual + //stopping must be done before notifying the clients + //since some client may wan't to restart this notifier + //in the notification callback... + + //Also the state must be set to "not started" before + //actual stopping since the stopping of some event + //sources cause further KErrCancel events + //(==>those will be filtered on !started check on above.) + iStarted = EFalse; + DoStop(); + + //do the notify + iObserverArray.NotifyObserversFromError( *this, aError ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::MediateNotifyL() +// From MGenObserverNotifyMediator +// Forwards handling to pre-registered mediator function. +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::MediateNotifyL( + MIMPSConnUiConnectionModeObserver& aObserverToNotify, + TIMPSConnectionModeEvent& aNotifyData ) + { + aObserverToNotify.HandleConnectionModeEventL( &iInterface, aNotifyData ); + } + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::MediateNotifyError() +// From MGenObserverNotifyMediator +// Forwards any error propagated from MediateNotifyL() to +// observer handle error. +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::MediateNotifyError( + MIMPSConnUiConnectionModeObserver& aObserverToNotify, + TInt aLeaveError ) + { + aObserverToNotify.HandleConnectionModeEventNotifyError( &iInterface, aLeaveError ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionModeNotifierImp::MediateError() +// From MGenObserverNotifyMediator +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionModeNotifierImp::MediateError( + MIMPSConnUiConnectionModeObserver& aObserverToNotify, + TInt aError ) + { + aObserverToNotify.HandleConnectionModeEventNotifyError( &iInterface, aError ); + } + + +// End of File +