diff -r 000000000000 -r 094583676ce7 wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiAppExitLogoutUiCntrlStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiAppExitLogoutUiCntrlStep.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,154 @@ +/* +* 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: Application exit logout UI control. +* +*/ + +// INCLUDE FILES +#include +#include +#include + +#include "CCnUiAppExitLogoutUiCntrlStep.h" +#include "CCnUiConnCloser.h" + +#include "MCnUiUiControlContext.h" +#include "MCnUiUiFacade.h" +#include "MCnUiClientPlugin.h" +#include "MCnUiSignaller.h" +#include "MCnUiConnectionHandler.h" +#include "MCnUiConnModeHandler.h" + +#include "CnUiErrors.h" + + + +// ================= MEMBER FUNCTIONS ======================= +// Two-phased constructor. +CCnUiAppExitLogoutUiCntrlStep* CCnUiAppExitLogoutUiCntrlStep::NewLC( + MCnUiUiControlContext& aCCntxt, + CIMPSSAPSettings& aLogoutSap, + TIMPSExitType aExitType, + const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + CCnUiAppExitLogoutUiCntrlStep* self = new ( ELeave ) CCnUiAppExitLogoutUiCntrlStep( aCCntxt, + aLogoutSap, + aExitType ); + CleanupStack::PushL( self ); + self->ConstructL( aNWSessionSlotID ); + return self; + } + + +// Destructor +CCnUiAppExitLogoutUiCntrlStep::~CCnUiAppExitLogoutUiCntrlStep() + { + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CCnUiAppExitLogoutUiCntrlStep::CCnUiAppExitLogoutUiCntrlStep( MCnUiUiControlContext& aCCntxt, + CIMPSSAPSettings& aLogoutSap, + TIMPSExitType aExitType ) + : CCnUiLogoutUiCntrlStep( aCCntxt, aLogoutSap ), + iExitType( aExitType ) + { + } + + +// Symbian OS default constructor can leave. +void CCnUiAppExitLogoutUiCntrlStep::ConstructL( const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + CCnUiLogoutUiCntrlStep::ConstructL( aNWSessionSlotID ); + } + + +// ----------------------------------------------------------------------------- +// CCnUiAppExitLogoutUiCntrlStep::HandleCompleteL() +// ----------------------------------------------------------------------------- +// +TCnUiHandleCompleteStatus CCnUiAppExitLogoutUiCntrlStep::HandleCompleteL() + { + if ( iExitType == EIMPSNormalExit ) + { + //Let the base class issue the connection restore if needed. + return CCnUiLogoutUiCntrlStep::HandleCompleteL(); + } + + //in other cases the reconnection is not done + return ECnUiStepContinueTeardown; + } + + +// ----------------------------------------------------------------------------- +// CCnUiAppExitLogoutUiCntrlStep::UndoStepL() +// ----------------------------------------------------------------------------- +// +void CCnUiAppExitLogoutUiCntrlStep::UndoStepL() + { + //nothing to undo + } + + +// ----------------------------------------------------------------------------- +// CCnUiAppExitLogoutUiCntrlStep::DoInitLogoutStepL() +// Template method +// ----------------------------------------------------------------------------- +// +TInt CCnUiAppExitLogoutUiCntrlStep::DoInitLogoutStepL( TIMPSConnectionClient& aClient ) + { + + const TIMPSConnectionClient clientId = iCCntxt.ControlledClient(); + + //what is the current client current login mode?? + //if it is something different than manual, then logout isn't needed + MCnUiClientPlugin& cPlugin = iCCntxt.ClientPluginL( clientId, *iNWSessionSlotID ); + if ( cPlugin.CurrentConnectionModeSettingL() != ECnUiCMManual ) + { + return KErrNone; //breaks away from RunStepL() with KErrNone + } + + + //Let first the base class to do its initializations & checks + //base will initialize the aClient properly to current client if logout is really needed + TInt baseInitStatus = CCnUiLogoutUiCntrlStep::DoInitLogoutStepL( aClient ); + if ( baseInitStatus != ECnUiLogoutInitContinue ) + { + //base class init wants to break here + //(there isn't no need for logout or it can't be issued) + return baseInitStatus; + } + + + + //Exit is needed + //If this normal exit case, ask confirmation from user + if ( iExitType == EIMPSNormalExit ) + { + if ( !iCCntxt.Ui().ConfirmationQueryL( ECnUiCloseConnectionToNetwork ) ) + { + //User declined the logout + return KErrCancel; + } + } + + //In other cases the logout can be carried on. + //Because the base class didn't wan't to break, + //it initialized the contexts properly. + return ECnUiLogoutInitContinue; + } + + +// End of File