diff -r 000000000000 -r 094583676ce7 wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiBaseControlContext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiBaseControlContext.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,345 @@ +/* +* 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: Basic control context. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include + +#include "CCnUiBaseControlContext.h" +#include "CCnUiSapStoreProxy.h" +#include "CCnUiCntrlStepDriver.h" + +#include "MCnUiClientPlugin.h" +#include "MCnUiSignaller.h" +#include "MCnUiConnModeHandler.h" +#include "MCnUiGlobalNotificationUiFacade.h" + +#include "CCnUiAALoginCntrlStep.h" +#include "CCnUiAALogoutCntrlStep.h" + +#include "IMPSCommonUiDebugPrint.h" +#include "impspresenceconnectionuiconstsng.h" + + +// ================= MEMBER FUNCTIONS ======================= +// Two-phased constructor. +CCnUiBaseControlContext* CCnUiBaseControlContext::NewLC( TIMPSConnectionClient aClient, + CCnUiSapStoreProxy& aSapStoreProxy, + MCnUiConnectionHandler& aConnHandler ) + { + CCnUiBaseControlContext* self = new ( ELeave ) CCnUiBaseControlContext( aClient, + aSapStoreProxy, + aConnHandler ); + + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + + +// Destructor +CCnUiBaseControlContext::~CCnUiBaseControlContext() + { + //static resources + delete iSignaller; + delete iConnModeHandler; + + //dynamic resources + delete iPluginPEC; + delete iPluginIM; + delete iGNUI; + + //finally, release the SAP store, if it was needed & created during this + //operation + iSapStoreProxy.ReleaseOwnedSapStore(); + + delete iAASessionSlotID; + delete iAASessionSlot; + } + + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CCnUiBaseControlContext::CCnUiBaseControlContext( TIMPSConnectionClient aClient, + CCnUiSapStoreProxy& aSapStoreProxy, + MCnUiConnectionHandler& aConnHandler ) + : iControlledClient( aClient ), + iSapStoreProxy( aSapStoreProxy ), + iConnHandler( aConnHandler ) + { + } + + +// Symbian OS default constructor can leave. +void CCnUiBaseControlContext::ConstructL() + { + //static resources + iSignaller = CreateConnUiSignallerL(); + + iConnModeHandler = CreateConnModeHandlerL(); + + //dynamic resources (e.g. client plug-in's) + //are lazy initialized on the fly when needed + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::DoAALoginL() +// ----------------------------------------------------------------------------- +// +TInt CCnUiBaseControlContext::DoAALoginL( TBool aShowDetailedError ) + { + IMPSCUI_DP( D_IMPSCUI_LIT( "CCnUiBaseControlContext::DoAALoginL( %d )" ), aShowDetailedError ); + CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC(); + CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC(); + + CPEngNWSessionSlotID2* tempID = CPEngNWSessionSlotID2::NewL(); + delete iAASessionSlotID; + iAASessionSlotID = tempID; + + driver->AppendStepL( CCnUiAALoginCntrlStep::NewLC( *this, + *sap, + aShowDetailedError, + *iAASessionSlotID ) ); + CleanupStack::Pop(); // CCnUiStepAALoginControl instance + + //and run + TInt status = driver->ExecuteL(); + CleanupStack::PopAndDestroy( 2 ); //driver & sap + if ( status == KErrNone ) + { + CPEngNWSessionSlot2* tempSlot = CPEngNWSessionSlot2::NewL( *iAASessionSlotID ); + delete iAASessionSlot; + iAASessionSlot = tempSlot; + iAASessionSlot->OpenNWPresenceSessionOwnership(); + } + return status; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::DoAALogoutL() +// ----------------------------------------------------------------------------- +// +TInt CCnUiBaseControlContext::DoAALogoutL( TBool aIsScheduled ) + { + IMPSCUI_DP( D_IMPSCUI_LIT( "CCnUiBaseControlContext::DoAALogoutL( %d )" ), aIsScheduled ); + CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC(); + CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC(); + + CPEngNWSessionSlotID2* tempSlot = GetActiveNWSessionSlotIDL( iControlledClient ); + delete iAASessionSlotID; + iAASessionSlotID = tempSlot; + + driver->AppendStepL( CCnUiAALogoutCntrlStep::NewLC( *this, + *sap, + aIsScheduled, + *iAASessionSlotID ) ); + CleanupStack::Pop(); // CCnUiAALogoutCntrlStep instance + + //and run + TInt status = driver->ExecuteL(); + CleanupStack::PopAndDestroy( 2 ); //driver & sap + if ( status == KErrNone ) + { + if ( iAASessionSlot ) + { + iAASessionSlot->CloseNWPresenceSessionOwnership(); + } + } + return status; + } + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::ConnHandler() +// ----------------------------------------------------------------------------- +// +MCnUiConnectionHandler& CCnUiBaseControlContext::ConnHandler() + { + return iConnHandler; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::Signaller() +// ----------------------------------------------------------------------------- +// +MCnUiSignaller& CCnUiBaseControlContext::Signaller() + { + return *iSignaller; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::ConnModeHandler() +// ----------------------------------------------------------------------------- +// +MCnUiConnModeHandler& CCnUiBaseControlContext::ConnModeHandler() + { + return *iConnModeHandler; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::ControlledClient() +// ----------------------------------------------------------------------------- +// +TIMPSConnectionClient CCnUiBaseControlContext::ControlledClient() + { + return iControlledClient; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::SapStoreL() +// ----------------------------------------------------------------------------- +// +CIMPSSAPSettingsStore& CCnUiBaseControlContext::SapStoreL() + { + return iSapStoreProxy.SapStoreL(); + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::ClientPluginL() +// ----------------------------------------------------------------------------- +// +MCnUiClientPlugin& CCnUiBaseControlContext::ClientPluginL( + TIMPSConnectionClient aClient, + CPEngNWSessionSlotID2& aNWSessionSlotID, + TBool aRefreshPlugin /* = EFalse */ ) + { + MCnUiClientPlugin* matchedPlugin = NULL; + + switch ( aClient ) + { + case EIMPSConnClientPEC: + { + if ( !iPluginPEC ) + { + iPluginPEC = CreateClientPluginL( EIMPSConnClientPEC, aNWSessionSlotID ); + } + matchedPlugin = iPluginPEC; + break; + } + + case EIMPSConnClientIM: + { + if ( !iPluginIM || aRefreshPlugin ) + { + MCnUiClientPlugin* tempPlugin = + CreateClientPluginL( EIMPSConnClientIM, aNWSessionSlotID ); + delete iPluginIM; + iPluginIM = tempPlugin; + } + matchedPlugin = iPluginIM; + break; + } + + default: + { + User::Leave( KErrUnknown ); + break; + } + } + + return *matchedPlugin; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::GlobalNotificationUiL() +// ----------------------------------------------------------------------------- +// +MCnUiGlobalNotificationUiFacade& CCnUiBaseControlContext::GlobalNotificationUiL() + { + if ( !iGNUI ) + { + iGNUI = CreateGlobalNotificationUiFacadeL(); + } + + return *iGNUI; + } + + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::GetActiveNWSessionSlotIDL() +// +// ----------------------------------------------------------------------------- +// +CPEngNWSessionSlotID2* CCnUiBaseControlContext::GetActiveNWSessionSlotIDL( + TIMPSConnectionClient aClient ) + { + CPEngNWSessionSlotManager2* slotManager = CPEngNWSessionSlotManager2::NewLC(); + + CPEngNWSessionSlotID2* pattern = CPEngNWSessionSlotID2::NewLC(); + pattern->SetServiceAddressMatchAnyL(); + pattern->SetUserIdMatchAnyL(); + if ( aClient == EIMPSConnClientPEC ) + { + pattern->SetAppIdL( KPEngAppIdPEC ); + } + else + { + pattern->SetAppIdL( KPEngAppIdIM ); + } + + RPointerArray< CPEngNWSessionSlotID2 > array; + User::LeaveIfError( slotManager->GetNWSessionSlots( array, + *pattern, + EPEngNWPresenceSessionOpen ) ); + CleanupStack::PopAndDestroy( 2, slotManager ); // pattern, slotManager + CleanupStack::PushL( TCleanupItem( DestroyCloseModelArray, &array ) ); + + + CPEngNWSessionSlotID2* slotID = NULL; + + if ( array.Count() > 0 ) + { + // only one active slot per application at the moment + CPEngNWSessionSlotID2* tempSlotID = array[ 0 ]; + + slotID = tempSlotID->CloneL(); + } + else + { + // not found + User::Leave( KErrNotFound ); + } + CleanupStack::PopAndDestroy(); + return slotID; + } + +// ----------------------------------------------------------------------------- +// CCnUiBaseControlContext::DestroyCloseModelArray() +// +// ----------------------------------------------------------------------------- +// +void CCnUiBaseControlContext::DestroyCloseModelArray( TAny* aObject ) + { + reinterpret_cast< RPointerArray< CPEngNWSessionSlotID2 >* >( aObject )->ResetAndDestroy(); + } + +// End of File + +