wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiUiControlContext.cpp
changeset 0 094583676ce7
--- /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
+
+