--- /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 <SharedDataClient.h>
+#include <WVSettingsSharedDataNG.h>
+#include <mimpsconnuipresenceeventobserverng.h>
+#include <mimpsconnuiconnectionmodeobserverng.h>
+#include <f32file.h>
+#include <barsc.h>
+
+// 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