--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvcommandutils/Inc/CCASessionHandlerCmd.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,465 @@
+/*
+* Copyright (c) 2006 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 session handling (login, logout, etc.)
+*
+*/
+
+
+#ifndef CCASESSIONHANDLERCMD_H
+#define CCASESSIONHANDLERCMD_H
+
+// INCLUDES
+#include "PublicEngineDefinitions.h"
+#include "MCASessionHandlerCmd.h"
+
+#include <e32base.h>
+#include <mimpsconnuipresenceeventobserverng.h>
+#include <ImpsServices.h>
+#include <mimpsconnprocessobserverng.h>
+#include <badesca.h>
+#include <WVSettingsSharedDataNG.h>
+#include <PEngWVServices2.h>
+#include "MCABackgroundTaskObserver.h"
+#include "MCALoginRefreshObserverPC.h"
+// FORWARD DECLARATIONS
+class CIMPSPresenceConnectionUi;
+class CIMPSConnUiClntFilteredPresEventNotifier;
+class CIMPSSAPSettings;
+class MProfileEngine;
+class CPEngNWSessionSlotID2;
+//class CCAReactiveAuthorization; //for ref. later
+class MCAContactFetchObserver;
+class MCAServiceStateObserver;
+class MCAProcessManager;
+class MCAUiLoginCmdCB;
+
+
+// CLASS DECLARATION
+
+/**
+* Network session handling (login, logout, etc.)
+*
+*/
+class CCASessionHandlerCmd : public CBase, public MIMPSConnUiPresenceEventObserver,
+ public MIMPSConnProcessObserver,
+ public MCASessionHandlerCmd,
+ public MCABackGroundTaskObserver
+
+ {
+ public: // Enums
+ /**
+ * Use to ask if a feature is supported or not
+ * EGroup: Group feature
+ * ESearch: Search feature
+ * EInvite: Invite feature
+ * EBlock: Block feature
+ * EAttrList: Attribute List Function (defined in Preseence Engine)
+ * ECLIMod: Support for create contact list
+ * EGroupRejectList: Support for reject user(s) from group
+ */
+ enum TSupportedFeature
+ {
+ EGroup = 1,
+ ESearch,
+ EInvite,
+ EBlock,
+ EAttrList,
+ ECLIMod,
+ EGroupRejectList
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aProcessManager Reference to process Manager component
+ * @param aUiLoginCmdCB Reference to UI Login CallBack interface
+ */
+ static CCASessionHandlerCmd* NewL( MCAProcessManager& aProcessManager,
+ MCAUiLoginCmdCB& aUiLoginCmdCB );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCASessionHandlerCmd();
+
+ public: // New functions
+
+
+
+ /**
+ * Is IM logged to network server
+ *
+ * @return Is IM online
+ */
+ TBool IsLoggedIn() const;
+
+ /**
+ * Executes login-sequence.
+ *
+ * @param aAskConfirmation if true yes/no confirmation
+ * qtn_chat_need_to_login is shown.
+ * @param aIsStartupLogin if true login call is done during
+ * application startup
+ * @return Was operation successful
+ */
+ TBool LoginL( TBool aAskConfirmation = ETrue,
+ TBool aIsStartupLogin = EFalse );
+
+ /**
+ * Executes logout-sequence.
+ *
+ * @return Was operation successful
+ */
+ TBool LogoutL();
+
+
+
+
+ /**
+ * Returns is the given feature supported by the session
+ *
+ * @param aFeature Feature
+ * @return Is supported
+ */
+ TBool IsSupported( TSupportedFeature aFeature );
+
+ /**
+ * @return Current SAP data
+ */
+ CIMPSSAPSettings* CurrentSAPLC();
+
+ /**
+ * Checks if phone offline profile is phone current profile.
+ *
+ * @return ETrue if off-line profile is phone current profile
+ */
+ TBool IsOfflineProfileOn() const;
+
+ /**
+ * Fetches the contact lists
+ * @param aAlwaysOnlineActive determines if login was made with AO or
+ * manually. This parameter is used only if background handling
+ * is active.
+ * ETrue: Login was done with AlwaysOnline
+ * EFalse: Login was done with Manual login type
+ */
+ void FetchContactListsL( TBool aAlwaysOnlineActive );
+
+ /**
+ * @return The current network session slot id
+ */
+ const CPEngNWSessionSlotID2& NetworkSessionSlotIDL();
+
+ /**
+ * Does the application exit
+ */
+ void DoApplicationExitL();
+
+ public: //From Base Class MCASessionHandlerCmd
+ /**
+ * Add given observer to observer list
+ * @param aObserver to add
+ * @return none
+ */
+ void AddContactFetchObserverL( MCAContactFetchObserver* aObserver );
+
+ /**
+ * Remove given observer from observer list
+ * @param aObserver observer to remove
+ * @return none
+ */
+ void RemoveContactFetchObserver( MCAContactFetchObserver* aObserver );
+
+ /**
+ * Add given observer to observer list
+ * @param aObserver to add
+ * @return none
+ */
+ void AddServiceStateObserversL( MCAServiceStateObserver* aObserver );
+
+ /**
+ * Remove given observer from observer list
+ * @param aObserver observer to remove
+ * @return none
+ */
+ void RemoveServiceStateObservers( MCAServiceStateObserver* aObserver );
+
+ /**
+ * Check if contact fetching is done
+ * @return ETrue if done, EFalse otherwise
+ */
+ TBool IsFetchDone();
+
+ /**
+ * @return ETrue if the contact list has been refreshed
+ * during this session
+ */
+ TBool ContactsRefreshed() const;
+
+ /**
+ * Gets the IsAlreadyLoggedOut flag value
+ * @return ETrue if Already Logged Out
+ */
+ TBool IsAlreadyLoggedOut() const;
+
+
+ /**
+ * Sets the contact refreshed flag
+ * @param aRefreshed ETrue if the contact list has been refreshed
+ */
+ void SetContactsRefreshed( TBool aRefreshed );
+
+
+ /**
+ * Checks if the background login is running.
+ * @return ETrue if the background login is running.
+ */
+ TBool IsBackgroundTaskRunning() const;
+
+ protected: // Functions from base classes
+
+ /**
+ * @see MIMPSConnUiPresenceEventObserver
+ */
+ void HandlePresenceEventL( CIMPSConnUiPresEventNotifier* aNotifier,
+ const CPEngNWSessionSlotID2& aSessionSlotID,
+ TIMPSConnectionClient aClient,
+ TIMPSPresenceServiceEvent aEvent );
+
+ /**
+ * @see MIMPSConnUiPresenceEventObserver
+ */
+ void HandlePresenceEventNotifyError(
+ CIMPSConnUiPresEventNotifier* aNotifier,
+ TInt aError );
+
+ private: // From MIMPSConnProcessObserver
+
+ /**
+ * @see MIMPSConnProcessObserver
+ */
+ void HandleSapAccessEventEventL( const TDesC& aServerName,
+ const TDesC& aServerURL,
+ MIMPSConnProcessUi* aConnProcessUi );
+
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CCASessionHandlerCmd( MCAProcessManager& aProcessManager,
+ MCAUiLoginCmdCB& aUiLoginCmdCB );
+
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Gets the current login type
+ * @return the login type
+ */
+ TIMPSLoginType LoginType();
+
+ /**
+ * CIdle-kind of function for background task implementation
+ * @param aInstance Instance of this class
+ * @return Need for recall
+ */
+ static TInt BackgroundTasks( TAny *aInstance );
+
+ /**
+ * Real implementation of background tasks
+ * @return Need for recall
+ */
+ TInt DoBackgroundTasks();
+
+ /**
+ * CIdle-kind of function for background task implementation
+ * @param aInstance Instance of this class
+ * @return Need for recall
+ */
+ static TInt BackgroundSelect( TAny *aInstance );
+
+ /**
+ * Real implementation of background tasks
+ */
+ void DoBackgroundSelectL();
+
+ /**
+ * Gets available services for session
+ *
+ * @return Does the screen need refreshing, i.e. if some dynamic UI
+ * features have changed.
+ */
+ TBool GetServicesL();
+
+ /**
+ * Notifies engine about changes network state
+ *
+ * @param aState New state
+ */
+ void NotifyEngineL( TNetworkState aState,
+ CPEngNWSessionSlotID2* aSessionSlotID = NULL );
+
+ /**
+ * Closes all open conversations
+ */
+ void CloseConversations();
+
+ /**
+ * Update the first login toggle in the SAP settings.
+ */
+ void UpdateFirstLoginL();
+ /**
+ * Updates the application settings according to current
+ * variation.
+ *
+ */
+ void UpdateDefaultSettingsL();
+
+ /**
+ * Notify observers of completeted fetch process
+ * @param aError result of contact fetch
+ * @return none
+ */
+ void NotifyContactFetchObserversL( TInt aError );
+
+ /**
+ * Notify observers of service state change
+ * @param aEvent Presence event
+ * @return none
+ */
+ void NotifyServiceStateObserversL( TIMPSPresenceServiceEvent aEvent );
+
+ /**
+ * To know whether Background task has started
+ * @return TBool
+ */
+ TBool IsBackgroundTaskPendingL();
+
+ /**
+ * DoLogoutL
+ * @return TBool
+ */
+ TBool DoLogoutL();
+
+ /**
+ * WaitToCompleteBackgroundTask
+ * Pop the wait note processing
+ * @return ETrue
+ */
+ TBool WaitToCompleteBackgroundTaskL();
+
+
+ public :
+
+ /**
+ * Notify observers of background state change
+ * MCABackGroundTaskObserver
+ * @param aCompleted is state
+ * @return none
+ */
+ void HandleBackGroundTaskCompleteL( TBool aCompleted ) ;
+
+
+ private: // Data
+
+
+ // Owns. Connection UI
+ CIMPSPresenceConnectionUi* iConnUI;
+
+ // Owns. Event notifier from ConnectionUI
+ CIMPSConnUiClntFilteredPresEventNotifier* iConnUIEventNotifier;
+
+ // Negotiated services
+ TPEngWVCspServicesTree2 iImpsServices;
+
+ // Last state of application
+ TIMPSPresenceServiceEvent iLastState;
+
+ // Owns. CIdle to launch login
+ CIdle* iIdle;
+
+ // Owns. CIdle to launch contact list selectiong
+ CIdle* iSelectIdle;
+
+ // Doesn't own. Profile API checking if offline profile is on
+ MProfileEngine* iProfileApi;
+
+ // contact list refresh flag
+ TBool iContactsRefreshed;
+
+ // owns. SAP settings of previously logged in server
+ CIMPSSAPSettings* iPreviousSAP;
+
+ // For example phone call when chat is online.
+ TBool iTemporaryNetworkDown;
+
+
+ // if the login or logout process is ongoing
+ TBool iLogging;
+
+ // if application is already logged in and we are
+ // fetching lists, this is set.
+
+ // Network session slot ID
+ CPEngNWSessionSlotID2* iSessionSlotID;
+
+
+
+ // Was the presence initialization succesfull in construction phase.
+ TBool iPresenceInitializationSuccesfull;
+
+ // current login is the first one to this server
+ // (set by UpdateFirstLoginL)
+ TBool iCurrentLoginIsFirst;
+
+ // Observers for contact fetching process.
+ RPointerArray<MCAContactFetchObserver> iFetchObservers;
+
+ // ETrue if contacts are fetched from PEC engine
+ TBool iIsContactFetchDone;
+
+ // Observers for service state changes.
+ RPointerArray<MCAServiceStateObserver> iServiceStateObservers;
+
+ //Process manager
+ MCAProcessManager& iProcessManager;
+
+ // Background task done or not
+ TBool iBackgroundTaskPending;
+
+ //UI Login Call back Interface
+ MCAUiLoginCmdCB& iUiLoginCmdCB;
+
+ // if application is already logged out and
+ // we do not have that information yet from
+ // connection ui, we can use this flag.
+ TBool iAlreadyLoggedOut;
+
+ // wait vivible or not
+ TBool iWaitVisible;
+
+
+ TBool iBackgroundTaskRunning;
+ };
+
+#endif // CCASESSIONHANDLERCMD_H
+
+// End of File
+