diff -r 000000000000 -r 094583676ce7 wvuing/IMPSAlwaysOnlinePlugin/src/CIMPSAlwaysOnlinePluginImp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSAlwaysOnlinePlugin/src/CIMPSAlwaysOnlinePluginImp.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,450 @@ +/* +* 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: Offers the always online functionality for the Presence Engine +* and the Chat application +* +*/ + + + +#ifndef __CIMPSALWAYSONLINEPLUGINIMP_H +#define __CIMPSALWAYSONLINEPLUGINIMP_H + +// INCLUDES +#include "MPEngAOWaitObserver.h" +#include "MPEngAOCallObserver.h" +#include "MIMPSScheduleObserver.h" +#include "MPEngAONwStatusObserver.h" +#include "MIMPSSharedDataObserver.h" +#include "MIMPSSharedData.h" +#include "MIMPSReconnectNoteObserver.h" +#include "timpsaokeys.h" +#include "MPEngAODialogStatusNotifier.h" + +//#include +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CIMPSConnUiConnectionModeNotifier; +class CIMPSPresenceAAConnection; +class CPEngAOCallObserver; +class CPEngAOPluginTimer; +class CWVSAPSettings; +class CIMPSAOKeys; +class CIMPSAlwaysOnlineScheduler; +class CPEngAONwStatusObserver; +class CIMPSReconnectNoteHandler; +class CErrorUI; +class CPEngNWSessionSlotID2; +class CIMPSConnUiPresEventNotifier; +class CPEngAODialogMonitor; +class CCADialogMonitor; +class CAknGlobalMsgQuery; +/** +* The implementation for the always online plugin +* +* @lib PEngAOPlugin.lib +* @since 2.6 +*/ +class CIMPSAlwaysOnlinePluginImp : public CBase, + public MIMPSConnUiConnectionModeObserver, + public MPEngAOWaitObserver, + public MPEngAOCallObserver, + public MIMPSScheduleObserver, + public MPEngAONwStatusObserver, + public MIMPSSharedDataObserver, + public MIMPSReconnectNoteObserver, + public MPEngAODialogStatusNotifier + { + + public: // Enumerations + + /** + * Plugin implementation type + */ + enum TIMPSAOPluginImpType + { + EIMAOPluginImp = 1, + EPEngAOPluginImp = 2 + }; + + /** + * The internal state of the plugin + */ + enum TIMPSAOPluginState + { + EIMPSAOPluginRunning = 0, + EIMPSAOPluginDoingLogin = 1, + EIMPSAOPluginDoingLogout = 2 + }; + + /** + * The waiting state of the plugin + */ + enum TIMAOPluginWaitReason + { + EIMPSAOPluginNotWaiting = 0, + EIMPSAOPluginWaitingForLogin = 1, + EIMPSAOPluginWaitingForReconnect = 2, + EIMPSAOPluginWaitingForDisconnect = 3 + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aType Plugin implementation type + */ + static CIMPSAlwaysOnlinePluginImp* NewL(); + + /** + * Destructor. + */ + virtual ~CIMPSAlwaysOnlinePluginImp(); + + + public: // Functions from MIMPSMIMPSSharedDataObserver + + /** + * Handles notify from permanent keys' changes + * @see MIMPSMIMPSSharedDataObserver + */ + void HandlePermanentKeyNotifyL( const TUid aUid, + const TIMPSSharedKeys aKey ); + + /** + * Handles notify from temporary keys' changes + * @see MIMPSMIMPSSharedDataObserver + */ + void HandleTemporaryKeyNotifyL( const TUid aUid, + const TIMPSSharedKeys aKey ); + + + public: // Functions from MPEngAOWaitObserver + + /** + * @see MPEngAOWaitObserver + */ + void HandleTimeWaited(); + + /** + * @see MPEngAOWaitObserver + */ + void HandleTimeWaitedError( TInt aError ); + + public: // Functions from MPEngAOCallObserver + + /** + * @see MPEngAOWaitObserver + */ + void HandleCallEndedL( TBool aEnded ); + + public: // Functions from MIMPSConnUiConnectionModeObserver + + /** + * @see MIMPSConnUiConnectionModeObserver + */ + void HandleConnectionModeEventL( CIMPSConnUiConnectionModeNotifier* aNotifier, + TIMPSConnectionModeEvent aEvent ); + + /** + * @see MIMPSConnUiConnectionModeObserver + */ + void HandleConnectionModeEventNotifyError( CIMPSConnUiConnectionModeNotifier* aNotifier, + TInt aError ); + + public: // Functions from MIMPSScheduleObserver + /** + * @see MIMPSScheduleObserver + */ + void HandleScheduleEvent( TBool aIsScheduledLoginOk ); + + public: // Functions from MPEngAONwStatusObserver + /** + * @see MPEngAONwStatusObserver + */ + void HandleNwStatusChange( TBool aNwAvailable ); + + public: // Functions from MIMPSReconnectNoteObserver + /** + * This call is made when user has answered to global note + * @param TInt aAnswer result for answer + */ + void HandleNoteAnswered( TInt aAnswer ); + + /** + * This call Is made when note showing ins canceled for some reason + */ + void HandleNoteCancelled(); + + public: // Functions from MCADialogStatusNotifier + /** + * Interface function from CCADialogMonitor + * Command ID's can be found in alwaysonlinemanagercommon.h + * Handles the command coming from the Always Online Manager + * @param aStatusCode The Status code as an integer. + * @return void + */ + void CommonDialogDismissedL( const TInt aStatusCode ); + + + private: // New functions + + /** + * Does the login using the Connection UI + */ + void DoLogin(); + + /** + * Does the logout using the Connection UI + */ + void DoLogout( TBool aIsScheduledLogout = EFalse ); + + /** + * Starts the waiting timer + * @param aTime time when timer is launched. + */ + void StartTimer( TTime aTime ); + + /** + * Reads TBUF resource with given id + * @param aResourceId TBUF resource id + * @return read resource as string + */ + HBufC* ReadResourceLC( TInt aResourceId ); + + public: + + /** + * Sets the flag for allowing the network operations on or off + * @param aAllowed The state of allowing operations to network + */ + void SetNetworkOpsAllowed( TBool aAllowed ); + + /** + * Starts the plugin and all of it's notifiers. + */ + void StartPluginL(); + + /** + * Stops the plugin and all of it's notifiers. + */ + void StopPlugin(); + + /** + * Check if always online plugin is needed or not. + * @return ETrue if needed. EFalse if not. + */ + TBool CheckPluginNeed(); + + /** + * Sets the roaing status on or off + * @aRoamingStatus ETrue if roaing is on, else EFalse + */ + void SetRoaming( TBool aRoamingStatus ); + + /** + * Handles the roaing status + */ + void HandleRoamingL(); + + /** + * Sets whether the roaing warning is to be shown or not + */ + void SetShowRoamingWarning( TBool aShowRoamWarning ); + + /** + * Check if user is logged in. + * @return ETrue if Logged in. EFalse if not. + */ + TBool IsUserLoggedInL(); + + /** + * Check if current login type setting is 'Auto in home n/w" . + * @return ETrue if it is Auto in home n/w. EFalse otherwise. + */ + TBool IsLoginAutoInHomeNW(); + + /** + * Mark the testing class a friend + */ + friend class T_CIMPSAlwaysOnlinePluginImp; // CSI: 36 # Only used for testing + + private: + + /** + * C++ default constructor. + */ + CIMPSAlwaysOnlinePluginImp(); + + /** + * By default Symbian 2nd phase constructor is private. + * @param aType Plugin implementation type + */ + void ConstructL(); + + /** + * Resets the AO Plugin states + */ + void Reset(); + + /** + * Checks all the connection variables (home network, offline profile + * etc. etc.) and does the login if everything is set so + */ + void CheckAllConnectionVariables(); + + /** + * Starts the waiting for next login, uses the CPEngAOPluginTimer + */ + void StartWaiting(); + + /** + * Checks if error is KErrNoMemory or KErrDiskFull and + * forwards errors to current active scheduler + * @param aError given error + * @return returns ETrue if aError is KErrNoMemory or KErrDiskFull + */ + TBool CheckMemoryErrors( TInt aError ); + + /** + * Checks if networks operations (login, logout) are currently allowed + * @return ETrue if network operations are allowed. + */ + TBool IsNetworkOperationsAllowed(); + + /** + * Initiates the shared keys used in IMPSCommonUI + */ + void InitializeSharedKeysL(); + + /** + * Initiates members for active plugin. + */ + void InitializePluginL(); + + /** + * Free unneeded parts of plugin. + */ + void FreeMemory(); + + private: /// Data + /// Autologin state + TInt iAutoLogin; + + /// Tells if the network ops are allowed + TBool iNetworkOpsAllowed; + + /// The count of how many times we have tried to login + TInt iLoginCount; + + /// Variable to store clock time before login try + /// used to help count next try moment + TTime iTimeBeforeLoginTry; + + /// The internal state of the AO Plugin + TIMPSAOPluginState iPluginState; + + /// The roaing state + TBool iRoaming; + + /// Shared data clients to read/notice common settings, owned + MIMPSSharedData* iSharedDataServiceSettings; + MIMPSSharedData* iSettingChangesNotifier; + + + /// A pointer to the connection UI, owned + CIMPSPresenceAAConnection* iConnectionUI; + + /// A pointers to the connection mode notifiers, owned + CIMPSConnUiConnectionModeNotifier* iConnectionNotifier; + + /// A timer to wait before the relogin, owned + CPEngAOPluginTimer* iTimer; + + /// An observer for the ongoing call, owned + CPEngAOCallObserver* iCallObserver; + + /// Observer for network availability, owned + CPEngAONwStatusObserver* iNwObserver; + + /// Defines the current wait reason of the Always Online plugin + TIMAOPluginWaitReason iWaitReason; + + /// Tells if the scheduled login is in "should be logged in" state + TBool iScheduledLoginOk; + + /// Keeps the state of user-made login / logouts + TBool iUserControlledConnection; + + /// Store information about possible another connection event + TBool iEventInQueue; + TBool iQueuedLogoutIsScheduledLogout; + + /// Tells if with previous login attempt user denied + /// disconnecting from server (other that default server) + TBool iCurServerDisconnectDenied; + + /// Reserved pointer for future extension + TAny* iReserved; + + /// Holds implementation type specific keys and enumerations + TIMPSAOKeys iKeys; + + /// Manages always online scheduled logins/logouts, owned + CIMPSAlwaysOnlineScheduler* iScheduler; + + /// Handler for showing glober confirmation query about reconnect + /// continuation for IM, owned + CIMPSReconnectNoteHandler* iReconnectNoteHandler; + + /// Used for showing global error notes, owned + CErrorUI* iErrorUI; + + // Used for handling global msg query dialog + CPEngAODialogMonitor* iDlgMonitor; + + // Global message query dialog. Used for roaing warning. + CAknGlobalMsgQuery* iGlobalMsgQuery; + + // Holds the text message for roaing query + HBufC* iRoamingQueryText; + + // Holds the titke of roaing query + HBufC* iRoamingQueryTitle; + + // Flag indicating whether roaing warning is shown or not + TBool iRoamingWarningShownAlready; + + // Flag indicating if roaing warning is to be shown + TBool iShowRoamingWarning; + + // Flag indicating if the logout is , in case user doen't + // want to login in Roaing + TBool iIsToLogoutForRoaming; + + /// File server session, owned + RFs iFs; + + /// IMPS AO plugin resource file, owned + RResourceFile iResFile; + }; + +#endif // __CIMPSALWAYSONLINEPLUGINIMP_H + +// End of File