/*
* 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