diff -r 000000000000 -r 094583676ce7 wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiReconnectAllUiCntrlStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiReconnectAllUiCntrlStep.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,258 @@ +/* +* 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: Network connection restore UI control. +* +*/ + +// INCLUDE FILES +#include +#include +#include "CCnUiReconnectAllUiCntrlStep.h" + +#include "MCnUiUiControlContext.h" +#include "MCnUiUiFacade.h" +#include "MCnUiSignaller.h" +#include "MCnUiConnectionHandler.h" +#include "MCnUiClientPlugin.h" +#include "CCnUiConnOpener.h" + + +#include "CnUiErrors.h" + + + +// ================= MEMBER FUNCTIONS ======================= +// Two-phased constructor. +CCnUiReconnectAllUiCntrlStep* CCnUiReconnectAllUiCntrlStep::NewLC( + MCnUiUiControlContext& aCCntxt, + CIMPSSAPSettings& aLoginSap, + TIMPSConnectionClient aReconnectedClient, + CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + CCnUiReconnectAllUiCntrlStep* self = + new ( ELeave ) CCnUiReconnectAllUiCntrlStep( + aCCntxt, + aLoginSap, + aReconnectedClient, + aNWSessionSlotID ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// Destructor +CCnUiReconnectAllUiCntrlStep::~CCnUiReconnectAllUiCntrlStep() + { + iClientsToReConn.Reset(); + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CCnUiReconnectAllUiCntrlStep::CCnUiReconnectAllUiCntrlStep( + MCnUiUiControlContext& aCCntxt, + CIMPSSAPSettings& aLoginSap, + TIMPSConnectionClient aReconnectedClient, + CPEngNWSessionSlotID2& aNWSessionSlotID ) + : CCnUiLoginUiCntrlStep( aCCntxt, aLoginSap, aNWSessionSlotID, aReconnectedClient ), + iRequestedReconnClient( aReconnectedClient ), iNWSessionSlotID( aNWSessionSlotID ) + { + } + + +// Symbian OS default constructor can leave. +void CCnUiReconnectAllUiCntrlStep::ConstructL() + { + CCnUiLoginUiCntrlStep::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::HandleCompleteL() +// ----------------------------------------------------------------------------- +// +TCnUiHandleCompleteStatus CCnUiReconnectAllUiCntrlStep::HandleCompleteL() + { + //if there has been a client to reconnect, it has been + //the first in the count array ==> index 0 + + if ( iClientsToReConn.Count() > 0 ) + { + iClientsToReConn.Remove( 0 ); + } + + + //If there is more clients to reconnect, do so + if ( iClientsToReConn.Count() > 0 ) + { + //there is still clients to reconnect + return ECnUiRestartStep; + } + else + { + //all done + return ECnUiStepContinueTeardown; + } + } + + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::UndoStepL() +// ----------------------------------------------------------------------------- +// +void CCnUiReconnectAllUiCntrlStep::UndoStepL() + { + //nothing to undo + } + + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::DoInitLoginStepL() +// Template method +// ----------------------------------------------------------------------------- +// +TInt CCnUiReconnectAllUiCntrlStep::DoInitLoginStepL( TIMPSConnectionClient& aClient ) + { + if ( !iInitDone ) + { + //Login and thus also reconnects are connection owning so they have + //to always check for simultaneous operations + if ( iCCntxt.Signaller().OperationRunning() ) + { + ShowSimultaneousLoginOperationNoteL(); + return KCnUiErrorLoginOperationAlreadyInUse; + } + + + //initialize the reconnection array + InitNWReConnectL(); + iInitDone = ETrue; + if ( iClientsToReConn.Count() == 0 ) + { + //there isn't any clients to reconnect + return KCnUiErrorNoClientsToReconnect; + } + } + + //in all other rounds prepare the client again, + //to cope from possible sub steps. + if ( iClientsToReConn.Count() > 0 ) + { + aClient = iClientsToReConn[ 0 ]; + return ECnUiLoginInitContinue; + } + + else + { + //no more clients to logout + return KErrNone; //breaks away from RunStepL() with KErrNone + } + } + + + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::DoShowLoginStateSpecificWaitnoteL() +// ----------------------------------------------------------------------------- +// +void CCnUiReconnectAllUiCntrlStep::DoShowLoginStateSpecificWaitnoteL( + TInt aStateId, + TIMPSConnectionClient aClient ) + { + switch ( aStateId ) + { + case ECnOpenerOpeningSAPConnection: + case ECnOpenerProcessingPlugin: + case ECnOpenerClosingInterferingSAPConnection: + { + if ( !iWaitNote ) + { + //the same wait note is used + //both when opening SAP connection & + //processing plug-in stuff + if ( aClient == EIMPSConnClientIM ) + { + iWaitNote = iCCntxt.Ui().WaitNoteL( ECnUiWaitNoteReConnectingChat, + iLoginSap.SAPName(), + this ); + } + + else + { + //client is considered to be PEC + iWaitNote = iCCntxt.Ui().WaitNoteL( ECnUiWaitNoteReConnectingPEC, + iLoginSap.SAPName(), + this ); + } + } + + break; + } + + case ECnOpenerIdle: + case ECnOpenerClosingOwnedSAPConnection: + default: + { + //clear any existing wait note set by the previous + //progress steps. No wait note used during these steps. + //own waitnote container used ==> direct deletion ok. + delete iWaitNote; + iWaitNote = NULL; + + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::InitNWReConnectL() +// ----------------------------------------------------------------------------- +// +void CCnUiReconnectAllUiCntrlStep::InitNWReConnectL() + { + //internal count array + iClientsToReConn.Reset(); + + //determine is reconnection needed for given clients + //UI specification states that only those clients which + //connection mode settings is automatic are reconnected back + + MCnUiClientPlugin& clientPlugin = iCCntxt.ClientPluginL( iRequestedReconnClient, + iNWSessionSlotID ); + if ( clientPlugin.CurrentConnectionModeSettingL() == ECnUiCMAutomatic ) + { + User::LeaveIfError( iClientsToReConn.Append( iRequestedReconnClient ) ); + } + } + + +// ----------------------------------------------------------------------------- +// CCnUiReconnectAllUiCntrlStep::ShowSimultaneousLoginOperationNoteL() +// ----------------------------------------------------------------------------- +// +void CCnUiReconnectAllUiCntrlStep::ShowSimultaneousLoginOperationNoteL() + { + HBufC* serverName = NULL; + iCCntxt.Signaller().OperationDetailsL( serverName ); + + //OperationDetailsL() returns the HBufC ownership + CleanupStack::PushL( serverName ); + iCCntxt.Ui().ShowNoteL( ECnUiConnOperationAllreadyRunning, *serverName ); + CleanupStack::PopAndDestroy( serverName ); //serverName + } + + + +// End of File