--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiUiControlContext.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,533 @@
+/*
+* 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: UI control context implementation.
+*
+*/
+
+// INCLUDE FILES
+#include <E32std.h>
+#include <CIMPSSAPSettings.h>
+#include <mimpsconnprocessobserverng.h>
+#include <CPEngNWSessionSlotID2.h>
+#include <CPEngNWSessionSlotManager2.h>
+#include <PEngPresenceEngineConsts2.h>
+#include <IMPSConnectionUiNG.rsg>
+#include <BarsRead.h>
+#include <coemain.h>
+#include <e32property.h>
+
+#include "CCnUiUiControlContext.h"
+#include "MCnUiUiFacade.h"
+
+
+//steps & driver
+#include "CCnUiCntrlStepDriver.h"
+#include "CCnUiLoginSAPSelectUiCntrlStep.h"
+#include "CCnUiLoginUiCntrlStep.h"
+#include "CCnUiLogoutUiCntrlStep.h"
+#include "CCnUiNWDisconnectUiCntrlStep.h"
+#include "CCnUiReconnectAllUiCntrlStep.h"
+#include "CCnUiAppExitLogoutUiCntrlStep.h"
+
+#include "ccnuiroamingcntrlstep.h"
+#include "IMPSUIDDefs.h"
+#include "MIMPSSharedData.h"
+
+#include "IMPSCommonUiDebugPrint.h"
+#include "variantkeys.h"
+
+/**
+ * Private helper class to manage process
+ * observer notifying.
+ * @since 2.1
+ */
+class TProcessObserverProxy : public MCnUiConnProcessObserverProxy
+ {
+ public: //constructor
+
+ /**
+ * C++ constructor.
+ * @param aObserver The process observer, can be NULL
+ * @param aProcessUi The generic process UI, can be NULL
+ */
+ TProcessObserverProxy( MIMPSConnProcessObserver* aObserver,
+ MIMPSConnProcessUi* aProcessUi );
+
+ public: //Methods from MIMPSConnProcessObserverProxy
+
+ /**
+ * From MIMPSConnProcessObserverProxy
+ *
+ * Implements the observer SAP access
+ * notification.
+ *
+ * @since 2.1
+ * @param aAccessedSap The accessed SAP.
+ */
+ void NotifyAccessingSapL( const CIMPSSAPSettings& aAccessedSap );
+
+ private: //data
+
+ ///<Access controlled observer, not owned
+ MIMPSConnProcessObserver* iObserver;
+
+ //generic process UI, not owned
+ MIMPSConnProcessUi* iProcessUi;
+ };
+
+
+
+// =========== TPROCESSOBSERVERPROXY MEMBER FUNCTIONS =============
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+TProcessObserverProxy::TProcessObserverProxy( MIMPSConnProcessObserver* aObserver,
+ MIMPSConnProcessUi* aProcessUi )
+ : iObserver( aObserver ),
+ iProcessUi( aProcessUi )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// TProcessObserverProxy::NotifyAccessingSapL()
+// From MIMPSConnProcessObserverProxy
+// -----------------------------------------------------------------------------
+//
+void TProcessObserverProxy::NotifyAccessingSapL( const CIMPSSAPSettings& aAccessedSap )
+ {
+ if ( iObserver )
+ {
+ //NOTE!! Its on observers responsibility to handle NULL ui...
+ iObserver->HandleSapAccessEventEventL( aAccessedSap.SAPName(),
+ aAccessedSap.SAPAddress(),
+ iProcessUi );
+ }
+ }
+
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+// Two-phased constructor.
+CCnUiUiControlContext* CCnUiUiControlContext::NewLC( TIMPSConnectionClient aClient,
+ CCnUiSapStoreProxy& aSapStoreProxy,
+ MCnUiConnModeRewaker& aConnModeRewaker,
+ MCnUiConnectionHandler& aConnHandler,
+ MIMPSConnProcessObserver* aObserver )
+ {
+ CCnUiUiControlContext* self = new ( ELeave ) CCnUiUiControlContext( aClient,
+ aSapStoreProxy,
+ aConnModeRewaker,
+ aConnHandler );
+ CleanupStack::PushL( self );
+ self->ConstructL( aObserver );
+
+ return self;
+ }
+
+
+// Destructor
+CCnUiUiControlContext::~CCnUiUiControlContext()
+ {
+ delete iProcessObserverProxy;
+ delete iUi;
+ }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCnUiUiControlContext::CCnUiUiControlContext( TIMPSConnectionClient aClient,
+ CCnUiSapStoreProxy& aSapStoreProxy,
+ MCnUiConnModeRewaker& aConnModeRewaker,
+ MCnUiConnectionHandler& aConnHandler )
+ : CCnUiBaseControlContext( aClient, aSapStoreProxy, aConnHandler ),
+ iConnModeRewaker( aConnModeRewaker )
+ {
+ }
+
+
+// Symbian OS default constructor can leave.
+void CCnUiUiControlContext::ConstructL( MIMPSConnProcessObserver* aObserver )
+ {
+ CCnUiBaseControlContext::ConstructL();
+ iUi = CreateUiFacadeL();
+
+ iProcessObserverProxy = new ( ELeave ) TProcessObserverProxy( aObserver,
+ &iUi->ConnProcessUi() );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::DoLoginL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::DoLoginL( TIMPSLoginType aLoginType,
+ CPEngNWSessionSlotID2& aNWSessionSlotID,
+ CIMPSSAPSettings* aSap /*= NULL*/ , TBool aLastLoginSap /*=EFalse*/ )
+ {
+
+ if ( aLastLoginSap && aSap )
+ {
+ // if user want to connect to the last logged in server
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ // Check for indication variant.
+ // Show WAP registration query, if variated so
+ TBool showRoamingWarning = IntResourceValueL( RSC_CHAT_VARIATION_IMPSCU_ROAMING_WARNING );
+
+ //add control steps
+ if ( showRoamingWarning )
+ {
+ // Check if property is set
+ RProperty roaming;
+ TBool isRoaming;
+ User::LeaveIfError( roaming.Get( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoaming, isRoaming ) );
+
+ if ( isRoaming )
+ {
+ TBool isRoamingDlgShown( EFalse );
+ User::LeaveIfError( roaming.Get( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoamingDlgShown, isRoamingDlgShown ) );
+
+ if ( !isRoamingDlgShown )
+ {
+ driver->AppendStepL( CCnUiRoamingCntrlStep::NewLC() );
+ CleanupStack::Pop(); // CCnUiRoamingCntrlStep instance
+ }
+ }
+ }
+
+ driver->AppendStepL( CCnUiLoginSAPSelectUiCntrlStep::NewLC( *this, *aSap, aLoginType, aLastLoginSap ) );
+ CleanupStack::Pop(); // CCnUiLoginSAPSelectUiCntrlStep instance
+
+ TIMPSConnectionClient client = ControlledClient();
+
+ driver->AppendStepL( CCnUiLoginUiCntrlStep::NewLC( *this,
+ *aSap,
+ aLoginType,
+ aNWSessionSlotID,
+ client ) );
+ CleanupStack::Pop(); // CCnUiLoginUiCntrlStep instance
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 1 ); //1 driver
+ }
+ else
+ {
+ // user want to connect for default one
+ CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ // Check for indication variant.
+ // Show WAP registration query, if variated so
+ TBool showRoamingWarning = IntResourceValueL( RSC_CHAT_VARIATION_IMPSCU_ROAMING_WARNING );
+
+ //add control steps
+ if ( showRoamingWarning )
+ {
+ // Read the property value if user is in
+ RProperty roaming;
+ TBool isRoaming;
+ User::LeaveIfError( roaming.Get( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoaming, isRoaming ) );
+
+ // Check if property is set
+ if ( isRoaming )
+ {
+ TBool isRoamingDlgShown( EFalse );
+ User::LeaveIfError( roaming.Get( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoamingDlgShown, isRoamingDlgShown ) );
+
+ if ( !isRoamingDlgShown )
+ {
+ driver->AppendStepL( CCnUiRoamingCntrlStep::NewLC() );
+ CleanupStack::Pop(); // CCnUiRoamingCntrlStep instance
+ }
+ }
+ }
+
+ driver->AppendStepL( CCnUiLoginSAPSelectUiCntrlStep::NewLC( *this, *sap, aLoginType ) );
+ CleanupStack::Pop(); // CCnUiLoginSAPSelectUiCntrlStep instance
+
+ TIMPSConnectionClient client = ControlledClient();
+
+ driver->AppendStepL( CCnUiLoginUiCntrlStep::NewLC( *this,
+ *sap,
+ aLoginType,
+ aNWSessionSlotID,
+ client ) );
+ CleanupStack::Pop(); // CCnUiLoginUiCntrlStep instance
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 2 ); //2 == sap & driver
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::IntResourceValueL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::IntResourceValueL( TInt aResourceId )
+ {
+ TInt value( KErrNone );
+ TResourceReader reader;
+ CCoeEnv* coeEnv = CCoeEnv::Static();
+ coeEnv->CreateResourceReaderLC( reader, aResourceId );
+ value = ResourceUtils::ReadTInt32L( reader );
+ CleanupStack::PopAndDestroy(); // reader
+ return value;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::DoLogoutL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::DoLogoutL( const CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ //add control steps
+ driver->AppendStepL( CCnUiLogoutUiCntrlStep::NewLC( *this, *sap, aNWSessionSlotID ) );
+ CleanupStack::Pop(); // CCnUiLogoutUiCntrlStep instance
+
+ // Check if warning feature is present
+ TBool showRoamingWarning = IntResourceValueL( RSC_CHAT_VARIATION_IMPSCU_ROAMING_WARNING );
+ if ( showRoamingWarning )
+ {
+ RProperty roaming;
+ User::LeaveIfError( roaming.Set( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoamingDlgShown, EFalse ) );
+ }
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 2 ); //2 == sap & driver
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::DoHandleApplicationExitL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::DoHandleApplicationExitL(
+ TIMPSExitType aExitType,
+ const CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ //add control steps
+ driver->AppendStepL( CCnUiAppExitLogoutUiCntrlStep::NewLC( *this,
+ *sap,
+ aExitType,
+ aNWSessionSlotID ) );
+ CleanupStack::Pop(); // CCnUiAppExitLogoutUiCntrlStep instance
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 2 ); //2 == sap & driver
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::Ui()
+// From MCnUiUiControlContext
+// -----------------------------------------------------------------------------
+//
+MCnUiUiFacade& CCnUiUiControlContext::Ui()
+ {
+ return *iUi;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ProcessObserverProxy()
+// From MCnUiUiControlContext
+// -----------------------------------------------------------------------------
+//
+MCnUiConnProcessObserverProxy& CCnUiUiControlContext::ProcessObserverProxy()
+ {
+ return *iProcessObserverProxy;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ConnModeRewaker()
+// From MCnUiUiControlContext
+// -----------------------------------------------------------------------------
+//
+MCnUiConnModeRewaker& CCnUiUiControlContext::ConnModeRewaker()
+ {
+ return iConnModeRewaker;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::SubOpDisconnectAllL()
+// From MCnUiUiControlContext
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::SubOpDisconnectAllL(
+ CIMPSSAPSettings& aDisconnectedSap,
+ RArray< TIMPSConnectionClient >& aDisconnectedClients,
+ const CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ //add control steps
+ driver->AppendStepL( CCnUiNWDisconnectUiCntrlStep::NewLC( *this,
+ aDisconnectedSap,
+ aDisconnectedClients,
+ EFalse,
+ aNWSessionSlotID ) );
+ CleanupStack::Pop(); // CCnUiNWDisconnectUiCntrlStep instance
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 1 ); //1 == driver
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::SubOpReconnectAllL()
+// From MCnUiUiControlContext
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::SubOpReconnectAllL( CIMPSSAPSettings& aReconnectedSap,
+ CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+ TIMPSConnectionClient client = ControlledClient();
+ //add control steps
+ driver->AppendStepL( CCnUiReconnectAllUiCntrlStep::NewLC( *this,
+ aReconnectedSap,
+ client,
+ aNWSessionSlotID ) );
+ CleanupStack::Pop(); // CCnUiReconnectAllUiCntrlStep instance
+
+ //and run
+ return ExecuteDriverInUiLX( *driver, 1 ); //1 == driver
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ConnHandler()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+MCnUiConnectionHandler& CCnUiUiControlContext::ConnHandler()
+ {
+ return CCnUiBaseControlContext::ConnHandler();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::Signaller()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+MCnUiSignaller& CCnUiUiControlContext::Signaller()
+ {
+ return CCnUiBaseControlContext::Signaller();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ConnModeHandler()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+MCnUiConnModeHandler& CCnUiUiControlContext::ConnModeHandler()
+ {
+ return CCnUiBaseControlContext::ConnModeHandler();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ControlledClient()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+TIMPSConnectionClient CCnUiUiControlContext::ControlledClient()
+ {
+ return CCnUiBaseControlContext::ControlledClient();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::SapStoreL()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+CIMPSSAPSettingsStore& CCnUiUiControlContext::SapStoreL()
+ {
+ return CCnUiBaseControlContext::SapStoreL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ClientPluginL()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+MCnUiClientPlugin& CCnUiUiControlContext::ClientPluginL( TIMPSConnectionClient aClient,
+ CPEngNWSessionSlotID2& aNWSessionSlotID,
+ TBool aRefreshPlugin /* = EFalse */ )
+ {
+ return CCnUiBaseControlContext::ClientPluginL( aClient, aNWSessionSlotID, aRefreshPlugin );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ClientPluginL()
+// Forward to base class.
+// -----------------------------------------------------------------------------
+//
+MCnUiGlobalNotificationUiFacade& CCnUiUiControlContext::GlobalNotificationUiL()
+ {
+ return CCnUiBaseControlContext::GlobalNotificationUiL();
+ }
+
+// -----------------------------------------------------------------------------
+// CIMPSPresenceConnectionUiImp::DisplayDomainSelectionQueryL
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::DisplayDomainSelectionQueryL(
+ TDes& aSelectedDomain,
+ CIMPSSAPSettings* aSap )
+ {
+ MCnUiUiFacade* facade = CreateUiFacadeL();
+ CleanupDeletePushL( facade );
+ TInt retVal = facade->DisplayDomainSelectionQueryL( aSelectedDomain, aSap );
+ CleanupStack::PopAndDestroy( facade );
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CCnUiUiControlContext::ExecuteDriverInUiLX()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiUiControlContext::ExecuteDriverInUiLX( CCnUiCntrlStepDriver& aDriver,
+ TInt aPopAndDestroyCount )
+ {
+ iUi->CommandAbsorbOnLC();
+ TInt status = aDriver.ExecuteL();
+ CleanupStack::PopAndDestroy( 1 + aPopAndDestroyCount ); //Command absorber + objects from outer level
+ return status;
+ }
+
+
+// End of File
+
+